跳到主要内容

Mattermost 设置

Hermes Agent 作为 Bot 与 Mattermost 集成,让你通过私信或团队频道与 AI 助手聊天。Mattermost 是一个自托管的开源 Slack 替代方案 — 你在自己的基础设施上运行它,完全控制你的数据。Bot 通过 Mattermost 的 REST API(v4)和 WebSocket 连接实时事件,通过 Hermes Agent 管道处理消息(包括工具使用、记忆和推理),并实时响应。它支持文本、文件附件、图片和斜杠命令。

无需外部 Mattermost 库 — 适配器使用 aiohttp,它已经是 Hermes 的依赖。

在设置之前,先了解大多数人最关心的部分:Hermes 在你的 Mattermost 实例中的行为。

Hermes 的行为

上下文行为
私信Hermes 响应每条消息。无需 @mention。每个私信有独立的会话。
公共/私有频道Hermes 在你 @mention 它时响应。没有提及,Hermes 忽略消息。
线程如果设置了 MATTERMOST_REPLY_MODE=thread,Hermes 在你的消息下方的线程中回复。线程上下文与父频道隔离。
多用户共享频道默认情况下,Hermes 在频道内按用户隔离会话历史。两个在同一频道中与 Hermes 交谈的人不会共享一个对话记录,除非你明确禁用此功能。
提示

如果你希望 Hermes 以线程对话方式回复(嵌套在你的原始消息下),设置 MATTERMOST_REPLY_MODE=thread。默认为 off,在频道中发送平面消息。

Mattermost 中的会话模型

默认情况下:

  • 每个私信有自己的会话
  • 每个线程有自己的会话命名空间
  • 共享频道中的每个用户在该频道内有自己的会话

这通过 config.yaml 控制:

group_sessions_per_user: true

仅在你明确希望整个频道共享一个对话时设为 false

group_sessions_per_user: false

共享会话对协作频道有用,但也意味着:

  • 用户共享上下文增长和 Token 费用
  • 一个人的长时间工具密集任务会膨胀其他所有人的上下文
  • 一个人的运行中任务可以中断另一个人的后续消息

本指南将带你完成完整的设置过程 — 从在 Mattermost 上创建 Bot 到发送你的第一条消息。

第 1 步:启用 Bot 账户

在创建 Bot 之前,必须在你的 Mattermost 服务器上启用 Bot 账户功能。

  1. System Admin 身份登录 Mattermost。
  2. 进入 System ConsoleIntegrationsBot Accounts
  3. Enable Bot Account Creation 设为 true
  4. 点击 Save
信息

如果你没有 System Admin 权限,请你的 Mattermost 管理员启用 Bot 账户并为你创建一个。

第 2 步:创建 Bot 账户

  1. 在 Mattermost 中,点击 菜单(左上角)→ IntegrationsBot Accounts
  2. 点击 Add Bot Account
  3. 填写详情:
    • Username:如 hermes
    • Display Name:如 Hermes Agent
    • Description:可选
    • RoleMember 即可
  4. 点击 Create Bot Account
  5. Mattermost 会显示 Bot Token立即复制它。
Token 仅显示一次

Bot Token 仅在创建 Bot 账户时显示一次。如果丢失,需要从 Bot 账户设置中重新生成。永远不要公开分享你的 Token 或提交到 Git — 拥有此 Token 的人可以完全控制 Bot。

将 Token 存储在安全的地方(如密码管理器)。第 5 步会用到。

提示

你也可以使用个人访问令牌替代 Bot 账户。进入 ProfileSecurityPersonal Access TokensCreate Token。这在你希望 Hermes 以你的身份而非独立 Bot 用户发布时有用。

第 3 步:将 Bot 添加到频道

Bot 需要成为你希望它响应的任何频道的成员:

  1. 打开你希望 Bot 加入的频道。
  2. 点击频道名称 → Add Members
  3. 搜索你的 Bot 用户名(如 hermes)并添加。

对于私信,只需打开与 Bot 的私信 — 它可以立即响应。

第 4 步:查找你的 Mattermost 用户 ID

Hermes Agent 使用你的 Mattermost 用户 ID 来控制谁可以与 Bot 交互。查找方法:

  1. 点击你的头像(左上角)→ Profile
  2. 你的用户 ID 显示在资料对话框中 — 点击它即可复制。

你的用户 ID 是一个 26 字符的字母数字字符串,如 3uo8dkh1p7g1mfk49ear5fzs5c

注意

你的用户 ID 不是你的用户名。用户名是 @ 后面的内容(如 @alice)。用户 ID 是 Mattermost 内部使用的长字母数字标识符。

替代方案:你也可以通过 API 获取用户 ID:

curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-mattermost-server/api/v4/users/me | jq .id
提示

要获取频道 ID:点击频道名称 → View Info。频道 ID 显示在信息面板中。如果你想手动设置主频道,会需要这个。

第 5 步:配置 Hermes Agent

方案 A:交互式设置(推荐)

运行引导设置命令:

hermes gateway setup

在提示时选择 Mattermost,然后粘贴你的服务器 URL、Bot Token 和用户 ID。

方案 B:手动配置

将以下内容添加到你的 ~/.hermes/.env 文件:

# 必需
MATTERMOST_URL=https://mm.example.com
MATTERMOST_TOKEN=***
MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c

# 多个允许的用户(逗号分隔)
# MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c,8fk2jd9s0a7bncm1xqw4tp6r3e

# 可选:回复模式(thread 或 off,默认:off)
# MATTERMOST_REPLY_MODE=thread

# 可选:无需 @mention 即可响应(默认:true = 需要提及)
# MATTERMOST_REQUIRE_MENTION=false

