基于腾讯官方开放的 openclaw-weixin/openclaw-weixin-api/openclaw-weixin-cli 实现的微信个人账号 Bot,支持接入任意 AI 模型,实现微信自动对话。
2026 年腾讯通过 OpenClaw 平台正式开放了微信个人账号的 Bot API,官方名称为 微信 ClawBot 插件功能,底层协议为 iLink,接入域名 ilinkai.weixin.qq.com 为腾讯官方服务器。
本项目提供 Python 和 Node.js 两种实现,可直接接入兼容 Anthropic 格式的 AI 接口(Claude、GPT 等),实现收到微信消息后自动 AI 回复。免 openclaw 部署和登录,直接接入与调用。
/help /指令 查看指令列表,/time 查询剩余连接时间,/重新连接 手动触发重连,首次交互自动推送指令列表. ├── bot.py # Python 实现(推荐) ├── bot.js # Node.js 实现 ├── dusapi.py # AI 接口封装(Python,兼容 Anthropic 格式) ├── config.json # 配置文件(首次运行自动生成,勿提交到版本控制) └── README.md
懒得折腾? 直接下载打包好的 exe 使用:Releases
安装依赖:
pip install aiohttp requests
运行:
python bot.py
首次运行会自动引导配置,按提示填写即可。
要求: Node.js 18+
配置 package.json(如不存在则创建):
{ "type": "module" }
运行:
node bot.js
首次运行自动生成,交互式填写,留空使用默认值。
{
"api_key": "your-api-key",
"base_url": "https://api.dusapi.com",
"model": "gpt-5",
"prompt": "你是一个有帮助的AI助手,请用中文简洁地回复。字数尽量少一些"
}
再次运行时会显示当前配置(API Key 仅显示首尾各 5 位),选择继续或重新配置:
============================================================ 检测到配置文件,当前配置如下: ============================================================ API Key : sk-d0*****************************e8c5c API 地址 : https://api.dusapi.com 模型 : gpt-5 提示词 : 你是一个有帮助的AI助手,请用中文简洁地回复。字数尽量... ------------------------------------------------------------ 使用此配置继续?(直接回车或输入 Y 继续 / 输入 N 重新配置):
注意:当前版本仅支持 DusAPI。如需接入其他接口,请拉取源代码自行修改
dusapi.py。
iLink 连接有效期为 24 小时,Bot 内置全自动续连机制。
登录成功 → 开始 24h 倒计时 ↓(剩余 2h 时) 向最近聊天用户发送预警:是否现在重新连接?(Y/N) ├─ 回复 Y → 立即重连,发送新二维码 ├─ 回复 N → 每 30 分钟再次询问 └─ 最后 30 分钟 → 强制重连,无需确认 扫码成功 → 新 token 原子替换,旧连接无缝切换,不掉线
测试时可将数值改小,无需等 24 小时验证流程:
| 参数 | 说明 | 生产默认值 | 测试建议值 |
|---|---|---|---|
session_duration | 会话总时长(秒) | 24 * 3600 | 300 |
warning_before | 提前多久发警告(秒) | 2 * 3600 | 60 |
reminder_interval | 回复 N 后多久再问(秒) | 30 * 60 | 30 |
force_before | 最后多久强制重连(秒) | 30 * 60 | 60 |
qrcode_scan_timeout | 等待扫码最长时间(秒) | 600 | 120 |
Python 示例(测试配置):
RECONNECT_CONFIG = {
"session_duration": 300,
"warning_before": 60,
"reminder_interval": 30,
"force_before": 60,
"qrcode_scan_timeout": 120,
}
| 指令 | 说明 |
|---|---|
/help 或 /指令 | 查看全部指令列表 |
/time | 查询当前连接剩余时间 |
/重新连接 | 手动触发重新连接(发送后需回复 Y 确认 / N 取消) |
说明:
/重新连接 发出后 Bot 会询问确认,回复 Y 立即重连并发送新二维码,回复 N 取消;若重连正在进行中则提示等待COMMANDS_MSG 常量即可DusAPI 封装了兼容 Anthropic 格式的 HTTP 接口,支持所有使用 x-api-key + /v1/messages 格式的服务,包括:
DusConfig 参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
api_key | API 密钥 | 必填 |
base_url | 接口地址 | 必填 |
model1 | 模型名称 | claude-sonnet-4-5 |
prompt | 系统提示词 | 你是一个有帮助的AI助手。 |
每个请求都需要携带以下 Header:
Content-Type: application/json AuthorizationType: ilink_bot_token X-WECHAT-UIN: <随机uint32转base64,每次请求重新生成> Authorization: Bearer <bot_token>
POST getupdates(长轮询,服务器 hold 35s) └─ 收到用户消息 ├─ [手动重连待确认] Y → 立即重连 / N → 取消 ├─ [定时预警待确认] Y → 触发重连 / N → 推迟提醒 ├─ [首次] 发送指令列表,等待下一条消息 ├─ [/help 或 /指令] 返回指令列表 ├─ [/time] 返回剩余时间 ├─ [/重新连接] 发送 Y/N 确认提示 ├─ POST getconfig → 获取 typing_ticket(每用户缓存,有效24h) ├─ POST sendtyping { status: 1 } → 显示"正在输入" ├─ 调用 AI 接口 ├─ POST sendmessage → 发送回复 └─ POST sendtyping { status: 2 } → 取消"正在输入"
官方 SDK 要求 sendmessage 包含以下完整结构,缺少任意字段会导致消息静默丢失(HTTP 200 但不投递):
{
"msg": {
"from_user_id": "",
"to_user_id": "<用户ID@im.wechat>",
"client_id": "openclaw-weixin-<随机hex>",
"message_type": 2,
"message_state": 2,
"context_token": "<从收到的消息中原样取>",
"item_list": [
{ "type": 1, "text_item": { "text": "回复内容" } }
]
},
"base_info": { "channel_version": "1.0.2" }
}
注意:
context_token必须使用当前收到消息中的值,不可复用旧消息的 token。
config.json 含有 API Key,请勿提交到版本控制(已在 .gitignore 中排除)。| 环境 | 依赖 |
|---|---|
| Python | aiohttp、requests |
| Node.js | 无需额外安装(Node.js 18+ 内置 fetch 和 readline) |