Уведомления о статусе и расценках

Клиент WhatsApp Business API отправляет уведомления о статусе (status) сообщений в переписке между вами и пользователями. Для отправки уведомлений используется объект statuses.

Обновления статуса

Для каждого сообщения, которое отправляет ваша компания, вы будете получать уведомление о его статусе. Нажмите стрелку в левом столбце в таблице ниже, чтобы посмотреть эквивалент каждого статуса в приложении WhatsApp, если он есть.

ИмяОписание

deleted

Сообщение, отправленное пользователем, удалено пользователем. При получении этого уведомления вам следует удалить сообщение из своей системы, если оно было скачано с сервера.

Эквивалент в приложении WhatsApp

Сообщение в мобильном приложении WhatsApp заменяется текстом "Это сообщение удалено".

delivered

Сообщение, отправленное вашей компанией, доставлено на устройство пользователя.

Эквивалент в приложении WhatsApp

Две галочки

failed

Сообщение, отправленное вашей компанией, не удалось отправить. Причина сбоя будет указана в обратном вызове. Чтобы узнать, как выполнить отладку, ознакомьтесь с документацией по ошибкам:

Эквивалент в приложении WhatsApp

Красный треугольник

read

Сообщение, отправленное вашей компанией, прочитано пользователем. read — уведомления о прочтении поступают, только если у пользователя включено подтверждение прочтения. В противном случае вы получите только уведомление о доставке — delivered .

Эквивалент в приложении WhatsApp

Две синие галочки

sent

Сообщение, отправленное вашей компанией, находится в процессе доставки внутри наших систем.


Для пользователей локального API: чтобы получать уведомления sent для сообщений, установите для параметра sent_status значение true в настройках приложения. По умолчанию уведомление о статусе sent отключено.

Эквивалент в приложении WhatsApp

Одна галочка

warning

Сообщение, отправленное вашей компанией, содержит товар из каталога, который недоступен или не существует.

Очередность уведомлений в приложении может не соответствовать порядку наступления соответствующих событий. При необходимости проверяйте метку времени.

Сообщение может получить статус 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" 
    }
  }]
}

Статус: сообщение не отправлено

Код ошибки 470

{
  "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"
  }]
}

Код ошибки 480

{
  "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:

ScenarioWhen 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.