使用套接字模式 (Socket Mode) 将 Hermes Agent 作为机器人连接到 Slack。套接字模式使用 WebSocket 代替公开的 HTTP 端点,因此您的 Hermes 实例不需要公开可访问 —— 它可以在防火墙后面、您的笔记本电脑上或私有服务器上正常工作。
概述 (Overview)
Section titled “概述 (Overview)”| 组件 | 值 |
|---|---|
| 库 (Library) | 适用于 Python 的 slack-bolt / slack_sdk(套接字模式 / Socket Mode) |
| 连接方式 (Connection) | WebSocket —— 不需要公开的 URL |
| 所需的认证令牌 (Auth tokens needed) | 机器人令牌 (Bot Token, xoxb-) + 应用级令牌 (App-Level Token, xapp-) |
| 用户识别 (User identification) | Slack 成员 ID(例如:U01ABC2DEF3) |
第 1 步:创建 Slack 应用 (Create a Slack App)
Section titled “第 1 步:创建 Slack 应用 (Create a Slack App)”最快的方法是直接粘贴由 Hermes 为您生成的清单 (Manifest)。它会一次性声明每个内置的斜杠命令(/btw、/stop、/model……)、每个必需的 OAuth 作用域、每个事件订阅,并启用套接字模式 (Socket Mode)。
选项 A:从 Hermes 生成的清单创建(推荐)
Section titled “选项 A:从 Hermes 生成的清单创建(推荐)”- 生成清单:
hermes slack manifest --write此操作会将清单写入~/.hermes/slack-manifest.json并打印出粘贴说明。 - 前往
https://api.slack.com/apps→ 点击 Create New App → 选择 From an app manifest。 - 选择您的工作区,粘贴 JSON 内容,检查无误后点击 Next → Create。
- 直接跳到 第 6 步:将应用安装到工作区。清单已经自动为您处理好了作用域、事件和斜杠命令。
选项 B:从头开始创建(手动)
Section titled “选项 B:从头开始创建(手动)”- 前往
https://api.slack.com/apps。 - 点击 Create New App。
- 选择 From scratch。
- 输入应用名称(例如 “Hermes Agent”)并选择您的工作区。
- 点击 Create App。
您将进入该应用的 Basic Information 页面。请继续按照下方的第 2-6 步进行操作。
第 2 步:配置机器人令牌作用域
Section titled “第 2 步:配置机器人令牌作用域”在侧边栏中导航至 Features → OAuth & Permissions。向下滚动到 Scopes → Bot Token Scopes 并添加以下作用域:
| 作用域 (Scope) | 用途 (Purpose) |
|---|---|
| chat:write | 以机器人身份发送消息 |
| app_mentions:read | 检测何时在频道中被 @提及 |
| channels:history | 读取机器人所在公开频道中的消息 |
| channels:read | 列出并获取公开频道的信息 |
| groups:history | 读取机器人被邀请加入的私有频道中的消息 |
| im:history | 读取私信(纯私聊)的历史记录 |
| im:read | 查看基础的私信信息 |
| im:write | 开启并管理私信 |
| users:read | 查找用户信息 |
| files:read | 读取并下载附加的文件,包括语音留言/音频 |
| files:write | 上传文件(图片、音频、文档) |
可选作用域:
| 作用域 (Scope) | 用途 (Purpose) |
|---|---|
| groups:read | 列出并获取私有频道的信息 |
第 3 步:启用套接字模式 (Enable Socket Mode)
Section titled “第 3 步:启用套接字模式 (Enable Socket Mode)”套接字模式允许机器人通过 WebSocket 进行连接,而不需要公开的 URL。
- 在侧边栏中,前往 Settings → Socket Mode。
- 将 Enable Socket Mode 切换为 ON(开启)。
- 系统会提示您创建一个应用级令牌 (App-Level Token):
- 将其命名为类似于
hermes-socket的名称(名称叫什么并不重要)。 - 添加
connections:write作用域。 - 点击 Generate。
- 将其命名为类似于
- 复制该令牌 —— 它以
xapp-开头。这就是您的 SLACK_APP_TOKEN。
第 4 步:订阅事件 (Subscribe to Events)
Section titled “第 4 步:订阅事件 (Subscribe to Events)”这一步至关重要 —— 它控制着机器人可以接收并看到哪些消息。
- 在侧边栏中,前往 Features → Event Subscriptions。
- 将 Enable Events 切换为 ON(开启)。
- 展开 Subscribe to bot events(订阅机器人事件)并添加以下事件:
| 事件 (Event) | 是否必要? | 用途 (Purpose) |
|---|---|---|
| message.im | 是 | 机器人接收私信(纯私聊)消息 |
| message.channels | 是 | 机器人接收其已被加入的公开频道中的消息 |
| message.groups | 推荐 | 机器人接收其被邀请加入的私有频道中的消息 |
| app_mention | 是 | 防止机器人在被 @提及 时触发 Bolt SDK 错误 |
- 点击页面底部的 Save Changes(保存更改)。
缺失事件订阅是排在第 1 位的设置故障
如果机器人可以在私信中正常工作,但 在频道中不起作用,您几乎可以肯定忘记了添加 message.channels(针对公开频道)和/或 message.groups(针对私有频道)。如果没有这些事件,Slack 根本就不会把频道消息投递给机器人。
第 5 步:启用消息标签页 (Enable the Messages Tab)
Section titled “第 5 步:启用消息标签页 (Enable the Messages Tab)”这一步用来启用向机器人发送私信(DM)的功能。如果不启用此项,用户在尝试向机器人发送私信时会看到 “Sending messages to this app has been turned off”(向此应用发送消息功能已被关闭)的提示。
- 在侧边栏中,前往 Features → App Home。
- 向下滚动到 Show Tabs(显示标签页)区域。
- 将 Messages Tab 切换为 ON(开启)。
- 勾选 “Allow users to send Slash commands and messages from the messages tab”(允许用户从消息标签页发送斜杠命令和消息)。
不完成此步骤,私信功能将被完全阻断
即使您配置了所有正确的权限作用域(Scopes)和事件订阅(Event Subscriptions),只要不启用消息标签页,Slack 也不会允许用户向机器人发送私信。这是 Slack 平台的硬性要求,并非 Hermes 的配置问题。
第 6 步:将应用安装到工作区 (Install App to Workspace)
Section titled “第 6 步:将应用安装到工作区 (Install App to Workspace)”- 在侧边栏中,前往 Settings → Install App。
- 点击 Install to Workspace。
- 检查权限列表,然后点击 Allow(允许)。
- 授权完成后,您将看到一个以
xoxb-开头的 Bot User OAuth Token(机器人用户 OAuth 令牌)。 - 复制该令牌 —— 这就是您的 SLACK_BOT_TOKEN。
第 7 步:获取允许列表所需的用户 ID (User IDs for the Allowlist)
Section titled “第 7 步:获取允许列表所需的用户 ID (User IDs for the Allowlist)”Hermes 使用 Slack 成员 ID (Member IDs)(而非用户名或显示名称)来配置允许列表。
获取成员 ID 的方法如下:
- 在 Slack 中,点击该用户的名称或头像。
- 点击 View full profile(查看完整个人资料)。
- 点击 ⋮(更多)按钮。
- 选择 Copy member ID(复制成员 ID)。
成员 ID 的外观类似于 U01ABC2DEF3。您最少需要获取您自己的成员 ID。
第 8 步:配置 Hermes (Configure Hermes)
Section titled “第 8 步:配置 Hermes (Configure Hermes)”将以下内容添加到您的 ~/.hermes/.env 文件中:
# 必要配置SLACK_BOT_TOKEN=xoxb-your-bot-token-hereSLACK_APP_TOKEN=xapp-your-app-token-hereSLACK_ALLOWED_USERS=U01ABC2DEF3 # 以英文逗号分隔的成员 ID 列表
# 可选配置SLACK_HOME_CHANNEL=C01234567890 # 用于定时任务/计划消息的默认频道SLACK_HOME_CHANNEL_NAME=general # 主频道的人类可读名称(可选)或者运行交互式设置:
hermes gateway setup # 出现提示时选择 Slack然后启动网关:
hermes gateway # 在前台运行hermes gateway install # 安装为用户级服务sudo hermes gateway install --system # 仅限 Linux:安装为开机自启的系统级服务第 9 步:邀请机器人加入频道 (Invite the Bot to Channels)
Section titled “第 9 步:邀请机器人加入频道 (Invite the Bot to Channels)”启动网关后,您需要将机器人 邀请 到您希望它做出回应的任何频道中:
/invite @Hermes Agent机器人 不会 自动加入频道。您必须手动将它单独邀请到每个频道中。