Blog

· 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:

bash
export HAPI_API_KEY="hapi_live_..."

Passo 3: Envie um aviso para todo lugar

bash
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:

js
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:

json
{
  "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:

json
{
  "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 firstComment e 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" em platforms para 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.