一个让 Hermes Agent 可以连接上微信 clawbot 的 skills
Обзор
扫码关注公众号「铁柱AGI」 获取更多 Hermes / OpenClaw / AI Agent 实战教程与前沿动态 是一个为 Hermes Agent 开发的微信个人号接入适配器,基于 (微信官方开放协议)实现。 Hermes 原生支持 Telegram、Discord、Slack 等多个消息平台,但**。而微信是中国最主流的即时通讯工具,对于中文用户来说,无法接入微信意味着失去了最重要的 AI 交互入口。 1. : weixin.py 以长轮询方式调用 getUpdates 接口 2. : 提取文本、图片、语音、文件等,处理引用消息 3. : AES 解密 CDN 数据 → 缓存到本地 → 交给 Agent 4. : 封装成 MessageEvent 交给 Gateway 调度 5. : Agent 思考并生成回复 6. : 通过 sendMessage 接口将结果发回微信 以下功能**,原因标注在每项后面。不排除未来 iLink 协议升级或 Hermes 架构变化后可能支持。 - Hermes Agent 已安装运行 - Python 3.10+ - uv 包管理器 - 一个微信个人号(用于扫码登录) 启动报 TypeError: get_hermes_dir() missing arguments 适配器已使用 get_hermes_home() 替代旧版 API,无需额外处理。
README
Hermes WeChat Adapter
扫码关注公众号「铁柱AGI」 获取更多 Hermes / OpenClaw / AI Agent 实战教程与前沿动态
快速开始 • 功能特性 • 安装步骤 • 已知限制 • 常见问题
关于本项目
Hermes WeChat Adapter 是一个为 Hermes Agent 开发的微信个人号接入适配器,基于 iLink Bot API(微信官方开放协议)实现。
这个项目由 Hermes Agent 自己编写、整理并提交到仓库。 从代码开发到文档撰写再到 Git 提交,全部由 AI 自主完成。
为什么需要这个项目?
Hermes 原生支持 Telegram、Discord、Slack 等多个消息平台,但不支持微信。而微信是中国最主流的即时通讯工具,对于中文用户来说,无法接入微信意味着失去了最重要的 AI 交互入口。
本项目填补了这个空白。
工作原理
架构总览
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌──────────┐
│ 微信 App │ ←→ │ iLink Bot API │ ←→ │ weixin.py │ ←→ │ Hermes │
│ (你的手机) │ │ (微信官方协议) │ │ (本适配器) │ │ Gateway │
└─────────────┘ └──────────────────┘ └─────────────────┘ └──────────┘
↓ ↓ ↓
https://ilinkai 长轮询 getUpdates AI Agent
..weixin.qq.com sendMessage 自动回复
核心机制
| 组件 | 说明 |
|---|---|
| iLink Bot API | 微信官方开放协议,提供消息收发能力 |
| weixin.py | 1488 行 Python 适配器,完整的消息生命周期管理 |
| 长轮询 (Long Polling) | 35 秒超时的 getUpdates 循环,实时接收新消息 |
| AES-128-ECB 加密 | 图片/文件上传下载均通过 CDN 加密传输,自动解密 |
| context_token | 每条消息携带的上下文令牌,回复时必须回显 |
| QR 扫码登录 | 终端 ASCII 二维码 + URL 备选,过期自动刷新(最多3次) |
消息流转过程
- 接收消息: weixin.py 以长轮询方式调用
getUpdates接口 - 解析内容: 提取文本、图片、语音、文件等,处理引用消息
- 媒体下载: AES 解密 CDN 数据 → 缓存到本地 → 交给 Agent
- 派发给 Hermes: 封装成
MessageEvent交给 Gateway 调度 - AI 处理: Agent 思考并生成回复
- 发送回复: 通过
sendMessage接口将结果发回微信
功能特性
✅ 已完整实现
| 功能 | 说明 |
|---|---|
| 文本消息收发 | 超长消息自动分段(4000字/段),段落边界智能切分 |
| 图片收发 | AES-128-ECB 加密 CDN 上传/下载,自动解密,支持多图 |
| 视频接收 | 下载并缓存为 .mp4,Agent 可用 vision 分析 |
| 语音消息接收 | 使用微信内置语音转文字(voice_item.text) |
| 文件收发 | 支持任意格式(PDF/DOC/XLS/ZIP 等),AES 解密 + 原始文件名保留 |
| 引用消息(文本) | 自动提取引用文本并拼接前文 |
| 引用消息(媒体/文件) | 描述引用的文件名+大小/图片尺寸,同时下载引用的原始文件给 Agent |
| 正在输入指示 | 基于 typing ticket(getConfig 获取,10分钟缓存) |
| 消息去重 | message_id 5 分钟滑动窗口去重 |
| 权限控制 | open / allowlist / pairing 三种 DM 策略 |
| 二维码登录 | 终端 ASCII 二维码显示 + URL 备选,过期自动刷新(最多3次) |
| 会话恢复 | context_token 持久化到磁盘,重启后自动恢复 |
| 异常恢复 | 连续失败 3 次后 backoff 30s;session expired 自动暂停 10min 重试 |
⚠️ 基础实现(能用但有局限)
| 功能 | 当前状态 | 局限说明 |
|---|---|---|
| 群聊 | 已提取 group_id,区分 dm/group | 群聊路由和 @机器人逻辑未完善:目前群聊消息能收到,但无法区分 @机器人和普通群消息,也无法只响应 @自己的消息。所有群聊消息都会触发回复。 |
❌ 不支持(协议或平台限制)
以下功能当前版本无法实现,原因标注在每项后面。不排除未来 iLink 协议升级或 Hermes 架构变化后可能支持。
| 功能 | 为什么不支持 |
|---|---|
| Markdown 渲染 | 微信客户端不渲染 Markdown 语法。适配器已做 strip 处理(加粗 **text** → 纯文本 text,标题 # → 去掉,链接 → 显示原始 URL)。发送方需自行使用纯文本格式化 |
| 语音消息发送 | iLink Bot API 未开放主动发送语音的接口。只能接收语音(转文字),无法 TTS 合成后发回 |
| 表情包 / GIF / 贴图 | 微信特殊消息类型(emoji/sticker/gif),iLink 协议未开放这些类型的发送接口。收到此类消息会被静默忽略 |
| 朋友圈操作 | iLink Bot API 是单向消息通道,不支持朋友圈的发布、点赞、评论等操作 |
| 小程序 / 公众号消息 | iLink 协议仅覆盖个人号 C2C 消息,不涉及小程序和公众号的消息通道 |
| 多账号同时登录 | 当前设计为单账号模式(一个 account_id + token)。理论上可扩展多实例,但未测试且 config.yaml 需手动配置多个 account |
| 端到端加密 (E2EE) | 微信部分聊天启用了 E2EE,iLink 返回的加密数据可能无法通过标准 AES-128-ECB 解密。这种情况极少见(主要是保密聊天),遇到时消息内容会丢失 |
| 消息撤回 / 编辑 | iLink 协议可以收到撤回通知(message_state 变更),但适配器当前未处理撤回事件。已发出的消息无法通过 API 撤回或编辑 |
| 在线状态显示 | 无法控制或查询微信账号的在线/离线状态。网关进程存活即代表「在线」 |
| 消息已读回执 | 微信的已读状态是双向同步的,但 iLink API 不提供已读回执接口 |
快速开始
前置要求
- Hermes Agent 已安装运行
- Python 3.10+
- uv 包管理器
- 一个微信个人号(用于扫码登录)
给 Hermes Agent 的指令
把下面这段话发给你的 Hermes Agent,它会自动完成全部安装流程:
请帮我安装微信渠道适配器。
从 GitHub 克隆这个项目:
git clone [email protected]:RongleCat/hermes-wechat.git /tmp/hermes-wechat
然后读取 SKILL.md,按照里面的完整流程(8 个 Phase)逐步执行,
包括环境检查、依赖安装、适配器部署、核心文件 Patch、扫码登录、
配置写入、重启网关、连接验证。
安装步骤
Step 1: 克隆项目
git clone [email protected]:RongleCat/hermes-wechat.git /tmp/hermes-wechat
cd /tmp/hermes-wechat
Step 2: 安装 Python 依赖
cd ~/.hermes/hermes-agent
uv add aiohttp cryptography qrcode pillow
Step 3: 部署适配器
cp /tmp/hermes-wechat/references/weixin.py \
~/.hermes/hermes-agent/gateway/platforms/weixin.py
Step 4: Patch Hermes 核心
4a. 编辑 ~/.hermes/hermes-agent/gateway/config.py
在 Platform 枚举的 WECOM = "wecom" 之后添加:
WEIXIN = "weixin",
4b. 编辑 ~/.hermes/hermes-agent/gateway/run.py
在 _create_adapter() 方法的 WECOM 分支之后添加:
elif platform == Platform.WEIXIN:
from gateway.platforms.weixin import WeixinAdapter, check_weixin_requirements
if not check_weixin_requirements():
logger.warning("WeChat: deps missing")
return None
return WeixinAdapter(config)
Step 5: 扫码登录
cd ~/.hermes/hermes-agent && .venv/bin/python -c "
import asyncio, json, sys, os
sys.path.insert(0, '.')
from gateway.platforms.weixin import qr_login
result = asyncio.run(qr_login(os.path.expanduser('~/.hermes')))
if result:
with open('/tmp/weixin_login_result.json','w') as f: json.dump(result,f,indent=2)
print(json.dumps(result,indent=2))
else: sys.exit(1)
"
终端会显示 ASCII 二维码,用手机微信扫描并在微信内确认登录。
Step 6: 写入配置
登录成功后,编辑 ~/.hermes/config.yaml,添加:
platforms:
weixin:
enabled: true
extra:
account_id: "从登录结果获取"
token: "从登录结果获取"
base_url: "https://ilinkai.weixin.qq.com"
dm_policy: "open"
allow_from: []
home_channel:
platform: "weixin"
chat_id: "从登录结果获取"
platform_toolsets:
weixin:
- hermes-cli
在 ~/.hermes/.env 添加:
GATEWAY_ALLOW_ALL_USERS=true
Step 7: 重启网关
hermes gateway restart
Step 8: 验证
grep -i "weixin" ~/.hermes/logs/gateway.log | tail -15
看到以下日志即表示成功:
weixin: adapter connected (account=xxx, base=https://ilinkai.weixin.qq.com)
weixin: starting poll loop (account=xxx)
weixin: inbound from=xxx text_len=xx images=0
常见问题
项目结构
hermes-wechat/
├── README.md # 本文件 - 项目介绍与安装指南
├── SKILL.md # Hermes Skill 定义 - Agent 执行指南
├── LICENSE # MIT 开源协议
├── .gitignore # Git 忽略规则
├── references/
│ └── weixin.py # 微信适配器源码 (1488 行, v2.1.5)
└── images/
└── qrcode.png # 公众号二维码
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| v2.1.0 | 2026-04-09 | 初始版本,基础消息收发 + QR 登录 |
| v2.1.1 | 2026-04-09 | 修复多图只收第一张、视频接收缺失 |
| v21.2 | 2026-04-09 | 新增文件收发、语音转文字 |
| v2.1.3 | 2026-04-09 | 新增 AES-128-ECB 加解密(修复致命的图片加密 bug) |
| v2.1.4 | 2026-04-09 | 修复临时文件泄漏、RAW_MSG_DUMP 日志污染、create_task 异常处理、QR 终端显示、群聊基础支持 |
| v2.1.5 | 2026-04-09 | 修复引用消息媒体/文件丢失(新增 _describe_ref_item + _extract_ref_items)、修复 f-string 反斜杠语法错误导致网关崩溃循环 |
License
Made with ❤️ by RongleCat & Hermes Agent This repository was written, organized and committed by Hermes Agent itself.
Рекомендуемые инструменты
Попробуйте другой запрос или уберите фильтр.
Установка
npx skillfish add ronglecat/hermes-wechat