Вебхуки¶
Вебхуки позволяют получать уведомления о событиях SpeakNode на ваш сервер в реальном времени. Например, вы можете узнать о завершении разговора или начале новой сессии.
Создание подписки¶
- Перейдите в раздел Webhooks в https://app.speaknode.com
- Нажмите Create Webhook
- Заполните параметры:
| Поле | Описание |
|---|---|
| URL | Адрес эндпоинта, на который будут отправляться события |
| Description | Описание подписки для удобства идентификации |
Типы событий¶
Выберите события, на которые вы хотите подписаться:
| Событие | Описание |
|---|---|
| ConversationComplete | Разговор завершён. Содержит метаданные сессии, длительность, статус |
| SessionStarted | Новая сессия запущена. Содержит информацию об агенте и звонящем |
Вы можете подписаться на одно или несколько событий в рамках одной подписки.
Переключатель активности¶
Каждая подписка имеет переключатель Active / Inactive:
- Active — события отправляются на указанный URL
- Inactive — подписка приостановлена, события не отправляются
Это удобно для временного отключения вебхука без удаления подписки — например, на время технических работ.
Формат запроса¶
При наступлении события платформа отправляет HTTP POST-запрос на указанный URL:
{
"event": "ConversationComplete",
"timestamp": "2025-01-15T10:30:00Z",
"data": {
"session_id": "...",
"agent_id": "...",
"duration_seconds": 120,
"status": "completed"
}
}
Подпись запроса (HMAC-SHA256)¶
Для проверки подлинности запросов SpeakNode подписывает каждый вебхук с помощью HMAC-SHA256.
Секрет подписи¶
При создании подписки генерируется уникальный секретный ключ. Он отображается один раз — сохраните его в безопасном месте.
Проверка подписи¶
Каждый запрос содержит заголовок с подписью. Для проверки:
- Извлеките тело запроса (raw body)
- Вычислите HMAC-SHA256 от тела, используя ваш секретный ключ
- Сравните вычисленное значение с подписью из заголовка
Пример проверки (Python):
import hmac
import hashlib
def verify_signature(body: bytes, secret: str, signature: str) -> bool:
expected = hmac.new(
secret.encode(),
body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
Безопасность
Всегда проверяйте подпись входящих вебхуков. Без проверки злоумышленник может отправлять поддельные события на ваш эндпоинт.
История запросов¶
Для каждой подписки доступна история отправленных запросов:
- Откройте подписку в списке вебхуков
- Перейдите на вкладку Request History
- Просмотрите список запросов:
- Время отправки — когда был отправлен запрос
- Статус ответа — HTTP-код ответа вашего сервера
- Тело запроса — полезная нагрузка, отправленная на ваш эндпоинт
- Тело ответа — ответ вашего сервера
Отладка
История запросов помогает отлаживать интеграцию. Если ваш сервер возвращает ошибку (4xx, 5xx), вы увидите это в истории и сможете исправить проблему.
Рекомендации¶
- Отвечайте на вебхук кодом 200 как можно быстрее. Обработку данных выполняйте асинхронно
- Реализуйте идемпотентность — один и тот же запрос может быть доставлен повторно
- Храните секретный ключ в безопасном месте (переменные окружения, хранилище секретов)
- Логируйте входящие запросы для отладки