Skip to main content
Полный каталог, сгенерированный на основе схемы, см. в разделе все примеры.

Что это такое

Обработка входящих типов сообщений WhatsApp с примерами полезной нагрузки и пояснениями.

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

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

Как это работает

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

Запрос

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

Ответ

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

Входящее неподдерживаемое сообщение

В этом случае ваш эндпоинт Webhook получил входящее неподдерживаемое сообщение:
  • type имеет значение unsupported.
  • errors объясняет, почему сообщение не поддерживается или недоступно.
  • unsupported.type указывает категорию сообщения, например poll_creation, poll_update, edit или pin.

Запрос

Ответ

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

Пояснение

Входящее текстовое сообщение

В этом случае ваш эндпоинт Webhook получил входящее текстовое сообщение:
  • Содержит обычный текст, отправленный пользователем.
  • Содержит информацию об упомянутом сообщении в context.

Запрос

Ответ

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

Пояснение

  • Входящие сообщения — это сообщения, отправленные клиентами на ваши рабочие телефонные номера.
  • Объект context (необязательный) содержит информацию об упомянутом сообщении, обычно используемую при ответе на предыдущее сообщение, отправленное пользователем или вашей компанией.
    • context.from — это WhatsApp ID (номер телефона без префикса «+») пользователя, отправившего упомянутое сообщение.
    • context.id — это исходный ID упомянутого сообщения на платформе WhatsApp, начинающийся с wamid..

Входящее текстовое сообщение, инициированное кликом по рекламе WhatsApp Ads

В этом случае ваш эндпоинт Webhook получил входящее текстовое сообщение, вызванное кликом по рекламе в WhatsApp:
  • Содержит обычный текст.
  • Содержит информацию о рекламе.

Запрос

Ответ

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

Пояснение

Входящее сообщение с изображением

В этом случае ваш эндпоинт Webhook получил входящее сообщение с изображением:
  • Содержит URL изображения.
  • Содержит подпись с описанием этого изображения.

Запрос

Ответ

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

Пояснение

  • По ссылке image.link файл доступен напрямую в течение нескольких минут для удобства клиента, однако для скачивания файла в течение 30 дней всегда следует передавать заголовок X-API-Key.

Входящее сообщение с видео

В этом случае ваш эндпоинт Webhook получил входящее сообщение с видео:
  • Содержит URL видео.
  • Содержит подпись с описанием этого видео.

Запрос

Ответ

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

Пояснение

  • По ссылке video.link файл доступен напрямую в течение нескольких минут для удобства клиента, однако для скачивания файла в течение 30 дней всегда следует передавать заголовок X-API-Key.

Входящее аудиосообщение

В этом случае ваш эндпоинт Webhook получил входящее аудиосообщение:
  • Содержит URL аудио.

Запрос

Ответ

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

Пояснение

  • По ссылке audio.link файл доступен напрямую в течение нескольких минут для удобства клиента, однако для скачивания файла в течение 30 дней всегда следует передавать заголовок X-API-Key.

Входящее сообщение с документом

В этом случае ваш эндпоинт Webhook получил входящее сообщение с документом:
  • Содержит URL документа.
  • Содержит подпись с описанием этого документа.

Запрос

Ответ

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

Пояснение

  • По ссылке document.link файл доступен напрямую в течение нескольких минут для удобства клиента, однако для скачивания файла в течение 30 дней всегда следует передавать заголовок X-API-Key.

Входящее сообщение со стикером

В этом случае ваш эндпоинт Webhook получил входящее сообщение со стикером:
  • Содержит URL стикера.

Запрос

Ответ

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

Объяснение

  • К sticker.link можно напрямую обращаться в течение нескольких минут для удобства получателя, однако для загрузки этого файла в течение 30 дней всегда следует передавать заголовок X-API-Key.

Входящее сообщение с геопозицией (Location)

В этом случае ваша конечная точка Webhook получила входящее сообщение с геопозицией:
  • Содержит широту и долготу места.
  • Содержит название, адрес и URL места.

Запрос

Ответ

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

Объяснение

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

Входящее сообщение с контактами (Contacts)

В этом случае ваша конечная точка Webhook получила входящее сообщение с контактами:
  • Содержит один контакт с адресами, датой рождения, адресами эл. почты, именем, телефонами и другими полями контакта.
  • Содержит origin: contact_request, если пользователь поделился контактом в ответ на запрос контактных данных.

Запрос

Ответ

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

Объяснение

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

Входящее сообщение-реакция (Reaction)

В этом случае ваша конечная точка Webhook получила входящее сообщение-реакцию:
  • Содержит ID сообщения, на которое отреагировал пользователь.
  • Содержит эмодзи.

Запрос

Ответ

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

Объяснение

  • Поле emoji присутствует, когда пользователь реагирует на сообщение с помощью эмодзи. Его отсутствие означает, что пользователь удалил эмодзи с сообщения.

Входящее сообщение по нажатию кнопки шаблона (Template Button)

В этом случае ваша конечная точка Webhook получила входящее сообщение по нажатию кнопки шаблона:
  • Содержит text кнопки шаблона, который использовался при отправке шаблонного сообщения.
  • Содержит payload кнопки, указанный вами при отправке шаблонного сообщения.
  • Содержит wamid (context.wamid) отправленного вами шаблонного сообщения.

Запрос

Ответ

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

Объяснение

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

Входящее интерактивное сообщение с выбором из списка (Interactive List Reply)

В этом случае ваша конечная точка Webhook получила входящее интерактивное сообщение с выбором из списка:
  • Поле interactive содержит элемент списка, выбранный пользователем в ранее отправленном вами интерактивном сообщении.
  • Поле context содержит информацию об интерактивном сообщении, которое вы ранее отправили пользователю.
