4.8 KiB
4.8 KiB
微信公众号AI助手服务技术文档
1. 概述
本服务是一个基于Flask的微信公众号后端服务,实现了与Dify AI平台的集成。主要功能包括:
- 验证微信服务器请求的合法性
- 接收用户消息并调用Dify AI服务获取智能回复
- 通过微信客服消息接口异步返回AI回复
- 维护用户会话状态,支持多轮对话
2. 功能描述
功能模块 | 描述 | 实现方式 |
---|---|---|
微信服务器验证 | 验证微信服务器请求的合法性 | SHA1签名验证 |
消息接收与路由 | 接收并处理用户消息 | XML解析与路由 |
AI服务调用 | 调用Dify AI服务获取智能回复 | HTTP POST请求 |
会话管理 | 维护用户对话上下文 | 内存映射(conv_map) |
客服消息发送 | 异步发送AI回复给用户 | 微信客服消息接口 |
被动回复 | 即时返回"正在查询"提示 | XML格式响应 |
3. 环境要求
- Python 3.7+
- Flask 2.0+
- Requests库
- 微信公众号(服务号或订阅号)
- Dify AI服务(本地或云端)
4. 配置说明
在代码全局配置区设置以下参数:
# 微信相关配置
TOKEN = "your_wechat_token" # 与微信公众号后台配置一致
APPID = "your_appid" # 微信公众号APPID
APPSECRET = "your_appsecret" # 微信公众号APPSECRET
# Dify AI服务配置
DIFY_API_BASE = "http://your-dify-server/api" # Dify API地址
DIFY_API_KEY = "your_dify_api_key" # Dify API密钥(可选)
5. 核心模块说明
5.1 微信服务器验证 (/wx
GET请求)
- 验证流程:
- 获取请求参数:signature, timestamp, nonce, echostr
- 对token、timestamp、nonce进行字典序排序
- 拼接字符串并进行SHA1加密
- 比较加密结果与signature是否一致
- 成功:返回echostr
- 失败:返回403错误
5.2 消息处理 (/wx
POST请求)
- 支持的消息类型:文本消息(MsgType=text)
- 处理流程:
- 解析XML消息体
- 提取用户OpenID、公众号ID和消息内容
- 启动后台线程调用AI服务
- 立即返回"正在查询"的被动回复
5.3 Dify AI服务调用 (async_reply
函数)
sequenceDiagram
participant W as 微信用户
participant S as 本服务
participant D as Dify AI服务
W->>S: 发送文本消息
S->>S: 启动后台线程
S->>W: 返回"正在查询"提示
S->>D: 发送用户消息和会话ID
D->>S: 返回AI回复和会话ID
S->>S: 更新会话映射(conv_map)
S->>W: 通过客服消息发送AI回复
5.4 客服消息发送 (send_wechat_customer_message
函数)
- 使用微信客服消息接口发送文本消息
- 前提条件:
- 公众号已完成认证
- 用户在48小时内与公众号有过交互
- 消息格式:
{ "touser": "OPENID", "msgtype": "text", "text": {"content": "消息内容"} }
5.5 会话管理
- 使用全局字典
conv_map
存储会话状态 - 数据结构:
{user_openid: conversation_id}
- 会话保持:每次调用Dify时带上conversation_id
- 新会话:当用户首次交互时自动创建新会话
6. 部署与运行
6.1 安装依赖
pip install flask requests
6.2 运行服务
python wechat_kefu.py
6.3 微信公众号配置
- 服务器地址(URL):
http://your-domain/wx
- Token: 与代码中TOKEN一致
- 消息加解密方式: 明文模式
7. 注意事项
7.1 安全性
- 验证所有来自微信服务器的请求
- 保护APP_SECRET和API_KEY不被泄露
- 生产环境禁用DEBUG模式
- 使用HTTPS加密传输
7.2 性能优化
- 实现access_token缓存(有效期7200秒)
- 限制用户请求频率
- 使用连接池管理HTTP连接
- 监控conv_map内存使用情况
7.3 异常处理
- Dify服务不可用:返回用户友好提示
- 客服消息发送失败:记录日志并重试
- 会话丢失:自动创建新会话
- 非文本消息:忽略并返回success
7.4 扩展性
- 支持其他消息类型(如图片、语音)
- 添加用户身份验证
- 集成多个AI服务提供商
- 实现消息队列处理异步任务
8. 常见问题排查
问题现象 | 可能原因 | 解决方案 |
---|---|---|
微信验证失败 | TOKEN配置不一致 | 检查公众号后台配置 |
无法接收消息 | 服务器网络问题 | 检查服务器防火墙设置 |
客服消息发送失败 | access_token过期 | 实现token缓存机制 |
AI回复乱码 | 编码问题 | 检查Unicode解码逻辑 |
会话不连续 | conv_map未持久化 | 使用数据库存储会话 |
9. 版本信息
- 初始版本:1.0
- 最后更新:2025-06-05
- 依赖版本:
- Flask 2.1.2
- Requests 2.28.1
注意:本服务需要微信公众号具备客服消息接口权限,开发前请确认公众号类型和权限设置。