6.2 KiB
6.2 KiB
技术方案-企微审批工单同步
文档编号: 02-技术方案-企微审批工单同步 版本: v1.1 创建日期: 2026-07-04 状态: 待评审
1. 需求概述
1.1 背景
将企微审批工单同步到坐席待办事项,实现IT服务台与企微审批系统的集成。
1.2 需求描述
| 需求项 | 说明 |
|---|---|
| 需求来源 | PRD v0.7.2 Backlog #74 |
| 需求类型 | P1(待办事项集成) |
| 目标 | 将企微审批工单同步到坐席待办事项 |
2. 技术方案
2.1 整体架构
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 企微审批系统 │ ───▶ │ IT服务台后端 │ ───▶ │ 坐席待办事项 │
│ (外部API) │ │ (同步服务) │ │ (todo_items) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
审批工单数据 定时轮询/回调 待办面板展示
(get_approval_list) 转换+存储
2.2 数据同步方式
| 方式 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 定时轮询 | 每5分钟调用企微API拉取审批列表 | 实现简单,稳定可靠 | 有延迟(最大5分钟) |
| 企微回调 | 审批通过时企微主动推送 | 实时性高 | 需要企微开通回调权限 |
| 混合模式 | 回调为主 + 定时兜底 | 实时+兜底 | 实现复杂 |
推荐方案:定时轮询(简单可靠) + 回调模式(实时性)
2.3 企微API接口
使用企微 OA 审批接口:
| 接口 | 说明 |
|---|---|
GET /cgi-bin/oa/approvallist |
获取审批列表 |
GET /cgi-bin/oa/approvalinfo |
获取审批详情 |
2.4 数据映射
| 企微审批字段 | todo_item 字段 | 说明 |
|---|---|---|
sp_no |
id |
审批单号 |
sp_name |
title |
审批名称 |
apply_name |
description.applicant |
申请人 |
apply_time |
created_at |
申请时间 |
status |
status |
审批状态 |
sp_status |
priority |
审批类型 |
2.5 待办事项字段扩展
class TodoItem(Base):
# 现有字段...
type: Mapped[str] = "approval" # 固定为 approval
# 新增字段(审批专用)
approval_id: Mapped[str] = mapped_column(String(64)) # 企微审批单ID
approval_type: Mapped[str] = mapped_column(String(64)) # 审批模板名称
applicant: Mapped[str] = mapped_column(String(100)) # 申请人
applicant_dept: Mapped[str] = mapped_column(String(100)) # 申请人部门
apply_time: Mapped[datetime] # 申请时间
approval_url: Mapped[str] = mapped_column(String(512)) # 审批详情链接
3. 审批模板(IT相关)
根据需求,明确需要同步的审批模板:
| 序号 | 审批模板名称 | 说明 |
|---|---|---|
| 1 | IT资产升级申请 | 硬件升级审批 |
| 2 | IT资产报废申请 | 资产报废审批 |
| 3 | 商业软件服务申请 | 软件采购审批 |
| 4 | 企微外联权限申请 | 外网权限审批 |
| 5 | 离职人员企微微盘&文档空间异常移交 | 离职资产移交 |
| 6 | 会议室故障报修 | 设备报修审批 |
4. 企微API权限确认
4.1 如何确认是否已开通权限
方法一:企微管理后台查看
- 登录企微管理后台:https://work.weixin.qq.com/
- 进入「应用管理」→「自建应用」→ 选择IT服务台应用
- 查看「API权限」中是否包含:
- 通讯录同步
- 审批相关接口
方法二:调用接口测试
使用已有 access_token 调用以下接口测试:
curl "https://qyapi.weixin.qq.com/cgi-bin/oa/approvallist?access_token=xxx&start_time=0&end_time=9999999999"
如果返回 {"errcode":0, ...} 表示已开通权限。
方法三:联系企微管理员
确认是否在「审批」应用中开通了API调用权限。
4.2 回调模式说明
| 对比项 | 定时轮询 | 企微回调 |
|---|---|---|
| 实时性 | 5分钟延迟 | 秒级实时 |
| 实现复杂度 | 简单 | 稍复杂 |
| 可靠性 | 稳定 | 依赖回调通道 |
| 资源消耗 | 每次全量/增量拉取 | 按需推送 |
回调模式优势:
- 实时性高 - 审批提交/通过后立即同步
- 节省资源 - 只需处理变更,无需轮询
- 体验更好 - 坐席几乎实时看到新待办
回调模式限制:
- 需要企微开通审批回调权限
- 回调地址需公网可访问(可通过nginx反向代理)
- 需要处理回调签名验证
5. 实施计划
5.1 任务拆分
| 任务 | 说明 | 优先级 |
|---|---|---|
| T1 | 扩展 todo_item 模型,新增审批专用字段 | P0 |
| T2 | 创建企微审批同步服务 ApprovalSyncService |
P0 |
| T3 | 实现定时轮询逻辑(每5分钟) | P0 |
| T4 | 坐席端待办面板接入审批数据 | P1 |
| T5 | 审批状态变更同步 | P1 |
| T6 | 企微审批回调接入(可选) | P2 |
5.2 数据库变更
ALTER TABLE todo_items
ADD COLUMN approval_id VARCHAR(64),
ADD COLUMN approval_type VARCHAR(64),
ADD COLUMN applicant VARCHAR(100),
ADD COLUMN applicant_dept VARCHAR(100),
ADD COLUMN apply_time TIMESTAMP,
ADD COLUMN approval_url VARCHAR(512);
6. 待确认事项
| 事项 | 状态 | 备注 |
|---|---|---|
| 企微API权限 | 待确认 | 需按4.1方法确认 |
| 审批模板 | ✅ 已明确 | 6个IT相关模板 |
| 同步频率 | ✅ 已确认 | 5分钟可接受 |
| 回调模式 | ✅ 确认开通 | 实时性优先 |
7. 相关文档
| 文档 | 说明 |
|---|---|
| PRD v0.7.2 Backlog | 需求来源 |
| todo_item 模型 | 现有模型定义 |
| 企微API文档 | 审批接口文档 |
文档状态: 待评审