Webhook para Slack, Discord e Teams
Um webhook (envio automático de uma mensagem para um endereço indicado) é uma forma universal de enviar uma notificação para qualquer aplicação - para o Slack, o Discord, o Microsoft Teams ou para o seu próprio sistema. A ligação demora alguns minutos e o ePulz.io formata a mensagem para o serviço de destino automaticamente.
O ePulz.io reconhece automaticamente o tipo de serviço de destino a partir do endereço do webhook. Reconhecemos: Slack (hooks.slack.com/services/...), Discord (discord.com/api/webhooks/... e discordapp.com/api/webhooks/...), Microsoft Teams incluindo Power Automate / Workflows (*.webhook.office.com, outlook.office.com/webhook/..., *.logic.azure.com/workflows/...). Para os restantes endereços usamos um payload JSON genérico.
Ligação do Slack
- No Slack abra api.slack.com/apps e clique em Create New App → From scratch.
- Dê um nome à aplicação (por exemplo "ePulz Alerts") e escolha o workspace a que deve pertencer.
- No menu da esquerda escolha Incoming Webhooks e mude-os para On.
- Clique em Add New Webhook to Workspace e selecione o canal onde quer receber os alertas.
- Copie o endereço do webhook gerado (começa por
https://hooks.slack.com/services/...). - No ePulz.io abra Definições → Notificações → Webhook, cole o endereço e guarde.
O ePulz.io reconhece automaticamente que se trata do Slack e envia mensagens bem formatadas com uma barra colorida (vermelha em caso de falha, verde quando recupera) e uma ligação de regresso ao painel.
Ligação do Discord
- No seu servidor Discord clique com o botão direito no canal e escolha Editar canal → Integrações → Webhooks.
- Clique em Novo webhook, opcionalmente dê um nome ao bot e defina um avatar.
- Clique em Copiar URL do webhook. O endereço tem a forma
https://discord.com/api/webhooks/.... - No ePulz.io abra Definições → Notificações → Webhook, cole o endereço e guarde.
Também para o Discord preparamos o formato da mensagem automaticamente - é utilizado um embed do Discord (uma mensagem destacada com moldura) com o nome do monitor, a descrição do problema e a hora.
Testar o webhook
Depois de guardar o endereço, clique em Testar nas definições. Enviamos uma mensagem de teste para o canal de destino, para que veja logo como ficará o alerta. Se nada chegar, verifique se copiou o endereço completo corretamente e se o bot tem acesso ao canal.
Microsoft Teams (Adaptive Card)
Para o Microsoft Teams (incluindo os URL de Power Automate / Workflow logic.azure.com/workflows/...) enviamos a mensagem no formato Adaptive Card v1.4 encapsulado numa mensagem:
{
"type": "message",
"attachments": [{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{"type": "TextBlock", "text": "Monitor DOWN: Site de produção", "weight": "bolder", "size": "large"},
{"type": "TextBlock", "text": "Indisponível: HTTP 503", "wrap": true}
],
"actions": [
{"type": "Action.OpenUrl", "title": "Abrir no ePulz.io", "url": "https://epulz.io/dashboard/monitor/42"}
]
}
}]
}
No Teams o endereço do webhook obtém-se a partir do conector Incoming Webhook no canal, ou a partir do modelo do Power Automate "Post to Teams when a HTTP request is received".
Webhook próprio (endpoint genérico)
Se precisar de enviar alertas para a sua própria aplicação, introduza nas definições o endereço do seu endpoint (o endereço de destino). O ePulz.io envia para lá um pedido com o método POST e um corpo no formato JSON:
{
"event": "down",
"monitor": {
"name": "Site de produção",
"target": "https://example.com",
"url": "https://epulz.io/dashboard/monitor/42"
},
"message": "Indisponível: HTTP 503",
"timestamp": "2026-05-31T14:23:45+00:00",
"source": "epulzio"
}
O campo event assume os valores down (falha), up (recuperação), ssl (expiração próxima do certificado SSL), domain (expiração próxima do domínio), anomaly (anomalia de resposta) ou test (envio de teste). O campo monitor.name é o nome do monitor, monitor.target é o endereço monitorizado e monitor.url é a ligação de regresso ao painel do ePulz.io.
Verificação da assinatura (HMAC)
Opcionalmente pode ativar a assinatura nas definições - assinamos então cada pedido com uma chave secreta (HMAC SHA-256) e adicionamos dois cabeçalhos:
X-ePulzio-Signature- assinatura no formatosha256=<hex digest>do corpo do pedidoX-ePulzio-Event- o tipo de evento (o mesmo valor que o campoeventno corpo)
No seu endpoint basta calcular o HMAC SHA-256 do corpo recebido com a mesma chave secreta e comparar com o cabeçalho. Se coincidirem, o pedido é genuíno e não foi alterado durante o trânsito.
#alerts). Assim o canal não fica inundado com outra conversa e as mensagens críticas não escapam a ninguém.