Skip to main content
Os webhooks permitem enviar eventos em tempo real para qualquer endpoint externo. Use-os para sincronizar mensagens com seu CRM, acionar automações no n8n/Make/Zapier ou construir backends personalizados.

Criar uma Assinatura de Webhook

1

Abra sua Location

Vá para Dashboard → Locations e selecione a location que você deseja inscrever.
2

Abra as Configurações

Clique na aba Settings (Configurações) dessa location.
3

Criar assinatura

Role até a seção Webhooks e clique em Create subscription (Criar assinatura).
4

Preencha o formulário

Complete o diálogo Create subscription (veja os campos abaixo).
5

Salvar

Clique em Create subscription para salvar. Se “Enviar um ping de teste” estiver ativado, um evento fictício será enviado via POST ao seu endpoint para verificar se ele funciona.
Criar assinatura de webhook

Campos da Assinatura

Nome (obrigatório)

Um rótulo legível para que você possa identificar a assinatura depois (ex.: Sincronização CRM, Handler de Entrada n8n).

URL de Destino

O endpoint HTTPS que receberá os payloads dos eventos.
Seu endpoint deve responder com um código de status 2xx. Respostas que não sejam 2xx são tratadas como falhas.

Selecionar eventos

Escolha exatamente quais eventos devem acionar um webhook. Você pode combinar canais em uma única assinatura.

WhatsApp

  • Inbound (Entrada) - uma mensagem de WhatsApp é recebida
  • Outbound (Saída) - uma mensagem de WhatsApp é enviada

iMessage

  • Inbound (Entrada) - um iMessage é recebido
  • Outbound (Saída) - um iMessage é enviado

SMS

  • Inbound (Entrada) - um SMS é recebido
  • Outbound (Saída) - um SMS é enviado

Sistema

  • Message failed (Falha na mensagem) - uma mensagem não pôde ser entregue (use para lógica de novas tentativas ou alertas)

Enviar um ping de teste após a criação

Quando ativado, o sistema enviará via POST um evento fictício para sua URL de Destino imediatamente após a criação da assinatura. Use isso para confirmar que seu endpoint está acessível e que seu handler interpreta os payloads corretamente.
Deixe esta opção ativada na primeira assinatura que você criar para um novo endpoint.
O corpo do ping de teste é { "type": "test.ping" }. Ele não está envolvido no envelope descrito abaixo.

Formato de Entrega

Todo evento, exceto o ping de teste, é enviado via POST como JSON, envolvido neste envelope:

Cabeçalhos

X-WA-Event-Id corresponde ao eventId no corpo.

Payloads dos Eventos

O objeto payload difere de acordo com o canal e o tipo de evento. message.media[].type é sempre um dos seguintes: image, video, audio, document, file, ou unknown.

Mensagens de entrada

whatsapp.inbound, imessage.inbound, sms.inbound - disparado quando um contato envia uma mensagem para um dos seus números conectados.
transcribedAudio fica no nível superior no WhatsApp, mas aninhado em meta.transcribedAudio no iMessage e SMS.

Mensagens de saída

whatsapp.outbound, imessage.outbound, sms.outbound - disparado quando uma mensagem é enviada de um número conectado, seja digitada no dispositivo ou enviada pelo CRM.

Falha na mensagem

message.failed - disparado quando uma mensagem de saída em qualquer canal não pôde ser entregue após novas tentativas.
error.code indica por que o envio falhou. Veja Códigos de Erro para a lista completa e o que fazer em cada caso.
Novos códigos podem ser adicionados com o tempo, então trate códigos não reconhecidos como uma falha genérica em vez de assumir uma lista fixa.

Boas Práticas

  • Use uma assinatura por integração. Mantém os logs e a rotação simples.
  • Verifique com o ping de teste antes de confiar em uma assinatura em produção.
  • Retorne 2xx rapidamente - delegue o trabalho lento a uma fila em segundo plano no seu handler.
  • Seja idempotente. Webhooks podem ocasionalmente ser reentregues.
  • Delimite por canal. Não se inscreva em eventos que você não vai processar.

Gerenciando Assinaturas

Na seção Webhooks das Configurações da Location, você pode:
  • Ver todas as assinaturas ativas e a data de criação
  • Excluir uma assinatura de que você não precisa mais
  • Criar assinaturas adicionais para endpoints separados

Solução de Problemas

  • Confirme que seu endpoint está acessível publicamente (sem localhost / IPs privados)
  • Verifique se ele aceita POST e retorna 2xx
  • Confira se regras de firewall/WAF não estão bloqueando o IP
  • Certifique-se de que a assinatura não foi excluída
  • Confirme que a location ainda tem uma instância conectada para o canal
  • Verifique os logs do seu endpoint em busca de respostas 5xx (entregas com falha são retentadas algumas vezes e depois descartadas)
Os webhooks têm entrega “pelo menos uma vez” (at-least-once). Use o eventId de nível superior (também enviado como o cabeçalho X-WA-Event-Id) para deduplicar do seu lado.