Skip to main content

Что это такое

Webhook — это HTTPS-запросы, которые YCloud отправляет вашему приложению при изменении статуса доставки сообщений, входящих сообщений, контактов, шаблонов, звонков и других ресурсов.

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

  • Сохраните свой API-ключ YCloud в YCLOUD_API_KEY.
  • Разверните общедоступную конечную точку HTTPS.
  • Сохраняйте необработанное тело запроса (raw request body) для проверки подписи.
  • Определите, какие типы событий требуются вашему приложению.

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

  1. Создайте конечную точку Webhook и подпишите её на типы событий.
  2. Сохраните возвращенный secret конечной точки.
  3. YCloud отправляет запрос события на вашу конечную точку.
  4. Проверьте YCloud-Signature, прежде чем доверять запросу.
  5. Своевременно верните ответ 2xx.
  6. Обрабатывайте событие идемпотентно, так как доставка может повторяться.

Запрос

Создайте конечную точку с помощью POST /webhookEndpoints.

Поля запроса

Пример запроса

Подписка на события echo и handover

Для агентов, подключенных через общедоступный REST API, создайте конечную точку со следующими подписками. Агенты, созданные в консоли, не генерируют эти три события. Чтобы изменить существующую конечную точку, сохраните подписки на события, которые вам всё ещё нужны.
Два типа событий echo содержат стандартную полезную нагрузку whatsappMessage в формате сообщения. Событие handover передает whatsappMetaBusinessAgent и сохраняет информацию об агенте/управлении. Они не используют формат whatsapp.smb.message.echoes приложения WhatsApp Business. См. подробности о событиях echo и handover для определений полей, примеров, порядка и ограничений корреляции handover.

Ответ

В ответе возвращаются созданная конечная точка и её секрет подписи secret. Храните секрет в безопасности. YCloud использует его для создания подписей Webhook.

Пример ответа

Поля ответа

Получение событий

Запрос события

YCloud отправляет объект события JSON на настроенный url. Событие содержит общие поля, такие как id, type, apiVersion и createTime, а также полезную нагрузку, зависящую от типа события. Ваш обработчик должен:
  1. Считывать необработанное тело запроса.
  2. Проверять заголовок YCloud-Signature с помощью секрета конечной точки перед обработкой полезной нагрузки.
  3. Своевременно возвращать успешный ответ 2xx.
  4. Переносить длительную обработку в очередь.
  5. Обеспечивать идемпотентность обработки событий, чтобы повторная доставка не дублировала бизнес-действия.
Не парсить и не изменять тело запроса до валидации подписи. Используйте исходные необработанные байты, полученные вашим сервером.

Ответ приемника

Возвращайте успешный HTTP-ответ 2xx, как только подпись и запрос будут приняты. Тело ответа может быть пустым.
Переносите длительную бизнес-логику в очередь. Таймаут или ответ, отличный от 2xx, может привести к повторной отправке события со стороны YCloud, поэтому выполняйте дедупликацию по id события.

Примеры распространенных полезных нагрузок

Разверните событие, чтобы просмотреть полный пример его полезной нагрузки. Эти примеры взяты из спецификации Webhook OpenAPI. См. все примеры полезных нагрузок Webhook для каждого поддерживаемого типа события.
Пример полезной нагрузки при изменении атрибутов контакта
Пример полезной нагрузки при создании нового контакта
Пример полезной нагрузки при удалении контакта
Пример полезной нагрузки при отмене подписки клиентом
Пример полезной нагрузки при возобновлении клиентом подписки
Пример полезной нагрузки при архивации шаблона WhatsApp
Пример полезной нагрузки при разархивации шаблона WhatsApp. Статус шаблона отражает текущий статус, возвращенный Meta, и не указывает на повторную модерацию.
Пример полезной нагрузки при соединении звонка WhatsApp
Пример полезной нагрузки при завершении звонка WhatsApp
Пример полезной нагрузки при обновлении статуса звонка WhatsApp
См. раздел Полезные нагрузки событий Webhook для получения полной схемы Event и интерактивного справочника полезной нагрузки.

Ротация секрета эндпоинта

Выполняйте ротацию секрета в случае его компрометации или в соответствии с вашей политикой безопасности:
Сразу после ротации разверните новый секрет на стороне вашего приемника.
Эндпоинт, который неоднократно не может принять уведомления, может перейти в статус pending и перестать получать события. Отслеживайте сбои webhook и статус эндпоинта.
Информацию о коде проверки подписи, интервалах повторных попыток и реализации приемника см. в разделе Реализация приемника webhook.