Перейти к содержанию

Вебхуки#

Что такое Вебхуки?#

Вебхуки – это механизм, позволяющий вашим приложениям получать обновления в реальном времени о событиях, происходящих во время сессии flow. Вместо постоянного опроса нашего API для получения обновлений, вебхуки отправляют уведомления в ваше приложение при возникновении определенных событий, что позволяет создавать отзывчивые и событийно-ориентированные интеграции.

Преимущества использования Вебхуков#

  • Обновления в реальном времени: Мгновенное получение уведомлений при возникновении событий
  • Снижение нагрузки на API: Устранение необходимости постоянного опроса
  • Надежная доставка: Повторные попытки отправки сообщений при сбое доставки
  • Событийно-ориентированная архитектура: Создание отзывчивых приложений, реагирующих на события в момент их возникновения
  • Автоматизация рабочих процессов: Запуск автоматизированных процессов на основе конкретных событий

Настройка Вебхуков#

Для настройки вебхуков выполните следующие шаги:

  1. Перейдите в раздел Список флоу в Личном Кабинете
  2. Выберите flow, который хотите настроить
  3. Нажмите на настройки flow
  4. В разделе вебхуков вы можете:
  5. Добавить новые URL-адреса вебхуков (до 5 на один flow)
  6. Обновить существующие конфигурации вебхуков
  7. Удалить вебхуки
  8. Протестировать конечные точки вебхуков

Пример реализации Вебхука#

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 Данные события (различаются в зависимости от типа события)