O cliente da WhatsApp Business API envia notificações sobre o status
da mensagem entre você e seus usuários. Essas notificações são enviadas por meio do objeto statuses
.
Você receberá uma notificação sobre o status de cada mensagem que a sua empresa enviar. Na tabela abaixo, clique na seta na coluna da esquerda para ver o equivalente do app WhatsApp para cada status, se estiver disponível.
Nome | Descrição |
---|---|
| A mensagem enviada foi excluída pelo usuário. Depois de receber essa notificação, você precisa garantir que a mensagem seja excluída do seu sistema caso ela tenha sido baixada do servidor. |
| Uma mensagem enviada pela sua empresa foi entregue ao dispositivo do usuário. |
| O envio de uma mensagem da sua empresa falhou. O motivo da falha será incluído no retorno de chamada. Verifique a documentação sobre mensagens de erro para obter ajuda com a depuração:
|
| Uma mensagem enviada pela sua empresa foi lida pelo usuário. As notificações de |
| Uma mensagem enviada pela empresa está em trânsito nos nossos sistemas. Usuários da API Local: para receber notificações de mensagens |
| Uma mensagem enviada pela empresa contém um item de catálogo que não está disponível ou não existe. |
A ordem dessas notificações no seu app pode não refletir o momento real do status da mensagem. Se necessário, veja o registro de data e hora para determinar o momento.
Para que um status seja read
, ele deve ter sido delivered
. Em alguns cenários, por exemplo, quando um usuário estiver na tela de bate-papo e uma mensagem for recebida, ela será delivered
e read
quase simultaneamente. Nesse ou em outros cenários semelhantes, a notificação delivered
não será enviada de volta, pois quando uma mensagem é lida, fica implícito que ela também foi enviada. O motivo para esse comportamento é a otimização interna.
Desde 1º de fevereiro de 2022, o objeto statuses
nas suas notificações de saída inclui dois novos objetos aninhados: conversation
e pricing
. Os componentes do objeto de conversa e preços mudarão de acordo com o local de início da conversa. As conversas podem ser iniciadas pelo usuário ou pela empresa, como também podem ter um ponto de entrada livre. Veja mais informações abaixo:
Nos seguintes exemplos, o recipient_id
pode ser um campo group_id
. Depende se a mensagem foi enviada para uma pessoa ou um grupo.
O webhook a seguir será recebido quando uma empresa enviar uma mensagem como parte de uma conversa iniciada pelo usuário (caso não tenha sido originada em um ponto de entrada livre):
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "sent", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id":"WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "expiration_timestamp": TIMESTAMP, "origin": { "type": "user_initiated" } }, "pricing": { "pricing_model": "CBP", "billable": true, "category": "user_initiated" } }] }
O webhook a seguir será recebido quando uma empresa enviar uma mensagem como parte de uma conversa iniciada pelo usuário para uma mensagem de mídia(caso não tenha sido originada em um ponto de entrada livre):
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "sent", "timestamp": "TIMESTAMP", "type": "message", "message": { "media_id": "98d14c8e-0310-4061-8f99-2d148274c286", "recipient_id":"WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "expiration_timestamp": TIMESTAMP, "origin": { "type": "user_initiated" } }, "pricing": { "pricing_model": "CBP", "billable": true, "category": "user_initiated" } }] }
O webhook a seguir será recebido quando uma empresa enviar uma mensagem como parte de uma conversa iniciada pela empresa:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "sent", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id":"WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "expiration_timestamp": TIMESTAMP, "origin": { "type": "business_initiated" } }, "pricing": { "pricing_model": "CBP", "billable": true, "category": "business_initiated" } }] }
O webhook a seguir será recebido quando uma empresa enviar uma mensagem em resposta a uma conversa iniciada pelo usuário que tenha sido originada em pontos de entrada livres:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "sent", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id":"WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "expiration_timestamp": TIMESTAMP, "origin": { "type": "referral_conversion", } }, "pricing": { "pricing_model": "CBP", "billable": false, "category": "referral_conversion" } }] }
O webhook a seguir será recebido quando a mensagem de uma empresa for entregue como parte de uma conversa iniciada pelo usuário (caso não tenha sido originada em um ponto de entrada livre):
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "delivered", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id":"WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "origin": { "type": "user_initiated" } }, "pricing": { "pricing_model": "CBP", "billable": true, "category": "user_initiated" } }] }
O webhook a seguir será recebido quando a mensagem de uma empresa for entregue como parte de uma conversa iniciada pela empresa:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "delivered", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id": "WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "origin": { "type": "business_initiated" } }, "pricing": { "pricing_model": "CBP", "billable": true, "category": "business_initiated" } }] }
O webhook a seguir será recebido quando a mensagem de uma empresa for entregue como parte de uma conversa iniciada pelo usuário que tenha sido originada em um ponto de entrada livre:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "delivered", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id": "WHATSAPP_ID" }, "conversation": { "id": "CONVERSATION_ID", "origin": { "type": "referral_conversion", } }, "pricing": { "pricing_model": "CBP", "billable": false, "category": "referral_conversion" } }] }
Confira um retorno de chamada padrão para uma mensagem lida:
{ "statuses":[{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "read", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id": "WHATSAPP_ID" } }] }
{ "statuses": [{ "errors": [{ "code": 470, "title": "Failed to send message because you are outside the support window for freeform messages to this user. Please use a valid HSM notification or reconsider." }], "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "failed", "timestamp": "TIMESTAMP" }] }
{ "statuses": [{ "errors": [{ "code": 480, "title": "Failed to send message since we detect an identity change of the contact" }], "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "failed", "timestamp": "TIMESTAMP" }] }
A subseção da conversa não é incluída no retorno de chamada, no caso de falha da mensagem. Nesse caso, não haverá cobrança nem ativação da conversa.
Confira um retorno de chamada padrão para uma mensagem excluída:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "deleted", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id": "WHATSAPP_ID" } }] }
A subseção da conversa não é incluída no retorno de chamada, caso a mensagem tenha sido excluída. Nesse caso, não haverá cobrança nem ativação da conversa.
Consulte Messages para obter essa informação.
Yes, there is a specific scenario where you can get pricing information on your webhook alert for read messages. For each sent message, there can be 3 scenarios:
Scenario | When it Happens |
---|---|
You get a webhook alert when the message is delivered (including pricing information) and another webhook alert when the message is read (not including pricing information). | This is the most common scenario. |
You get a webhook alert when the message is delivered (including pricing information). You do not get a webhook alert that the message has been read. | Common when a customer has turned off the feature that lets people know they have read a message. |
You get a webhook alert when the message is read (including pricing information). You do not get a webhook alert that the message has been delivered. | Only triggered when the user is already reading the thread with the business when the message comes in. |