Visão geral
Os webhooks permitem que você receba requisições HTTP POST no seu servidor quando eventos acontecem no Madmail, como quando um e-mail é entregue, sofre bounce ou é clicado. Com isso você constrói integrações em tempo real e automatiza fluxos de trabalho.Configurando webhooks
1
Crie um endpoint de webhook
Crie um endpoint no seu servidor capaz de receber requisições POST. O endpoint precisa:
- Aceitar requisições POST com corpo JSON
- Retornar um status 2xx para confirmar o recebimento
- Responder em até 10 segundos
2
Adicione o webhook no dashboard
Acesse Webhooks no seu dashboard do Madmail e crie um novo webhook:
- Informe a URL do seu endpoint
- Selecione quais eventos você quer receber
- Copie o secret de assinatura para a verificação
3
Verifique as assinaturas dos webhooks
Sempre verifique as assinaturas para garantir que as requisições vêm do Madmail. Veja a seção Verificação de assinatura abaixo.
Tipos de evento
Eventos de e-mail
Eventos de contato
Eventos de domínio
Payload do webhook
Cada requisição de webhook inclui um payload JSON com a estrutura abaixo. Veja Detalhes dos dados de evento para saber o conteúdo do campodata em cada tipo de evento.
Campos do payload
Cabeçalhos da requisição
Cada requisição de webhook inclui os seguintes cabeçalhos:Verificação de assinatura
Sempre verifique as assinaturas dos webhooks para garantir que as requisições são autênticas. A assinatura é calculada assim:Usando o SDK (recomendado)
Next.js App Router
Express
Apenas verificação
Se você só precisa verificar a assinatura, sem fazer o parse do evento:Verificação manual
Se você preferir verificar manualmente, sem o SDK:Comportamento de retentativa
Se o seu endpoint não retornar uma resposta 2xx, o Madmail vai tentar entregar novamente com backoff exponencial:
Depois de 6 tentativas sem sucesso, a chamada do webhook é marcada como falha.
Boas práticas
Responda rápido
Responda rápido
Retorne uma resposta 2xx o mais rápido possível. Se precisar, processe os
dados do webhook de forma assíncrona. As requisições expiram após 10 segundos.
Trate duplicidades
Trate duplicidades
Use o campo
id do payload para deduplicar eventos. Em casos raros, o mesmo
evento pode ser entregue mais de uma vez.Verifique as assinaturas
Verifique as assinaturas
Sempre verifique o cabeçalho
X-UseSend-Signature para garantir que as
requisições vêm do Madmail e não foram adulteradas.Confira os timestamps
Confira os timestamps
Por padrão, o SDK rejeita assinaturas com mais de 5 minutos. Isso evita
ataques de replay.
Use HTTPS
Use HTTPS
Sempre use endpoints HTTPS em produção para criptografar os dados do webhook
em trânsito.
Testando webhooks
Você pode enviar um webhook de teste pelo dashboard para verificar se o seu endpoint está funcionando corretamente:- Acesse Webhooks
- Clique no seu webhook
- Clique em “Send Test” para enviar um evento de teste
webhook.test com o seguinte payload:
Solução de problemas
O webhook não está recebendo eventos
O webhook não está recebendo eventos
- Confirme que a URL do endpoint está correta e acessível publicamente - Verifique se o endpoint retorna um status 2xx - Garanta que o webhook está com status ACTIVE no dashboard - Veja se o webhook foi desativado automaticamente por falhas consecutivas
A verificação de assinatura está falhando
A verificação de assinatura está falhando
- Use o corpo bruto da requisição, não o JSON já convertido - Confirme que
está usando o secret correto do webhook - Verifique se o timestamp não
expirou (janela de 5 minutos) - Confirme que está calculando o HMAC
corretamente:
HMAC-SHA256(secret, "${timestamp}.${rawBody}")
Webhook desativado automaticamente
Webhook desativado automaticamente
Depois de 30 chamadas falhas consecutivas, os webhooks são desativados
automaticamente. Corrija o problema no seu endpoint e reative o webhook pelo
dashboard. O contador de falhas é zerado na próxima entrega bem-sucedida.
Detalhes dos dados de evento
Esta seção documenta a estrutura do campodata para cada tipo de evento.
Eventos de e-mail
A maioria dos eventos de e-mail compartilha uma estrutura base comum:email.bounced
Inclui detalhes adicionais do bounce:email.failed
Inclui o motivo da falha:email.suppressed
Inclui detalhes da supressão:email.opened
Inclui detalhes do rastreamento de abertura:email.clicked
Inclui detalhes do rastreamento de cliques:Eventos de contato
Todos os eventos de contato (contact.created, contact.updated, contact.deleted) incluem:
Eventos de domínio
Todos os eventos de domínio (domain.created, domain.verified, domain.updated, domain.deleted) incluem: