Files
wecom_it_smart_desk/docs/09-部署运维/会议室预定-部署指南.md
T
Simon 449c6d4875 feat: 2026-07-12~13 全量更新 - AI对话链路改造+H5 v4/v5+坐席端v5+上下文感知诊断+知识库迭代3
## H5 员工端 v4 (2026-07-13 00:48 已部署)
- 人工按钮三态文案统一为"人工坐席"
- 按钮位置移至发送键和语音按钮上方(垂直堆叠)
- 点按钮直接调 store.shakeAgent(),删除 CallAgentModal 弹窗动画
- 截图快捷键提示改为"截图->粘贴:Alt+Shift+A-Ctrl+V ---> Ctrl+V"
- 移动端隐藏截图提示(CSS 媒体查询)
- AI转人工提示改为"已为您呼叫人工坐席,请稍等!"
- 坐席接入提示改为"坐席正在查看您的信息,请等待处理回复!"
- 删除"摇铃呼叫坐席"入口和文案
- 删除孤儿组件 MessageList.vue + shake 动画 CSS

## H5 员工端 v5 (2026-07-13 02:08 已部署)
- RightPanel v2.1:删除"软件安装"和"资源权限"标签页
- 移除标签栏,智能推荐(DynamicRecommend)直接展示
- 删除 SoftwareDownloads/ApprovalLinks 引用和相关 CSS

## AI 对话链路全栈改造 Phase 1-6 (已部署)
- Phase 1: Dify JSON输出 + 后端blocking解析 + 双WS推送 + 错误降级
- Phase 2: 关键词收窄(~25强意图词) + 两级分类Prompt + 删除前端checkApprovalIntent
- Phase 3: WS扩展(ai_thinking+dynamic_recommend) + ai_structured气泡 + RightPanel v2 + 选项回传
- Phase 4: VisionService接入 + 图片消息融合(5秒窗口) + 降级策略
- Phase 5: 坐席端ai_thinking指示器 + ai_structured/byod_card渲染 + handleNewMessage修复
- Phase 6: diagnosis_stage(6值) + response_time_ms计时 + 慢响应告警(>10s)

## 坐席端 v5 (2026-07-13 01:38 已部署)
- ai_structured/byod_card 只读渲染
- AI思考指示器 UI
- handleNewMessage 透传 msg_type/extra_data 修复
- 布局优化v2.0: QuickReplyBar L1+L2悬浮 + ReplyBox左右分区 + 右栏260/560px切换
- 键盘快捷键v2.3: 纯数字路由 + ESC分层撤销 + Shift+Space用event.code

## 上下文感知智能诊断闭环 (2026-07-12 已部署)
- 三层诊断(API→Script→AI) + 三段排队(VIP→info_locked→not locked)
- 答题插队 + 五场景关闭
- 迁移052(6表+6列) + queue_service + quiz_service + closing_service
- H5前端: QueueWaiting + RightPanel双Tab + InputBar三态 + ResolveConfirmCard
- 坐席前端: pending_close结单流程 + 信息锁定(Dify步骤完成+有效回答率≥70%)

## 知识库迭代3 (2026-07-12 已部署)
- 分诊交互(H5+坐席+Dify独立应用)
- 拓扑预览(ECharts只读)
- 代答排除(4种匹配器: keyword/regex/intent/category)
- 迁移051 + 44文件43测试通过

## 后端变更
- 6个Python文件改造(h5_ai_task.py/h5.py/ai_service.py/closing_service.py等)
- funny_phrase_service.py: shake/connected/keyword 默认文案更新
- session_service.py: 企微消息文案同步
- 新增: queue.py/quiz.py/triage.py/exclusion_rules.py 等API端点
- 新增: diagnostic.py/quiz.py/triage_session.py 等模型
- 新增: closing_service/queue_service/quiz_service/triage_service 等服务

## 文档更新
- CHANGELOG.md: 新增 [未发布] 区全部变更记录
- 项目管理主文档 v2.5: 新增v0.7.3版本 + 已完成看板 + 最近搞定
- 版本记录: 新增v0.7.3条目
- AI对话链路实施计划: Phase 1-6 全部标记已实施
- 新增架构图/时序图/类图(mermaid)

