Pular para o conteúdo principal

Webhooks de canal

Um webhook é uma URL que publica num canal de texto. Sem login, sem bot, sem processo para manter de pé. Se tudo o que você precisa é avisar alguma coisa — um deploy terminou, o CI quebrou, chegou um pedido —, pare aqui: são cinco minutos.

Criar​

Duas portas, a mesma coisa:

  • Configurações do canal → Webhooks (canal de texto);
  • Configurações do servidor → Apps → Integrações, que lista os webhooks do servidor inteiro.

Precisa de Gerenciar canais ou Administrador.

A URL aparece uma vez. Ela contém o token; quem a tem publica. Perdeu, crie outro — não existe "ver de novo".

POST /api/channels/{canal}/webhooks
Content-Type: application/json

{"name": "Changelog"}
{
"id": "3",
"name": "Changelog",
"url": "https://app.concord.win/api/webhooks/3/4d214aab09ca438c93e22177f03ffcc5…"
}

Limite: 10 webhooks por canal, nome de 2 a 50 caracteres.

RotaO que faz
GET /api/channels/{canal}/webhooksos do canal (sem o token)
GET /api/servers/{servidor}/webhooksos do servidor inteiro (sem o token)
DELETE /api/webhooks/{id}revoga; a URL morre na hora

Publicar​

curl -X POST "https://app.concord.win/api/webhooks/3/<token>" \
-H 'content-type: application/json' \
-d '{"content": "deploy 1.4.2 no ar"}'
Campo
contento texto. Obrigatório; vazio é recusado. Acima de 2000 caracteres é cortado com reticências.
usernameopcional: troca o nome mostrado, até 50 caracteres.

A mensagem aparece com a etiqueta de quem não é gente, igual à de um bot.

GitHub, sem escrever nada​

Cole a mesma URL com /github no fim nas configurações de webhook do repositório (payload application/json). Os eventos chegam já escritos em português:

https://app.concord.win/api/webhooks/3/<token>/github

Entendidos hoje: ping, push, pull_request, issues, release. Qualquer outro evento responde 200 e é ignorado — o GitHub manda de tudo e desativa um webhook que começa a falhar.

É assim que o changelog do Concord chega no servidor da equipe sem depender da máquina de ninguém.

A permissão é de quem criou​

O webhook não tem permissão própria: cada publicação é verificada com a permissão de quem o criou, naquele canal, naquele momento.

A consequência é a parte boa: tirar a pessoa do canal, ou tirar o cargo que lhe dava acesso, cala o webhook dela — sem ninguém precisar lembrar de revogar nada.

Cuidados​

  • A URL é a credencial. Variável de ambiente, segredo do CI. Nunca no repositório.
  • O token só existe em hash no servidor. Nem o Concord consegue mostrá-lo de novo.
  • Token errado e webhook inexistente respondem igual, de propósito: a URL não vira um oráculo de "este id existe".
  • Texto que vem de fora pode conter @everyone — veja Boas práticas.