BuildWithPranav/day26_war-room-crisis-manager

GitHub: BuildWithPranav/day26_war-room-crisis-manager

一个自动化危机响应智能体,能够从日志、NPS 评分和邮件中检测宕机与客户流失等事件,并自动在 Slack 中创建作战室、分派带截止时间的角色化行动任务。

Stars: 1 | Forks: 0

# 🚨 作战室危机管理器 ## 📸 概述 当危机袭来——严重的宕机、来自最大客户的愤怒且有流失风险的邮件、惨不忍睹的 NPS 分数——每一分钟的混乱都在透支信任。作战室危机管理器(War Room Crisis Manager)会检测触发事件、评估严重程度和根本原因、快速创建专属的 Slack 频道、召集合适的人员,并为每个人分配带有截止日期的具体行动。拒绝手忙脚乱。拒绝“这事儿归谁管?”的扯皮。 ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Trigger Sources: Log Webhook · NPS/CSAT Webhook · Email │ │ POST /events/log · /events/nps · /events/email │ └────────────────────────┬────────────────────────────────────┘ │ ┌────────────────────────▼────────────────────────────────────┐ │ CrisisOrchestrator │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 1. CrisisDetector │ │ │ │ from_log_event() → OUTAGE, severity CRITICAL │ │ │ │ from_nps_event() → CHURN_RISK, severity by score │ │ │ │ from_email_event() → keyword-matched severity │ │ │ │ assess() → CrisisAssessment: type, confidence, │ │ │ │ root_cause, urgency_reason, recommended_actions │ │ │ └──────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────▼───────────────────────────────┐ │ │ │ 2. PlaybookEngine │ │ │ │ Generates 3 role-specific ActionAssignments: │ │ │ │ • Account Manager — retention response (10 min) │ │ │ │ • Lead Engineer — technical containment (15 min) │ │ │ │ • CEO — executive reassurance (20 min) │ │ │ │ Action body is crisis-type-specific (outage vs │ │ │ │ churn_risk vs PR get different scripts) │ │ │ └──────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────▼───────────────────────────────┐ │ │ │ 3. SlackWarRoomService │ │ │ │ Creates dedicated #warroom-{client}-{date} channel │ │ │ │ Invites: Account Manager, Lead Engineer, CEO │ │ │ │ Pins a summary message with full assessment + │ │ │ │ assignments + deadlines │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ │ ┌──────────────────────▼───────────────────────────────┐ │ │ │ 4. WarRoomRepository — persists full crisis record │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ## 🎯 3 种触发源 | 来源 | 检测内容 | 默认严重程度 | |--------|---------|------------------| | **Log Event** | 生产环境宕机、服务降级 | CRITICAL | | **NPS/CSAT Event** | 严重的客户不满 | 得分 > 2 时为 HIGH,否则为 CRITICAL | | **Email Event** | 通过关键词匹配(cancel、terminate、switch、refund)检测流失信号 | 匹配成功为 CRITICAL,否则为 HIGH | ## 💬 作战室输出示例 ``` 🚨 #warroom-acmecorp-20260625 created Crisis Type: CHURN_RISK | Severity: CRITICAL | Confidence: 88% Root Cause: Severe dissatisfaction likely tied to unresolved product, service, or trust breakdown. Urgency: High ACV account signaled churn risk and requires immediate executive attention. 📋 Action Assignments: 👤 Sarah Chen (Account Manager) — Due in 10 min Send high-empathy retention response "Acknowledge the specific failure. Do not over-explain..." 👤 Raj Patel (Lead Engineer) — Due in 15 min Review last 30 days of support tickets and delivery misses "1) Pull ticket history. 2) Identify pattern..." 👤 CEO — Due in 20 min Deliver executive reassurance and unblock escalation "Personal call to the champion. Offer concrete remediation..." Participants added: @sarah.am @raj.engineer @ceo ``` ## 📁 文件夹结构 ``` war-room-crisis-manager/ ├── app/ │ ├── orchestrator.py # CrisisOrchestrator — main coordination │ ├── services/ │ │ ├── detector.py # CrisisDetector — trigger classification + assessment │ │ ├── playbooks.py # PlaybookEngine — role-specific action generation │ │ └── slack_service.py # SlackWarRoomService — channel creation + invites │ ├── repositories.py # Client + WarRoom persistence │ ├── models.py # Pydantic models (TriggerEvent, CrisisAssessment, etc.) │ ├── api.py # FastAPI routes │ ├── config.py # Settings │ ├── logging.py # structlog setup │ └── main.py # FastAPI app ├── data/ │ └── clients.json # Client roster (account manager, engineer, Slack IDs) ├── tests/ │ ├── test_detector.py │ └── test_orchestrator.py ├── .env.example ├── docker-compose.yml └── Dockerfile ``` ## ⚡ 快速开始 ### 1. 克隆与配置 ``` git clone cd war-room-crisis-manager cp .env.example .env # 添加 SLACK_BOT_TOKEN、SLACK_CEO_USER_ID 等。 ``` ### 2. 配置客户 编辑 `data/clients.json` 来设置您的客户名单——包括客户经理、首席工程师和 Slack user ID。 ### 3. 使用 Docker 运行 ``` docker-compose up --build ``` ### 4. 手动触发危机 ``` curl -X POST http://localhost:8000/events/nps \ -H "Content-Type: application/json" \ -d '{ "client_id": "acme-corp", "score": 1, "comment": "This is unacceptable, we are evaluating alternatives." }' ``` ## 📡 API 参考 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `POST` | `/events/log` | 通过生产环境日志/监控 webhook 触发 | | `POST` | `/events/nps` | 通过 NPS/CSAT 得分下降触发 | | `POST` | `/events/email` | 通过入站邮件关键词匹配触发 | | `GET` | `/war-rooms` | 列出所有活动/历史作战室 | | `GET` | `/war-rooms/{id}` | 获取特定的危机记录 | | `GET` | `/health` | 健康检查 | ## ⚙️ 配置 | 变量 | 描述 | |----------|-------------| | `SLACK_BOT_TOKEN` | 具有创建频道权限的 Slack bot | | `SLACK_CEO_USER_ID` | 默认的 CEO Slack user ID | | `SLACK_ACCOUNT_MANAGER_USER_ID` | 默认的客户经理 (AM) 回退人员 | | `SLACK_LEAD_ENGINEER_USER_ID` | 默认的工程师回退人员 | | `CHURN_KEYWORD_LIST` | 用于扫描邮件的、以逗号分隔的流失风险关键词 | ## 🚀 扩展路径 | 阶段 | 升级方向 | |-------|---------| | **当前** | JSON 客户名单 + 手动触发 | | **代理机构** | PostgreSQL 客户数据库,集成 PagerDuty/Opsgenie | | **SaaS** | 多租户的按客户定制作战室模板,自动生成事后总结报告 (post-mortem) | | **企业级** | 状态页面自动更新、客户沟通自动化、SLA 违规追踪 | ## 📦 构建技术栈 - **FastAPI** — REST API + webhook 触发器 - **确定性危机检测器** — 类型 + 严重性分类(无 LLM 延迟) - **剧本引擎 (Playbook Engine)** — 基于危机类型的特定角色分配 - **Slack API** — 自动化作战室频道创建 - **Pydantic v2** — 严格类型化模型 - **structlog** — 结构化日志记录 - **pytest** — 检测器 + 协调器测试覆盖率 - **Docker** — 可复现的部署 *第 26/27 天 — 由 Pranav 构建 | IIT Kharagpur · AI 自动化机构*
标签:Slack机器人, 人工智能, 危机响应, 安全规则引擎, 用户模式Hook绕过, 请求拦截, 运维监控, 逆向工具