RH

ronglecat/hermes-wechat

Developer tools
41 stars Quality 40 Trend 40

一个让 Hermes Agent 可以连接上微信 clawbot 的 skills

Overview

扫码关注公众号「铁柱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次)

消息流转过程

  1. 接收消息: weixin.py 以长轮询方式调用 getUpdates 接口
  2. 解析内容: 提取文本、图片、语音、文件等,处理引用消息
  3. 媒体下载: AES 解密 CDN 数据 → 缓存到本地 → 交给 Agent
  4. 派发给 Hermes: 封装成 MessageEvent 交给 Gateway 调度
  5. AI 处理: Agent 思考并生成回复
  6. 发送回复: 通过 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

MIT © 2026 RongleCat


Made with ❤️ by RongleCat & Hermes Agent This repository was written, organized and committed by Hermes Agent itself.

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add ronglecat/hermes-wechat