跳转到内容

Day 3 · 入驻聊天室:微信 / Telegram / Discord / Slack

让 Hermes 出现在你每天都在用的 IM 里——国内大概率是微信,海外多半是 Telegram。今天完成任一条主线,就能在手机上 @ Hermes 并收到回复。


  • 已完成 Day 2,hermes 能在终端正常对话
  • 选好一个平台起步。拿不定主意的话:
    • 日常用微信 → 走主线一(微信)
    • 喜欢折腾 / 想最低门槛 → 走主线二(Telegram)
    • Discord / Slack 往下翻「分支」章节

Hermes 在 IM 里说话靠的是 messaging gateway——一个独立于 hermes CLI 的长驻进程,职责是把各平台的消息翻译成 Hermes 能处理的对话。

┌──────────────┐ ┌────────────────────┐ ┌────────────┐
│ 微信 / │ ←→ │ hermes gateway │ ←→ │ Hermes │
│ Telegram / │ │ (长驻进程) │ │ 核心(LLM)│
│ Discord / │ └────────────────────┘ └────────────┘
│ Slack ... │
└──────────────┘

这意味着两件事:

  1. 终端里关掉 hermes 对 gateway 没有影响——gateway 是独立的。
  2. gateway 必须一直运行,机器人才会在线。可以前台跑(hermes gateway),也可以装成系统服务(hermes gateway install)。

主线一:微信(国内首选 · 30–45 分钟)

Section titled “主线一:微信(国内首选 · 30–45 分钟)”

微信适配器多了两个 Python 库,先装上:

Terminal window
pip install aiohttp cryptography
# 想让终端里直接画出二维码(推荐):
pip install "hermes-agent[messaging]"
Terminal window
hermes gateway setup

向导会让你选平台——选 Weixin。然后:

  1. 终端里会显示一张二维码(如果装了 hermes-agent[messaging]),或给你一个图片路径
  2. 手机微信扫一扫这张二维码
  3. 手机上点「确认登录」
  4. 向导自动把 account_idtokenbase_url 写入 ~/.hermes/.env,凭证本体落在 ~/.hermes/weixin/accounts/ 目录里(这些是明文,别上传到 Git)

向导跑完后,.env 里会长这样:

Terminal window
WEIXIN_ACCOUNT_ID=xxxxxxxx
WEIXIN_TOKEN=xxxxxxxxxxxxxxxxxxxxxx
WEIXIN_DM_POLICY=pairing
WEIXIN_HOME_CHANNEL= # 想发主动通知时填

首次登录默认 dm_policy=pairing(谁都可以发消息进来走配对流程)。日常使用应该改成 allowlist,只让自己和指定的人能聊:

~/.hermes/.env
WEIXIN_DM_POLICY=allowlist
WEIXIN_ALLOWED_USERS=wxid_xxxxxxxxxxxx # 你自己微信号的 wxid

不知道自己 wxid 怎么拿?先启动 gateway 自己给机器人发一条消息,日志里会打印出发件人的 wxid,复制下来填回来就行。

Terminal window
hermes gateway

看到类似下面的日志说明通了:

gateway online · weixin connected · account=xxxx · long-poll=35s

手机微信打开你机器人那个号(或进入你和它的私聊),发一条:

你好,现在几点?

正常情况下机器人会回复当前时间。如果没反应——先去看「常见问题」章节里的微信部分。

前台跑只适合测试。要 7×24 在线:

Terminal window
hermes gateway install
hermes gateway start
hermes gateway status

能力说明
图片 / 视频 / 文件 / 语音都支持。Tencent CDN 里的加密(AES-128-ECB)gateway 自动帮你解
单条消息长度最多 4000 字符,超出会在合理位置自动拆成多条
Markdown 链接gateway 会把 [文字](url) 渲染成微信可点的引用卡片
主动推送设置 WEIXIN_HOME_CHANNEL 后,cron 或定时任务可以往这个对话推消息

如果你要接的是企业微信(WeCom),而不是个人微信,走的是另一条路——

维度个人微信(Weixin)企业微信(WeCom)
适配器weixin(iLink Bot)wecom
传输HTTP 长轮询WebSocket 长连接
凭证扫码登录,token 有状态管理后台创建 AI Bot,拿 BOT_ID / SECRET
群聊默认disabledopen(企业场景天然需要)
加密AES-128-ECBAES-256-CBC

启动方式一样是 hermes gateway setup 选 WeCom。.env 里换成:

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

