Вебхуки

Уведомления о событиях транскрипций, проверка подписи и ретраи

Вебхуки — это HTTPS-уведомления, которые наш сервис отправляет на ваш сервер, когда с асинхронной транскрипцией что-то происходит. Это удобнее опроса статуса: не нужно дёргать API, сервер сам сообщит о готовности.

Работают только для асинхронных транскрипций (async).

Настройка

Конфигурация вебхуков (URL, события, секрет) выполняется в вашем кабинете системой администрирования. Секрет (whsec_...) выдаётся один раз при создании вебхука — сохраните его: он нужен для проверки подписи.

События

СобытиеКогда приходитДополнительные поля в теле
transcription.createdЗадача создана—
transcription.readyМедиа готово к распознаванию—
transcription.processingОдин раз, в начале распознаванияprogress_percent: 0
transcription.completedРаспознавание завершеноresult + usage
transcription.failedЗадача упалаerror

transcription.completed и transcription.failed — обязательные события, их невозможно отключить при подписке.

Тело уведомления

Базовый конверт одинаков для всех событий:

{
  "event": "transcription.completed",
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "task_type": "transcription",
  "status": "completed",
  "unix_timestamp": 1724300000,
  "result": {
    "text": "Добрый день, чем могу помочь?",
    "duration": 12.4
  },
  "usage": { "type": "duration", "seconds": 12 }
}

Для transcription.failed вместо result/usage приходит error:

{
  "event": "transcription.failed",
  "task_id": "550e8400-e29b-41d4-a716-446655440000",
  "task_type": "transcription",
  "status": "failed",
  "unix_timestamp": 1724300000,
  "error": {
    "type": "insufficient_quota",
    "message": "Insufficient balance to process the transcription",
    "param": null,
    "code": "insufficient_balance"
  }
}

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

Каждый запрос содержит заголовок:

X-Webhook-Signature: hex(HMAC-SHA256(secret, rawBody))

Это HMAC‑SHA256 от сырого тела запроса (JSON байт-в-байт), подписанный вашим секретом whsec_....

Обязательно проверяйте подпись перед обработкой — так вы отсеете поддельные уведомления. Пример на Python:

import hmac, hashlib

def verify_signature(secret: str, raw_body: bytes, signature: str) -> bool:
    expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

Аналогично и на любом другом языке — везде есть HMAC‑SHA256.

Как подтвердить получение

Достаточно вернуть любой HTTP-статус меньше 400 в течение 120 секунд. Например, 200 OK с пустым телом. Если вы вернёте ошибку или не ответите — мы повторим доставку.

Ретраи

ПараметрЗначение
Максимум попыток5
Пауза между попыткаминомер попытки × 1 минута (1, 2, 3, 4 мин...)
Таймаут ожидания ответа120 секунд

unix_timestamp в теле не меняется при повторных доставках — его удобно использовать как защиту от дубликатов/устаревших событий.

На этой странице