1
0
forked from erp-dev/erp
Files
erpnew/docs/WECOM_APP_INTEGRATION_GUIDE.md

412 lines
9.4 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.
# 企业微信应用接入说明
本文档面向企业微信自建应用开发组,说明当前 AI Agent 的接入方式、适合的消息入口、菜单和提问引导建议、能力边界,以及消息处理侧需要注意的事项。
## 1. 目标
当前 Agent 不是通用对话机器人,而是一个“受约束的业务查询助手”。
它适合处理以下两类问题:
1. MES / 出货 / 运输车辆等业务数据查询。
2. 指定客户的财务记录查询。
它不适合承担以下职责:
1. 开放式闲聊。
2. 多轮澄清式对话。
3. 写入、审批、修改业务数据。
4. 复杂统计分析和自定义报表。
因此,企业微信侧的入口设计应尽量采用“菜单驱动 + 明确提问”的方式,而不是把它当成一个无限制聊天窗口。
## 2. 当前调用入口
当前服务对外提供的 Agent 入口为:
- `POST /agent`
健康检查:
- `GET /health`
当前请求体:
```json
{
"message": "查询华东未出货出货单",
"merchant_id": 1
}
```
当前响应体:
```json
{
"reply": "目前查询到华东区域没有未出货的出货单结果为0条。"
}
```
说明:
- `message` 为发送给 Agent 的自然语言问题。
- `merchant_id` 目前只对商户隔离型业务 API 生效。
- 财务查询当前不依赖 `merchant_id`
- 返回值是自然语言文本,面向企业微信 markdown 消息渲染。
## 3. 当前能力范围
### 3.1 商户业务查询
当前已接入以下业务能力:
1. 查询 MES 设备列表。
2. 查询指定日期范围内的 MES 生产安排。
3. 查询运输车辆详情。
4. 查询未进入送货单的出货单。
这些能力依赖:
- `merchant_id`
因此企业微信应用侧如果要接这类查询,建议在进入 Agent 前就明确当前商户身份,或由调用方稳定注入 `merchant_id`
### 3.2 财务查询
当前已接入以下财务记录类型:
1. 销售记录
2. 销退记录
3. 收款记录
4. 退款记录
财务查询支持:
- 单选一种记录类型
- 多选多种记录类型
- 宽泛的“财务记录”查询
财务查询还能区分:
1. 真实资金变动
2. 挂账 / 冲减 / 欠款调整
## 4. 当前明确不支持的能力
企业微信应用开发组应优先在入口侧理解这些边界,因为这些能力不应引导给 Agent。
### 4.1 不支持写操作
当前不支持:
1. 写入财务数据
2. 修改财务数据
3. 删除财务数据
4. 审批财务数据
5. 纠正财务数据
6. 写入业务单据
如果用户发起这类请求,推荐在企业微信应用侧直接拦截,或允许 Agent 返回标准拒绝说明。
### 4.2 不支持复杂统计
当前财务接口只支持“查记录”,不支持复杂统计分析。
允许的上限只有:
1. 对返回记录做直接计数。
2. 对返回记录做直接累计。
当前不支持:
1. 按季度汇总
2. 按月汇总
3. 按年汇总
4. 环比
5. 同比
6. 趋势分析
7. 占比分析
8. 分组统计
9. 筛选后再累计
10. 小计、分类汇总、派生统计口径
如果企业微信应用已经能判断是这类诉求,建议不要直接把这类问题送给 Agent。
## 5. 企业微信消息渲染约束
当前 Agent 的回复是按企业微信应用消息中的 markdown 消息来约束的。
已知约束如下:
1. 企业微信 markdown 只支持 markdown 子集。
2. `content` 最长不超过 `2048` 字节UTF-8 编码。
3. 当前 Agent 会尽量把回复压缩在约 `1200` 字节以内。
4. 不应使用表格。
5. 不应使用 fenced code block。
6. 不应使用复杂嵌套列表。
7. 不应依赖复杂 HTML 排版。
当前更适合的展示形式:
1. 一段简洁结论。
2. 2 到 5 条短列表。
3. 必要时附少量关键字段。
因此,企业微信应用侧不应期待 Agent 返回:
1. 表格型结果
2. 长篇报告
3. 大批量明细完整铺开
## 6. 入口设计建议
### 6.1 推荐采用单入口调用,多菜单引导
当前技术上只需要一个 Agent 接口入口:
- `POST /agent`
但在企业微信应用层,建议不要只给一个“自由提问”入口。更合适的是:
1. 菜单项负责限定业务范围。
2. 菜单点击后,用明确提示语引导用户输入必要字段。
3. 应用层把整理后的自然语言问题发送给 `/agent`
换句话说,推荐是“多个菜单入口,共用一个 Agent API”。
### 6.2 推荐菜单分组
建议至少拆成两大类:
1. 生产/物流类查询
2. 财务类查询
财务类再细分为:
1. 查询客户销售记录
2. 查询客户销退记录
3. 查询客户收款记录
4. 查询客户退款记录
5. 查询客户全部财务记录
生产/物流类可拆为:
1. 查询 MES 设备
2. 查询生产安排
3. 查询车辆信息
4. 查询未出货出货单
## 7. 提问引导建议
### 7.1 总原则
企业微信侧不应引导用户输入过于自由的问题而应尽量引导输入“Agent 已支持的字段”。
推荐原则:
1. 一次只问一类问题。
2. 提示词里直接说明需要提供什么。
3. 对关键参数给示例。
4. 不要让用户猜系统支持哪些写法。
### 7.2 财务类推荐引导文案
#### 查询客户销售记录
推荐引导:
```text
请输入客户名称,例如:查询杭州某客户的销售记录
```
#### 查询客户销退记录
推荐引导:
```text
请输入客户名称,例如:查询杭州某客户的销退记录
```
#### 查询客户收款记录
推荐引导:
```text
请输入客户名称,例如:查询杭州某客户的收款记录
```
#### 查询客户退款记录
推荐引导:
```text
请输入客户名称,例如:查询杭州某客户的退款记录
```
#### 查询客户全部财务记录
推荐引导:
```text
请输入客户名称,例如:查询杭州某客户的财务记录
```
#### 查询挂账或冲减
推荐引导:
```text
请输入客户名称,并明确说明挂账或冲减,例如:查询杭州某客户的收款挂账调整记录
```
### 7.3 生产/物流类推荐引导文案
#### 查询 MES 设备
推荐引导:
```text
请输入查询需求,例如:查询当前商户的 MES 设备
```
#### 查询生产安排
推荐引导:
```text
请输入日期范围,例如:查询 2026-05-01 到 2026-05-07 的生产安排
```
#### 查询车辆信息
推荐引导:
```text
请输入车牌号,例如:查询车牌 粤A12345 的车辆信息
```
#### 查询未出货出货单
推荐引导:
```text
请输入地区,例如:查询华东未出货出货单
```
## 8. 建议的应用层预处理
企业微信应用侧建议做以下最小预处理:
1. 注入 `merchant_id`,如果当前入口属于商户业务场景。
2. 保留用户原始问题,不要做过度改写。
3. 可以在菜单点击后,补一个简短上下文前缀,例如:
- `当前是财务查询场景:查询杭州某客户的销退记录`
- `当前是生产安排查询场景:查询 2026-05-01 到 2026-05-07 的生产安排`
4. 不要在应用层生成复杂长提示词,避免和 Agent 提示词互相冲突。
## 9. 建议的应用层拦截规则
以下问题建议在企业微信应用层直接拦截,或者至少标记为“超出当前 Agent 支持范围”:
1. `帮我新增一条财务记录`
2. `把这个客户的退款改掉`
3. `审批这笔收款`
4. `按季度汇总这个客户的销售和回款`
5. `统计今年每个月的销退趋势`
6. `按地区筛选后累计某客户收款`
推荐返回说明:
```text
当前入口只支持记录查询,不支持写入、修改、审批或复杂统计分析。
```
## 10. 建议的调用方式
### 10.1 财务查询示例
```json
{
"message": "查询杭州某客户的销退记录"
}
```
### 10.2 商户业务查询示例
```json
{
"message": "查询华东未出货出货单",
"merchant_id": 1
}
```
### 10.3 财务能力说明类示例
```json
{
"message": "你可以查询哪些财务数据?是否可以多选?"
}
```
期望回答方向:
1. 支持销售、销退、收款、退款。
2. 可以单选,也可以多选。
3. 如果问“财务记录”,可以查全部四类。
## 11. 推荐的消息处理流程
推荐流程如下:
1. 用户点击菜单。
2. 企业微信应用展示该菜单对应的引导语。
3. 用户输入问题。
4. 应用层判断是否需要补 `merchant_id`
5. 应用层判断是否属于明显超范围请求。
6. 如果在支持范围内,则调用 `/agent`
7.`reply` 直接作为企业微信 markdown 消息发送。
## 12. 入口选择建议
如果开发组需要判断“应该做几个入口”,建议如下:
### 方案 A一个统一输入入口
优点:
1. 技术实现最简单。
2. 前端交互最少。
缺点:
1. 用户容易提超范围问题。
2. 参数缺失率会更高。
3. 结果稳定性较弱。
### 方案 B按业务域拆菜单共用一个 Agent API
优点:
1. 更符合当前 Agent 的能力边界。
2. 更容易做提问引导。
3. 回复稳定性更高。
4. 更适合企业微信菜单场景。
缺点:
1. 菜单设计需要更多前期整理。
当前更推荐:
- 采用方案 B。
## 13. 当前接入结论
对于企业微信应用开发组,当前最合适的接入方式不是“开放聊天入口”,而是:
1. 用菜单限制问题范围。
2. 用引导语约束用户输入。
3. 用一个统一的 `/agent` 入口承接调用。
4. 在应用层提前拦截写操作和复杂统计类请求。
这样能最大程度发挥当前 Agent 的查询能力,同时避免把不支持的能力暴露成错误体验。