完整流程见官方 WeCom 文档,这里不展开。


  1. 在 BotFather 注册机器人

    在 Telegram 搜索 @BotFather 或打开 t.me/BotFather,按顺序发:

    /newbot
    Hermes Agent ← 显示名(任意)
    my_hermes_bot ← 用户名(必须以 bot 结尾,全局唯一)

    BotFather 会返回一段形如 123456789:ABCdef... 的 token,这就是你机器人的密码,泄漏等同把机器人拱手让人。

  2. 找到你自己的 Telegram user ID

    Gateway 的白名单用的是数字 user ID,不是用户名。在 Telegram 搜 @userinfobot,发一条消息,它会返回你的 ID(类似 987654321)。

  3. 运行配置向导

    回到终端:

    Terminal window
    hermes gateway setup

    向导会问你:平台选什么(选 Telegram)→ 粘贴 token → 粘贴允许使用的 user ID。向导会自动写入 ~/.hermes/.env

    Terminal window
    TELEGRAM_BOT_TOKEN=123456789:ABCdef...
    TELEGRAM_ALLOWED_USERS=987654321
  4. 启动 Gateway(前台)

    Terminal window
    hermes gateway

    看到 gateway online · telegram connected 这类日志就说明通了。不要关闭这个终端,关了机器人就离线。

  5. 在 Telegram 里对话

    打开你刚建的机器人(BotFather 返回消息里有 t.me/xxx 链接),点「开始」然后发一条:

    你好,现在几点?

    正常响应:机器人回复当前时间并说明它用 terminal 工具查的。

  6. 把 Gateway 装成后台服务(可选但推荐)

    命令与微信主线 Step 6 完全相同:hermes gateway install && hermes gateway start

Telegram 群聊:privacy mode 和 @mention

Section titled “Telegram 群聊:privacy mode 和 @mention”

把机器人加到群里后,默认会看不见大部分消息——这是 Telegram 的 privacy mode:机器人只能看到 / 开头的命令、直接回复它的消息、以及 @机器人 的消息。

两种处理方式,选一种:

方式操作效果
保留 privacy mode(推荐)不动设置,在群里用 @my_hermes_bot 问题 触发机器人只在被 @ 时响应,不刷屏
关闭 privacy modeBotFather → /mybots → Bot Settings → Group Privacy → Turn off,然后把机器人从群里踢掉再重新拉进群机器人能看到所有消息。需要配合 require_mention: true 否则会乱回

关闭 privacy 后,用下面这段 ~/.hermes/config.yaml 限制只在 @ 或特定关键词时响应:

telegram:
require_mention: true
mention_patterns:
- "^\\s*小助手\\b" # 叫「小助手」也触发

  1. 建 Application + BotDiscord Developer Portal → New Application → 侧栏 Bot → Reset Token(只显示一次,立刻复制)。

  2. 必须开两个 Privileged Intent(90% 的”机器人不回复”都是这里漏开的):

    • Server Members Intent
    • Message Content Intent ← 不开这个,机器人会收到消息事件但文本是空的
  3. 邀请 bot 进服务器,权限整数用推荐值 274878286912(包含发消息、读历史、发附件、加反应等):

    https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=274878286912
  4. 找 user ID:Discord 设置 → 高级 → 打开「开发者模式」→ 右键自己的名字 → 复制 User ID。

  5. .env 要写

    Terminal window
    DISCORD_BOT_TOKEN=...
    DISCORD_ALLOWED_USERS=你的_user_id
  6. 再跑一次 hermes gateway setup 选 Discord,或直接 hermes gateway 启动。


api.slack.com/apps 建应用,然后:

步骤关键点
OAuth & Permissions至少加这些 bot scope:chat:writeapp_mentions:readchannels:historyim:historyim:writeusers:readfiles:readfiles:write
Socket Mode打开开关,生成 App-Level Tokenxapp- 开头)
Event Subscriptions订阅 message.immessage.channelsapp_mention90% 的”机器人不回复”是这一步漏订阅
Install to Workspace生成 Bot Tokenxoxb- 开头)

两个 token 写到 ~/.hermes/.env

Terminal window
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
SLACK_ALLOWED_USERS=U01XXXXX # Slack user ID,不是用户名

最后在目标频道执行 /invite @Hermes Agent,机器人才会看到该频道的消息。


无论你选哪个平台,本章完成的标志是:

$ hermes gateway status
● gateway: running
● weixin: connected # 或 telegram / discord / slack
● session: ready

然后在对应的 IM 里:

你:@Hermes 9.8 和 9.11 哪个大?
Hermes:9.8 比 9.11 大。9.8 = 9.80,而 9.11 = 9.11,所以 9.80 > 9.11。