1. 国内办公场景下 Hermes Agent 双平台接入的真实痛点
Hermes Agent 是一个可以跑在自己服务器上的智能体网关,它能把你常用的聊天平台和背后的大模型连起来,让飞书、企业微信里直接出现一个能对话、能执行任务的机器人。适合谁?适合那些团队已经在用飞书或企业微信办公、又希望把 AI 能力塞进现有工作流、但不想把数据交给第三方 SaaS 的国内用户。核心检索词就是 Hermes Agent 接入飞书、企业微信配置,以及 WebSocket 长连接模式。
我见过太多人卡在同一个地方:公司服务器在内网,没有公网 IP,也不想为了一个机器人去折腾内网穿透。传统回调模式要求平台能访问到你的 HTTP 地址,于是要么买公网服务器,要么配反向代理,门槛一下就上来了。Hermes Agent 的解法是走 WebSocket 长连接——由你的服务器主动连出去,平台不需要反向访问你,所以局域网、家庭宽带、云主机都能跑通。
但飞书和企业微信的配置入口、凭证名称、事件订阅方式都不一样。飞书叫 App ID / App Secret,企业微信叫 Bot ID / Bot Secret;飞书在「事件与回调」里选长连接,企业微信在智能机器人里选 API 模式。很多人配完一个平台就以为另一个照抄就行,结果事件订阅没开、权限没发、配对没做,消息发出去石沉大海。
这篇就按真实操作顺序,把两个平台的凭证、权限、WebSocket 参数、验证动作全部拆开。每一步都给可复制的命令和配置片段,配完一个平台立刻做消息回环测试,确认通了再配下一个。全程不需要公网 IP,也不需要改路由器。
另外提一句模型侧的统一入口。Hermes 本身是网关,背后要接大模型 API。国内用户如果每个平台、每个实例都单独管一套 Key,很快就会乱。我习惯用 TaoToken 做统一 Key 管理,一个 Key 覆盖多个模型,Hermes 的模型配置里填一次 Base URL 和 Key 就行,后面换模型只改 Model ID。这样飞书和企业微信两个机器人共用同一套模型凭证,排障时也少一个变量。
2. TaoToken 前置准备与 Hermes Gateway 环境确认
在动飞书和企业微信之前,先把 Hermes 本体和模型通道确认好。否则平台配完了,机器人回你一句「模型不可用」,你还得回头查两层。
先确认 Hermes 已安装并能正常运行。登录你的服务器,执行版本检查:
hermes --version hermes gateway status如果gateway status显示服务未安装,先跑一次初始化。Hermes 的网关是以服务形式常驻的,飞书和企业微信的长连接都挂在它下面。
hermes gateway setup这一步先不急着选平台,向导里可以跳过平台配置,只把网关服务装好。装完后hermes gateway status应该能看到 gateway 处于 running 状态。
接下来是模型通道。Hermes 需要一个大模型 API 来生成回复,这里用 TaoToken 的统一 Key。打开控制台创建 API Key:
- 模型对话入口:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
创建完 Key 后,在 Hermes 的模型配置里填入。Hermes 的配置文件通常在~/.hermes/config.toml,模型段大概长这样:
[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model_id = "claude-sonnet-4-20250514"注意 Base URL 用https://taotoken.net/api,不要带多余路径。Model ID 按你实际要用的模型填,文档里有完整列表。填完保存,跑一次模型连通性测试:
hermes model test返回正常补全结果,说明模型通道通了。这一步很关键,因为后面飞书和企业微信的消息最终都要经过这条通道。如果这里就报 401,先解决 Key 问题,别往下走。
环境确认清单:
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| Hermes 版本 | hermes --version | 正常输出版本号 |
| 网关服务 | hermes gateway status | running |
| 模型通道 | hermes model test | 返回补全内容 |
| 配置目录 | ls ~/.hermes/ | 存在 config.toml |
四项都过了,再进平台配置。我踩过的坑就是跳过模型测试直接配飞书,结果机器人上线后一直不回消息,查了半天日志才发现是模型 Key 填错了。
3. 飞书自建应用与 WebSocket 长连接可复制配置
飞书接入分创建应用、加机器人能力、配权限、拿凭证、配 Gateway、订阅事件、发布、配对八步。整体 15 到 20 分钟。
第 1 步,打开飞书开放平台,用企业管理员账号登录,创建「企业自建应用」,填名称比如 Hermes AI 助手。
第 2 步,进应用详情,添加应用能力,选「机器人」,务必勾选「开启交互式卡片」,否则后续按钮交互触发不了。
第 3 步,权限管理里批量添加以下权限:
im:message im:message.send_as_bot im:message.read im:message.group_at_msg im:message.p2p_msg contact:user.id:readonly im:resource加完点「发布权限变更」立即生效。
第 4 步,凭证与基础信息页复制 App ID(cli_开头)和 App Secret。
第 5 步,服务器上跑 Gateway 配置:
hermes gateway setup按提示选 Feishu,输入 App ID、App Secret,Domain 保持默认 feishu,Connection mode 选 WebSocket,配置群聊和私聊权限,确认安装服务。
第 6 步,飞书开放平台「事件与回调」里,订阅方式选「长连接」,添加事件im.message.receive_v1。这一步和 WebSocket 模式配套,不需要填回调 URL。
第 7 步,版本管理与发布里创建版本并发布。
第 8 步,在飞书里搜机器人名称发一条消息,命令行会提示配对命令:
hermes pairing approve <用户ID>运行后再次发消息测试。
飞书侧的配置片段,如果你用配置文件方式而不是向导,~/.hermes/config.toml里对应段落:
[platforms.feishu] app_id = "cli_xxxxxxxxxx" app_secret = "你的AppSecret" domain = "feishu" connection_mode = "websocket" enable_group = true enable_p2p = true三件套对照:Base URL 是模型侧的https://taotoken.net/api,Key 是 TaoToken 的sk-密钥,Model ID 是你在模型段填的那个。飞书侧的三件套则是 App ID、App Secret、事件订阅im.message.receive_v1,别混。
验证连接状态:
hermes gateway status看到 Feishu 为 connected 就通了。再做一次回环测试:私聊发「你好」,机器人应回复;群里 @机器人 发消息,也应触发。回调签名校验在长连接模式下由 SDK 内部处理,你不需要手动验签,但可以在日志里确认事件被正确解析:
hermes logs --platform feishu4. 企业微信智能机器人与双平台并行验证
企业微信走智能机器人的 API 模式,同样支持 WebSocket 长连接,无公网 IP 也能跑。
第 1 步,登录企业微信管理后台,进「管理工具」→「智能机器人」,创建机器人,填名称描述,选「API 模式」。
第 2 步,创建后拿到 Bot ID(ww开头)和 Bot Secret,保存好。
第 3 步,服务器上再跑一次 Gateway 配置:
hermes gateway setup选 WeCom,输入 Bot ID、Bot Secret,配置允许使用的用户,确认安装服务。
配置文件方式对应段落:
[platforms.wecom] bot_id = "wwxxxxxxxx" bot_secret = "你的BotSecret" connection_mode = "websocket" allowed_users = ["user1", "user2"]第 4 步,企业微信里找到机器人发消息测试。验证命令:
hermes gateway statusWeCom 显示 connected 即通。
双平台同时接入时,Hermes 支持多平台并行。向导里可以依次配飞书、企业微信,所有平台消息汇总到同一个 Hermes 对话。查看全部连接:
hermes platforms输出类似:
Connected platforms: - Feishu: Online - WeCom: Online逐项验证动作建议按这个顺序:先私聊回环,再群聊 @ 触发,最后看日志确认事件解析。飞书群聊 @ 触发依赖im:message.group_at_msg权限,企业微信群聊则要确认机器人已加入对应群。回调签名校验在长连接下由平台 SDK 处理,你只需确认日志里没有签名错误。
双平台并行时,模型侧共用同一套 TaoToken 凭证,所以两个机器人的回复风格、可用模型一致。如果想让飞书用 A 模型、企业微信用 B 模型,可以在平台段单独覆盖 model_id,但一般没必要,统一更省心。
5. 接入过程常见报错逐项排查
配双平台最容易遇到的几类报错,逐个对照。
401 未授权:模型侧报 401,说明 TaoToken Key 无效或过期。检查~/.hermes/config.toml里 api_key 是否完整,重新在控制台生成一个 Key 替换。平台侧报 401,飞书查 App Secret 是否复制完整,企业微信查 Bot Secret。
local proxy failed:这个报错通常出现在网关尝试连平台 WebSocket 时。先确认服务器能正常出网,再确认 Connection mode 确实选了 websocket 而不是 webhook。如果之前配过 webhook 模式,改回 websocket 后要重启网关:
hermes gateway restartreading choices 报错:这是模型返回格式解析失败,多半是 Model ID 填错或 Base URL 多了路径。确认 base_url 是https://taotoken.net/api,model_id 与文档一致。换一个模型 ID 再试。
OAuth 相关报错:飞书事件订阅如果误选了 webhook 模式,会要求 OAuth 回调,长连接模式不需要。回到「事件与回调」把订阅方式改成「长连接」。
配对失败:首次使用必须配对。给机器人发任意消息,命令行会显示hermes pairing approve <user_id>,复制运行。如果没显示,检查hermes gateway status是否 connected,以及日志里有没有收到消息事件。
企业微信机器人不响应:确认 Bot ID 和 Secret 正确,hermes config show | grep wecom核对;确认机器人已加入正确群聊;重启网关。
飞书消息无回应:hermes gateway status确认运行;飞书开放平台「事件与回调」确认长连接状态为绿色;hermes config show | grep feishu核对凭证;hermes logs --platform feishu看日志。
排错时记住三件套对照:模型侧 Base URL + Key + Model ID,平台侧凭证 + 连接模式 + 事件订阅。哪一层报错就查哪一层,别混着改。
6. 统一 Key 管理与后续接入入口
双平台跑通后,日常维护其实很轻。模型侧用 TaoToken 统一 Key,飞书和企业微信共用一套凭证,换模型只改 Model ID,不用动平台配置。平台侧凭证建议单独存一份,别写进代码库。
长期跑编码类或 Agent 类任务的话,可以看下 Coding Plan,额度更划算:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
需要验证模型回复质量、对比不同模型效果时,直接用模型对话页测:
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
接入过程中卡在凭证或报错,先翻接入文档,大部分 401、连接模式、事件订阅问题都有说明:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
Key 管理和新建都在控制台:
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
如果你用 Claude Code 做开发,想把它和 Hermes 的模型通道对齐,可以看 Claude Code 接入说明:
- Claude Code 接入:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
最后给一个实用技巧:双平台都配好后,跑一次hermes usage --days 7看用量,确认两个平台的调用都计入了同一套 Key。如果发现某个平台用量为 0,说明它的消息没走到模型层,回去查该平台的连接状态和事件订阅。这个检查比逐个发消息测试更快定位问题。