Вебхуки#
Что такое Вебхуки?#
Вебхуки – это механизм, позволяющий вашим приложениям получать обновления в реальном времени о событиях, происходящих во время сессии flow. Вместо постоянного опроса нашего API для получения обновлений, вебхуки отправляют уведомления в ваше приложение при возникновении определенных событий, что позволяет создавать отзывчивые и событийно-ориентированные интеграции.
Преимущества использования Вебхуков#
- Обновления в реальном времени: Мгновенное получение уведомлений при возникновении событий
- Снижение нагрузки на API: Устранение необходимости постоянного опроса
- Надежная доставка: Повторные попытки отправки сообщений при сбое доставки
- Событийно-ориентированная архитектура: Создание отзывчивых приложений, реагирующих на события в момент их возникновения
- Автоматизация рабочих процессов: Запуск автоматизированных процессов на основе конкретных событий
Настройка Вебхуков#
Для настройки вебхуков выполните следующие шаги:
- Перейдите в раздел Список флоу в Личном Кабинете
- Выберите flow, который хотите настроить
- Нажмите на настройки flow
- В разделе вебхуков вы можете:
- Добавить новые URL-адреса вебхуков (до 5 на один flow)
- Обновить существующие конфигурации вебхуков
- Удалить вебхуки
- Протестировать конечные точки вебхуков
Пример реализации Вебхука#
from fastapi import FastAPI, Request, HTTPException
import logging
from typing import Dict, Any
app = FastAPI()
logger = logging.getLogger(__name__)
async def handle_flow_start(payload: Dict[str, Any]):
"""Обработка события начала flow"""
logger.info(f"Flow начат: {payload['session_id']}")
# Добавьте вашу бизнес-логику здесь
async def handle_flow_end(payload: Dict[str, Any]):
"""Обработка события окончания flow"""
logger.info(f"Flow завершен: {payload['session_id']}")
# Добавьте вашу бизнес-логику здесь
async def handle_technology_start(payload: Dict[str, Any]):
"""Обработка события начала технологии"""
logger.info(f"Технология начата: {payload['data']['technology_code']}")
# Добавьте вашу бизнес-логику здесь
async def handle_technology_end(payload: Dict[str, Any]):
"""Обработка события окончания технологии"""
logger.info(f"Технология завершена: {payload['data']['technology_code']}")
# Добавьте вашу бизнес-логику здесь
@app.post("/webhook")
async def webhook_handler(request: Request):
try:
payload = await request.json()
# Извлечение ключевой информации
event_type = payload.get('event')
session_id = payload.get('session_id')
# Обработка различных типов событий
if event_type == 'flow.start':
await handle_flow_start(payload)
elif event_type == 'flow.end':
await handle_flow_end(payload)
elif event_type == 'technology.start':
await handle_technology_start(payload)
elif event_type == 'technology.end':
await handle_technology_end(payload)
return {"status": "success"}
except Exception as e:
logger.error(f"Ошибка обработки вебхука: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
const express = require('express');
const router = express.Router();
router.post('/webhook', express.json(), async (req, res) => {
try {
const payload = req.body;
const eventType = payload.event;
const sessionId = payload.session_id;
console.log(`Получено событие ${eventType} для сессии ${sessionId}`);
switch (eventType) {
case 'flow.start':
await handleFlowStart(payload);
break;
case 'flow.end':
await handleFlowEnd(payload);
break;
case 'technology.start':
await handleTechnologyStart(payload);
break;
case 'technology.end':
await handleTechnologyEnd(payload);
break;
}
res.status(200).send('OK');
} catch (error) {
console.error('Ошибка обработки вебхука:', error);
res.status(500).send('Внутренняя ошибка сервера');
}
});
module.exports = router;
Данные в Вебхуке#
Каждый вебхук содержит следующие поля:
Поле | Тип | Описание |
---|---|---|
id |
string | Уникальный идентификатор события вебхука |
event |
string | Тип события (flow.start , flow.end , technology.start , technology.end ) |
session_id |
string | Идентификатор сессии flow |
created |
number | Время создания события в формате Unix timestamp |
success |
boolean | Статус успешности события |
flow_name |
string | Название flow |
metadata |
object | Дополнительные метаданные (если были переданы при создании сессии) |
data |
object | Данные события (различаются в зависимости от типа события) |