Что это такое
Webhooks — это HTTPS-запросы, которые YCloud отправляет вашему приложению при изменении статуса доставки сообщений, входящих сообщений, контактов, шаблонов, вызовов и других ресурсов.Перед началом работы
- Сохраните свой API-ключ YCloud в
YCLOUD_API_KEY. - Разверните общедоступную конечную точку HTTPS.
- Сохраняйте исходное тело запроса (raw body) для проверки подписи.
- Определите, какие типы событий требуются вашему приложению.
Как это работает
- Создайте конечную точку Webhook и подпишите ее на нужные типы событий.
- Сохраните возвращенный
secretконечной точки. - YCloud отправляет запрос события на вашу конечную точку.
- Проверьте
YCloud-Signature, прежде чем доверять запросу. - Своевременно верните ответ
2xx. - Обрабатывайте событие идемпотентно, так как доставка может повторяться.
Запрос
Создайте конечную точку с помощьюPOST /webhookEndpoints.
Поля запроса
Пример запроса
Подписка на события echo и handover
Для Agents, подключенных через общедоступный REST API, создайте конечную точку со следующими подписками. Agents, созданные через Console, не отправляют эти три события. Чтобы изменить существующую конечную точку, сохраните подписки на события, которые вам по-прежнему необходимы.whatsappMessage в формате сообщения. Событие handover передает whatsappMetaBusinessAgent и сохраняет информацию об Agent/управлении. Они не используют контракт whatsapp.smb.message.echoes WhatsApp Business App. См. сведения о событиях echo и handover для определений полей, примеров, порядка и ограничений корреляции handover.
Подписка на события сообщений Messenger
Укажите необходимые имена событий в
enabledEvents при создании или обновлении конечной точки. Например, чтобы подписаться на все четыре:
messengerInboundMessage.id и metaMessageId, заменяется text.body и добавляются editCount и editTime. Поля сообщения sendTime и createTime остаются неизменными; оболочка события createTime указывает время редактирования. В неотредактированных сообщениях поля редактирования отсутствуют. Обновляется только существующее входящее сообщение. Более ранние правки игнорируются; недостающие сообщения и история правок не восстанавливаются. Сопоставляйте обновления по ID сообщения и используйте накопительный счетчик, чтобы предотвратить применение более старого текста поверх более новой версии. Повторные попытки источника могут создавать другой ID события для той же сохраненной правки. См. пример редактирования входящего сообщения.
События реакций содержат pageId, psid отреагировавшего клиента, целевой metaMessageId и action (react или unreact). Необязательные поля reaction и emoji могут отсутствовать, особенно для unreact. Реакция не меняет статус доставки сообщения. Целевое сообщение может быть создано вне YCloud API, поэтому событие не требует локальной записи сообщения и не содержит локальный ID сообщения.
Поле события createTime сохраняет время исходного взаимодействия. Повторные попытки доставки клиенту сохраняют его id события и полезную нагрузку. Обработка обратного вызова источником может приводить к созданию другого ID события для повторяющегося взаимодействия; не используйте ID событий в качестве идентификаторов реакций или сообщений. См. примеры полезной нагрузки реакций для обоих действий.
Ответ
В ответе возвращается созданная конечная точка и ееsecret для подписи. Храните секрет в безопасности. YCloud использует его для создания подписей Webhook.
Пример ответа
Поля ответа
Получение событий
Запрос события
YCloud отправляет JSON-объект события на настроенныйurl. Событие содержит
общие поля, такие как id, type, apiVersion и createTime, а также полезную нагрузку,
зависящую от типа события.
Ваш обработчик должен:
- Считывать необработанное тело запроса (raw request body).
- Проверять заголовок
YCloud-Signatureс помощью секрета эндпоинта перед тем, как доверять полезной нагрузке. - Своевременно возвращать успешный ответ
2xx. - Переносить длительную обработку в очередь.
- Обеспечивать идемпотентность обработки событий, чтобы повторная доставка не дублировала бизнес-действия.
Ответ получателя
Возвращайте успешный HTTP-ответ2xx, как только подпись и запрос будут
приняты. Тело ответа может быть пустым.
2xx, может
привести к повторной отправке события со стороны YCloud, поэтому дедуплицируйте события по id.
Примеры стандартных полезных нагрузок
Разверните событие, чтобы просмотреть полный пример его полезной нагрузки. Эти примеры взяты из спецификации OpenAPI для webhook. См. раздел все примеры полезной нагрузки вебхуков для каждого поддерживаемого типа событий.Событие изменения атрибутов контакта
Событие изменения атрибутов контакта
Пример полезной нагрузки при изменении атрибутов контакта
Событие создания контакта
Событие создания контакта
Пример полезной нагрузки при создании нового контакта
Событие удаления контакта
Событие удаления контакта
Пример полезной нагрузки при удалении контакта
Событие отмены подписки клиентом
Событие отмены подписки клиентом
Пример полезной нагрузки при отмене подписки клиентом
Возобновление подписки клиентом
Возобновление подписки клиентом
Пример полезной нагрузки при возобновлении подписки клиентом
Событие архивации шаблона WhatsApp
Событие архивации шаблона WhatsApp
Пример полезной нагрузки при архивации шаблона WhatsApp
Событие разархивации шаблона WhatsApp
Событие разархивации шаблона WhatsApp
Пример полезной нагрузки при разархивации шаблона WhatsApp. Статус шаблона является текущим статусом, возвращенным Meta, и не означает прохождение новой проверки на одобрение.
Событие соединения вызова WhatsApp
Событие соединения вызова WhatsApp
Пример полезной нагрузки при установке соединения вызова WhatsApp
Событие завершения вызова WhatsApp
Событие завершения вызова WhatsApp
Пример полезной нагрузки при завершении вызова WhatsApp
Событие обновления статуса вызова WhatsApp
Событие обновления статуса вызова WhatsApp
Пример полезной нагрузки при обновлении статуса вызова WhatsApp
Event и интерактивного справочника полезных нагрузок.
Ротация секрета эндпоинта
Выполните ротацию секрета в случае его компрометации или в соответствии с вашей политикой безопасности:Эндпоинт, который неоднократно не может принять уведомления, может перейти в статус
pending и прекратить получение событий. Отслеживайте сбои доставки Webhook и статус эндпоинта.
