Hermes 集成

Hermes Telegram 保姆级接入:BotFather、私聊、群聊与 12 项验收

从 BotFather 创建测试 bot,按 T01–T12 验证数字 user ID、默认拒绝、私聊、session、Privacy Mode、群 mention、命令分层、附件与停用。

生态 连接 预计 50 分钟 更新 2026/9/9 核验 2026/9/9
本页目录
官方文档核验 · 尚未运行实测查看验证范围

已核读当前 Telegram、Messaging Gateway 与 Slash Commands 文档,并静态检查配置填空模板和 T01–T12;未创建 Telegram bot、保存 token、运行 gateway 或进入真实群聊。

完成结果

学完后你会留下什么

一份填好的 T01–T12 Telegram 验收表,包含授权私聊、未授权拒绝、session、群 mention、命令层级、附件、暂停和停止证据。

参考版本
v0.21.1 / v2026.9.7(文档核读)
平台
macOS / Windows / Linux / Android
任务模式
Agent
权限
高权限
积分影响
适合谁
已经跑通 Hermes CLI,希望从一个自控 Telegram 私聊开始远程使用 Agent 的用户
开始前确认
  • 已完成 Hermes 固定首聊
  • 拥有 Telegram 账号和第二个自控测试账号
  • 已创建独立 Hermes 测试 profile
  • 暂不接生产群或客户群

这是一条从零到可撤销的 Telegram 接入路线。你会先在个人私聊证明 bot、Hermes profile、授权和 session 都正确,再进入一个测试群。任何一步失败都停在当前层,不同时改 BotFather、Gateway、模型和群权限。

本课使用两个唯一标记:私聊 TG-CANARY-417,群聊 TG-GROUP-418。它们没有敏感信息,适合出现在日志和验收表中。

本站验证范围: 本页于 2026-09-09 核读 v0.21.1 / v2026.9.7 当前 Telegram、Messaging Gateway 和 Slash Commands;没有创建真实 bot、保存 token、运行 Gateway 或加入群聊。

下载实验材料

模板只能离线填写。不要把填过 token 的副本提交 Git、发进聊天、上传网盘或截图到验收表。

准备:在 BotFather 创建专用测试 bot

打开 Telegram 的官方 @BotFather

  1. 发送 /newbot
  2. 设置可辨认的 display name;
  3. 设置以 bot 结尾的唯一 username;
  4. 收到 API token 后只放进目标 profile 的 .env
  5. 验收表只记录 bot username 和 token 已保存,不记录 token 本身。

如果 token 曾出现在 Git、截图、公开聊天或日志附件,立刻在 BotFather 使用 /revoke,用新 token 重新验收。删除泄露消息不能恢复秘密性。

T01:找到数字 user ID 并配置

Hermes 授权使用数字 Telegram user ID,不使用 @username。官方当前推荐向 @userinfobot 获取;也可以使用文档列出的其他方法。将 ID 写入目标 profile 的配置,但公开验收记录只留后四位。

运行:

hermes dump
hermes gateway setup

在向导中只选 Telegram,输入 bot token 和允许的数字 user ID。手工配置时核心环境变量是:

TELEGRAM_BOT_TOKEN=<真实 token>
TELEGRAM_ALLOWED_USERS=<你的数字 user ID>

没有 TELEGRAM_ALLOWED_USERS 时,当前 Hermes 默认拒绝所有人。不要用开放通配符绕过这一安全默认值。

T02:前台启动并看清错误层

hermes gateway

通过标准是 Telegram adapter 初始化,没有 InvalidToken、重复 token、代理或 polling/webhook 冲突。终端保持运行只证明进程层;还不能证明你的账号已授权或回复能送达。

若同一 token 正由另一个 Hermes profile、旧服务或其他 bot 程序 polling,先停止旧消费者。不要同时启动多个进程抢同一个 bot。

T03–T04:先完成授权私聊

用允许账号打开 bot 私聊,先发送:

/whoami

记录当前 scope、tier 和命令列表。如果显示 unrestricted 而你计划区分管理员和普通用户,先修正命令权限,再继续。

然后发送:

请只回复 TG-CANARY-417,不调用工具,不补充解释。

同一私聊收到精确标记才算 T04 通过。模型回复正确但出现在另一个 chat,属于路由硬失败。

T05:必须做未授权账号负例

使用第二个自控 Telegram 账号向 bot 发送无害问候。预期没有 Agent 回复,Gateway 的脱敏日志显示拒绝或忽略,并且没有启动模型 turn。

不要找陌生人测试,也不要让测试账号发送敏感内容。这个负例只证明 allowlist 门禁,不需要真实攻击样本。

T06:验证 session 不是 Memory

授权私聊运行:

/status
/title telegram-dm-canary

重启 Gateway 后再次 /status,当前 session 应继续存在。随后执行:

/new telegram-clean-room
/status

只有 /new/reset 才创建新会话。重启后能接上上下文属于 session persistence,不证明长期 Memory;新会话仍知道长期事实时,再按 Memory 教程区分来源。

T07:理解 BotFather Privacy Mode

Telegram 群聊有两层门:

  1. BotFather Privacy Mode 决定 Telegram 会把哪些群消息交给 bot;
  2. Hermes allowlist 与 mention 规则 决定已收到的消息是否触发 Agent。

