cyrillical00/slack-it-bot
GitHub: cyrillical00/slack-it-bot
一个基于 Claude AI 的 Slack 机器人,自动化 IT 运营中的工单、访问控制与事件响应流程。
Stars: 0 | Forks: 0
# Slack IT Ops 机器人
通过 Slack 斜杠命令自动化 IT 运营工作流程 — 分类、访问控制和事件响应 — 由 Claude AI 提供支持。



## 功能
三个斜杠命令,每个命令打开一个模态框,调用 Claude 进行结构化 AI 分析,并执行下游操作 — 全部不阻塞 3 秒的 Slack 响应窗口。
| 命令 | AI 模型 | 执行流程 |
|---|---|---|
| `/itrequest` | Claude Haiku | 分类请求(类别、P1–P4 优先级、SLA、负责人、建议操作)→ 发布到 `#it-requests` → 创建 Jira 工单 → 如果找到知识库匹配则自动解决 |
| `/accessrequest` | Claude Sonnet | 评估风险(低 / 中 / 高)→ 低风险自动批准并通过 DM 通知;中/高风险路由到 `#it-approvals` 并提供交互式“批准/拒绝”按钮 → 请求者在 DM 中收到决策通知 |
| `/incident` | Claude Sonnet | 分析受影响系统和严重程度 → 在 `#incidents` 发布结构化事件卡片(含即时操作和需要通知的团队)→ 创建 Confluence 事件页面 |
## 架构
```
Slack slash command
└── ack() immediately (< 1s) # Slack's 3-second deadline cleared
└── background thread
├── Supabase KB lookup # known fixes
├── Confluence KB search # optional
├── Claude AI analysis
├── Jira ticket creation # optional
├── Confluence incident page # optional, P1/P2 only
└── Slack message / DM
```
`/accessrequest` 的审批状态会持久化保存在 Supabase KV 中,以便在 Vercel 冷启动和重新部署时仍然保留。通过同一 KV 存储强制执行每个用户每天的速率限制。
## 技术栈
| 组件 | 技术 |
|---|---|
| 运行时 | Python 3(Flask + slack-bolt) |
| 部署 | Vercel(无服务器,`@vercel/python`) |
| AI | Anthropic Claude API(Haiku 4.5 + Sonnet 4.5) |
| 持久化 | Supabase(KV 存储 + 知识库表) |
| 工单系统 | Jira Cloud REST API(可选) |
| 知识库 | Supabase 表 + Confluence 搜索(均为可选) |
| 速率限制 | Supabase KV,可通过 `RATE_LIMIT_PER_DAY` 配置 |
## 快速开始
请参阅 **[docs/setup.md](docs/setup.md)** 获取完整说明:
1. 创建并配置 Slack 应用
2. 复制 `.env.example` → `.env` 并填写相应值
3. `pip install -r requirements.txt`
4. 本地使用 Flask + ngrok 运行,或部署到 Vercel
## 环境变量
将 `.env.example` 复制为 `.env`。Jira 和 Confluence 是可选的 — 机器人可以在没有它们的情况下运行。
| 变量 | 是否必需 | 描述 |
|---|---|---|
| `SLACK_BOT_TOKEN` | 是 | 来自“OAuth 与权限”的机器人令牌(`xoxb-...`) |
| `SLACK_SIGNING_SECRET` | 是 | 来自 Slack 应用设置中的“基本信息” |
| `ANTHROPIC_API_KEY` | 是 | 来自 [console.anthropic.com](https://console.anthropic.com) |
| `SUPABASE_URL` | 是 | Supabase 项目 REST URL |
| `SUPABASE_SERVICE_ROLE_KEY` | 是 | Supabase 服务角色密钥(用于 KV + 知识库读取) |
| `IT_REQUESTS_CHANNEL` | 是 | IT 请求频道(例如 `#it-requests`) |
| `IT_APPROVALS_CHANNEL` | 是 | 待处理访问审批频道(例如 `#it-approvals`) |
| `INCIDENTS_CHANNEL` | 是 | 事件声明频道(例如 `#incidents`) |
| `JIRA_URL` | 否 | 例如 `https://yoursite.atlassian.net` |
| `JIRA_EMAIL` | 否 | Jira 账户邮箱 |
| `JIRA_API_TOKEN` | 否 | Jira API 令牌 |
| `JIRA_PROJECT_KEY` | 否 | Jira 项目键(默认:`IT`) |
| `CONFLUENCE_SPACE_KEY` | 否 | 用于知识库搜索和事件页面的 Confluence 空间 |
| `CONFLUENCE_URL` | 否 | Confluence URL — 如果与 Jira 同个 Atlassian 实例,默认为 `JIRA_URL` |
| `CONFLUENCE_EMAIL` | 否 | 如果使用同一实例,默认为 `JIRA_EMAIL` |
| `CONFLUENCE_API_TOKEN` | 否 | 如果使用同一实例,默认为 `JIRA_API_TOKEN` |
| `RATE_LIMIT_PER_DAY` | 否 | 每个用户每天最大 AI 请求次数(默认:`5`) |
## 项目结构
```
slack-it-bot/
├── api/
│ └── index.py # Flask app — Vercel entry point
├── bot/
│ ├── app.py # slack-bolt App + handler registration
│ ├── claude_ops.py # triage_request(), assess_access_risk(), assess_incident()
│ ├── jira_ops.py # create_ticket()
│ ├── confluence_ops.py # search_and_format_for_prompt(), create_incident_page()
│ ├── kb.py # fetch_knowledge_base() from Supabase
│ ├── kv.py # SupabaseKV — Redis-compatible wrapper over Supabase REST
│ ├── blocks.py # All Block Kit message and modal builders
│ ├── handlers/
│ │ ├── it_request.py # /itrequest command + modal submission
│ │ ├── access_request.py # /accessrequest command + approval flow
│ │ └── incident.py # /incident command + modal submission
│ └── middleware/
│ └── rate_limit.py # Per-user daily rate limiting via Supabase KV
├── docs/
│ ├── setup.md # Slack app config + local setup guide
│ ├── commands.md # Slash command reference
│ └── demo.md # Demo mode instructions
├── requirements.txt
├── vercel.json
└── .env.example
```
## 超时处理
Slack 要求在 **3 秒** 内响应。该机器人采用两步模式:
1. 斜杠命令 `ack()` 立即确认并打开模态框(< 1 秒)
2. 模态提交后再次 `ack()` 关闭模态,然后启动后台线程执行 Claude + Jira + Confluence 操作
这使得所有 AI 和 API 调用都不会阻塞关键路径。
| Vercel 计划 | 函数超时 | 说明 |
|---|---|---|
| Hobby | 10s | Claude ~3–5s + Jira ~1s ≈ 6–7s。实际运行可用 |
| Pro | 300s | 无限制 |
## 测试用例
| 输入 | 预期 Claude 输出 |
|---|---|
| “Okta 锁定,董事会演示在 1 小时后” | P1 关键 · 身份与访问团队 · 4 小时 SLA |
| “鼠标滚动不灵敏” | P4 低 · IT 支持一级 · 72 小时 SLA |
| “对 Notion 只读访问以做笔记” | 低风险 → 自动批准 |
| “生产环境部署需要 AWS 管理员权限” | 高风险 · 涉及 SOX → 需要审批 |
| “API 网关返回 502,所有用户受影响” | Sev-1 事件 → 即时操作 + Confluence 页面 |
## 文档
- [设置指南](docs/setup.md) — Slack 应用、Supabase、Jira、Confluence、Vercel 部署
- [命令参考](docs/commands.md) — 模态、字段以及每个命令的响应格式
- [演示模式](docs/demo.md) — 在本地运行,无需 Jira、Confluence 或 Supabase
## 在线演示
一个交互式演示,可以模拟全部三个工作流,使用与生产机器人相同的 Claude 提示词 — 无需 Slack、Jira、Confluence 或 Supabase:
**[it-ops-bot.streamlit.app](https://it-ops-bot.streamlit.app)**
由 [Oleg Strutsovski](https://linkedin.com/in/olegst) 构建 — IT 运营经理
标签:AI 辅助运维, Claude AI, Confluence, Flask, IT 运维, Jira, KV 存储, OSV, Python 3.11, SEO: AI 运维, SEO: IT 自动化, SEO: Slack Bot, slack-bolt, Slack 机器人, Slash 命令, Supabase, Vercel, 即时消息, 后台线程, 审批工作流, 模态框, 票务分诊, 结构化分析, 缓存, 自动化工单, 访问请求, 逆向工具, 非阻塞响应