Webhooks são a única forma de receber alguma coisa do WhatsApp: mensagens, recibos, mudanças de conexão. O Wabox faz um POST HTTPS com JSON para a URL que você configurar, uma URL por tipo de evento.
Configuração
No painel, em Webhooks e configurações gerais, ou pela API:
Pode ser a mesma URL para tudo (use type no corpo ou o header X-Wabox-Event para rotear) ou uma por tipo. null desliga o tipo. PUT /webhooks/{type} com { "value": "https://..." } altera um só. Os filtros decidem quais mensagens chegam.
Anatomia de uma entrega
Todo payload tem quatro campos em comum:
Garantias de entrega
- Ordem: entregas de uma mesma instância saem uma de cada vez, na ordem em que os eventos aconteceram. Instâncias diferentes são paralelas.
- Tentativas: você tem 10 s para responder 2xx. Caso contrário o Wabox tenta de novo após 10 s, 1 min, 10 min, 1 h e 6 h. Depois disso o evento é descartado e fica registrado como falha nos Logs de webhook do painel.
- Pelo menos uma vez: uma entrega pode repetir (por exemplo, você respondeu 200 mas a conexão caiu antes de o Wabox ler). Guarde
event_id e ignore repetidos.
- Sem conteúdo em repouso: o Wabox não guarda o conteúdo das mensagens; se todas as tentativas falharem, a mensagem não é recuperável pela API. Mantenha o endpoint disponível.
Responda antes de processar. Se o seu handler demora (chama outra API, grava em banco lento), coloque o evento em uma fila interna e devolva 200 na hora. Um endpoint lento vira reenvios, que viram duplicidade.
Segurança
Verifique X-Wabox-Signature em toda entrega — é o que garante que veio do Wabox e não de alguém que descobriu a sua URL. Passo a passo com código em Assinatura dos webhooks.
Testando
- Sem servidor público: use um túnel (ngrok, Cloudflare Tunnel) apontando para a sua máquina.
- Para ver o payload cru: qualquer serviço de “request bin”.
- No painel, Logs de webhook mostra cada tentativa com status HTTP, tempo de resposta e o corpo enviado, e permite reenviar manualmente.
- A aba Testes da instância dispara mensagens reais para um número seu e acompanha
delivery e message_status — veja Diagnóstico.