# 可选:Bot 无需 @mention 即可响应的频道(逗号分隔的频道 ID)
# MATTERMOST_FREE_RESPONSE_CHANNELS=channel_id_1,channel_id_2

~/.hermes/config.yaml 中的可选行为设置:

group_sessions_per_user: true
  • group_sessions_per_user: true 保持每个参与者的上下文在共享频道和线程中隔离

启动 Gateway

配置完成后,启动 Mattermost Gateway:

hermes gateway

Bot 应该在几秒内连接到你的 Mattermost 服务器。发送一条消息 — 私信或它已被添加的频道中 — 来测试。

提示

你可以在后台或作为 systemd 服务运行 hermes gateway 以保持持久运行。详见部署文档。

主频道

你可以指定一个"主频道",Bot 在其中发送主动消息(如 Cron 任务输出、提醒和通知)。有两种设置方式:

使用斜杠命令

在 Bot 所在的任何 Mattermost 频道中输入 /sethome。该频道成为主频道。

手动配置

将此添加到 ~/.hermes/.env

MATTERMOST_HOME_CHANNEL=abc123def456ghi789jkl012mn

将 ID 替换为实际的频道 ID(点击频道名称 → View Info → 复制 ID)。

回复模式

MATTERMOST_REPLY_MODE 设置控制 Hermes 如何发布响应:

模式行为
off(默认)Hermes 在频道中发布平面消息,像普通用户一样。
threadHermes 在你的原始消息下方的线程中回复。在有大量来回对话时保持频道整洁。

~/.hermes/.env 中设置:

MATTERMOST_REPLY_MODE=thread

提及行为

默认情况下,Bot 仅在被 @mentioned 时响应频道消息。你可以更改此设置:

变量默认值说明
MATTERMOST_REQUIRE_MENTIONtrue设为 false 可响应频道中的所有消息(私信始终工作)。
MATTERMOST_FREE_RESPONSE_CHANNELS(无)Bot 无需 @mention 即可响应的频道 ID,逗号分隔,即使 require_mention 为 true。

在 Mattermost 中查找频道 ID:打开频道,点击频道名称标题,在 URL 或频道详情中查找 ID。

当 Bot 被 @mentioned 时,提及会在处理前从消息中自动去除。

故障排除

Bot 不响应消息

原因:Bot 不是频道的成员,或 MATTERMOST_ALLOWED_USERS 未包含你的用户 ID。

解决方案:将 Bot 添加到频道(频道名称 → Add Members → 搜索 Bot)。验证你的用户 ID 在 MATTERMOST_ALLOWED_USERS 中。重启 Gateway。

403 Forbidden 错误

原因:Bot Token 无效,或 Bot 没有在频道中发消息的权限。

解决方案:检查 .env 文件中的 MATTERMOST_TOKEN 是否正确。确保 Bot 账户未被停用。验证 Bot 已被添加到频道。如果使用个人访问令牌,确保你的账户有所需权限。

WebSocket 断开 / 重连循环

原因:网络不稳定、Mattermost 服务器重启或防火墙/代理的 WebSocket 连接问题。

解决方案:适配器使用指数退避自动重连(2s → 60s)。检查服务器的 WebSocket 配置 — 反向代理(nginx、Apache)需要配置 WebSocket 升级头。验证没有防火墙阻止你 Mattermost 服务器上的 WebSocket 连接。

对于 nginx,确保配置包含:

location /api/v4/websocket {
proxy_pass http://mattermost-backend;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
}

启动时"Failed to authenticate"

原因:Token 或服务器 URL 不正确。

解决方案:验证 MATTERMOST_URL 指向你的 Mattermost 服务器(包含 https://,无尾部斜杠)。检查 MATTERMOST_TOKEN 是否有效 — 用 curl 测试:

curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-server/api/v4/users/me

如果返回你的 Bot 用户信息,Token 有效。如果返回错误,重新生成 Token。

Bot 离线

原因:Hermes Gateway 未运行,或连接失败。

解决方案:检查 hermes gateway 是否在运行。查看终端输出中的错误消息。常见问题:错误的 URL、过期的 Token、Mattermost 服务器不可达。

"User not allowed" / Bot 忽略你

原因:你的用户 ID 不在 MATTERMOST_ALLOWED_USERS 中。

解决方案:在 ~/.hermes/.env 中将你的用户 ID 添加到 MATTERMOST_ALLOWED_USERS 并重启 Gateway。记住:用户 ID 是一个 26 字符的字母数字字符串,不是你的 @username

按频道提示

为特定 Mattermost 频道分配临时系统提示。提示在每轮运行时注入 — 永远不会持久化到对话历史 — 因此更改立即生效。

mattermost:
channel_prompts:
"channel_id_abc123": |
你是研究助手。专注于学术来源、引用和简洁的综合。
"channel_id_def456": |
代码审查模式。精确处理边界情况和性能影响。

键是 Mattermost 频道 ID(在频道 URL 中或通过 API 查找)。匹配频道中的所有消息都会获得提示作为临时系统指令注入。

安全

注意

始终设置 MATTERMOST_ALLOWED_USERS 来限制谁可以与 Bot 交互。没有它,Gateway 默认拒绝所有用户作为安全措施。只添加你信任的人的用户 ID — 授权用户拥有 Agent 功能的完全访问权限,包括工具使用和系统访问。

有关保护 Hermes Agent 部署的更多信息,参见安全指南

备注

  • 自托管友好:适用于任何自托管的 Mattermost 实例。无需 Mattermost Cloud 账户或订阅。
  • 无额外依赖:适配器使用 aiohttp 进行 HTTP 和 WebSocket 通信,已包含在 Hermes Agent 中。
  • Team Edition 兼容:同时支持 Mattermost Team Edition(免费)和 Enterprise Edition。

📝 本文由 AI 翻译,如有疑问请参考英文原版