Privacy Mode 默认开启时,bot 主要能收到 slash command、直接回复 bot、服务消息,以及它作为管理员时的频道消息。若你关闭 Privacy Mode,必须把 bot 从既有群移除后重新加入,Telegram 才会刷新该群的投递行为。把 bot 升为群管理员也会让它看到更多消息,但会扩大平台权限,需要单独记录理由。

第一轮建议保持 Privacy Mode 开启,只测试明确 mention 或回复,不要求 bot 观察全部群聊。

T07–T09:只进入一个测试群

先分清数字 chat ID 与 user ID。当前 Hermes 的两种群授权是任选一种权限模型TELEGRAM_GROUP_ALLOWED_USERS 只授权指定发送者;TELEGRAM_GROUP_ALLOWED_CHATS 授权该群的所有成员。为了让 T09 能验证未授权成员,首轮只使用发送者授权:

TELEGRAM_GROUP_ALLOWED_USERS=<允许触发的 user ID>

并保持:

telegram:
  require_mention: true
  observe_unmentioned_group_messages: false

重启 Gateway 后按顺序测试:

  1. 授权用户发送一条不 mention 的普通消息,bot 不应回复;
  2. 授权用户发送 @botusername 请只回复 TG-GROUP-418,bot 应在同群回复;
  3. 未授权测试账号 mention bot,不应启动 Agent;
  4. bot 不加入任何其他群;首轮不扩大入口范围。

如果私聊正常、群聊沉默,按“Telegram 投递 → 重新入群 → 用户/chat allowlist → require_mention”顺序排查。不要先换模型。

可选:观察群聊但只在 mention 时回复

当确实需要后续 mention 使用前文时,可在明确 allowlist 群开启:

telegram:
  allowed_chats:
    - "<测试群 chat ID>"
  group_allowed_chats:
    - "<测试群 chat ID>"
  require_mention: true
  observe_unmentioned_group_messages: true

这需要 Telegram 实际投递普通群消息,因此要关闭 Privacy Mode 或把 bot 设为管理员。未 mention 消息会进入共享 chat/topic session 作为 observed context,但不触发 Agent。扩大可见范围前先确认群成员知情、保留周期和敏感信息规则。

T10:限制普通用户的 slash command

当前命令分层放在 gateway.platforms.telegram.extra

gateway:
  platforms:
    telegram:
      enabled: true
      extra:
        allow_admin_from:
          - "<DM 管理员 user ID>"
        user_allowed_commands:
          - status
        group_allow_admin_from:
          - "<群管理员 user ID>"
        group_user_allowed_commands:
          - status

普通用户始终可以使用 /help/whoami。DM admin 不自动成为 group admin;两个 scope 分别验收。让普通用户尝试一个未列出的无害命令,必须被拒绝。

T11:发送一个无害附件

在授权私聊上传一个不含隐私的 .txt,要求只返回文件名和一行摘要。记录是否收到正确文件、是否调用预期工具、是否出现无关主机路径。

如果 Agent 在 Docker backend 中生成文件,最终 MEDIA:/... 必须对运行 Gateway 的主机可读。容器内 /workspace/report.txt 存在,并不代表主机 Gateway 能发送它;需要明确共享 volume 和 host-visible path。

不要在首轮测试语音、超大文件、本地 Bot API 或 webhook。它们有独立网络、文件和权限变量,等 T01–T12 通过后再单独验收。

T12:暂停、恢复和停用

在 chat 或 CLI 中:

/platform pause telegram
/platform list

暂停期发送金丝雀;恢复后它不应补跑:

/platform resume telegram

最后停止 Gateway:

hermes gateway stop
hermes gateway status

若决定弃用,再在 BotFather /revoke 并移除测试群中的 bot。停止进程、删除 bot 成员和撤销 token 是三个不同动作。

完成检查

  • token 只存在于目标 profile 的秘密文件,验收表没有复制它。
  • 授权私聊的 /whoami 和精确金丝雀通过。
  • 第二个自控账号被拒绝,没有 Agent turn。
  • 你用 /new 证明 session 边界,没有把重启误判为新会话。
  • 测试群同时通过 unmentioned 静默、authorized mention 回复与 unauthorized mention 拒绝。
  • 普通用户的 slash command 范围符合预期。
  • 附件、pause/resume、stop 和 token revoke 路径都有记录。

完成后回到 Messaging Gateway 运维手册 填完 G01–G12。需要把结果定时发回 Telegram 时,再进入 Hermes Cron 自动化,不要在本轮同时增加自动触发变量。

官方资料

版本和参数,以这些来源为准

本文按实际任务重写,快速变化的信息仍应在操作前回到官方页面核对。

常见问题

继续操作前,先确认这些边界

没有设置 `TELEGRAM_ALLOWED_USERS` 会允许所有人吗?

不会。当前 Hermes 默认拒绝所有 Telegram 用户;必须填写数字 user ID 或使用明确的 pairing 流程。Telegram username 不能代替数字 ID。

Bot 在私聊正常,为什么群里完全不响应?

按顺序检查 Telegram 是否把消息交给 bot、修改 Privacy Mode 后是否移除并重新加入、Hermes 的用户/chat allowlist,以及 `require_mention` 是否要求 mention、回复或命令。

关闭 BotFather Privacy Mode 就会回复所有群消息吗?

不会。Privacy Mode 决定 Telegram 向 bot 投递哪些消息;Hermes 的 allowed users/chats 与 require_mention 再决定是否触发 Agent。观察普通群消息也不等于自动回复。

继续学习

按当前任务继续推进