Клиент WhatsApp Business API отправляет уведомления о статусе (status
) сообщений в переписке между вами и пользователями. Для отправки уведомлений используется объект statuses
.
Для каждого сообщения, которое отправляет ваша компания, вы будете получать уведомление о его статусе. Нажмите стрелку в левом столбце в таблице ниже, чтобы посмотреть эквивалент каждого статуса в приложении WhatsApp, если он есть.
Имя | Описание |
---|---|
| Сообщение, отправленное пользователем, удалено пользователем. При получении этого уведомления вам следует удалить сообщение из своей системы, если оно было скачано с сервера. |
| Сообщение, отправленное вашей компанией, доставлено на устройство пользователя. |
| Сообщение, отправленное вашей компанией, не удалось отправить. Причина сбоя будет указана в обратном вызове. Чтобы узнать, как выполнить отладку, ознакомьтесь с документацией по ошибкам:
|
| Сообщение, отправленное вашей компанией, прочитано пользователем. |
| Сообщение, отправленное вашей компанией, находится в процессе доставки внутри наших систем. Для пользователей локального API: чтобы получать уведомления |
| Сообщение, отправленное вашей компанией, содержит товар из каталога, который недоступен или не существует. |
Очередность уведомлений в приложении может не соответствовать порядку наступления соответствующих событий. При необходимости проверяйте метку времени.
Сообщение может получить статус read
только после статуса delivered
. В некоторых ситуациях (например, если сообщение поступает, когда открыто окно чата) статус delivered
меняется на read
почти мгновенно. В таких случаях уведомление delivered
не отправляется, так как предполагается, что прочтено может быть только доставленное сообщение. Это сделано в целях внутренней оптимизации.
С 1 февраля 2022 года объект statuses
в ваших исходящих уведомлениях включает в себя два вложенных объекта: conversation
и pricing
. Компоненты объектов conversation и pricing разнятся в зависимости от того, где была инициирована переписка. Переписки могут быть инициированы пользователями или компанией либо начинаться с бесплатной точки входа. См. дополнительную информацию:
Вместо поля recipient_id
в примерах ниже можно использовать поле group_id
. Это зависит от того, отправляется ли сообщение отдельному пользователю или группе.
Если компания отправляет сообщение в переписке, начатой пользователем (если эта переписка не была начата с бесплатной точки входа), будет получен следующий объект Webhooks:
{ "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" } }] }
Если компания отправляет сообщение в переписке, начатой пользователем (если эта переписка не была начата с бесплатной точки входа), с медиафайлом, будет получен следующий объект Webhooks:
{ "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" } }] }
Если компания отправляет сообщение в переписке, начатой компанией, будет получен следующий объект Webhooks:
{ "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" } }] }
Если компания отправляет сообщение в ответ на начатую пользователем переписку, начавшуюся с бесплатной точки входа, будет получен следующий объект Webhooks:
{ "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" } }] }
Если сообщение доставлено компании в переписке, начатой пользователем (если эта переписка не была начата с бесплатной точки входа), будет получен следующий объект webhook:
{ "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" } }] }
Если сообщение доставлено компании в переписке, начатой компанией, будет получен следующий объект webhook:
{ "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" } }] }
Если сообщение доставлено компании в начатой пользователем переписке (если она была начата с бесплатной точки входа) будет получен следующий объект webhook:
{ "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" } }] }
Стандартный обратный вызов для прочтенного сообщения:
{ "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" }] }
Подраздел conversation не входит в обратный вызов, если сообщение не было отправлено. Биллинг и переписки в этом случае не активируются.
Стандартный обратный вызов для удаленного сообщения:
{ "statuses": [{ "id": "ID", "recipient_id": "WHATSAPP_ID", "status": "deleted", "timestamp": "TIMESTAMP", "type": "message", "message": { "recipient_id": "WHATSAPP_ID" } }] }
Подраздел conversation не входит в обратный вызов, если сообщение было удалено. Биллинг и переписки в этом случае не активируются.
Эту информацию см. в обзоре сообщений.
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. |