Перейти к основному содержанию
Полный каталог, сгенерированный на основе схемы, см. в разделе Все примеры.

Что это такое

Обрабатывайте события проверки, обновления и удаления бизнес-аккаунтов, а также удаления номеров телефонов, проверки отображаемых имен, качества и обновления Business Username. Маршрутизируйте каждую полезную нагрузку по точному значению события type: для событий аккаунтов используется whatsappBusinessAccount, а для событий номеров телефонов — whatsappPhoneNumber.

Перед началом работы

  • Создайте публичный эндпоинт HTTPS в вашем приложении.
  • Настройте эндпоинт вебхука YCloud для нужных типов событий.
  • Надежно сохраните секретный ключ подписи эндпоинта.
  • Сделайте обработку событий идемпотентной.

Принцип работы

YCloud отправляет HTTP-запрос POST при возникновении события. Проверьте подпись, надежно сохраните событие, верните ответ 2xx и выполняйте длительные операции асинхронно.

Запрос

Ниже приведены сценарии запросов, доставляемых на ваш URL вебхука. Используйте id события как идентификатор доставки, а type — для маршрутизации полезной нагрузки.

Ответ

Возвращайте статус 2xx после принятия события.
Информацию о настройке эндпоинта, проверке подписи и поведении при повторных попытках см. в разделе Настройка вебхуков.

Удаление аккаунта

Используйте whatsapp.business_account.deleted для обработки события удаления WhatsApp Business Account. Обратитесь к полю whatsappBusinessAccount.id, чтобы определить затронутый WABA.

Запрос

Ответ

Подтвердите доставку после надежного сохранения события.

Пояснение

Поля удаления появляются непосредственно внутри whatsappBusinessAccount, если они доступны. К известным значениям removedReason относятся: Сохраняйте неизвестные значения причин и инициаторов. Выполняйте дедупликацию доставок по id события и корректно обрабатывайте отсутствие полей удаления.

Authentication-International Rate Eligibility

С 1 июня 2024 года вводится новый тариф authentication-international. Этот тариф будет действовать в следующих странах:
  • 1 июня 2024 г. – Индонезия (телефонный код страны +62, код страны ID)
  • 1 июля 2024 г. – Индия (телефонный код страны +91, код страны IN)
Дополнительную информацию см. в разделе Authentication-International Rate Eligibility . Вебхук whatsapp.business_account.updated будет активирован, если ваш бизнес будет признан подходящим для международных тарифов. Вебхук будет содержать время начала действия тарифа для каждой страны с тарифом authentication-international.

Запрос

Ответ

Подтвердите доставку после надежного сохранения события.
Если за сообщение взимается плата по тарифу authentication-international, поле whatsappMessage.pricingCategory в вебхуках whatsapp.message.updated будет иметь значение authentication_international. Вот пример:

Пояснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные ошибкам задачи в асинхронный обработчик.

Обновление основного местоположения бизнеса

Ваше основное местоположение бизнеса — это страна, в которой зарегистрирован ваш бизнес. С 1 мая 2024 года оно будет отображаться в Business Manager в поле Primary Business Location. Если Meta сможет определить страну, в которой зарегистрирован ваш бизнес, будет отправлен вебхук whatsapp.business_account.updated с двухзначным кодом страны. Вот пример:

Запрос

Ответ

Подтвердите доставку после надежного сохранения события.

Пояснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные ошибкам задачи в асинхронный обработчик.

Обновление лимита регистрации номеров телефонов

Meta отправляет обновление бизнес-возможностей для WABA при изменении лимита регистрации номеров телефонов соответствующего Business Portfolio или WABA. YCloud доставляет его как whatsapp.business_account.updated с updateEvent=BUSINESS_CAPABILITY_UPDATE. Этот webhook работает на уровне WABA: whatsappBusinessAccount.id — это WABA ID из записи webhook от Meta. Meta в настоящее время сообщает о maxPhoneNumbersPerBusiness и maxPhoneNumbersPerWaba в отдельных обновлениях. Не считайте их взаимоисключающими: обрабатывайте каждое поле независимо и принимайте оба, если в будущем обновлении они поступят вместе. Значение 0 является допустимым. Ниже приведен пример обновления лимита номеров телефонов для WABA:

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и обновляйте только то поле лимита, которое включено в полезную нагрузку.

Нарушение в аккаунте

При получении события whatsapp.business_account.updated со значением ACCOUNT_VIOLATION в whatsappBusinessAccount.updateEvent проверьте whatsappBusinessAccount.violationType, чтобы определить зафиксированное нарушение правил. Типы и описания нарушений см. в разделе Meta Policy enforcement violations. Meta может со временем обновлять этот список. Вот пример:

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные сбоям задачи асинхронному обработчику.

