Webhook уведомления
Webhook уведомления
Когда задача завершается, API отправляет POST запрос на указанный webhook_url со следующими данными:
Пример webhook уведомления
{
"job_id": "123e4567-e89b-12d3-a456-426614174000",
"job_state": "done",
"requested_actions": ["transcript", "summary", "quiz", "timecodes"],
"transcript": {
"transcript_id": "transcript-uuid",
"status": "done",
"cues": [
{
"start_time": 0.0,
"end_time": 5.5,
"text": "Привет, добро пожаловать на наш канал",
"speaker": "Спикер 1"
}
],
"full_text": "Привет, добро пожаловать на наш канал. Сегодня мы расскажем..."
},
"summary": {
"summary_id": "summary-uuid",
"status": "done",
"html": "<h1>Краткое изложение</h1><p>В данном видео рассматриваются...</p>"
},
"quiz": {
"quiz_id": "quiz-uuid",
"status": "done",
"data": [
{
"question": "О чем рассказывается в видео?",
"options": ["О программировании", "О кулинарии", "О путешествиях"],
"correct_answer": 0,
"explanation": "В видео рассматриваются основы программирования"
}
]
},
"timecodes": {
"timecodes_id": "timecodes-uuid",
"status": "done",
"timecodes": [
{
"start_time": 0.0,
"end_time": 30.0,
"title": "Введение",
"description": "Приветствие и обзор темы"
}
]
},
"frames": [
{
"time": 10.5,
"frame_url": "https://your-domain.com/frames/frame_001.jpg"
}
],
"webhook_url": "https://your-site.com/webhook"
}Описание полей webhook
Основные поля
job_id- UUID завершенной задачиjob_state- Статус задачи (doneилиfailed)requested_actions- Список запрошенных действий обработкиwebhook_url- URL, на который отправлен webhook
Продукты обработки
Каждый продукт включает:
Статус (
status) -done,failedилиin_progressВнешний ID - UUID продукта во внешней системе
Содержимое - Полные данные продукта (при успешной обработке)
Transcript (расшифровка)
transcript_id- UUID расшифровкиcues- Массив временных меток с текстом и спикерамиfull_text- Полный текст расшифровки
Summary (краткое изложение)
summary_id- UUID краткого изложенияhtml- HTML содержимое краткого изложения
Quiz (квиз)
quiz_id- UUID квизаdata- Массив вопросов с вариантами ответов
Timecodes (временные метки)
timecodes_id- UUID временных метокtimecodes- Массив временных интервалов с описанием
Frames (кадры)
frames- Массив кадров с временными метками и URL изображений
Обработка webhook уведомлений
Требования к endpoint
Ваш webhook endpoint должен:
Принимать POST запросы с Content-Type:
application/jsonВозвращать HTTP 200 для подтверждения получения
Обрабатывать запросы быстро (рекомендуется < 10 секунд)
Быть доступным по HTTP/HTTPS
Пример обработчика (Python/Flask)
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def handle_webhook():
try:
data = request.get_json()
job_id = data.get('job_id')
job_state = data.get('job_state')
print(f"Job {job_id} completed with state: {job_state}")
# Обработка продуктов
if 'transcript' in data and data['transcript']['status'] == 'done':
transcript = data['transcript']
print(f"Transcript ready: {len(transcript['cues'])} segments")
if 'summary' in data and data['summary']['status'] == 'done':
summary = data['summary']
print(f"Summary ready: {summary['summary_id']}")
# Сохранение данных в базу данных
# save_job_results(data)
return jsonify({"status": "success"}), 200
except Exception as e:
print(f"Webhook error: {e}")
return jsonify({"status": "error", "message": str(e)}), 400Отладка webhook
Тестовый endpoint
API предоставляет тестовый endpoint /test_webhook/ для отладки:
curl -X POST "https://your-domain.com/test_webhook/" \
-H "Content-Type: application/json" \
-d '{"test": "data"}'Логирование
Все webhook уведомления логируются на стороне API. При проблемах с доставкой обратитесь в поддержку с указанием job_id.
Безопасность
Проверка источника - Рекомендуется проверять IP-адрес отправителя
Таймауты - Настройте разумные таймауты для обработки
Валидация - Всегда валидируйте входящие данные
Устранение неполадок
Частые проблемы
Webhook не получен
Проверьте доступность URL
Убедитесь, что endpoint принимает POST запросы
Проверьте логи на стороне API
Таймаут webhook
Сократите время обработки в обработчике
Используйте асинхронную обработку для тяжелых операций
Ошибки парсинга JSON
Проверьте корректность обработки JSON в обработчике
Убедитесь в правильной настройке Content-Type
Last updated