WebHooks
Вебхуки API Radist.Online: как подписаться на события компании, формат уведомлений, типы event_type и настройка адреса доставки для подключений.
Общее
Swagger: https://api.radist.online/v2/docs#/Webhooks
Необходимые права доступа (scopes) для работы с API: webhooks
Для получения уведомлений о событиях, происходящих в компании, можно подписаться на вебхуки. Это рекомендуемый способ получения уведомлений.
Управление вебхуками
Создание подписки
WebhooksCreateItem (POST /companies/{company_id}/webhooks/)
Для подписки на вебхуки необходимо задать адрес, на который они будут приходить, указать, для какого из подключений вы хотите получать вебхуки и указать список типов событий (event_type, описаны ниже), уведомления о которых вам нужны.
Пример подписки на вебхуки
| |
Список подписок
WebhooksListItems (GET /companies/{company_id}/webhooks/)
Возвращает список всех подписок на вебхуки компании.
Пример получения списка подписок
| |
Удаление подписки
WebhooksDeleteItem (DELETE /companies/{company_id}/webhooks/{webhook_id})
Пример удаления подписки
| |
Формат вебхука
Общий формат такой:
| |
Содержимое event зависит от event_type:
event_type=messages.create:
| |
Поле contact_id приходит всегда, но может быть null — если у чата нет привязанного контакта.
Схема объекта message (см. модель Message): https://api.radist.online/v2/docs#/model-Message
event_type=messages.delivery.{delivered | read | error}:
| |
event_type=connections.status_changed:
| |
Замечания
- Обрабатывайте вебхуки асинхронно. Сохранили в очередь, ответили, что приняли, и только потом обработали.
- Уведомления одного подключения доставляются параллельно, поэтому порядок их получения не гарантируется. Уведомления по одному чату отправляются последовательно, и
messages.createобычно приходит раньше уведомленийmessages.delivery.{delivered | read | error}по тому же сообщению, но полагаться на это при обработке не стоит: повторная отправка после ошибки идёт отдельной очередью. - Тело ответа/заголовки ответа игнорируются. Рекомендуем сократить их до минимума.
- На обновление настроек вебхуков может потребоваться до 5 минут. В течение этого времени вебхуки всё ещё могут приходить на ранее указанные адреса.
- Сервер вебхуков ожидает ответ со статусами 200, 201, 202 в течение 5 секунд.
- Если был получен ответ со статусом 4xx, то повторной отправки вебхука не будет.
- Если был получен другой ответ, ответ был не получен за 5 секунд, или произошла другая ошибка (например, недействительный SSL-сертификат) то вебхук будет отправлен повторно с интервалами: 1, 3, 10, 30, 60 минут.
- Если адрес подписки не резолвится (домена не существует или DNS не ответил), вебхук отбрасывается без повторной отправки.
- Если адрес подписки несколько раз подряд не ответил (таймаут, ошибка соединения или SSL-сертификата, статус не из 200, 201, 202 и не 4xx), доставка на него приостанавливается. Пока она приостановлена, запросы на адрес не отправляются. Время от времени очередной вебхук отправляется как проверочный — как только адрес ответит, доставка возобновится. Пауза действует на адрес целиком, для всех подписок с этим URL.
- Если сервер не отвечает или отвечает статусами 5xx дольше 3 часов подряд, отправка вебхуков может быть временно приостановлена или отключена совсем.
Примеры
| |
Часто задаваемые вопросы
Почему вебхуки перестали приходить?
Скорее всего, доставка на ваш адрес приостановлена. Так происходит, если адрес несколько раз подряд не ответил: таймаут, ошибка соединения, недействительный SSL-сертификат или статус не из 200, 201, 202 и не 4xx. Пока доставка на паузе, запросы не отправляются, но время от времени уходит проверочный вебхук — как только адрес ответит, доставка возобновится сама. Пауза действует на URL целиком, то есть на все подписки с этим адресом. Если сервер не отвечает или отдаёт 5xx дольше трёх часов подряд, отправка может быть приостановлена или отключена совсем.
Сколько раз повторяется отправка, если сервер не ответил?
Пять раз, с нарастающими интервалами: через 1, 3, 10, 30 и 60 минут. Повторы включаются, если ответ не получен за 5 секунд, пришёл статус не из успешных или произошла другая ошибка вроде недействительного сертификата. Исключение одно: если адрес подписки не резолвится — домена не существует или не ответил DNS — вебхук отбрасывается сразу, без повторов.
Какой ответ должен возвращать мой сервер?
Статус 200, 201 или 202, и уложиться нужно в 5 секунд. Тело ответа и заголовки игнорируются, так что их лучше сократить до минимума. Отсюда же главная рекомендация по обработке: принимать вебхук асинхронно — положить в очередь, сразу ответить, что приняли, и разбирать уже после.
Поменял адрес подписки, а вебхуки идут на старый
Это нормально в первые минуты: на обновление настроек может потребоваться до 5 минут, и всё это время вебхуки ещё могут приходить на ранее указанный адрес. Если прошло больше, проверьте, что подписка действительно обновилась — через список подписок.
В каком порядке приходят вебхуки?
Порядок не гарантируется: уведомления одного подключения доставляются параллельно. По одному чату они отправляются последовательно, и messages.create обычно приходит раньше, чем messages.delivery по тому же сообщению, но строить обработку на этом не стоит — повторная отправка после ошибки идёт отдельной очередью и может прийти позже остальных.
Что будет, если ответить статусом 4xx?
Повторной отправки не будет: вебхук считается доставленным и больше не придёт. Поэтому 4xx стоит отдавать только осознанно — например, когда запрос действительно адресован не туда. Если обработчик временно не может принять данные, лучше вернуть 5xx или не ответить: тогда вебхук повторится по расписанию.