Appearance
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 内置适配器覆盖以下平台:
| 平台 | 文件 | 安装依赖 |
|---|---|---|
| Telegram | gateway/platforms/telegram.py | pip install python-telegram-bot |
| Discord | gateway/platforms/discord.py | pip install discord.py |
| Slack | gateway/platforms/slack.py | pip install slack-bolt |
gateway/platforms/whatsapp.py | WhatsApp Business API | |
| Signal | gateway/platforms/signal.py | signal-cli |
| Matrix | gateway/platforms/matrix.py | pip install matrix-nio |
| Mattermost | gateway/platforms/mattermost.py | pip install mattermostdriver |
| Home Assistant | gateway/platforms/homeassistant.py | Home Assistant 集成 |
gateway/platforms/email.py | IMAP/SMTP 配置 | |
| DingTalk | gateway/platforms/dingtalk.py | 钉钉企业内部应用 |
| Feishu/Lark | gateway/platforms/feishu.py | 飞书应用 |
Telegram 部署全流程
第一步:创建 Telegram Bot
- 在 Telegram 找
@BotFather - 发送
/newbot,按提示填入 Bot 名称和用户名 - 获取 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 不会直接执行,而是:
- 向用户推送一条待审批消息,附上操作描述
- 显示「✅ 批准」/ 「❌ 拒绝」的内联按钮
- 用户点击后,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 重试,或在应用层自己做幂等处理。