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
Каналы уведомлений
Встроенная очередь одобрений в UI с фильтрами по статусу, агенту и severity
Setup: Встроен
Кнопки Approve/Reject прямо в чате. Callback для мгновенного действия.
Setup: Bot token + chat_id
Interactive message с кнопками в Slack workspace. Block Kit формат.
Setup: Webhook URL
HTTP POST для автоматической обработки. Полезно для custom integrations.
Setup: URL + secret
Real-time stream для custom dashboard интеграции. Server-Sent Events.
Setup: SSE endpoint
Настройка Slack
1# Настройка Slack notification channel2notifications: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 для critical9 approval_buttons: true # Interactive кнопки
Настройка Telegram
1# Настройка Telegram notification channel2notifications:3 telegram:4 bot_token: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"5 chat_id: "-1001234567890"6 approval_buttons: true # Inline кнопки Approve/Reject7 parse_mode: "Markdown"8 include_command_preview: true # Показывать первые 200 символов команды
Настройка через политики
Approval required настраивается через политику с action=approval_required. Можно указать timeout, escalation contacts и минимальный risk score для триггера.
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 }'
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_minutes | 30 | Таймаут ожидания approval |
| auto_reject | true | Авто-reject после timeout |
| escalation_channels | telegram + email | Каналы для эскалации |
| escalation_level_1 | 15 мин | Первое напоминание |
| escalation_level_2 | 25 мин | Второе напоминание (urgent) |
API Reference
Список approval requests
1curl -s "https://api.flowlink.io/v1/approvals?status=pending&limit=20" \2 -H "Authorization: Bearer $TOKEN" | jq
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": 122}
Approve
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"}'
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
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"}'
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
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 тегами.
1policies:2 - name: ci-auto-approve3 match:4 agents: ["ci-runner-*"]5 command: "git:*|npm:*|docker:*|kubectl:*"6 action: auto_approve7 description: "CI/CD agents auto-approve for safe commands"89 - name: ci-require-approval10 match:11 agents: ["ci-runner-*"]12 command: "rm:*|drop:*|delete:*"13 action: approval_required14 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 расследований.