Обзор
Вебхуки предоставляют возможность получать данные о различных событиях без необходимости постоянно опрашивать API. Система автоматически отправляет HTTP POST-запросы на указанный URL при наступлении выбранных событий.Технические характеристики
Метод запроса
HTTP POST
Формат данных
JSON
Время ответа
HTTP 200 OK (до 10 секунд)
Повторные попытки
Экспоненциальная схема
При сбое системные вебхуки повторяются по экспоненциальной схеме: 1 мин, 5 мин, 15 мин, 1 час
Поддерживаемые события
В настоящее время поддерживается следующий тип событий:Результат звонка
Получение данных о результатах звонков (статус, длительность, аудио)
Создание и управление вебхуками
Создание вебхука
1
Перейдите в раздел Колл-листы
Откройте панель управления и найдите раздел с колл-листами
2
Выберите колл-лист
Выберите колл-лист, для которого хотите настроить вебхук
3
Создайте вебхук
В блоке Вебхуки нажмите кнопку Создать вебхук
4
Настройте параметры
- Введите URL вашего сервера для приема вебхуков
- Выберите типы событий, о которых хотите получать уведомления
- Добавьте описание (опционально) для удобства управления
5
Сохраните секретный ключ
После создания вам будет показан секретный ключ вебхука. Сохраните его в надежном месте, так как он показывается только один раз
Безопасность и аутентификация
Заголовки запросов
Каждый запрос вебхука включает следующие HTTP-заголовки:| Заголовок | Описание |
|---|---|
Content-Type | application/json |
X-Webhook-Signature | HMAC SHA-256 подпись тела запроса |
X-Webhook-ID | Уникальный идентификатор вебхук-события |
X-Webhook-Timestamp | Время создания запроса в формате ISO 8601 |
X-Call-List-ID | ID колл-листа, связанного с событием |
Проверка подлинности запросов (необязательно)
Для обеспечения безопасности все запросы подписываются с использованием вашего секретного ключа вебхука. Это позволяет убедиться, что запросы действительно отправлены нашей платформой.Алгоритм проверки подписи
1
Получите подпись
Получите заголовок
X-Webhook-Signature из входящего запроса2
Получите тело запроса
Получите исходное тело запроса в виде строки
3
Создайте подпись
Создайте HMAC SHA-256 подпись тела запроса, используя ваш секретный ключ
4
Сравните подписи
Сравните вычисленную подпись с полученной в заголовке
Типы событий и форматы данных
Результат звонка (call_result)
Отправляется после завершения звонка и содержит информацию о результате и записи разговора.Описание полей
Основные поля события
Основные поля события
| Поле | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор события |
type | string | Тип события (call_result) |
organizationId | string | ID организации, в которой произошло событие |
timestamp | string | Время события в формате ISO 8601 |
Данные колл-листа
Данные колл-листа
| Поле | Тип | Описание |
|---|---|---|
callList.id | string | ID колл-листа, в рамках которого был совершен звонок |
callList.name | string | Название колл-листа |
callList.status | string | Статус колл-листа |
Данные звонка
Данные звонка
| Поле | Тип | Описание |
|---|---|---|
call.id | string | Уникальный идентификатор звонка |
call.startedAt | string | Время начала звонка |
call.connectedAt | string | Время соединения звонка |
call.endedAt | string | Время завершения звонка |
call.duration | number | Длительность звонка в миллисекундах |
call.status | string | Статус звонка (completed, failed, и т.д.) |
call.type | string | Тип звонка (outgoing, incoming) |
call.hangupReason | string | Причина завершения звонка |
Сессия звонка
Сессия звонка
| Поле | Тип | Описание |
|---|---|---|
call.callSession.id | string | Уникальный идентификатор сессии звонка |
call.callSession.status | string | Статус сессии звонка |
call.callSession.attempts | number | Количество попыток звонка |
call.callSession.attemptsLeft | number | Количество оставшихся попыток звонка |
Договоренности и результаты
Договоренности и результаты
| Поле | Тип | Описание |
|---|---|---|
call.agreements.isCommit | boolean | Флаг подтверждения договоренности |
call.agreements.agreements | string | Краткое описание договоренности |
call.agreements.client_name | string | Имя клиента |
call.agreements.client_facts | string | Факты о клиенте, собранные во время разговора |
call.agreements.need_callback | boolean | Флаг необходимости обратного звонка |
call.agreements.interest_level | string | Уровень заинтересованности клиента |
call.agreements.agreements_time | string | Время договоренности в формате “YYYY-MM-DD HH:MM:SS” |
call.agreements.agreements_time_local | string | Локальное время договоренности |
Данные контакта
Данные контакта
| Поле | Тип | Описание |
|---|---|---|
contact.id | string | ID контакта |
contact.phone | string | Номер телефона клиента |
contact.blacklist | boolean | Флаг нахождения в черном списке |
contact.dadataPhoneInfo | object | Информация о телефоне из сервиса DaData |
contact.tags | array | Теги, привязанные к контакту |
contact.additionalFields | object | Дополнительные данные о контакте |
Рекомендации по реализации
Быстрый ответ
Ваш сервер должен отвечать кодом 200 OK в течение 10 секунд
Использование очередей
Для обработки вебхуков в фоновом режиме рекомендуется использовать очереди
Идемпотентность
Обрабатывайте вебхуки идемпотентно, так как одно событие может быть отправлено несколько раз
Проверка подписей
Всегда проверяйте подпись запроса для обеспечения безопасности
Логирование: Сохраняйте полученные запросы для отладки и аудита.
Устранение неполадок
Распространенные ошибки
| Код ошибки | Описание | Решение |
|---|---|---|
| 403 Forbidden | Доступ запрещен | Проверьте доступность сервера и настройки файрвола |
| 404 Not Found | URL не найден | Проверьте правильность URL |
| 5xx Server Error | Ошибка сервера | Проверьте логи вашего сервера |
| Timeout | Превышено время ожидания | Оптимизируйте обработку запросов, используйте фоновые задачи |
Отладка
Для отладки вебхуков рекомендуется:1
Локальная разработка
Использовать инструменты для локальной разработки, такие как ngrok или localtunnel
2
Логирование
Логировать все полученные запросы вебхуков
3
Проверка подписи
Проверять валидность подписи
Пропущенные события
Если вы не получаете события:При возникновении проблем с вебхуками и необходимости более детальной информации, пожалуйста, свяжитесь с нашей технической поддержкой.