Ir para o conteúdo
NimbusNexus

Slack, Teams e Discord

O Slack, o Microsoft Teams e o Discord podem dar a um canal uma URL de webhook que posta nele tudo o que recebe — mas só no formato de mensagem de cada app, então eles recusam o envelope de evento que normalmente enviamos. Uma transformação resolve essa diferença. No final deste guia, você terá:

  • um endpoint apontado para a URL de webhook do seu canal;
  • o preset desse app transformando cada evento em uma mensagem que ele aceita;
  • um evento de teste postado no canal.

Tempo total: cerca de 10 minutos.

Pré-requisitos

  • Um workspace do Webhooks no Starter, no Pro ou no Custom. O Free não inclui transformações.
  • Permissão para adicionar um webhook ao canal: no Slack, para instalar um app no workspace; no Teams, para criar um workflow; no Discord, a permissão Manage Webhooks.
  • A verificação de endpoint desligada no projeto em que o endpoint vai ficar. Esses canais só aceitam mensagens no próprio formato, então nunca conseguem responder ao desafio de verificação, e um endpoint que precisa passar por ele não recebe nada. Os planos pagos permitem desligar a verificação.

1 · Obter a URL de webhook do canal

Slack

Crie um app do Slack para o seu workspace e ative Incoming Webhooks nas configurações dele. Escolha Add New Webhook to Workspace, selecione o canal e autorize. Copie a URL, que se parece com https://hooks.slack.com/services/T…/B…/…. Os passos do próprio Slack estão em Enviar mensagens usando incoming webhooks.

Microsoft Teams

No Teams, abra Workflows e comece pelo template Send webhook alerts to a channel. Escolha a equipe e o canal, salve o workflow e copie a URL do webhook nos detalhes dele. Os passos da própria Microsoft estão em Criar webhooks de entrada com Workflows para o Microsoft Teams.

Discord

No Discord, abra Server Settings → Integrations → Webhooks e crie um webhook. Escolha o canal em que ele vai postar e depois Copy Webhook URL; a URL se parece com https://discord.com/api/webhooks/…/…. Os passos do próprio Discord estão em Introdução aos webhooks.

Trate a URL como um segredo: esses canais não verificam a nossa assinatura, então qualquer pessoa que a tenha pode postar no canal.

2 · Adicionar o endpoint

No console, escolha New endpoint na página Endpoints, cole a URL e inscreva o endpoint nos eventos que o canal deve ver. Mantenha a lista curta: um canal é lido por pessoas, e cada evento correspondente vira uma mensagem.

Pela API:

Shell
curl -sX POST https://webhooks.nimbusnexus.net/v1/endpoints \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.slack.com/services/T…/B…/…", "project_id": "prj_…",
       "subscriptions": [{"match_kind": "exact", "pattern": "invoice.paid"}]}'

3 · Escolher o preset

Abra o menu do endpoint na página Endpoints e escolha Transformation. Selecione Preset, depois o do seu app — Slack message, Microsoft Teams card ou Discord message — e escolha Save. A partir de agora, cada entrega para este endpoint é enviada como uma mensagem:

PresetO que o canal mostra
Slack messageO tipo e o id do evento, quando ele aconteceu e os dados dele em um bloco de código.
Microsoft Teams cardUm Adaptive Card com o tipo do evento, o id e o horário dele e os dados.
Discord messageO tipo e o id do evento e os dados dele em um bloco de código JSON.

Cada um corta os dados para caber no limite do próprio app, como 3.000 caracteres em uma seção do Slack ou 2.000 em uma mensagem do Discord.

Um preset é um script como qualquer outro, então não há um nome de preset para indicar pela API: crie uma transformação com o script que você quiser. No console, Edit this script mostra o código de cada preset como ponto de partida.

4 · Testar

Em Test, na mesma página, escolha Run test. O teste executa o preset com um evento recente das entregas do endpoint, ou com um que você colar, e mostra a mensagem que seria enviada. Nada é enviado.

Depois, envie um evento de verdade: Send test event, na página Overview do console, ou publique um evento em que o endpoint esteja inscrito:

Shell
curl -sX POST https://webhooks.nimbusnexus.net/v1/events \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_type": "invoice.paid", "project_id": "prj_…", "payload": {"id": "in_123", "amount": 125000, "currency": "usd"}}'

A mensagem aparece no canal em poucos segundos. O Send test ping do endpoint não serve aqui: ele envia o ping fixo sem transformação, e o canal o recusa.

O que você fez

Agora, cada evento em que o endpoint está inscrito posta uma mensagem no seu canal. Abra uma entrega na página Deliveries para ver a mensagem que foi enviada; se o app respondeu com um erro, ele também aparece lá, nas tentativas da entrega.

Personalizar

Escolha Edit this script para mudar o que a mensagem diz ou quais eventos geram uma. Retornar null não envia nada, então um script pode reservar o canal para os eventos de que as pessoas precisam. Para o Slack:

JavaScript
function transform(event) {
  if (event.type !== "invoice.paid" || event.data.amount < 100000) return null;
  return { body: { text: `Invoice ${event.data.id} paid: ${event.data.amount / 100} ${event.data.currency}` } };
}

Para o Discord, envie content onde o Slack recebe text; para o Teams, mantenha o card do preset e mude o texto dentro dele. Uma entrega que o script descarta não é enviada e não conta como falha. Teste o script antes de salvá-lo: uma execução que falha manda a entrega para a dead-letter queue e nunca envia o evento sem transformação.

Próximos passos