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

Approval Workflow

Human-in-the-loop для высокорисковых операций: Slack, Telegram, webhook, timeout и эскалация

Обзор

Approval Workflow обеспечивает human-in-the-loop контроль для высокорисковых операций, выполняемых через агентов FlowLink. Когда Shield определяет высокий risk score, команда ставится в очередь ожидания. Approver получает уведомление через один из каналов (Dashboard, Telegram, Slack, Webhook) и может одобрить или отклонить выполнение. Поддерживается multi-approval, timeout с автоматическим отклонением, эскалация и auto-approve для CI/CD pipeline.

Каналы

Dashboard, Telegram, Slack, Webhook, SSE

Все тарифы

Multi-Approval

Несколько approver на операцию

Team+

Timeout

Авто-reject после таймаута

Все тарифы

Auto-Approve

CI/CD friendly, pattern-based

Team+

Как работает

Каждая команда, выполняемая через FlowLink, проходит через Shield — 7-уровневый security scan, который вычисляет risk score (0-100). Если policy определяет action=approval_required для данной команды, выполнение ставится на паузу и создаётся approval request. Request отправляется через все настроенные каналы. Approver просматривает детали (команда, risk score, shield result, threat context) и принимает решение.

# Approval flow

1. Agent → MCP request

flowlink_exec(agent_id, command)

2. Shield → 7-level scan → Risk Score

risk_score: 75, threats: ["destructive_command"]

3. Policy → match → approval_required

{ action: "approval_required", timeout: 30m }

4. Queue → notification

Telegram / Slack / Webhook / Dashboard / SSE

5. Approver → review → decision

Approve → Execute | Reject → Log as blocked

Каналы уведомлений

🖥️Dashboard

Встроенная очередь одобрений в UI с фильтрами по статусу, агенту и severity

Setup: Встроен

✈️Telegram

Кнопки Approve/Reject прямо в чате. Callback для мгновенного действия.

Setup: Bot token + chat_id

💬Slack

Interactive message с кнопками в Slack workspace. Block Kit формат.

Setup: Webhook URL

🔗Webhook

HTTP POST для автоматической обработки. Полезно для custom integrations.

Setup: URL + secret

📡SSE

Real-time stream для custom dashboard интеграции. Server-Sent Events.

Setup: SSE endpoint

Настройка Slack

yaml
1# Настройка Slack notification channel
2notifications:
3 slack:
4 webhook_url: "https://hooks.slack.com/services/T00000000/B00000000/XXX"
5 channel: "#security-approvals"
6 username: "FlowLink Approval"
7 icon_emoji: ":shield:"
8 mention_on_critical: true # Упомянуть @channel для critical
9 approval_buttons: true # Interactive кнопки

Настройка Telegram

yaml
1# Настройка Telegram notification channel
2notifications:
3 telegram:
4 bot_token: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
5 chat_id: "-1001234567890"
6 approval_buttons: true # Inline кнопки Approve/Reject
7 parse_mode: "Markdown"
8 include_command_preview: true # Показывать первые 200 символов команды

Настройка через политики

Approval required настраивается через политику с action=approval_required. Можно указать timeout, escalation contacts и минимальный risk score для триггера.

bash
1curl -X POST "https://api.flowlink.io/v1/policies" \
2 -H "Authorization: Bearer $TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "rm-approval",
6 "action": "approval_required",
7 "pattern": "rm -rf*",
8 "description": "rm -rf commands require human approval",
9 "timeout_minutes": 30,
10 "escalation": ["admin@flowlink.io", "@security-team"],
11 "min_risk_score": 50,
12 "channels": ["telegram", "dashboard"]
13 }'
json
1{
2 "id": "pol_rm_approval",
3 "name": "rm-approval",
4 "action": "approval_required",
5 "pattern": "rm -rf*",
6 "timeout_minutes": 30,
7 "escalation": ["admin@flowlink.io", "@security-team"],
8 "min_risk_score": 50,
9 "channels": ["telegram", "dashboard"],
10 "created_at": "2026-01-15T14:00:00Z"
11}

Timeout и эскалация

Если approval request не обработан в течение timeout (default: 30 минут), он автоматически отклоняется и отправляется эскалация notification на указанные контакты. Escalation можно настроить на несколько уровней.

ПараметрDefaultОписание
timeout_minutes30Таймаут ожидания approval
auto_rejecttrueАвто-reject после timeout
escalation_channelstelegram + emailКаналы для эскалации
escalation_level_115 минПервое напоминание
escalation_level_225 минВторое напоминание (urgent)

