跳到主要内容

WeCom(企业微信)设置

将 Hermes 连接到 企业微信(企业微信),腾讯的企业消息平台。适配器使用企业微信的 AI Bot WebSocket 网关进行实时双向通信 — 无需公共端点或 webhook。

前置要求

  • 企业微信组织账户
  • 在企业微信管理后台创建的 AI Bot
  • 来自机器人凭证页面的 Bot ID 和 Secret
  • Python 包:aiohttphttpx

设置

1. 创建 AI Bot

  1. 登录 企业微信管理后台
  2. 导航到 应用创建应用AI Bot
  3. 配置机器人名称和描述
  4. 从凭证页面复制 Bot IDSecret

2. 配置 Hermes

运行交互式设置:

hermes gateway setup

选择 WeCom 并输入你的 Bot ID 和 Secret。

或在 ~/.hermes/.env 中设置环境变量:

WECOM_BOT_ID=your-bot-id
WECOM_SECRET=your-secret

# 可选:限制访问
WECOM_ALLOWED_USERS=user_id_1,user_id_2

# 可选:用于 cron/通知的主频道
WECOM_HOME_CHANNEL=chat_id

3. 启动网关

hermes gateway

功能

  • WebSocket 传输 — 持久连接,无需公共端点
  • DM 和群组消息 — 可配置的访问策略
  • 每群发件人白名单 — 对每个群中可交互用户的细粒度控制
  • 媒体支持 — 图片、文件、语音、视频上传和下载
  • AES 加密媒体 — 入站附件自动解密
  • 引用上下文 — 保留回复线程
  • Markdown 渲染 — 富文本响应
  • 回复模式流式响应 — 将响应关联到入站消息上下文
  • 自动重连 — 连接断开时指数退避

访问策略

DM 策略

控制谁可以向机器人发送直接消息:

行为
open任何人都可以 DM 机器人(默认)
allowlist只有 allow_from 中的用户 ID 可以 DM
disabled所有 DM 都被忽略
pairing配对模式(用于初始设置)

群组策略

控制机器人在哪些群组中响应:

行为
open机器人在所有群组中响应(默认)
allowlist机器人仅在 group_allow_from 中列出的群组 ID 中响应
disabled所有群组消息都被忽略

媒体支持

入站(接收)

适配器接收用户的媒体附件并将其本地缓存以供 agent 处理:

类型处理方式
图片下载并本地缓存。支持基于 URL 和 base64 编码的图片。
文件下载并缓存。保留原始消息中的文件名。
语音如果可用,提取语音消息文本转录。
混合消息解析企业微信混合类型消息(文本 + 图片)并提取所有组件。

AES 加密媒体解密

企业微信使用 AES-256-CBC 加密某些入站媒体附件。适配器自动处理:

  • 当入站媒体项目包含 aeskey 字段时,适配器下载加密字节并使用 PKCS#7 填充的 AES-256-CBC 解密
  • AES 密钥是 aeskey 字段的 base64 解码值(必须恰好 32 字节)
  • IV 源自密钥的前 16 字节
  • 这需要 cryptography Python 包(pip install cryptography

无需配置 — 当接收到加密媒体时解密自动进行。

出站(发送)

方法发送内容大小限制
sendMarkdown 文本消息4000 字符
send_image / send_image_file原生图片消息10 MB
send_document文件附件20 MB
send_voice语音消息(仅支持 AMR 格式原生语音)2 MB
send_video视频消息10 MB

连接与重连

适配器维护到企业微信网关 wss://openws.work.weixin.qq.com 的持久 WebSocket 连接。

重连行为

连接丢失时,适配器使用指数退避重连:

尝试延迟
第 1 次重试2 秒
第 2 次重试5 秒
第 3 次重试10 秒
第 4 次重试30 秒
第 5 次+ 重试60 秒

每次成功重连后,退避计数器重置为零。所有待处理请求 futures 在断开连接时失败,以免调用者无限期挂起。

所有环境变量

变量必填默认值描述
WECOM_BOT_ID企业微信 AI Bot ID
WECOM_SECRET企业微信 AI Bot Secret
WECOM_ALLOWED_USERS(空)网关级白名单的逗号分隔用户 ID
WECOM_HOME_CHANNEL用于 cron/通知输出的聊天 ID
WECOM_WEBSOCKET_URLwss://openws.work.weixin.qq.comWebSocket 网关 URL
WECOM_DM_POLICYopenDM 访问策略
WECOM_GROUP_POLICYopen群组访问策略

故障排除

问题修复
WECOM_BOT_ID 和 WECOM_SECRET 是必需的设置两个环境变量或在设置向导中配置
WeCom 启动失败:aiohttp 未安装安装 aiohttp:pip install aiohttp
WeCom 启动失败:httpx 未安装安装 httpx:pip install httpx
无效 secret (errcode=40013)验证 secret 与你的机器人凭证匹配
等待订阅确认超时检查到 openws.work.weixin.qq.com 的网络连接
机器人在群组中不响应检查 group_policy 设置并确保群组 ID 在 group_allow_from
媒体解密失败安装 cryptographypip install cryptography
语音消息作为文件发送企业微信仅原生语音支持 AMR 格式。其他格式自动降级为文件。
文件太大 错误企业微信对所有文件上传有 20 MB 绝对限制。压缩或分割文件。