Files

213 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 企微 IT 智能服务台 (IT Smart Desk)
> **环境状态**: 预生产(独立主机,共享域名)→ 正式环境迁移 K8s
> **维护者**: 税友集团 IT支持组(宋献)
> **最后更新**: 2026-06-03
---
## 📖 阅读指南(按对象)
| 阅读对象 | 推荐文档 | 内容 |
|---------|---------|------|
| **新人/产品经理** | 本文档 + docs/ARCHITECTURE.md 前半部分 | 项目背景、功能清单、如何使用 |
| **开发人员** | docs/ARCHITECTURE.md + backend/app/ 代码 | 架构设计、API 接口、数据模型、开发规范 |
| **运维/部署人员** | 本文档「部署」章节 + scripts/deploy.sh | Docker 编排、Nginx 配置、环境变量 |
| **测试人员** | docs/ARCHITECTURE.md 「任务清单」 | 功能模块划分、待完善项 |
---
## 🎯 项目背景
税友集团内部 IT 支持渠道分散(企微群、电话、走访),缺乏统一 SLA 追踪。本项目构建一个 **AI + 人工坐席协作** 的智能服务台:
- **员工端**H5):企微 OAuth2 免登,AI 自动回复 + 人工兜底,支持「敲桌子」趣味呼叫
- **坐席端**(Web):三栏工作台,会话分配/抢单/协作/转接,实时 WebSocket 推送
- **AI 层**:接入 RAGFLOW/Dify 知识库,自动回复常见 IT 问题
**核心指标**:AI 自助解决率 55%(实际 1-5月已达 70.2%
---
## ✅ 当前实现进度
### 后端(FastAPI + PostgreSQL + Redis
- [x] 企微回调加解密(AES-CBC-256
- [x] 消息路由(VIP 识别、紧急度评分 1-5、标记检测)
- [x] WebSocket 实时推送(心跳、重连、定向广播)
- [x] 会话全生命周期(创建→分配→处理→结单→转接)
- [x] 坐席管理(登录、状态切换、在线列表)
- [x] H5 端 OAuth2 认证、审批链接、软件下载
- [x] 应急模式(系统故障时手动开启)
- [x] Alembic 数据库迁移(初始表结构)
- [ ] **AI 回复集成**(需接入 Dify,目前新会话直接进入队列)
- [ ] 自动化测试(pytest
### 坐席前端(Vue 3 + Element Plus
- [x] 登录页(用户ID + 姓名,无密码)
- [x] 三栏工作台(会话列表 + 对话区 + AI 助手面板)
- [x] 6 分区会话列表(待接单/我的/协作/其他坐席/AI处理/已结单)
- [x] 协作功能(摇人邀请、接受/拒绝)
- [x] WebSocket + 轮询双模式(自动降级)
- [ ] 操作步骤、风险提示、用户信息面板(需确认后端数据)
### 员工前端(Vue 3 + Vant
- [x] OAuth2 静默授权登录
- [x] 聊天界面(员工/坐席/AI/系统 4 种消息气泡)
- [x] 「敲桌子」呼叫坐席(7 种 SVG 动画)
- [x] AI 助手面板、审批流程链接、软件下载
- [ ] AI 回复展示(依赖后端 AI 集成)
### 部署
- [x] Docker Compose 4 容器编排(nginx + backend + postgres + redis
- [x] Nginx 反向代理(与数据平台共享域名,独立主机部署)
- [x] 部署脚本(build.sh + deploy.sh
- [ ] HTTPS 启用(nginx.conf 已预留模板)
- [ ] **预生产环境验证**(独立主机,路径路由到数据平台远程主机)
---
## 🚀 快速启动
### 前置条件
- Docker Desktop / Docker Compose
- 企微企业应用(需配置 Token、EncodingAESKey、CorpID
- 公钥上传至服务器(部署用)
### 本地开发
```bash
# 1. 复制环境变量
cp .env.example .env
# 编辑 .env 填入企微凭据和数据库密码
# 2. 启动数据库(仅 PostgreSQL
docker compose up -d postgres redis
# 3. 后端开发模式
cd backend
python -m venv venv && venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload
# 4. 前端开发模式(另开终端)
cd frontend-agent
npm install && npm run dev
```
### 预生产部署
> **注意**:预生产环境中,智能咨询系统与数据平台在不同主机上。部署前需将 `nginx/nginx.conf` 中 `DATAQUERY_HOST` 替换为数据平台实际 IP。
```bash
# 1. 修改 nginx 反代地址
# 编辑 nginx/nginx.conf,将 DATAQUERY_HOST 改为数据平台主机 IP
# 2. 使用部署脚本
bash scripts/deploy.sh deploy
# 3. 或手动
docker compose up -d --build
```
> 正式环境将迁移到 K8s 集群,届时部署方式另行调整。
---
## 📂 项目结构
```
wecom_it_smart_desk/
├── backend/ # FastAPI 后端
│ ├── app/
│ │ ├── api/ # 8 个路由模块
│ │ ├── models/ # 9 个数据模型
│ │ ├── services/ # 核心服务(消息路由、会话管理、企微API)
│ │ ├── schemas/ # Pydantic 请求/响应 Schema
│ │ └── utils/ # 加解密、Token管理、WebSocket
│ └── alembic/ # 数据库迁移
├── frontend-agent/ # 坐席工作台(Vue 3 + Element Plus
├── frontend-h5/ # 员工端(Vue 3 + Vant
├── nginx/ # Nginx 反向代理配置
├── scripts/ # 构建和部署脚本
├── docs/ # 项目文档(架构/PRD/测试报告等)
└── docker-compose.yml # 容器编排
```
---
## 🔧 核心配置项(.env
| 变量 | 说明 | 示例 |
|------|------|------|
| `WECOM_CORPID` | 企微企业ID | `ww...` |
| `WECOM_AGENT_TOKEN` | 企微应用 Token | `your_token` |
| `WECOM_AGENT_ENCODING_AES_KEY` | 企微消息加解密密钥 | `32位Base64` |
| `DATABASE_URL` | 数据库连接串 | `postgresql+asyncpg://...` |
| `REDIS_URL` | Redis 连接串 | `redis://...` |
| `BACKEND_PORT` | 后端端口(容器内需 8000) | `8000` |
---
## 📊 API 端点概览
| 模块 | 端点前缀 | 核心功能 |
|------|---------|---------|
| 坐席管理 | `/api/v1/agents` | 登录、状态切换、在线列表 |
| 会话管理 | `/api/v1/conversations` | 列表、详情、分配、结单、转接 |
| 消息管理 | `/api/v1/messages` | 消息列表、发送、轮询 |
| 企微回调 | `/api/v1/wecom` | GET 验证、POST 接收消息 |
| H5 员工端 | `/api/v1/h5` | OAuth2、消息、举手、审批 |
| 快速回复 | `/api/v1/quick-replies` | 模板 CRUD |
| 系统 | `/api/v1/system` | 应急模式开关 |
> 详细请求/响应格式见 `docs/ARCHITECTURE.md` 或运行后访问 `/docs`Swagger UI
---
## 🐛 已知问题 / 待完善
1. **AI 回复未集成**:目前新会话直接进入 `queued` 状态,需接入 Dify 工作流
2. **无自动化测试**:后端 pytest、前端 Vitest 均未配置
3. **Alembic 迁移不完整**:仅初始迁移,后续模型变更需手动管理
4. **HTTPS 未启用**nginx.conf 有模板但未配置证书
5. **VIP 缓存未实现**`message_router.py` 中 Redis 缓存被注释
---
## 📝 相关文档
- **docs/ARCHITECTURE.md**:完整架构设计、数据模型、调用流程、任务清单
- **docs/现有系统交接文档内容.txt**:现有 IT 客服机器人系统交接信息(RAGFLOW、Dify 部署环境)
- **scripts/deploy.sh**:部署脚本详细说明(5 种运行模式)
---
## 📞 联系
- **项目负责人**:宋献 — 税友集团 IT支持组
- **企业微信**:通过内部企微联系
- **Issue 反馈**:在项目目录创建任务文档或联系开发组
---
*最后更新:2026-06-03 - 合并文档,反映当前实际完成进度*
---
## 🏛️ 仓库与治理
- **Gitea 仓库(公网 Funnel**: `https://ds923plus.tail58d872.ts.net/simon/wecom_it_smart_desk`
- **Gitea 内网地址(LAN 加速)**: `http://100.85.152.112:8418/simon/wecom_it_smart_desk`
- **贡献指南**: [`CONTRIBUTING.md`](CONTRIBUTING.md) — 分支模型 + Commit 规范 + PR 流程
- **评审报告**: [`docs/评审报告/`](docs/评审报告/) — 历次 workbuddy 推送评审
- **风险跟踪表**: [`docs/风险跟踪表.md`](docs/风险跟踪表.md) — 22 项审计追踪
- **workbuddy 记忆**: [`.workbuddy/memory/`](.workbuddy/memory/) — workbuddy 启动读这里接任务
### 评审与提交约定
- 🔴 **所有 P0 鉴权修复必须走评审**`docs/评审报告/` 留档,含 workbuddy 推送)
- 🟡 **端点变更需 `Depends(get_current_agent)` 或 `_get_current_employee` 鉴权依赖**
- 🟡 **数据库 schema 变化必须 alembic 迁移**(无手动 ALTER
- 🟢 **workbuddy 推送前自检**: 鉴权 + 依赖 + alembic + 配置 4 件套
- 🟢 **任何部署包 / SSL 私钥 / 推送 token 不入仓**(见 `.gitignore`