GET /v1/messages/{id} repetidamente, a Superlead envia um POST para a sua URL a cada transição de status e a cada mensagem recebida de um lead.
É assim que se resolve o caso clássico do WhatsApp: a Meta aceita um envio fora da janela de 24 horas (201 accepted) e o falha segundos depois, de forma assíncrona — a falha chega no seu webhook, com o motivo.
Configuração
Cadastre seu endpoint
No painel da Superlead, em Integrações → Webhooks, adicione a URL HTTPS que vai receber os eventos.
Guarde o signing secret
Na criação, você recebe um signing secret (
whsec_...) — ele é exibido nesse momento; guarde em local seguro. É com ele que você verifica a autenticidade de cada entrega.Evento whatsapp.message.status
Disparado a cada transição de status de uma mensagem enviada: sent, delivered, read ou failed — um evento por transição.
- Correlação: o
wamidé o mesmo retornado porPOST /v1/messages— use-o para casar o evento com o envio no seu sistema. error: presente apenas quandostatuséfailed. Ocodeé o código numérico da Meta — o mesmo que aparece comoupstream_codeemGET /v1/messages/{id}. Para os significados, veja o catálogo de erros.- Para status de sucesso (
sent,delivered,read),errorvemnull.
Evento whatsapp.message.received
Disparado quando um lead envia mensagem para o seu número. Exemplo com texto:
type, o corpo traz o bloco correspondente no lugar de text: image/video/document (com link, mimeType, caption), audio (com voice), location, contacts ou interactive (resposta de botão/lista). Mensagens vindas de anúncios click-to-WhatsApp incluem também o bloco referral com os dados da campanha (sourceId, headline, ctwaClid, ad, campaign).
Verificando a assinatura
Cada entrega vem assinada nos headerssvix-id, svix-timestamp e svix-signature (infraestrutura Svix — mesmo padrão usado por Clerk, Resend e outros). Verifique com a biblioteca da sua linguagem e o signing secret do endpoint:
Boas práticas
- Idempotência: reentregas acontecem (é a garantia de “pelo menos uma vez”). Use o
iddo evento (evt_...) como chave de deduplicação no seu lado. - Ordem não garantida: um
deliveredpode chegar depois de umread. Use otimestampdo evento, não a ordem de chegada. - Webhook + polling: para fluxos críticos, combine os dois — webhook como caminho principal e
GET /v1/messages/{id}como reconciliação periódica.