Нажмите кнопку, чтобы выбрать один элемент. Получатель отвечает на ваше сообщение, выбирая один из пунктов ранее отправленного интерактивного сообщения.

Запрос

Ответ

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

Объяснение

  • Поле context содержит информацию о ранее отправленном вами интерактивном сообщении.
    • context.from — это WhatsApp ID (номер телефона без префикса «+») отправителя интерактивного сообщения.
    • context.id — исходный ID сообщения на платформе WhatsApp, начинающийся с wamid..

Входящее интерактивное сообщение с ответом по кнопке (Interactive Button Reply)

В этом случае ваша конечная точка Webhook получила входящее интерактивное сообщение с ответом по кнопке:
  • Поле interactive содержит ответ по кнопке, нажатой пользователем в ранее отправленном вами интерактивном сообщении.
  • Поле context содержит информацию об интерактивном сообщении, которое вы ранее отправили пользователю.
example-inboundmessage-buttonreply.png

Запрос

Ответ

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

Объяснение

  • Поле context содержит информацию о ранее отправленном вами интерактивном сообщении.
    • context.from — это WhatsApp ID (номер телефона без префикса «+») отправителя интерактивного сообщения.
    • context.id — исходный ID сообщения на платформе WhatsApp, начинающийся с wamid..

Входящее интерактивное сообщение с ответом Flow (Interactive Flow Response)

После завершения flow ответное сообщение отправляется в чат WhatsApp. Вы получите его так же, как и все остальные сообщения от пользователя — через webhook сообщений. Поле response_json будет содержать данные, относящиеся к flow.

Запрос

Ответ

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

Объяснение

  • interactive.type всегда имеет значение nfm_reply. interactive.name всегда имеет значение flow. interactive.body всегда имеет значение Sent.
  • interactive.response_json — это данные flow. Структура определяется либо в JSON flow (см. действие Complete), либо, если flow использует конечную точку, управляется этой конечной точкой (см. Final Response Payload в разделе Data Exchange Request). Распарсите JSON-строку interactive.response_json в объект JSON, значения которого могут иметь различные типы данных. Как правило, значения представляют собой обычный текст, за исключением:
    • Когда данные поступают из компонента CheckboxGroup, значение представляет собой список строк.
    • Если оно исходит от компонента OptIn, значением является логическое значение (boolean), то есть true или false. В настоящее время, если оно присутствует, значение всегда должно быть true, поскольку такой ключ не будет включен в response_json, если пользователь не согласился на рассылку.
    • Если оно исходит от компонента DatePicker, значение представляет собой строку с таймштампом Unix в миллисекундах, например "1725936737548" (то есть 2024-09-10T02:52:17.548Z). Начиная с Flow JSON версии 5.0, даты передаются в формате «yyyy-MM-dd», что делает значения независимыми от часовых поясов.
  • Инструкции по отправке сообщений с Flow см. в разделах Шаблонное сообщение Flow и Интерактивное сообщение Flow.

Входящее системное сообщение

В этом случае ваша конечная точка Webhook получила входящее системное сообщение:
  • type имеет значение system, а system.type — user_changed_number.
  • Пользователь меняет свой номер телефона в WhatsApp, и wa_id — это новый WhatsApp ID (номер телефона без префикса +).
  • user_id — это новый BSUID. parent_user_id включается только тогда, когда включены родительские BSUID.

Запрос

Ответ

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

Объяснение

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

Входящее сообщение заказа

В этом случае ваша конечная точка Webhook получила входящее сообщение заказа, когда клиент добавляет один или несколько товаров в корзину и оформляет заказ:
  • Содержит информацию о заказанном товаре.

Запрос

Ответ

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

Объяснение

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

Входящее сообщение с запросом информации о товаре

В этом случае ваша конечная точка Webhook получила входящее текстовое сообщение, когда клиент запрашивает информацию о товаре:
  • Содержит информацию о товаре.

Запрос

Ответ

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

Объяснение

  • Сообщение с запросом информации о товаре (Product Inquiry Message) поступает, когда пользователь запрашивает подробные сведения о конкретном товаре. Это происходит в двух сценариях:
    • Когда клиент отвечает на сообщения с одним или несколькими товарами.
    • Когда клиент переходит в каталог компании через другую точку входа, открывает страницу сведений о товаре и нажимает «Написать компании об этом товаре».

Входящее сообщение Request Welcome

Вы можете получать уведомления через Webhook всякий раз, когда пользователь WhatsApp впервые открывает чат с вами. Это удобно, если вы хотите отправить таким пользователям специально настроенное приветственное сообщение. Если вы включите эту функцию и пользователь откроет чат (как правило, при переходе по универсальной ссылке, такой как ссылки wa.me или api.whatsapp.com ), клиент WhatsApp проверяет наличие существующей переписки между пользователем и вашим рабочим номером телефона. Если переписки нет, клиент активирует Webhook request_welcome. После этого вы можете отправить пользователю собственное приветственное сообщение. example-inboundmessage-welcomemessage

Запрос

Ответ

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

Объяснение

  • Чтобы включить эту функцию для номера телефона, перейдите в Meta WhatsApp Manager > Номера телефонов > Настройки > Автоматизация.
  • Для тестирования сообщения request_welcome, если у вас уже есть история чата с данным номером компании, сначала необходимо удалить этот чат.
  • Эта функция только инициирует входящее сообщение request_welcome и не отправляет никаких сообщений автоматически в ответ. Отправлять ли приветственное сообщение — решать вам.