7.0 KiB
7.0 KiB
weixin_ClawBot_Bridge — 微信 ClawBot / iLink 协议开发参考文档
目的:把「微信 ClawBot 插件 + iLink Bot API」的公开技术资料整理成一套可直接用于开发的参考文档,供本机其他 AI 项目(不经过 OpenClaw)对接微信时查阅。
整理日期:2026-08-19。资料来源均为公开逆向分析与社区实现(见各文档末尾「参考资料」),不是腾讯官方完整文档。协议细节可能随版本变化,关键行为请以实测为准。
一句话结论
微信 ClawBot 底层是腾讯官方的 iLink Bot API(https://ilinkai.weixin.qq.com,纯 HTTP/JSON + 长轮询),协议本身与 OpenClaw 框架无耦合。任何能发 HTTP 请求的程序都可以直接对接,写一个几百行的「转接器 / Bridge」即可把微信消息接到任意 AI 后端。
文档导航
| 文档 | 内容 | 什么时候读 |
|---|---|---|
| docs/01-overview.md | 背景、ClawBot / iLink / OpenClaw 三者关系、合规性、能力边界总览 | 先读这份,建立全局认识 |
| docs/02-ilink-protocol.md | iLink 协议完整参考:全部端点、鉴权、扫码登录、长轮询、消息结构、context_token、错误码与重试 | 写协议层代码时对照查 |
| docs/03-messages-and-media.md | 消息类型详解、媒体文件 CDN 上传/下载、AES-128-ECB 加解密、语音/图片/文件/视频处理 | 需要收发图片/语音/文件时读 |
| docs/04-bridge-design.md | 转接器架构设计:模块划分、会话管理、状态持久化、与任意 AI 后端的对接模式、可靠性设计 | 动手设计自己的 Bridge 前读 |
| docs/05-implementation-guide.md | 最小可运行实现(伪代码 + Node.js / Python 骨架)、常见坑、参考项目清单 | 直接照着重型实现 |
| docs/06-limits-and-faq.md | 平台限制、官方条款要点、未知/未证实事项、FAQ | 评估能不能做某功能、踩坑时查 |
速查卡片
- 接入域名:
https://ilinkai.weixin.qq.com - CDN 域名:
https://novac2c.cdn.weixin.qq.com/c2c - 核心端点:
get_bot_qrcode(扫码登录,POST + body{"local_token_list":[]},非裸 GET)、get_qrcode_status(轮询状态)、getupdates(长轮询收)、sendmessage(发)、getconfig/sendtyping(输入中)、getuploadurl(媒体上传) - 鉴权:
Authorization: Bearer <bot_token>,token 由扫码登录获得,长期有效;登录请求还带iLink-App-Id: bot+iLink-App-ClientVersion(数字编码如132104,非字符串"1"),见 02 §3 - 五个最容易踩的坑:
get_updates_buf游标必须持久化并每次更新,否则重复收消息- 回复必须带原消息的
context_token,否则关联不到对话 - 媒体文件全部是 AES-128-ECB 加密传输,密钥处理方式见 03 文档
- 扫码二维码服务端 TTL ≈ 60 秒——必须"生成→扫"在窗口内,或自动换新码(见 02 §4.5)
- 已扫码未确认时绝不能再换码——换码会砍掉确认会话,微信端显示成功但后端永远收不到
confirmed(见 02 §4.5「换码竞态」,本机实测最痛的坑)
典型接入架构(Bridge 模式)
微信用户 ⇄ 微信客户端 ⇄ iLink 服务器 (ilinkai.weixin.qq.com)
⇕ HTTP 长轮询
┌──────────────────┐
│ 你的 Bridge │
│ - iLink 客户端 │
│ - 消息规范化 │
│ - 会话/游标管理 │
└────────┬─────────┘
⇕ 你项目自己的 API
┌──────────────────┐
│ 你的 AI 项目 │
│ (LLM/Agent/工作流)│
└──────────────────┘
多语言示例(examples/)
examples/ 下提供 Python / Go / Java / C / C++ 五份单文件、可独立运行的最小示例,各自覆盖同一套完整流程:
扫码登录(get_bot_qrcode / get_qrcode_status) → 长轮询收消息(getupdates) → 回声回复(sendmessage)
每份示例都包含:bot_token / 游标持久化、context_token 透传、errcode=-14 过期处理、2s→30s 退避重试、长文本分片发送。接入你自己的 AI 项目只需替换示例中的 askYourAI(回声占位)一个函数。
| 语言 | 文件 | 依赖 | 运行 | 验证状态 |
|---|---|---|---|---|
| Python | examples/python/ilink_bridge.py | requests |
python3 ilink_bridge.py |
✅ 语法检查通过 |
| Go | examples/go/main.go | 仅标准库 | go run main.go |
✅ go build 通过 |
| Java | examples/java/IlinkBridge.java | JDK 11+ 零依赖 | javac IlinkBridge.java && java IlinkBridge |
✅ javac 通过 |
| C | examples/c/ilink_client.c | libcurl | gcc ilink_client.c -o ilink -lcurl && ./ilink |
✅ 语法检查通过(本机无 curl 开发头,未做链接验证) |
| C++ | examples/cpp/ilink_client.cpp | libcurl | g++ -std=c++17 ilink_client.cpp -o ilink -lcurl && ./ilink |
✅ 同上 |
使用注意:
- 首次运行会打印二维码链接,微信扫码确认后凭据写入同目录
bridge-state.json(权限 600,勿提交 git);之后重启免扫码 - Java / C / C++ 三份为保持零额外依赖,JSON 解析用的是朴素的字符串/正则提取,仅适合演示;正式项目请换 Jackson / cJSON / nlohmann-json,并按
msgs[]完整解析 - 所有示例只实现了文本收发;图片/语音/文件的 AES-128-ECB + CDN 链路见 docs/03-messages-and-media.md
更多约定与省略说明见 examples/README.md。
参考项目(可直接借鉴)
| 项目 | 语言 | 说明 |
|---|---|---|
| hao-ji-xing/openclaw-weixin | Node.js | 协议逆向分析 + 裸调 Demo(demo.mjs) |
| hao-ji-xing/cc-weixin | Node.js | 把 Claude Code Agent 接入微信的完整示例 |
| openclaw-java/openclaw-weixin-sdk | Java | 完整 SDK + CLI + Web Terminal,错误恢复策略写得很细 |
| openakita/openakita | Python | 多 IM 平台适配器架构,微信适配器直接调 iLink 原生 API |
| @tencent-weixin/openclaw-weixin | TypeScript | 腾讯官方协议实现包(41 个源文件,最权威的协议参考) |