· 4 min de leitura
Envie avisos para o Discord, o Slack e o Telegram com uma única chamada de API
Divulgue notas de versão e avisos em um canal do Discord, um canal do Slack e um canal do Telegram a partir do seu app, com uma requisição REST e sem cadastrar apps de desenvolvedor.
Sua comunidade vive em três lugares: um servidor do Discord, um workspace do Slack e um canal do Telegram. A cada lançamento, alguém copia o mesmo aviso nos três, na mão. Em geral chega atrasado, às vezes falta em um deles, e a formatação nunca fica exatamente certa.
Automatizar por conta própria significa três integrações diferentes:
- O Discord quer um payload JSON no webhook do canal, com imagens como embeds e um limite de 2.000 caracteres.
- O Slack quer outro formato de payload em uma URL de incoming webhook.
- O Telegram quer um token de bot, um chat ID e um método diferente para texto, fotos, vídeos e álbuns.
Este guia mostra como enviar o mesmo aviso para os três com uma única requisição usando a Hapi. Nenhum dos três exige app de desenvolvedor nem revisão da plataforma, então dá para estar no ar em uns dez minutos.
Passo 1: Pegue uma credencial de cada plataforma
Discord: abra o servidor, vá em Configurações do servidor → Integrações → Webhooks → Novo webhook, escolha o canal (por exemplo #announcements) e clique em Copiar URL do webhook.
Slack: crie um incoming webhook para o workspace e escolha o canal em que ele publica (por exemplo #launches). Copie a URL que começa com https://hooks.slack.com/services/.
Telegram: fale com o @BotFather, envie /newbot e copie o token do bot. Adicione o bot ao canal como administrador. O chat ID é o @username do canal, ou o ID numérico no caso de canais privados.
Passo 2: Conecte tudo na Hapi
Crie uma conta grátis na Hapi, abra Accounts → Connect e cole cada credencial. A Hapi confere se cada URL de webhook é mesmo um webhook do Discord ou do Slack antes de salvar. URLs de webhook e tokens de bot ficam criptografados em repouso (AES-256-GCM) e nunca voltam para o navegador, então ninguém da equipe consegue copiá-los do painel.
Depois, crie uma chave de API em API keys e coloque no ambiente:
export HAPI_API_KEY="hapi_live_..."Passo 3: Envie um aviso para todo lugar
curl -X POST https://hapi.tools/v1/posts \
-H "Authorization: Bearer $HAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: release-2-4-0" \
-d '{
"content": "A v2.4 saiu 🎉 Modo escuro, exportação CSV e busca 3x mais rápida. Notas completas: https://example.com/changelog",
"platforms": ["discord", "slack", "telegram"],
"mediaUrls": ["https://example.com/v2.4-banner.png"]
}'A resposta é um 201 com um resultado por canal, então você vê na hora que o post chegou no Discord, no Slack e no Telegram.
No pipeline de release (Node.js)
O lugar mais útil para essa chamada é o fim do script de deploy, para o aviso sair no instante em que a versão entra no ar:
await fetch("https://hapi.tools/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
"Content-Type": "application/json",
// A mesma chave em um deploy repetido = nenhum aviso duplicado.
"Idempotency-Key": `release-${process.env.RELEASE_VERSION}`,
},
body: JSON.stringify({
content: `${process.env.RELEASE_VERSION} está no ar 🚀 ${process.env.RELEASE_NOTES_URL}`,
platforms: ["discord", "slack", "telegram"],
}),
});O Idempotency-Key importa aqui. Jobs de CI são repetidos e, sem ele, um deploy instável pode anunciar o mesmo lançamento três vezes.
Passo 4: Adapte a mensagem por canal
O workspace do Slack pode ser para clientes, enquanto o canal do Telegram é para a comunidade mais ampla. Use platformOptions para mudar o texto por canal na mesma requisição:
{
"content": "A v2.4 saiu 🎉 Modo escuro, exportação CSV e busca 3x mais rápida.",
"platforms": ["discord", "slack", "telegram"],
"platformOptions": {
"slack": { "content": "A v2.4 está no ar para todos os workspaces. Modo escuro, exportação CSV e busca mais rápida. Dúvidas? Responda nesta thread." },
"telegram": { "content": "A v2.4 saiu 🎉 Modo escuro, exportação CSV, busca 3x mais rápida. Changelog: https://example.com/changelog" }
}
}A Hapi valida cada versão contra os limites daquela plataforma antes de aceitar a requisição. Se o texto do Discord passar de 2.000 caracteres, você descobre agora, e não depois do lançamento.
Passo 5: Agende para o momento certo
Quer lançar às 9h no fuso dos usuários, e não quando o deploy terminou? Acrescente um horário:
{
"content": "Dia de lançamento 🚀 a v3.0 chegou.",
"platforms": ["discord", "slack", "telegram"],
"scheduledAt": "2026-11-20T09:00:00-05:00",
"timezone": "America/New_York"
}Nenhuma dessas três plataformas deixa um webhook ou um bot agendar uma mensagem para depois. A Hapi segura o post e envia na hora, e então dispara um webhook assinado post.published ou post.failed para o seu app, com o resultado de cada canal.
Bom saber
- Imagens: o Discord mostra até 10 imagens como embeds. O Telegram envia uma foto ou um vídeo, ou um álbum de até 10 quando você anexa vários. Com mídia anexada, o Telegram limita a legenda a 1.024 caracteres, então deixe os avisos com imagem curtos.
- Respostas no Telegram: acrescente
firstCommente a Hapi publica isso como resposta ao seu aviso. Serve bem para um “comente aqui” ou para o changelog completo. - Apagar: dá para apagar posts do Discord e do Telegram com
DELETE /v1/posts/{id}. Incoming webhooks do Slack não conseguem apagar mensagens, então revise o texto do Slack antes de sair. - Mais redes, a mesma chamada: inclua
"x","linkedin"ou"bluesky"emplatformspara anunciar em público ao mesmo tempo.
O que você deixou de construir
- Três formatos de payload e três conjuntos de limites
- Criptografar e guardar URLs de webhook e tokens de bot com segurança
- Um agendador, porque nenhuma dessas plataformas agenda por você
- Novas tentativas sem duplicar, e o relatório de falha por canal
Comece o teste de 15 dias → O teste de US$ 5 cobre 5 canais conectados e 300 posts ao longo de 15 dias: o bastante para Discord, Slack e Telegram desde o primeiro dia.