Skip to content
ВозможностиДокументацияЦеныПартнёрыPlaygroundFAQ

Webhooks

Real-time event delivery во внешние системы через HTTP POST с HMAC-SHA256 подписью и retry с exponential backoff

Обзор

Webhooks доставляют события FlowLink во внешние системы (Slack, Telegram, PagerDuty, SIEM, custom endpoints) в реальном времени через HTTP POST. Каждый webhook включает event type, payload и HMAC-SHA256 подпись для верификации. Поддерживается retry policy с exponential backoff (до 5 попыток), фильтрация по типам событий и мониторинг доставки через delivery log.

Типы событий

17 типов: команды, агенты, сессии, политики, approvals

Все тарифы

HMAC-SHA256

Цифровая подпись каждого запроса

Все тарифы

Retry Policy

Exponential backoff до 5 попыток

Все тарифы

Delivery Log

Полный журнал доставок с статусами

Все тарифы

Архитектура доставки

Каждое событие в FlowLink проходит через Webhook Dispatcher: событие сериализуется в JSON payload, вычисляется HMAC-SHA256 подпись с использованием shared secret, затем payload отправляется на целевой URL через HTTP POST. Ответ ожидается в течение timeout (default: 10s). При неудаче — retry с exponential backoff. Все доставки логируются для диагностики.

# Webhook delivery pipeline

1. Генерация:

Shield / Agent / Session → audit event

# 2. Маршрутизация:

Фильтрация по event_type → подходящие webhooks

# 3. Подпись:

HMAC-SHA256(payload, secret) → X-FlowLink-Signature

# 4. Доставка:

HTTP POST → ожидание 2xx → retry при ошибке

Типы событий

FlowLink поддерживает 17 типов событий, сгруппированных в 4 категории. Каждый webhook можно настроить на получение одного или нескольких типов событий.

КатегорияТип событияОписание
Командыcommand_executedКоманда выполнена успешно
Командыcommand_deniedКоманда заблокирована политикой
Командыcommand_timeoutКоманда превышена по времени
Агентыagent_connectedАгент подключился к серверу
Агентыagent_disconnectedАгент отключился от сервера
Агентыagent_health_changedИзменился health status агента
Агентыagent_createdЗарегистрирован новый агент
Агентыagent_deletedАгент удалён из системы
Сессииsession_startedНачалась новая сессия MCP
Сессииsession_closedСессия MCP завершена
Сессииsession_timeoutСессия MCP истекла по таймауту
Политикиpolicy_createdСоздана новая политика
Политикиpolicy_updatedПолитика обновлена
Политикиpolicy_deletedПолитика удалена
Approvalsapproval_requestedЗапрошено одобрение команды
Approvalsapproval_resolvedОдобрение разрешено/отклонено
Compliancecompliance_report_generatedСгенерирован compliance отчёт

Формат payload

Каждый webhook delivery содержит стандартный набор HTTP headers и JSON body с полным контекстом события. Payload включает event metadata, данные агента и специфичный для типа события контент.

json
1POST /your-webhook-url HTTP/1.1
2Content-Type: application/json
3X-FlowLink-Event: command_denied
4X-FlowLink-Signature: sha256=abc123def456...
5X-FlowLink-Delivery: del_xyz789
6X-FlowLink-Timestamp: 2026-01-15T14:30:00Z
7
8{
9 "event_id": "evt_abc123",
10 "event_type": "command_denied",
11 "timestamp": "2026-01-15T14:30:00Z",
12 "organization_id": "org_xyz",
13 "agent_id": "agent-prod-01",
14 "delivery_id": "del_xyz789",
15 "payload": {
16 "command": "rm -rf /tmp/app",
17 "shield_result": {
18 "risk_score": 95,
19 "threats": ["destructive_command", "path_traversal"],
20 "layer": "L2"
21 },
22 "policy_id": "pol_deny_rm",
23 "session_id": "sess_abc123",
24 "correlation_id": "mcp:1705332000123:a1b2c3d4",
25 "user": "claude-agent"
26 }
27}

Схема payload

