基于腾讯官方开放的 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 部署和登录,直接接入与调用。
- 扫码登录微信(生成二维码链接)
- 长轮询实时接收消息
- 调用 AI 接口生成回复
- 发送前显示"正在输入"状态
- 内置梯度重试(AI 接口失败自动重试)
- 配置文件管理:首次运行引导创建,支持交互式修改,API Key 脱敏显示
- 24 小时自动重连:到期前预警 → 用户确认 → 无缝切换新连接,全程不断线
- Bot 指令系统:
/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- 运行后若无配置文件,进入交互式配置向导
- 配置完成后终端打印二维码链接
- 将链接在手机微信中打开,按提示连接
- 扫码确认后终端显示"登录成功"及可用指令列表
- 在微信中向 Bot 发送第一条消息,Bot 自动回复指令列表
- 之后的消息均由 AI 自动回复
首次运行自动生成,交互式填写,留空使用默认值。
{
"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 自动回复可用指令列表
/重新连接发出后 Bot 会询问确认,回复 Y 立即重连并发送新二维码,回复 N 取消;若重连正在进行中则提示等待- 非指令内容均转发给 AI 接口处理
- 后续如需扩展指令,在消息循环中添加对应分支,并更新
COMMANDS_MSG常量即可
DusAPI 封装了兼容 Anthropic 格式的 HTTP 接口,支持所有使用 x-api-key + /v1/messages 格式的服务,包括:
- DusAPI(兼容多模型)
- Anthropic 官方 API
- 其他 Anthropic 格式的第三方代理
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": "<用户[email protected]>",
"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。
- 每次扫码登录 Bot ID 会变化,这是 iLink 平台的设计,属于正常现象。
- 仅限合规使用,需遵守《微信 ClawBot 功能使用条款》,腾讯保留对内容过滤和限速的权利。
- 本项目仅支持文本消息,图片/语音/文件等媒体消息需额外实现 CDN 加密上传流程。
- Bot 不建议用于核心业务,腾讯可随时变更或终止该服务。
config.json含有 API Key,请勿提交到版本控制(已在.gitignore中排除)。
| 环境 | 依赖 |
|---|---|
| Python | aiohttp、requests |
| Node.js | 无需额外安装(Node.js 18+ 内置 fetch 和 readline) |