feat(wecom): 企微 API 插件增加 MCP Streamable HTTP 端点
与 REST/OpenAPI 并存,按实例权限自动 tools/list,免手填工具。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+84
-27
@@ -1,28 +1,75 @@
|
||||
# 企微 API 插件 · 配置手册
|
||||
# 企微 API / MCP 插件 · 配置手册
|
||||
|
||||
> 面向运营/技术:在企微后台「智能机器人 → 添加 API 插件」逐步填表。
|
||||
> 后端前缀:`/api/v1/wecom/plugin` · 鉴权 Header `X-Api-Key` · 与 HQ 长连接 Bot **独立**。
|
||||
> 密钥与权限在 HQ **企微机器人 → API 插件** 维护(v3.5.17+)。
|
||||
> 面向运营/技术:在企微后台「智能机器人 → 添加插件」填表。
|
||||
> 后端前缀:`/api/v1/wecom/plugin` · MCP:`/api/v1/wecom/plugin/mcp` · 鉴权 Header `X-Api-Key` · 与 HQ 长连接 Bot **独立**。
|
||||
> 密钥与权限在 HQ **企微机器人 → API 插件** 维护(v3.5.17+;MCP 端点 v3.5.18)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 推荐流程(优先 OpenAPI 导入)
|
||||
## 1. 推荐流程(MCP 插件)
|
||||
|
||||
**不要 17 个工具全手填。** 推荐:
|
||||
企微 5.0.6+ 支持 **MCP 插件**:自动 `tools/list` 拉工具,不必手填、也不必导入 OpenAPI。REST API 插件仍保留,已配好的机器人不用改。
|
||||
|
||||
1. HQ → **企微机器人 → API 插件** → 新建实例,勾选工具权限,复制 **Key**(只显示一次)。
|
||||
2. 企微 **第 1 步**:填插件 URL + Header Key(见 §2)。
|
||||
2. 企微工作台 → 智能机器人 → **插件** → **添加 MCP 插件**:
|
||||
- **插件 URL**:见下表(必须是企业域名,localhost 无法注入成员身份)
|
||||
- **传输协议**:Streamable HTTP
|
||||
- **授权方式**:Service token / API key
|
||||
- **位置**:Header
|
||||
- **Parameter name**:`X-Api-Key`
|
||||
- **Service token**:该实例 Key
|
||||
3. 企微会自动拉取已授权工具;把插件挂到「运营查询」类智能机器人即可。
|
||||
4. 白名单会话试问:「查一下今日经营指标」「订单 DK…」。HQ **日志 → 智能机器人日志** 应出现 `botKey=plugin:{id}`。
|
||||
|
||||
| 企微表单字段 | 测试环境 | 生产环境 |
|
||||
|-------------|---------|---------|
|
||||
| **MCP 插件 URL** | `https://api-test.dukanghaoke.com/api/v1/wecom/plugin/mcp` | `https://api.dukanghaoke.com/api/v1/wecom/plugin/mcp` |
|
||||
| **传输协议** | Streamable HTTP | 同左 |
|
||||
| **Header** | `X-Api-Key` | 同左 |
|
||||
|
||||
**自检(JSON-RPC,无 `{code,message,data}` 信封):**
|
||||
|
||||
```bash
|
||||
# 无 Key → 401
|
||||
curl -sS -o /dev/null -w '%{http_code}\n' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
|
||||
"https://api-test.dukanghaoke.com/api/v1/wecom/plugin/mcp"
|
||||
|
||||
# 带 Key:initialize
|
||||
curl -sS -H "X-Api-Key: <你的Key>" -H 'Content-Type: application/json' \
|
||||
-H 'Accept: application/json, text/event-stream' \
|
||||
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
|
||||
"https://api-test.dukanghaoke.com/api/v1/wecom/plugin/mcp"
|
||||
|
||||
# 带 Key:tools/list(仅含本实例已勾选权限)
|
||||
curl -sS -H "X-Api-Key: <你的Key>" -H 'Content-Type: application/json' \
|
||||
-H 'Accept: application/json, text/event-stream' \
|
||||
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
|
||||
"https://api-test.dukanghaoke.com/api/v1/wecom/plugin/mcp"
|
||||
```
|
||||
|
||||
若「添加插件」拉不到工具,再试传输协议 **SSE**(需运维给 `/api/v1/wecom/plugin/mcp` 关 `proxy_buffering`);第一期默认 Streamable HTTP 无状态即可。
|
||||
|
||||
---
|
||||
|
||||
## 2. 兼容流程(API 插件 + OpenAPI 导入)
|
||||
|
||||
**不要 17 个工具全手填。** API 插件推荐:
|
||||
|
||||
1. HQ 建实例并复制 Key(同上)。
|
||||
2. 企微 **第 1 步**:填 API 插件 URL + Header Key(见 §3)。
|
||||
3. 企微 **第 2 步**:**OpenAPI 导入**
|
||||
- URL:`{Base URL}/openapi.json`
|
||||
- **同样带 Header `X-Api-Key`**(与第 1 步相同 Key)
|
||||
- 服务端按该 Key 的权限**只返回已授权路径**,与 HQ 勾选一致。
|
||||
4. 导入后逐条核对 §3「全局规则」;类型不对时按 §5 手工修正。
|
||||
4. 导入后逐条核对 §4「全局规则」;类型不对时按 §6 手工修正。
|
||||
|
||||
手填仅适用于:导入失败,或只加 2~3 个高频工具。
|
||||
|
||||
---
|
||||
|
||||
## 2. 第 1 步:添加 API 插件
|
||||
## 3. 第 1 步:添加 API 插件
|
||||
|
||||
| 企微表单字段 | 测试环境 | 生产环境 |
|
||||
|-------------|---------|---------|
|
||||
@@ -43,7 +90,7 @@ HQ 页也会展示 Base URL 与 Header 名(不含密钥)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 全局规则(调试不过先看这里)
|
||||
## 4. 全局规则(调试不过先看这里)
|
||||
|
||||
| 项 | 正确 | 错误 |
|
||||
|----|------|------|
|
||||
@@ -69,20 +116,20 @@ HQ 页也会展示 Base URL 与 Header 名(不含密钥)。
|
||||
|
||||
---
|
||||
|
||||
## 4. HQ 权限与工具对照
|
||||
## 5. HQ 权限与工具对照
|
||||
|
||||
只添加 HQ **已勾选**权限对应的工具;未授权返回 **403**。
|
||||
只添加 HQ **已勾选**权限对应的工具;未授权 REST 返回 **403**,MCP 则不出现在 `tools/list`。
|
||||
|
||||
| HQ 权限 | 路径 | 建议工具名 |
|
||||
|---------|------|-----------|
|
||||
| `metrics.read` | `/metrics` | 查询经营指标 |
|
||||
| `order.read` | `/orders` | 查询订单 |
|
||||
| `user.read` | `/users` | 查询用户 |
|
||||
| `store.read` | `/stores` | 查询门店 |
|
||||
| `redeem.read` | `/redeems` | 查询核销 |
|
||||
| `promo.read` | `/promo-codes`、`/promo-codes/{code}/stats` | 查询推广码、推广码统计 |
|
||||
| `store.audit.read` | `/store-audits`、`/store-info-audits`、`/store-info-audits/{id}`、`/store-package-audits`、`/store-package-audits/{id}` | 门店/信息/套餐审核 |
|
||||
| `partner.read` | `/partners`、`/partners/{partnerId}/users|stores|orders` | 合伙人及关联数据 |
|
||||
| HQ 权限 | REST 路径 | MCP 工具名 |
|
||||
|---------|-----------|-----------|
|
||||
| `metrics.read` | `/metrics` | `query_metrics` |
|
||||
| `order.read` | `/orders` | `query_orders` |
|
||||
| `user.read` | `/users` | `query_users` |
|
||||
| `store.read` | `/stores` | `query_stores` |
|
||||
| `redeem.read` | `/redeems` | `query_redeems` |
|
||||
| `promo.read` | `/promo-codes`、`/promo-codes/{code}/stats` | `query_promo_codes`、`query_promo_code_stats` |
|
||||
| `store.audit.read` | `/store-audits`、`/store-info-audits`、`/store-info-audits/{id}`、`/store-package-audits`、`/store-package-audits/{id}` | `query_store_audits` 等 5 个 |
|
||||
| `partner.read` | `/partners`、`/partners/{partnerId}/users|stores|orders` | `query_partners` 等 4 个 |
|
||||
|
||||
**实例建议:**
|
||||
|
||||
@@ -94,7 +141,7 @@ HQ 页也会展示 Base URL 与 Header 名(不含密钥)。
|
||||
|
||||
---
|
||||
|
||||
## 5. 第 2 步:工具参数明细
|
||||
## 6. 第 2 步:工具参数明细
|
||||
|
||||
以下均为 **GET**。Base URL 与 §2 相同,路径为相对路径。
|
||||
|
||||
@@ -332,7 +379,7 @@ HQ 页也会展示 Base URL 与 Header 名(不含密钥)。
|
||||
|
||||
---
|
||||
|
||||
## 6. OpenAPI 导入
|
||||
## 7. OpenAPI 导入
|
||||
|
||||
| 项 | 值 |
|
||||
|----|-----|
|
||||
@@ -350,7 +397,16 @@ curl -H "X-Api-Key: <Key>" \
|
||||
|
||||
---
|
||||
|
||||
## 7. 调试检查清单
|
||||
## 8. 调试检查清单
|
||||
|
||||
### MCP 插件
|
||||
|
||||
- [ ] 无 Key / 错 Key → 401
|
||||
- [ ] `initialize` + `tools/list` 仅含 HQ 已勾选权限对应工具
|
||||
- [ ] 企微后台能自动拉到工具(Streamable HTTP)
|
||||
- [ ] 白名单会话能问到真实数据;HQ 日志 `botKey=plugin:{id}`
|
||||
|
||||
### API 插件(兼容)
|
||||
|
||||
- [ ] 第 1 步 Key 与 HQ 实例一致,实例 **已启用**
|
||||
- [ ] curl 带 Key 返回 `code: 0`
|
||||
@@ -363,7 +419,7 @@ curl -H "X-Api-Key: <Key>" \
|
||||
|
||||
---
|
||||
|
||||
## 8. 多实例与分工
|
||||
## 9. 多实例与分工
|
||||
|
||||
| 企微插件 | HQ 实例 | 说明 |
|
||||
|----------|---------|------|
|
||||
@@ -373,8 +429,9 @@ curl -H "X-Api-Key: <Key>" \
|
||||
|
||||
---
|
||||
|
||||
## 9. 相关文档
|
||||
## 10. 相关文档
|
||||
|
||||
- [杜康好客-v3.5.18-开发文档](./杜康好客-v3.5.18-开发文档.md) — MCP Streamable HTTP 端点
|
||||
- [杜康好客-v3.5.17-开发文档](./杜康好客-v3.5.17-开发文档.md) — 表结构、Admin API、权限目录
|
||||
- [杜康好客-v3.5.16-开发文档](./杜康好客-v3.5.16-开发文档.md) — 插件初版与 curl 示例
|
||||
- [杜康好客-v3编码手册](./杜康好客-v3编码手册.md) — 编码验收一句
|
||||
|
||||
Reference in New Issue
Block a user