cyrillical00/slack-it-bot

GitHub: cyrillical00/slack-it-bot

一个基于 Claude AI 的 Slack 机器人,自动化 IT 运营中的工单、访问控制与事件响应流程。

Stars: 0 | Forks: 0

# Slack IT Ops 机器人 通过 Slack 斜杠命令自动化 IT 运营工作流程 — 分类、访问控制和事件响应 — 由 Claude AI 提供支持。 ![Python](https://img.shields.io/badge/python-3.11+-blue) ![Vercel](https://img.shields.io/badge/deployed-Vercel-black) ![slack-bolt](https://img.shields.io/badge/slack--bolt-1.18+-purple) ## 功能 三个斜杠命令,每个命令打开一个模态框,调用 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, 即时消息, 后台线程, 审批工作流, 模态框, 票务分诊, 结构化分析, 缓存, 自动化工单, 访问请求, 逆向工具, 非阻塞响应