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绕过, 请求拦截, 运维监控, 逆向工具