enviado, entregue, lido ou falhado. Use-o para rastreamento de entrega, confirmação de leitura e trilhas de auditoria.
Ele é configurado por remetente do WhatsApp, então remetentes diferentes podem apontar para diferentes endpoints.
Configuração do Webhook
Para habilitar as confirmações de leitura para um remetente:- Edite seu remetente do WhatsApp e abra a seção Webhook de Confirmação de Leitura
- Insira sua URL do Webhook e salve
- Um Segredo de Assinatura é gerado automaticamente — use-o para verificar a assinatura em cada solicitação
whatsapp_message_id retornado pelos endpoints Enviar Modelo e Enviar Livre, para que você possa correlacionar cada atualização com a mensagem original.
Formato da Solicitação
O webhook é enviado como uma solicitação POST para sua URL configurada com um corpo JSON e um cabeçalhoX-Signature-256.
Estrutura do Payload
string
O tipo de evento. Valor:
message_statusinteger
Identificador numérico da mensagem — o mesmo
whatsapp_message_id retornado quando você enviou a mensagem. Use isso para correlacionar a atualização de status com o envio original.string
Identificador da mensagem do provedor para mensagens enviadas via Twilio, ou
nullstring
Identificador da mensagem do provedor (WhatsApp
wamid) para mensagens enviadas via Meta Cloud API, ou nullstring
Identificador único (UUID) da conversa à qual a mensagem pertence, ou
nullstring
Identificador único (UUID) do assistente conectado ao remetente, ou
nullobject
O remetente do WhatsApp de onde a mensagem foi enviada
string
O número de telefone do destinatário
string
O número de telefone do remetente
string
Direção da mensagem. Valor:
outboundstring
O novo status de entrega. Valores possíveis:
enviado, entregue, lido, falhado, não entregueinteger
Código de erro do provedor quando
status é falhado ou não entregue, caso contrário nullstring
Mensagem de erro bruta do provedor quando a mensagem falhou, caso contrário
nullstring
Descrição legível do erro, caso contrário
nullstring
Timestamp ISO 8601 de quando a plataforma registrou a mudança de status, no fuso horário configurado do proprietário do número do WhatsApp
string
Timestamp ISO 8601 do próprio tempo do evento da operadora, no fuso horário configurado do proprietário. Presente para mensagens enviadas via Meta Cloud API;
null via Twilio (o callback de status da Twilio não inclui um tempo de evento). Prefira isso quando presente — é o tempo autoritativo da operadora.Verificando a Assinatura
Cada solicitação inclui um cabeçalhoX-Signature-256 contendo um HMAC-SHA256 do corpo da solicitação bruta, chaveado com o Segredo de Assinatura do seu remetente:
Comportamento de Retentativa
Se seu endpoint retornar um status não-2xx ou a solicitação falhar, a entrega será reattemptada:
Erros de servidor (5xx) e limites de taxa (429) são reattemptados. Erros de cliente (4xx) são tratados como um endpoint mal configurado e não são reattemptados.
Notas Importantes
- O webhook é configurado por remetente — cada remetente pode ter sua própria URL e segredo.
- Eventos acionados pelo botão Fazer solicitação de teste nas configurações do remetente incluem um campo extra
test: truee usam valores de espaço reservado. Atualizações de status reais nunca incluemtest. lidosó é acionado se o destinatário tiver as confirmações de leitura habilitadas nas configurações de privacidade do WhatsApp.entreguesempre é acionado.- Os status podem chegar fora de ordem ou serem reenviados pelo provedor. Nós apenas encaminhamos o verdadeiro progresso, então você não receberá um
entregueapós umlidopara a mesma mensagem — mas você ainda deve tratar o webhook como a fonte da verdade e desduplicar porwhatsapp_message_id+status. timestampé sempre o tempo que a plataforma registrou a mudança (no fuso horário do proprietário do número).provider_timestampé o tempo autoritativo do evento da operadora quando disponível — prefira-o pela precisão e recorra aotimestampquando fornull.- Use Regenerar nas configurações do remetente para girar o segredo de assinatura se ele for exposto.