API Reference

Список approval requests

bash
1curl -s "https://api.flowlink.io/v1/approvals?status=pending&limit=20" \
2 -H "Authorization: Bearer $TOKEN" | jq
json
1{
2 "approvals": [
3 {
4 "id": "apr_abc123",
5 "agent_id": "claude-code-prod",
6 "command": "rm -rf /tmp/build-cache",
7 "risk_score": 75,
8 "policy_id": "pol_rm_approval",
9 "status": "pending",
10 "shield_result": {
11 "threats": ["destructive_command"],
12 "layer": "L2",
13 "pattern_matched": "rm -rf*"
14 },
15 "created_at": "2026-01-15T14:30:00Z",
16 "timeout_at": "2026-01-15T15:00:00Z",
17 "channels": ["telegram", "dashboard"]
18 }
19 ],
20 "total": 1,
21 "pending_count": 1
22}

Approve

bash
1curl -X POST "https://api.flowlink.io/v1/approvals/apr_abc123/approve" \
2 -H "Authorization: Bearer $TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{"approver": "admin", "reason": "Verified safe — only /tmp cleanup"}'
json
1{
2 "id": "apr_abc123",
3 "status": "approved",
4 "approver": "admin",
5 "reason": "Verified safe — only /tmp cleanup",
6 "approved_at": "2026-01-15T14:32:00Z",
7 "execution": {
8 "status": "executing",
9 "command": "rm -rf /tmp/build-cache",
10 "exit_code": 0,
11 "completed_at": "2026-01-15T14:32:02Z"
12 }
13}

Reject

bash
1curl -X POST "https://api.flowlink.io/v1/approvals/apr_abc123/reject" \
2 -H "Authorization: Bearer $TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{"approver": "admin", "reason": "Potential data loss risk"}'
json
1{
2 "id": "apr_abc123",
3 "status": "rejected",
4 "approver": "admin",
5 "reason": "Potential data loss risk",
6 "rejected_at": "2026-01-15T14:33:00Z",
7 "audit_event_id": "evt_reject_001"
8}

Детали approval

bash
1curl -s "https://api.flowlink.io/v1/approvals/apr_abc123" \
2 -H "Authorization: Bearer $TOKEN" | jq

Auto-Approve для CI/CD

Для CI/CD агентов можно настроить auto-approve на определённые паттерны, чтобы не блокировать pipeline. Auto-approve работает только для агентом с matching тегами.

yaml
1policies:
2 - name: ci-auto-approve
3 match:
4 agents: ["ci-runner-*"]
5 command: "git:*|npm:*|docker:*|kubectl:*"
6 action: auto_approve
7 description: "CI/CD agents auto-approve for safe commands"
8
9 - name: ci-require-approval
10 match:
11 agents: ["ci-runner-*"]
12 command: "rm:*|drop:*|delete:*"
13 action: approval_required
14 timeout_minutes: 15

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

Telegram кнопки не работают

Убедитесь, что bot_token корректный и bot добавлен в чат как admin. Проверьте, что approval_buttons: true в конфигурации. Callback URL должен быть доступен: https://api.flowlink.io/v1/approvals/callback.

Approval auto-rejected (timeout)

Увеличьте timeout_minutes в политике (max: 1440 / 24 часа). Настройте escalation_level_1 и escalation_level_2 для напоминаний.

Команда не попадает в approval queue

Проверьте, что policy pattern совпадает с командой. Убедитесь, что min_risk_score ниже фактического risk score команды. Проверьте логи shield scan.

Slack webhook не отправляет сообщения

Проверьте webhook_url — должен начинаться с https://hooks.slack.com/. Убедитесь, что webhook не revoked в Slack workspace settings.

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

Используйте несколько каналов

Настройте Dashboard + Telegram для гарантированного получения. Slack как дополнительный канал для командной работы.

Настройте granular patterns

Не используйте approval_required для всех команд. Настройте точные patterns: rm -rf*, drop *, truncate *.

Используйте auto-approve для CI/CD

CI/CD pipeline не должен блокироваться. Настройте auto-approve для безопасных команд и approval только для destructive.

Настройте escalation reminders

Двухуровневая эскалация (15 мин + 25 мин) обеспечивает timely response без спама.

Документируйте approval причины

Обязательное поле reason при approve/reject создаёт audit trail для compliance расследований.

Edit this page