ПолеТипОписание
event_idstringУникальный ID события (UUID v4)
event_typestringТип события (см. выше)
timestampstringISO 8601 время события
organization_idstringID организации
agent_idstringID агента (если применимо)
delivery_idstringID доставки (для трекинга)
payloadobjectПолезная нагрузка события

HMAC-SHA256 верификация

Каждый webhook запрос подписан HMAC-SHA256. Подпись передаётся в заголовке X-FlowLink-Signature в формате sha256=<hex>. Для верификации необходимо вычислить HMAC-SHA256 от raw body запроса с использованием shared secret webhook.

Python (FastAPI / Flask)

python
1import hmac, hashlib
2
3def verify_webhook(request):
4 secret = "whk_your_secret"
5 signature = request.headers.get(
6 "X-FlowLink-Signature", ""
7 ).replace("sha256=", "")
8 expected = hmac.new(
9 secret.encode(),
10 request.body,
11 hashlib.sha256
12 ).hexdigest()
13 return hmac.compare_digest(signature, expected)

Node.js (Express)

javascript
1const crypto = require('crypto');
2
3function verifyWebhook(req) {
4 const secret = 'whk_your_secret';
5 const signature = req.headers['x-flowlink-signature']
6 .replace('sha256=', '');
7 const expected = crypto
8 .createHmac('sha256', secret)
9 .update(req.rawBody)
10 .digest('hex');
11 return signature === expected;
12}

Go

go
1func verifyWebhook(body []byte, signature, secret string) bool {
2 mac := hmac.New(sha256.New, []byte(secret))
3 mac.Write(body)
4 expected := hex.EncodeToString(mac.Sum(nil))
5 return hmac.Equal([]byte(signature), []byte(expected))
6}

Retry Policy

При неудачной доставке (non-2xx ответ или timeout) FlowLink автоматически повторяет отправку с exponential backoff. После 5 неудачных попыток webhook автоматически переходит в статус disabled и отправляет уведомление администратору.

ПопыткаЗадержкаМакс. timeoutДействие при неудаче
130s10sRetry #2
22m10sRetry #3
310m10sRetry #4
430m10sRetry #5
51h10sDisable webhook + notify admin
json
1{
2 "retry_policy": {
3 "max_retries": 5,
4 "backoff_multiplier": 6,
5 "initial_delay_seconds": 30,
6 "max_delay_seconds": 3600,
7 "timeout_seconds": 10,
8 "auto_disable": true
9 }
10}

Статус доставки

Каждая доставка логируется с полным статусом. Статусы: pending → sending → succeeded / failed / timed_out. Delivery log хранится 30 дней и доступен через API.

succeeded

2xx ответ получен

failed

Non-2xx или connection error

timed_out

Превышен timeout (10s)

pending

Ожидает отправки

Настройка через конфигурацию

Webhooks можно создавать через REST API или Dashboard. Ниже — пример конфигурации через API.

bash
1curl -X POST "https://api.flowlink.io/v1/webhooks" \
2 -H "Authorization: Bearer $TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "slack-security-alerts",
6 "url": "https://hooks.slack.com/services/T0/B0/xxx",
7 "secret": "whk_your_webhook_secret",
8 "events": ["command_denied", "agent_health_changed", "approval_requested"],
9 "headers": {
10 "X-Custom-Header": "my-value"
11 },
12 "retry_policy": {
13 "max_retries": 5,
14 "backoff_multiplier": 6
15 },
16 "active": true
17 }'
json
1{
2 "id": "web_abc123",
3 "name": "slack-security-alerts",
4 "url": "https://hooks.slack.com/services/T0/B0/xxx",
5 "active": true,
6 "events": ["command_denied", "agent_health_changed", "approval_requested"],
7 "custom_headers": { "X-Custom-Header": "my-value" },
8 "retry_policy": {
9 "max_retries": 5,
10 "backoff_multiplier": 6
11 },
12 "created_at": "2026-01-15T14:00:00Z",
13 "delivery_count": 0,
14 "last_delivery_at": null
15}

API Reference

Полный CRUD для управления webhook endpoints, включая тестирование и просмотр лога доставок.

