微信 (WeChat) 适配器技术规范
本技术指南详述了 Kesoku 微信聊天机器人适配器 (WechatChatbot) 的底层实现,涵盖腾讯 iLink 平台 REST API 轮询机制、终端 ASCII 二维码扫码配对流程以及即时递送模式的设计。
📁 目录结构
微信适配器核心代码存放于 src/kesoku/gateway/chatbot/wechat/ 路径下:
adapter.py:核心WechatChatbot适配器类,继承自Chatbot,管理消息流分发与终端交互。client.py:腾讯 iLink 对话接口的 REST API 封装库。listener.py:异步长轮询接收器,用于从 iLink 服务拉取用户入站事件。media.py:媒体转换服务,用于对上传的文件/语音进行编码格式重转换以符合微信 API 规范。
⚙️ 核心技术架构
1. 终端二维码配对流程 (QR Login)
命令行执行 kesoku wechat pair 时:
- 适配器调用
client.py向腾讯 iLink 服务发起登录事务申请,获取临时的授权 Ticket。 - 将该 Ticket 生成为 ASCII 二维码矩阵,直接在终端标准输出中渲染打印。
- 开启状态长轮询,等待用户在微信手机端扫码并确认授权。
- 授权通过后,配对逻辑将获得的
account_id、授权token等核心凭证写入配置管理单例,并自动序列化持久保存进本地config.toml。
2. 长轮询消息监听协程 (listener.py)
由于微信普通对话平台不提供反向推送 Webhook,系统采用主动拉取的 长轮询接收机制:
WechatListener在后台以非阻塞asyncio方式循环运行。- 使用配对成功的 Token,持续请求 iLink 接口获取最新的会话包。
- 一旦收到新消息,解包格式化为统一的
InboundMessageDTO消息体,推送至网关调度运行。
🛠️ 即时递送模式 (Instant Delivery Mode)
因为微信聊天窗口不具备动态输入提示状态、亦不支持在群聊中原地修改已发送的文本或插入复杂的交互卡片:
-
禁用中间消息渲染: 微信适配器重写覆盖
supports_intermediate_messages()回调,直接返回False。 -
后台静默直通: 当网关向适配器分发中间思维过程(
MessageType.THOUGHT)、工具调用声明(MessageType.TOOL_CALL)或系统消息时:- 基类投递模板检测到该适配器不支持中间消息渲染。
- 投递动作立即短路,直接将数据库中该消息的状态更改为
DELIVERED(已递送),但不向微信聊天室中发送任何垃圾消息。 - 最终响应物理投递:
- 只有当回合推理彻底结束、Agent 输出角色回复文本(
MessageRole.ASSISTANT)时,适配器才会分段将文本投递给微信终端用户。 - 这种设计保证了微信群聊界面的整洁性,同时确保了 SQLite 数据库中推理 Trace 日志的完整性。