baodan/docs/企业微信接入指南.md
2026-07-23 08:38:11 +08:00

424 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.

# 企业微信接入指南
本文档详细说明如何将保险智能客服系统接入企业微信,包括自建应用、机器人消息和 OAuth 登录。
---
## 目录
- [前置条件](#前置条件)
- [第一步:创建自建应用](#第一步创建自建应用)
- [第二步:配置机器人消息接收](#第二步配置机器人消息接收)
- [第三步:配置 OAuth 登录](#第三步配置-oauth-登录)
- [第四步:配置环境变量](#第四步配置环境变量)
- [第五步:验证接入](#第五步验证接入)
- [部署注意事项](#部署注意事项)
- [常见问题排查](#常见问题排查)
---
## 前置条件
- 已注册企业微信([注册地址](https://work.weixin.qq.com/)
- 拥有企业微信管理员权限
- 服务器已部署并配置 HTTPS企微回调要求
- 域名已备案(生产环境必须)
---
## 第一步:创建自建应用
### 1.1 登录管理后台
访问 [企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame),使用管理员账号登录。
### 1.2 创建应用
1. 左侧菜单 → **应用管理****自建**
2. 点击 **创建应用**
3. 填写应用信息:
- **应用名称**: 保险智能客服
- **应用 Logo**: 上传图标
- **应用介绍**: 保险行业智能客服系统
- **可见范围**: 选择需要使用的部门/成员
### 1.3 记录关键信息
创建完成后,进入应用详情页,记录以下信息:
| 配置项 | 位置 | 示例 |
|--------|------|------|
| **企业 ID** | 我的企业 → 企业信息 | `ww1234567890abcdef` |
| **AgentId** | 应用详情 → 基础信息 | `1000002` |
| **Secret** | 应用详情 → 基础信息 → Secret | `xxxxxxxxxxxxxxxxxxxxxxxx` |
> ⚠️ **Secret 点击查看后要立即保存**,关闭后无法再次查看。
---
## 第二步:配置机器人消息接收
### 2.1 启用机器人能力
1. 进入自建应用详情
2. 左侧菜单 → **机器人**
3. 点击 **启用** 按钮
### 2.2 配置消息接收 API
1. 进入应用详情 → **接收消息****设置 API 接收**
2. 填写以下信息:
| 配置项 | 值 | 说明 |
|--------|-----|------|
| **URL** | `https://your-domain.com/insurance/wecom/callback` | 企微回调地址 |
| **Token** | 自定义随机字符串 | 用于验证请求来源 |
| **EncodingAESKey** | 点击随机获取 | 43位加密密钥 |
3. 点击 **保存**,企微会向该 URL 发送验证请求
### 2.3 服务器验证要求
- 必须支持 HTTPS443 端口)
- 必须在 **5 秒内** 响应验证请求
- 响应内容必须是明文的 `echostr`
### 2.4 记录配置信息
| 配置项 | 位置 | 长度 |
|--------|------|------|
| **Token** | 应用 → 接收消息 | 自定义,建议 32 位随机字符串 |
| **EncodingAESKey** | 应用 → 接收消息 | 43 位(自动生成) |
---
## 第三步:配置 OAuth 登录
### 3.1 开启授权登录
1. 进入自建应用详情
2. 左侧菜单 → **企业微信授权登录**
3. 点击 **设置授权回调域**
### 3.2 配置回调域名
根据部署环境配置:
| 环境 | 回调域名 | 说明 |
|------|----------|------|
| 开发环境 | `localhost` | 本地开发测试 |
| 测试环境 | `test.your-domain.com` | 测试服务器 |
| 生产环境 | `your-domain.com` | 正式环境 |
> ⚠️ 回调域名只填写域名,不要带 `https://` 和端口号。
### 3.3 权限配置
如需获取用户敏感信息(手机号等),需要在应用详情中申请相应权限:
- **基础信息**: 默认开启
- **通讯录权限**: 根据需要申请
- **成员信息**: 申请 `读取成员` 权限
---
## 第四步:配置环境变量
### 4.1 创建 .env 文件
在项目根目录(`baodan-main/`)创建 `.env` 文件:
```bash
# ===== 企业微信配置 =====
# 企业 ID必填
WECOM_CORP_ID=ww1234567890abcdef
# 自建应用 AgentId必填
WECOM_AGENT_ID=1000002
# 自建应用 Secret必填
WECOM_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 消息校验 Token必填与企微后台配置一致
WECOM_TOKEN=your_random_token_32_chars
# 消息加密 Key必填43位与企微后台配置一致
WECOM_ENCODING_AES_KEY=your_43_char_encoding_aes_key
```
### 4.2 配置说明
| 环境变量 | 是否必填 | 说明 |
|----------|:--------:|------|
| `WECOM_CORP_ID` | ✅ | 企业唯一标识,从「我的企业」获取 |
| `WECOM_AGENT_ID` | ✅ | 自建应用 ID |
| `WECOM_SECRET` | ✅ | 应用密钥,点击查看后立即保存 |
| `WECOM_TOKEN` | ✅ | 消息校验 Token需与后台一致 |
| `WECOM_ENCODING_AES_KEY` | ✅ | 43位加密密钥需与后台一致 |
---
## 第五步:验证接入
### 5.1 启动服务
```bash
cd baodan-main
# 安装依赖
./dev/setup
# 启动后端
./dev/start-api
```
### 5.2 测试 OAuth 登录
浏览器访问:
```
http://localhost:5001/insurance/wecom/oauth
```
预期行为:
1. 重定向到企业微信授权页面
2. 扫码或确认登录后
3. 重定向回系统并携带用户信息
### 5.3 测试机器人消息
1. 在企业微信客户端,搜索「保险智能客服」应用
2. 向机器人发送消息
3. 检查服务器日志是否收到消息
### 5.4 API 健康检查
```bash
# 检查服务是否正常
curl http://localhost:5001/api/health
# 检查企微回调接口
curl http://localhost:5001/insurance/wecom/callback
```
---
## 部署注意事项
### 5.5 Nginx 配置
确保 Nginx 正确代理企微回调接口:
```nginx
server {
listen 443 ssl;
server_name your-domain.com;
# SSL 证书配置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 企微回调接口
location /insurance/wecom/ {
proxy_pass http://127.0.0.1:5001;
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;
}
# 其他接口...
}
```
### 5.6 防火墙配置
确保服务器开放以下端口:
| 端口 | 协议 | 用途 |
|------|------|------|
| 443 | TCP | HTTPS 访问(企微回调) |
| 80 | TCP | HTTP 访问(重定向到 HTTPS |
### 5.7 域名要求
- 必须使用已备案域名(生产环境)
- 必须配置 SSL 证书(企微要求 HTTPS
- 域名需加入企微后台的「可信域名」白名单
---
## 常见问题排查
### 问题 1: URL 验证失败
**现象**: 企微后台保存回调地址时提示「URL 验证失败」
**排查步骤**:
1. 检查服务器是否正常运行
2. 检查 Nginx 是否正确代理 `/insurance/wecom/callback`
3. 检查 SSL 证书是否有效
4. 检查 `Token``EncodingAESKey` 是否与代码一致
```bash
# 手动测试回调接口
curl -v "https://your-domain.com/insurance/wecom/callback?msg_signature=xxx&timestamp=xxx&nonce=xxx&echostr=xxx"
```
### 问题 2: 消息接收不到
**现象**: 用户发送消息后,服务器没有收到回调
**排查步骤**:
1. 确认机器人能力已启用
2. 确认消息接收 API 已配置
3. 检查服务器日志是否有请求记录
4. 检查消息是否在 5 秒内处理(企微要求)
### 问题 3: OAuth 登录失败
**现象**: 点击登录后提示「授权失败」
**排查步骤**:
1. 确认「企业微信授权登录」已开启
2. 确认回调域名配置正确
3. 检查 `WECOM_CORP_ID` 环境变量是否正确
4. 检查应用可见范围是否包含测试用户
### 问题 4: 用户信息获取失败
**现象**: 登录成功但无法获取用户详细信息
**排查步骤**:
1. 确认应用已申请「读取成员」权限
2. 确认用户在应用可见范围内
3. 检查 `WECOM_AGENT_ID``WECOM_SECRET` 是否正确
### 问题 5: 企微后台提示「回调地址不可达」
**现象**: 保存配置时提示网络不可达
**排查步骤**:
1. 确认域名已备案
2. 确认 SSL 证书有效(非自签名)
3. 确认防火墙已开放 443 端口
4. 使用在线工具检测 SSLhttps://www.ssllabs.com/ssltest/
### 问题 6: 企微后台提示「回调地址请求不通过」
**现象**: 保存配置时提示 `openapi回调地址请求不通过`
**常见原因**:
1. AES 解密未正确实现 — 回调验证需要解密 echostr代码只返回了原始密文
2. 环境变量未配置 — Docker 容器中缺少企微配置
3. Token/AES Key 不一致 — 企微后台配置与 `.env` 中的值不匹配
4. SSL 证书问题 — 自签名证书不被企微信任
**排查步骤**:
1. 手动测试回调接口:
```bash
curl "https://your-domain.com/insurance/wecom/callback?msg_signature=test&timestamp=1234567890&nonce=test&echostr=test"
# 应返回Invalid signature说明服务正常只是参数不对
```
2. 检查 Docker 日志:`docker compose logs baodanagent-api | grep -i wecom`
3. 确认 Token 和 AES Key 与企微后台完全一致
4. 确认 SSL 证书有效(非自签名)
### 问题 7: 5 秒内未返回 success
**现象**: 企微日志显示超时
**原因**: 服务器响应太慢
**解决**: 检查服务器性能、网络延迟,确保回调处理在 5 秒内完成
### 开发环境调试(内网穿透)
本地开发时,企微无法访问 localhost需要使用内网穿透工具
```bash
# 使用 ngrok
ngrok http 8080
# 获取公网地址https://xxxx.ngrok.io
# 使用 frp自建服务器
# 配置 frpc.ini 指向本地 8080 端口
```
将获取到的公网地址配置到企微后台的回调 URL 中。
---
## 接口说明
### 6.1 OAuth 登录入口
```
GET /insurance/wecom/oauth
```
**说明**: 重定向到企微授权页面,用户确认后回调。
### 6.2 OAuth 回调
```
GET /insurance/wecom/oauth/callback?code=xxx&state=state
```
**说明**: 企微授权回调,自动完成登录并重定向到系统首页。
### 6.3 消息回调URL 验证)
```
GET /insurance/wecom/callback?msg_signature=xxx&timestamp=xxx&nonce=xxx&echostr=xxx
```
**说明**: 企微服务器验证回调地址有效性。
### 6.4 消息回调(消息接收)
```
POST /insurance/wecom/callback?msg_signature=xxx&timestamp=xxx&nonce=xxx
```
**说明**: 接收用户发送给机器人的消息5 秒内响应 `success`
---
## 附录:配置清单
### 企业微信后台配置
- [ ] 创建自建应用
- [ ] 记录企业 ID、AgentId、Secret
- [ ] 启用机器人能力
- [ ] 配置消息接收 APIURL、Token、EncodingAESKey
- [ ] 开启企业微信授权登录
- [ ] 配置授权回调域名
- [ ] 设置应用可见范围
### 服务器配置
- [ ] 配置 SSL 证书
- [ ] 配置 Nginx 代理
- [ ] 开放 443 端口
- [ ] 创建 `.env` 文件并填写配置
- [ ] 启动服务并测试
### 验证测试
- [ ] 测试 OAuth 登录流程
- [ ] 测试机器人消息接收
- [ ] 测试消息回复功能
- [ ] 检查服务器日志正常
---
## 参考链接
- [企业微信官方文档](https://developer.work.weixin.qq.com/document/path/90556)
- [自建应用开发指南](https://developer.work.weixin.qq.com/document/path/90537)
- [消息接收说明](https://developer.work.weixin.qq.com/document/path/90930)
- [OAuth 说明](https://developer.work.weixin.qq.com/document/path/91022)