## 部署路径修正
- 服务器项目根路径: /opt/wecom-it-desk/
- 所有前端dist均为ro bind mount,只能在宿主机源路径操作
- 服务器nginx /h5/ 是静态文件服务(非proxy_pass)
- elFinder上传二进制不可靠(MD5不匹配),改用base64分块上传
2026-07-13 02:17:03 +08:00

351 lines
11 KiB
Markdown
Raw 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.
# 会议室预定-小鱼易联终端 部署指南
> **日期**: 2026-07-11
> **版本**: v2.0(新增报修+指南+二维码+移动端适配)
> **代码状态**: 待部署
> **预估部署时间**: 45-60 分钟
---
## 一、部署前置条件
### 1.1 企微配置
- [x] 企微会议室 Secret 已申请
- [x] 企微会议室已在管理后台创建
- [ ] 确认会议室 `meetingroom_id` 列表
### 1.2 服务器环境
- [ ] PostgreSQL 可用(需执行 Alembic 迁移 050 + 051
- [ ] Redis 可用(会议室缓存依赖)
- [ ] Nginx 可用(终端前端静态文件 + API 代理)
- [ ] Docker Compose 可用
### 1.3 终端设备
- [ ] 确认小鱼易联终端型号(NE90/NE60 支持 H5 应用,NE2005 需二维码降级)
- [ ] 终端浏览器支持 WebSocket + ES6
- [ ] 小鱼管理后台可访问(配置 H5 应用入口)
---
## 二、部署步骤
### Step 1: 数据库迁移
```bash
# 进入后端容器执行迁移(050 会议室基础表 + 051 报修+指南表)
docker compose exec backend alembic upgrade head
# 验证新表
docker compose exec backend python -c "
from app.database import engine
from sqlalchemy import inspect
insp = inspect(engine)
tables = insp.get_table_names()
print('terminal_room_bindings' in tables) # 应为 True050
print('meetingroom_guide' in tables) # 应为 True051
print('meetingroom_repair' in tables) # 应为 True051
"
```
### Step 2: 环境变量配置
`.env` 中添加:
```bash
# 终端页面基础URL(用于NE2005二维码生成)
TERMINAL_BASE_URL=https://itsupport.servyou.com.cn/itterminal/
```
`docker-compose.yml` 的 backend environment 中已添加:
```yaml
- TERMINAL_BASE_URL=${TERMINAL_BASE_URL:-https://itsupport.servyou.com.cn/itterminal/}
```
重启后端:
```bash
docker compose up -d backend
```
### Step 3: 后端验证
```bash
# 验证会议室 API(已存在)
curl -sk https://localhost/itportal/meetingroom/list
# 验证报修 API(新增)
curl -sk -X POST https://localhost/itportal/meetingroom/repair \
-H "Content-Type: application/json" \
-d '{"terminal_sn":"TEST-SN","meetingroom_id":1,"meetingroom_name":"测试","device_type":"projector","fault_description":"测试报修"}'
# 验证指南 API(新增)
curl -sk https://localhost/itportal/meetingroom/guides
# 验证二维码 API(新增)
curl -sk https://localhost/itportal/meetingroom/terminal/TEST-SN/qrcode -o /tmp/qr.png
file /tmp/qr.png # 应为 PNG image
```
### Step 4: 终端前端构建与部署
```bash
# 1. 本地构建
cd frontend-terminal
npm install # 安装新增的 qrcode 依赖
npm run build
# 2. 打包
tar -czf terminal-dist.tar.gz dist/
# 3. 上传到服务器(通过堡垒机)
python C:\Users\simon\.workbuddy\skills\jumpserver-ops\scripts\jms_ops.py \
pack-upload ./terminal-dist.tar.gz /opt/wecom-it-desk/frontend-terminal/
# 4. 服务器解压
cd /opt/wecom-it-desk/frontend-terminal/
rm -rf dist # 删除旧 distbind mount 铁律:rm后重建必须重启容器)
tar -xzf /tmp/terminal-dist.tar.gz
```
### Step 5: Nginx 配置更新
`nginx/nginx.conf` 已更新,新增以下 location(两个 server 块均已添加):
```nginx
# 小鱼终端大屏 — /itterminal/
location /itterminal/ {
alias /usr/share/nginx/html/itterminal/;
index index.html;
try_files $uri /itterminal/index.html;
}
# 会议室 API — /itportal/meetingroom/
# 必须在 /itportal/ 静态文件之前匹配(nginx 最长前缀优先)
location /itportal/meetingroom/ {
proxy_pass http://backend_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
```
`docker-compose.yml` nginx volumes 已添加:
```yaml
- ./frontend-terminal/dist:/usr/share/nginx/html/itterminal:ro
```
重启 Nginx
```bash
docker compose restart nginx
```
### Step 6: 终端前端验证
```bash
# 验证终端页面可访问
curl -sk https://localhost/itterminal/ | head -5
# 验证 API 代理(通过 nginx 访问后端)
curl -sk https://localhost/itportal/meetingroom/guides
# 验证静态资源
curl -sk -o /dev/null -w "%{http_code}" https://localhost/itterminal/assets/index-*.js
```
---
## 三、小鱼管理后台 H5 应用配置
### 3.1 支持型号确认
| 型号 | H5 应用支持 | 配置方式 |
|------|------------|---------|
| NE90 | ✅ 支持 | 小鱼管理后台配置 H5 应用入口 |
| NE60 | ✅ 支持 | 同上 |
| NE20 | ✅ 支持 | 同上 |
| AE2060 | ✅ 支持 | 同上 |
| ME55S | ⚠️ 部分固件支持 | 需确认固件版本 |
| NE2005 | ❌ 不支持 | 使用二维码降级方案 |
### 3.2 H5 应用入口配置(NE90/NE60/NE20/AE2060
1. 登录**小鱼易联管理后台**`https://mt.xylink.com`
2. 进入 **应用管理 > 自定义应用**
3. 创建新应用:
- **应用名称**: `IT智能服务台`
- **应用类型**: H5 网页应用
- **访问地址**: `https://itsupport.servyou.com.cn/itterminal/{终端SN}/`
- **展示方式**: 终端主界面快捷入口
4. 推送应用到目标终端
5. 在终端上验证 H5 应用可正常打开
### 3.3 终端 SN 绑定
在管理后台(`/itadmin/`)的终端绑定页面中:
1. 添加终端 SN 与会议室的绑定关系
2. 每个终端 SN 对应一个企微会议室 ID
3. 绑定后终端页面自动加载对应会议室状态
### 3.4 NE2005 二维码降级方案
对于不支持 H5 应用的 NE2005 终端:
1. **生成二维码**
```bash
# 通过 API 生成终端访问二维码
curl -sk https://itsupport.servyou.com.cn/itportal/meetingroom/terminal/{SN}/qrcode -o qr.png
```
或直接在浏览器访问:
`https://itsupport.servyou.com.cn/itportal/meetingroom/terminal/{SN}/qrcode`
2. **打印二维码**:将二维码打印为贴纸(建议尺寸 10×10cm)
3. **张贴二维码**:贴在 NE2005 终端的显眼位置
4. **用户使用流程**
- 用户用企业微信/微信扫描二维码
- 手机浏览器打开终端页面(移动端自适应布局)
- 可查看会议室状态、预定、报修、查看指南
---
## 四、部署后验证
### 4.1 功能验证清单
| # | 验证项 | 验证方法 | 预期结果 |
|---|--------|---------|---------|
| 1 | 会议室列表 | `GET /itportal/meetingroom/list` | 返回会议室列表 |
| 2 | 会议室状态 | `GET /itportal/meetingroom/{id}/status` | 返回当前状态 |
| 3 | 预定会议室 | `POST /itportal/meetingroom/book` | 创建预定成功 |
| 4 | 终端绑定 | `GET /itportal/meetingroom/terminal/{sn}/binding` | 返回绑定信息 |
| 5 | 终端WS | `WS /ws/terminal/{sn}` | 终端状态实时推送 |
| 6 | **设备报修** | `POST /itportal/meetingroom/repair` | 创建工单+通知管理员 |
| 7 | **指南列表** | `GET /itportal/meetingroom/guides` | 返回指南列表(5条种子) |
| 8 | **指南按类型** | `GET /itportal/meetingroom/guides/projector` | 返回投影仪指南 |
| 9 | **终端二维码** | `GET /itportal/meetingroom/terminal/{sn}/qrcode` | 返回PNG图片 |
| 10 | 终端前端 | 浏览器打开 `/itterminal/{sn}/` | 深色主题大屏页面 |
| 11 | **报修页面** | 终端点击"设备报修"按钮 | 显示报修表单 |
| 12 | **指南页面** | 终端点击"操作指南"按钮 | 显示指南列表+二维码 |
| 13 | **移动端适配** | 手机访问 `/itterminal/{sn}/` | 垂直布局自适应 |
| 14 | 扫码登录 | 终端扫码 | 企微扫码登录成功 |
| 15 | 状态同步 | 终端修改状态 → H5 实时更新 | WS 推送正常 |
### 4.2 Redis 缓存验证
```bash
# 会议室 token
redis-cli -a $REDIS_PASSWORD get wecom:meetingroom_access_token
# 会议室列表缓存
redis-cli -a $REDIS_PASSWORD get meetingroom:room_list
# 状态缓存
redis-cli -a $REDIS_PASSWORD get "meetingroom:status:{room_id}"
```
---
## 五、回滚方案
### 5.1 数据库回滚
```bash
# 回退迁移 051(报修+指南表)
docker compose exec backend alembic downgrade -1
# 完全回退(含 050
docker compose exec backend alembic downgrade -2
```
### 5.2 后端回滚
```bash
# 恢复 .py 文件(bind mount 自动生效)
git checkout HEAD~1 -- backend/app/api/meetingroom.py
git checkout HEAD~1 -- backend/app/services/repair_service.py
git checkout HEAD~1 -- backend/app/services/meetingroom_service.py
git checkout HEAD~1 -- backend/app/models/meetingroom_guide.py
git checkout HEAD~1 -- backend/app/models/meetingroom_repair.py
git checkout HEAD~1 -- backend/app/schemas/meetingroom.py
git checkout HEAD~1 -- backend/app/config.py
docker compose restart backend
```
### 5.3 前端回滚
```bash
# 恢复旧 dist
mv /opt/wecom-it-desk/frontend-terminal/dist /opt/wecom-it-desk/frontend-terminal/dist.bak
# 恢复上一版本
docker compose restart nginx
```
### 5.4 Nginx 配置回滚
```bash
# 移除 /itterminal/ 和 /itportal/meetingroom/ location 块
docker compose restart nginx
```
---
## 六、新增功能说明
### 6.1 设备报修流程
```
终端用户点击"设备报修"
→ 选择设备类型(投影仪/视频会议/空调/桌椅/网络/其他)
→ 填写故障描述
→ 提交报修
→ 后端创建:
1. MeetingroomRepair 记录
2. ConversationIT工单会话,状态=排队,紧急度=3)
3. Message(系统消息,含故障描述)
4. 企微消息通知管理员
5. WS广播给在线坐席
→ 终端显示"报修已提交"
→ 3秒后自动返回状态页
```
### 6.2 操作指南双模式
- **终端展示**:指南的 `brief` 字段在终端大屏上直接显示简要操作步骤
- **二维码详情**:指南的 `detail_url` 生成二维码,用户手机扫码查看完整文档
- 管理员可在数据库中添加/修改指南内容
### 6.3 NE2005 降级流程
```
NE2005 终端(不支持H5应用)
→ 管理员生成二维码贴纸(API: /itportal/meetingroom/terminal/{sn}/qrcode
→ 用户手机扫码
→ 手机浏览器打开终端页面(移动端自适应)
→ 功能与终端大屏一致(状态/预定/报修/指南)
```
---
## 七、配置参数速查
| 参数 | 默认值 | 环境变量 |
|------|--------|---------|
| 会议室Token TTL | 6900s | - |
| 会议室列表缓存 | 600s | `MEETINGROOM_CACHE_TTL_ROOMS` |
| 预定缓存 | 30s | `MEETINGROOM_CACHE_TTL_BOOKING` |
| 状态缓存 | 10s | `MEETINGROOM_CACHE_TTL_STATUS` |
| WS重连次数 | 5 | - |
| WS降级轮询间隔 | 10s | - |
| **终端页面URL** | `https://itsupport.servyou.com.cn/itterminal/` | `TERMINAL_BASE_URL` |
| **二维码尺寸** | 300px | API 参数 `size` |
| **二维码缓存** | 1小时 | HTTP `Cache-Control` |
---
## 八、已知限制
1. **企微API时间限制**: 会议室预定查询范围限制 31 天
2. **终端身份**: 管理操作需扫码登录,报修支持匿名提交
3. **WS重连**: 终端断线后自动重连(指数退避),超过 5 次降级为轮询(10s间隔)
4. **NE2005**: 不支持 H5 应用,仅能通过二维码扫码方式使用
5. **指南管理**: 当前通过数据库直接管理,后续可增加管理后台 UI