Pular para o conteúdo principal

Webhooks

Você não configura callback nenhum na Meta. Nós recebemos todos os eventos das contas conectadas, validamos a assinatura da Meta e reentregamos para os endpoints que você cadastrar.

O corpo da entrega​

É o envelope da Meta, byte a byte. Handlers já escritos para a Cloud API funcionam sem alteração.

{
"object": "whatsapp_business_account",
"entry": [
{
"id": "111222333444555",
"changes": [
{
"field": "messages",
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "5541987111527",
"phone_number_id": "106540352242922"
},
"messages": [
{
"from": "5541999999999",
"id": "wamid.HBgNNTU0MTk5OTk5OTk5OQ...",
"timestamp": "1785312000",
"type": "text",
"text": { "body": "Oi, chegou meu pedido?" }
}
]
}
}
]
}
]
}

Headers de cada entrega​

HeaderConteúdo
X-Joinotify-Signature-256sha256=<hex> — HMAC da entrega
X-Joinotify-TimestampUnix em segundos, incluído no HMAC
X-Joinotify-EventNome do evento, ex. messages
X-Joinotify-DeliveryID da entrega, estável entre as retentativas
User-AgentJoinotify-Webhook/1.0

Três regras que evitam a maioria dos problemas​

Responda 2xx primeiro, processe depois. O timeout é de 20 segundos. Um handler que grava no banco, chama três APIs e só então responde vai estourar em produção.

Valide a assinatura sobre o corpo bruto. Se você deixar o framework parsear o JSON antes, a assinatura nunca vai bater.

Seja idempotente. Uma entrega pode ser repetida. Deduplique pelo X-Joinotify-Delivery ou pelo wamid da mensagem.

Por onde seguir​