Полный каталог, сгенерированный на основе схемы, см. в разделе Все примеры.
Что это такое
Обрабатывайте события проверки, обновления и удаления бизнес-аккаунтов, а также удаления номеров телефонов, проверки отображаемых имен, качества и обновления 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)
whatsapp.business_account.updated будет активирован, если ваш бизнес будет признан подходящим для международных тарифов. Вебхук будет содержать время начала действия тарифа для каждой страны с тарифом 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, где описана полезная нагрузка YCloudACCOUNT_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.