Ограничение аккаунта

Если бизнес-аккаунты повторно нарушают Условия использования WhatsApp Business или правила в категориях повышенного риска (таких как рассылка спама, контент для взрослых, продажа алкоголя и табака, наркотики, азартные игры и небезопасные добавки), они могут столкнуться с ограничениями на отправку сообщений, длительность которых постепенно увеличивается. Для Utility Direct Send см. Уведомления Direct Send, где описана полезная нагрузка YCloud ACCOUNT_RESTRICTION. Информацию о типах нарушений и ограничениях, характерных для Direct Send, см. в документации Meta Webhook для ограничения аккаунта. Вот пример:

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные сбоям задачи асинхронному обработчику.

Ограничение Utility Direct Send

Вы получаете whatsapp.business_account.updated, когда Meta ограничивает Utility Direct Send после повторного неправомерного использования категорий. В этом примере показано ограничение на семь дней.

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Используйте whatsappBusinessAccount.id, чтобы определить затронутый WABA и приостановить его рабочий процесс Utility Direct Send. Значение поля violationType указывает причину, restrictions[].restrictionType — затронутую возможность, а restrictions[].expiration — срок окончания (если он указан). Успешная проверка одного шаблона не приводит к автоматическому снятию ограничения на уровне аккаунта. См. раздел Ограничения и уведомления Direct Send.

Отключение аккаунта

Аккаунты WhatsApp Business могут быть отключены, если компания не вносит изменения после многочисленных предупреждений, ограничений функций или блокировок. Вот пример:

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные сбоям задачи асинхронному обработчику.

Восстановление аккаунта

Вы можете обжаловать решение о блокировке WhatsApp Business Account, чтобы восстановить его. После одобрения статус проверки аккаунта меняется на APPROVED. Вот пример:

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Маршрутизируйте событие по type, выполняйте дедупликацию по id и передавайте медленные или подверженные сбоям задачи асинхронному обработчику.

Проверка бизнес-аккаунта

Используйте whatsapp.business_account.reviewed, когда WhatsApp Business Account прошел проверку.

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Идентифицируйте WABA с помощью id. В поле decision содержится решение по проверке (APPROVED или REJECTED), а в accountReviewStatus — статус проверки аккаунта (если указан). Не маршрутизируйте это событие как whatsapp.business_account.updated.

Удаление номера телефона

Используйте whatsapp.phone_number.deleted, когда удаляется бизнес-номер телефона WhatsApp.

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Используйте whatsappPhoneNumber.id, чтобы определить удаленный номер телефона, и wabaId, чтобы сопоставить его с аккаунтом. Это событие относится к номеру телефона; не считайте его удалением всей WABA.

Проверка отображаемого имени номера телефона

Используйте whatsapp.phone_number.name_updated, когда отображаемое имя бизнес-номера телефона одобрено или отклонено.

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Проверьте decision и указанные поля статуса имени. Поле newNameStatus описывает новый запрос отображаемого имени, requestedVerifiedName указывает последнее запрошенное имя, а rejectionReason содержит причину отклонения (при наличии). Проверка отображаемого имени выполняется отдельно от обновления Business Username.

Обновление качества номера телефона

Используйте whatsapp.phone_number.quality_updated для изменений статуса качества бизнес-номера телефона.

Запрос

Ответ

Подтверждайте доставку только после надежного сохранения события.

Объяснение

Изучите qualityRating (GREEN, YELLOW или RED) и qualityUpdateEvent, чтобы понять суть обновления. messagingLimit — это уровень телефонного номера; whatsappBusinessManagerMessagingLimit — лимит бизнес-портфолио владельца. Разделяйте эти поля и обновляйте только значения, переданные в событии.

Business Username активирован

Используйте whatsapp.phone_number.business_username_updated для синхронизации Business Username телефонного номера.

Запрос

Ответ

Подтверждайте доставку после надежного сохранения события.

Пояснение

businessUsername — это активное имя пользователя без начального символа @. Считывайте businessUsernameStatus и businessUsernameUpdatedAt вместе с id телефонного номера. Не путайте это значение с подтвержденным отображаемым именем.

Запрос на Business Username зарезервирован

Активный Business Username может оставаться в использовании, пока запрос на его замену находится в резерве.

Запрос

Ответ

Подтверждайте доставку после надежного сохранения события.

Пояснение

В этом примере businessUsername остается acme.support, в то время как requestedBusinessUsername имеет значение acme.help. Статус reserved описывает ожидающий запрос, а не активацию замены. Принимайте устаревшее значение pending_review при чтении более старых событий; для новых операций записи используется reserved.