POST /api/v1/webhooksСоздать webhook
GET /api/v1/webhooksСписок всех webhooks организации
GET /api/v1/webhooks/{id}Получить webhook по ID
PATCH /api/v1/webhooks/{id}Обновить webhook (URL, events, secret)
DELETE /api/v1/webhooks/{id}Удалить webhook
POST /api/v1/webhooks/{id}/testТестовая отправка (ping event)
POST /api/v1/webhooks/{id}/enableВключить webhook
POST /api/v1/webhooks/{id}/disableОтключить webhook
GET /api/v1/webhooks/{id}/deliveriesЛог доставок webhook
GET /api/v1/webhooks/{id}/deliveries/{del_id}Детали конкретной доставки

Delivery Log API

bash
1# Просмотр доставок webhook
2curl -s "https://api.flowlink.io/v1/webhooks/web_abc123/deliveries?limit=5" \
3 -H "Authorization: Bearer $TOKEN" | jq
json
1{
2 "deliveries": [
3 {
4 "id": "del_xyz789",
5 "webhook_id": "web_abc123",
6 "event_id": "evt_abc123",
7 "event_type": "command_denied",
8 "status": "succeeded",
9 "http_status": 200,
10 "response_time_ms": 245,
11 "attempt": 1,
12 "sent_at": "2026-01-15T14:30:00Z",
13 "response_body": "ok"
14 }
15 ],
16 "pagination": {
17 "total": 1247,
18 "limit": 5,
19 "offset": 0,
20 "has_more": true
21 }
22}

Пример: Slack интеграция

Ниже пример настройки webhook для отправки security-алертов в Slack канал.

bash
1# Создаём webhook для Slack
2curl -X POST "https://api.flowlink.io/v1/webhooks" \
3 -H "Authorization: Bearer $TOKEN" \
4 -H "Content-Type: application/json" \
5 -d '{
6 "name": "security-alerts-slack",
7 "url": "https://hooks.slack.com/services/T00/B00/XXXXXXXX",
8 "secret": "whk_slack_secret",
9 "events": ["command_denied", "approval_requested", "agent_health_changed"],
10 "headers": { "Content-Type": "application/json" }
11 }'

Устранение неполадок

Webhook не доставляет события

Проверьте статус через GET /webhooks/{id}. Убедитесь в поле active: true и доступности URL. Проверьте delivery log для конкретных ошибок.

HMAC signature verification failed

Убедитесь, что верифицируете raw body (не парсенный JSON). Header X-FlowLink-Signature содержит sha256=<hex>. Используйте hmac.compare_digest для timing-safe сравнения.

Webhook auto-disabled

После 5 неудачных попыток webhook автоматически отключается. Проверьте target endpoint на доступность, исправьте проблему, затем вызовите POST /webhooks/{id}/enable.

Дублирование событий

Дедуплицируйте по полю event_id или delivery_id. FlowLink гарантирует at-least-once доставку, но не exactly-once.

Timeout при доставке

Default timeout — 10 секунд. Если обработка на стороне получателя занимает больше времени, используйте асинхронную обработку: верните 2xx сразу, обрабатывайте в фоне.

Лучшие практики

Фильтруйте события

Подписывайтесь только на нужные типы событий. Избегайте подписки на все 17 типов, если нужны только 2-3. Это снижает нагрузку на endpoint и упрощает обработку.

Всегда верифицируйте HMAC

Никогда не пропускайте верификацию подписи. Используйте timing-safe сравнение для защиты от timing attacks.

Возвращайте 2xx быстро

Если обработка долгая — верните 200 немедленно, обрабатывайте payload асинхронно. Это предотвращает timeout retries.

Используйте delivery log

Delivery log хранит историю всех доставок. Используйте его для диагностики проблем и мониторинга здоровья webhook.

Ротируйте secrets

Регулярно обновляйте webhook secret через PATCH /webhooks/{id}. Старый secret деактивируется после grace period.

Тестируйте перед продакшеном

Используйте POST /webhooks/{id}/test для тестовой отправки ping event. Проверьте endpoint, логирование и обработку.

Edit this page