Slack 设置#
使用 Socket Mode 将 Hermes Agent 作为机器人连接到 Slack。Socket Mode 使用 WebSocket 而非公开 HTTP 端点,因此你的 Hermes 实例无需公开访问——它可以在防火墙后、笔记本电脑上或私有服务器上正常运行。使用 RTM API 的经典 Slack 应用已于 2025 年 3 月完全弃用。Hermes 使用带有 Socket Mode 的现代 Bolt SDK。如果你有旧的经典应用,必须按照以下步骤创建新应用。
| 组件 | 值 |
|---|
| 库 | Python 的 slack-bolt / slack_sdk(Socket Mode) |
| 连接方式 | WebSocket——无需公开 URL |
| 所需认证令牌 | Bot Token(xoxb-)+ App-Level Token(xapp-) |
| 用户标识 | Slack Member ID(例如 U01ABC2DEF3) |
第一步:创建 Slack 应用#
最快的方式是粘贴 Hermes 为你生成的 manifest(清单文件)。它会一次性声明所有内置斜杠命令(/btw、/stop、/model……)、所有必需的 OAuth 权 限范围、所有事件订阅,并启用 Socket Mode。方式 A:使用 Hermes 生成的 manifest(推荐)#
1.
此命令会将 ~/.hermes/slack-manifest.json 写入磁盘并打印粘贴说明。 3.
选择你的工作区,粘贴 JSON 内容,检查后点击 Next → Create
4.
直接跳至第六步:将应用安装到工作区。manifest 已为你处理好权限范围、事件和斜杠命令。
方式 B:从头手动创建#
4.
输入应用名称(例如 "Hermes Agent")并选择你的工作区
你将进入应用的 Basic Information 页面。继续执行下方第 2–6 步。
第二步:配置 Bot Token 权限范围#
在侧边栏导航至 Features → OAuth & Permissions。向下滚动至 Scopes → Bot Token Scopes,添加以下权限:| 权限范围 | 用途 |
|---|
chat:write | 以机器人身份发送消息 |
app_mentions:read | 检测在频道中被 @ 提及的情况 |
channels:history | 读取机器人所在公开频道的消息 |
channels:read | 列出并获取公开频道信息 |
groups:history | 读取机器人被邀请加入的私有频道消息 |
im:history | 读取私信历史记录 |
im:read | 查看基本私信信息 |
im:write | 打开并管理私信 |
users:read | 查询用户信息 |
files:read | 读取并下载附件文件,包括语音备忘录/音频 |
files:write | 上传文件(图片、音频、文档) |
:::caution 缺少权限范围 = 功能缺失
没有 channels:history 和 groups:history,机器人将无法接收频道消息——它只能在私信中工作。没有 files:read,Hermes 可以聊天,但无法可靠读取用户上传的附件。这是最常被遗漏的权限范围。
:::| 权限范围 | 用途 |
|---|
groups:read | 列出并获取私有频道信息 |
第三步:启用 Socket Mode#
Socket Mode 让机器人通过 WebSocket 连接,无需公开 URL。1.
在侧边栏前往 Settings → Socket Mode
2.
将 Enable Socket Mode 切换为开启
3.
系统会提示你创建一个 App-Level Token:命名为类似 hermes-socket 的名称(名称不重要)
添加 connections:write 权限范围
4.
复制该令牌——它以 xapp- 开头。这就是你的 SLACK_APP_TOKEN
你随时可以在 Settings → Basic Information → App-Level Tokens 下找到或重新生成 App-Level Token。
第四步:订阅事件#
1.
在侧边栏前往 Features → Event Subscriptions
3.
展开 Subscribe to bot events 并添加:
| 事件 | 是否必需 | 用途 |
|---|
message.im | 必需 | 机器人接收私信 |
message.channels | 必需 | 机器人接收其加入的公开频道消息 |
message.groups | 推荐 | 机器人接收被邀请加入的私有频道消息 |
app_mention | 必需 | 防止机器人被 @ 提及时出现 Bolt SDK 错误 |
如果机器人在私信中正常工作但在频道中不响应,你几乎肯定忘记添加 message.channels(公开频道)和/或 message.groups(私有频道)。没有这些事件,Slack 根本不会将频道消息传递给机器人。
第五步:启用 Messages Tab#
此步骤启用对机器人的私信功能。没有它,用户在尝试私信机器人时会看到**"向此应用发送消息已被关闭"**的提示。1.
在侧边栏前往 Features → App Home
4.
勾选 "Allow users to send Slash commands and messages from the messages tab"
:::danger 没有此步骤,私信将被完全屏蔽
即使拥有所有正确的权限范围和事件订阅,除非启用 Messages Tab,否则 Slack 不允许用户向机器人发送私信。这是 Slack 平台的要求,而非 Hermes 的配置问题。
:::
第六步:将应用安装到工作区#
1.
在侧边栏前往 Settings → Install App
4.
授权后,你将看到一个以 xoxb- 开头的 Bot User OAuth Token
5.
复制此令牌——这就是你的 SLACK_BOT_TOKEN
如果你之后更改了权限范围或事件订阅,必须重新安装应用才能使更改生效。Install App 页面会显示提示横幅。
第七步:查找用于白名单的用户 ID#
Hermes 使用 Slack Member ID(而非用户名或显示名称)作为白名单。Member ID 格式类似 U01ABC2DEF3。你至少需要自己的 Member ID。
第八步:配置 Hermes#
将以下内容添加到你的 ~/.hermes/.env 文件:
第九步:将机器人邀请到频道#
启动 gateway 后,你需要邀请机器人加入希望它响应的频道:
斜杠命令#
每个 Hermes 命令(/btw、/stop、/new、/model、/help……)都是原生 Slack 斜杠命令——与它们在 Telegram 和 Discord 上的工作方式完全相同。在 Slack 中输入 /,自动补全选择器会列出每个 Hermes 命令及其描述。底层实现:Hermes 附带一个生成的 Slack 应用 manifest(见第一步,方式 A),它将 COMMAND_REGISTRY 中的每个命令声明为斜杠命令。在 Socket Mode 下,无论 manifest 的 url 字段如何,Slack 都会通过 WebSocket 路由命令事件。更新后刷新斜杠命令#
当 Hermes 添加新命令时(例如执行 hermes update 后),重新生成 manifest 并更新你的 Slack 应用:2.
Features → App Manifest → Edit
3.
粘贴 ~/.hermes/slack-manifest.json 的新内容
4.
保存。如果权限范围或斜杠命令有变化,Slack 会提示重新安装应用。
旧版 /hermes <子命令> 仍然有效#
为了向后兼容旧版 manifest,你仍然可以输入 /hermes btw run the tests——Hermes 会以与 /btw run the tests 相同的方式路由它。自由形式的问题也有效:/hermes what's the weather? 会被当作普通消息处理。在话题(thread)中使用命令(!cmd 前缀)