Обзор

Вебхуки предоставляют возможность получать данные о различных событиях без необходимости постоянно опрашивать API. Система автоматически отправляет HTTP POST-запросы на указанный URL при наступлении выбранных событий.

Технические характеристики

Метод запроса

HTTP POST

Формат данных

JSON

Время ответа

HTTP 200 OK (до 10 секунд)

Повторные попытки

Экспоненциальная схема

При сбое системные вебхуки повторяются по экспоненциальной схеме: 1 мин, 5 мин, 15 мин, 1 час

Поддерживаемые события

В настоящее время поддерживается следующий тип событий:

Результат звонка

Получение данных о результатах звонков (статус, длительность, аудио)

Создание и управление вебхуками

Создание вебхука

1

Перейдите в раздел Колл-листы

Откройте панель управления и найдите раздел с колл-листами

2

Выберите колл-лист

Выберите колл-лист, для которого хотите настроить вебхук

3

Создайте вебхук

В блоке Вебхуки нажмите кнопку Создать вебхук

4

Настройте параметры

  • Введите URL вашего сервера для приема вебхуков
  • Выберите типы событий, о которых хотите получать уведомления
  • Добавьте описание (опционально) для удобства управления
5

Сохраните секретный ключ

После создания вам будет показан секретный ключ вебхука. Сохраните его в надежном месте, так как он показывается только один раз

Секретный ключ показывается только один раз при создании вебхука и будет использоваться для проверки подлинности запросов.

Безопасность и аутентификация

Заголовки запросов

Каждый запрос вебхука включает следующие HTTP-заголовки:

ЗаголовокОписание
Content-Typeapplication/json
X-Webhook-SignatureHMAC SHA-256 подпись тела запроса
X-Webhook-IDУникальный идентификатор вебхук-события
X-Webhook-TimestampВремя создания запроса в формате ISO 8601
X-Call-List-IDID колл-листа, связанного с событием

Проверка подлинности запросов (необязательно)

Для обеспечения безопасности все запросы подписываются с использованием вашего секретного ключа вебхука. Это позволяет убедиться, что запросы действительно отправлены нашей платформой.

Алгоритм проверки подписи

1

Получите подпись

Получите заголовок X-Webhook-Signature из входящего запроса

2

Получите тело запроса

Получите исходное тело запроса в виде строки

3

Создайте подпись

Создайте HMAC SHA-256 подпись тела запроса, используя ваш секретный ключ

4

Сравните подписи

Сравните вычисленную подпись с полученной в заголовке

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const computed = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(computed, 'hex'),
    Buffer.from(signature, 'hex')
  );
}

// Пример использования в Express
app.post('/webhook', express.text({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-webhook-signature'];
  const payload = req.body; // Сырое тело запроса в виде строки
  const secret = 'ваш_секретный_ключ_вебхука';
  
  if (!verifyWebhookSignature(payload, signature, secret)) {
    return res.status(401).send('Недействительная подпись');
  }
  
  // Парсинг JSON из строки
  const data = JSON.parse(payload);
  
  // Обработка события
  console.log('Получено событие:', data);
  res.status(200).send('OK');
});

Важно использовать сравнение строк, устойчивое к time-based атакам (например, crypto.timingSafeEqual() в Node.js или hash_equals() в PHP).

Типы событий и форматы данных

Результат звонка (call_result)

Отправляется после завершения звонка и содержит информацию о результате и записи разговора.

Описание полей

Рекомендации по реализации

Быстрый ответ

Ваш сервер должен отвечать кодом 200 OK в течение 10 секунд

Использование очередей

Для обработки вебхуков в фоновом режиме рекомендуется использовать очереди

Идемпотентность

Обрабатывайте вебхуки идемпотентно, так как одно событие может быть отправлено несколько раз

Проверка подписей

Всегда проверяйте подпись запроса для обеспечения безопасности

Логирование: Сохраняйте полученные запросы для отладки и аудита.

Устранение неполадок

Распространенные ошибки

Код ошибкиОписаниеРешение
403 ForbiddenДоступ запрещенПроверьте доступность сервера и настройки файрвола
404 Not FoundURL не найденПроверьте правильность URL
5xx Server ErrorОшибка сервераПроверьте логи вашего сервера
TimeoutПревышено время ожиданияОптимизируйте обработку запросов, используйте фоновые задачи

Отладка

Для отладки вебхуков рекомендуется:

1

Локальная разработка

Использовать инструменты для локальной разработки, такие как ngrok или localtunnel

2

Логирование

Логировать все полученные запросы вебхуков

3

Проверка подписи

Проверять валидность подписи

Пропущенные события

Если вы не получаете события:

При возникновении проблем с вебхуками и необходимости более детальной информации, пожалуйста, свяжитесь с нашей технической поддержкой.