跳转到内容

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

在你最常用的 IM(Telegram / Discord / Slack 三选一)里 @Hermes,它能回复。


  • 已完成 Day 2,hermes 能在终端正常对话
  • 你选好了一个平台:没特殊偏好就选 Telegram——BotFather 一条命令就能拿到 token,门槛最低

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

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

这意味着两件事:

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

  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 装成后台服务(可选但推荐)

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

    Terminal window
    # 用户级服务(macOS launchd / Linux systemd --user)
    hermes gateway install
    hermes gateway start
    hermes gateway status

    之后 hermes gateway start/stop/status 就是你管理它的三个命令。


把机器人加到群里后,默认会看不见大部分消息——这是 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
● telegram: connected
● session: ready
# 在 Telegram / Discord / Slack 里:
你:@Hermes 9.8 和 9.11 哪个大?
Hermes:9.8 比 9.11 大。9.8 = 9.80,而 9.11 = 9.11,所以 9.80 > 9.11。