Skip to content

Hermes Gateway 模式把 AI 助手部署到消息平台,用户在 Telegram / Discord / Slack 里发消息,Hermes 处理后回复。相比 CLI 模式,Gateway 的核心差异是:持久后台运行、多用户并发、审批流程(危险命令需用户点击确认)、以及后台任务状态推送。下面以 Telegram 为主线,演示完整部署流程。

Hermes Agent 消息网关部署:把 AI 助手接入 Telegram、Discord 和 Slack

Gateway 模式 vs CLI 模式

维度CLI 模式Gateway 模式
运行方式终端交互,前台进程后台服务,持久运行
工作目录os.getcwd()(当前目录)MESSAGING_CWD 环境变量(默认 home 目录)
多用户单用户多用户并发(按 chat_id 隔离会话)
审批流程终端交互确认平台内联键盘按钮点击确认
后台任务阻塞前台异步推送状态通知
斜杠命令CLI 命令平台原生命令菜单(Telegram BotCommand 等)

两种模式的 Skill 和工具系统是共享的——在 CLI 写的 Skills 在 Gateway 里同样有效。

支持的平台

Hermes 内置适配器覆盖以下平台:

平台文件安装依赖
Telegramgateway/platforms/telegram.pypip install python-telegram-bot
Discordgateway/platforms/discord.pypip install discord.py
Slackgateway/platforms/slack.pypip install slack-bolt
WhatsAppgateway/platforms/whatsapp.pyWhatsApp Business API
Signalgateway/platforms/signal.pysignal-cli
Matrixgateway/platforms/matrix.pypip install matrix-nio
Mattermostgateway/platforms/mattermost.pypip install mattermostdriver
Home Assistantgateway/platforms/homeassistant.pyHome Assistant 集成
Emailgateway/platforms/email.pyIMAP/SMTP 配置
DingTalkgateway/platforms/dingtalk.py钉钉企业内部应用
Feishu/Larkgateway/platforms/feishu.py飞书应用

Telegram 部署全流程

第一步:创建 Telegram Bot

  1. 在 Telegram 找 @BotFather
  2. 发送 /newbot,按提示填入 Bot 名称和用户名
  3. 获取 Bot Token(形如 7853....:AAH...

第二步:安装平台依赖

bash
source venv/bin/activate
pip install "python-telegram-bot[job-queue]"

第三步:配置 Bot Token

env
# ~/.hermes/.env
TELEGRAM_BOT_TOKEN=7853....:AAH....

第四步:启动 Gateway

bash
hermes gateway telegram

看到以下输出表示成功:

[hermes] Telegram gateway started
[hermes] Bot @YourBotName is ready

第五步:测试

打开 Telegram,找到你的 Bot,发送 你好 看是否有回复。

发送 /help 查看可用斜杠命令列表。

斜杠命令在 Gateway 里的行为

Hermes 的斜杠命令通过中央注册表统一管理(hermes_cli/commands.py)。启动 Telegram Gateway 时,Hermes 自动把命令注册为 Telegram BotCommand,用户能看到原生的命令菜单。

常用 Gateway 命令:

/model        切换当前模型
/clear        清空当前会话上下文
/tools        查看启用的工具
/skills       浏览安装的 Skills
/background   查看后台任务状态
/help         查看所有命令

注意:部分命令是 CLI 专用(cli_only: true),不在 Gateway 里显示。

审批流程(危险命令)

当 AI 想执行可能有风险的操作(删除文件、运行 shell 命令、访问敏感目录),Hermes Gateway 不会直接执行,而是:

  1. 向用户推送一条待审批消息,附上操作描述
  2. 显示「✅ 批准」/ 「❌ 拒绝」的内联按钮
  3. 用户点击后,Hermes 继续或取消操作

这是 Gateway 模式相比 CLI 模式的关键安全优势——异步审批,不需要用户盯着终端。

后台任务通知

长时间运行的任务(shell 命令、批处理、爬虫)在后台执行,Gateway 主动推送状态更新。

通知详细程度可配置:

yaml
# ~/.hermes/config.yaml
display:
  background_process_notifications: "result"  # 只推送最终结果
  # 可选值:
  # "all"    - 运行中更新 + 最终消息(默认)
  # "result" - 只推送最终完成消息
  # "error"  - 只在失败时推送
  # "off"    - 关闭所有推送

多 Profile 和 Gateway 隔离

如果你同时运行多个平台的网关(Telegram + Discord),推荐用 Profile 隔离:

bash
hermes --profile telegram gateway telegram
hermes --profile discord gateway discord

每个 Profile 有独立的会话历史、配置和 API Key,互不干扰。同一个 Platform 同时用两个不同 Bot Token,Hermes 会通过 acquire_scoped_lock() 防止同一 Token 被多个进程重复使用。

FAQ

Q: Telegram Bot 怎么设置只允许特定用户使用?

~/.hermes/config.yaml 里配置允许的用户 ID:

yaml
gateway:
  telegram:
    allowed_user_ids: [123456789, 987654321]

不在列表里的用户发消息会被忽略(无回复)。

Q: Gateway 模式的工作目录怎么指定?

设置环境变量 MESSAGING_CWD

bash
MESSAGING_CWD=/home/user/projects hermes gateway telegram

或者在 ~/.hermes/.env 里写死。不设置默认是 home 目录。

Q: 能同时启动多个平台的网关吗?

可以,每个平台用独立进程启动。建议用 systemd / supervisor / Docker 管理进程,确保重启后自动拉起。

Q: Gateway 崩溃后未处理的消息会丢失吗?

会。Hermes Gateway 不是消息队列,没有持久化未处理消息的机制。如果需要高可靠性,建议在平台侧配置 Webhook 重试,或在应用层自己做幂等处理。