Mattermost 设置
Hermes Agent 以机器人身份集成到 Mattermost,让您可以通过直接消息或团队频道与您的 AI 助手聊天。Mattermost 是一个自托管、开源的 Slack 替代品——您在自有基础设施上运行,保持对数据的完全控制。机器人通过 Mattermost 的 REST API(v4)和 WebSocket 连接以接收实时事件,通过 Hermes Agent 管道(包括工具使用、记忆和推理)处理消息,并实时回复。它支持文本、文件附件、图片和斜杠命令。
无需外部 Mattermost 库——适配器使用 aiohttp,这已经是 Hermes 的依赖项。
在设置之前,这里是大多数人最想知道的:Hermes 进入您的 Mattermost 实例后的行为。
Hermes 的行为
| 上下文 | 行为 |
|---|---|
| 私信 | Hermes 回复每条消息。无需 @提及。每条私信有自己的会话。 |
| 公共/私密频道 | 当您 @提及 时,Hermes 回复。没有提及,Hermes 忽略消息。 |
| 线程 | 如果 MATTERMOST_REPLY_MODE=thread,Hermes 在您的消息下的线程中回复。线程上下文与父频道保持隔离。 |
| 多用户共享频道 | 默认情况下,Hermes 在频道内按用户隔离会话历史。两个人在同一频道中交谈不会共享一个记录,除非您显式禁用此功能。 |
:::tip
如果您希望 Hermes 以线程化对话(嵌套在您的原始消息下)回复,设置 MATTERMOST_REPLY_MODE=thread。默认值为 off,即在频道中发送扁平消息。
:::
Mattermost 中的会话模型
默认情况下:
- 每条私信获得自己的会话
- 每个线程获得自己的会话命名空间
- 共享频道中的每个用户在该频道内获得自己的会话
这由 config.yaml 控制:
group_sessions_per_user: true仅当您明确希望整个频道共享一个对话时才将其设置为 false:
group_sessions_per_user: false共享会话对于协作频道可能有用,但也意味着:
- 用户共享上下文增长和 token 成本
- 一个人的长时间工具密集型任务可能会膨胀其他人的上下文
- 一个人的进行中运行可能会中断同一频道中另一个人的后续操作
本指南将引导您完成完整的设置过程——从在 Mattermost 上创建您的机器人到发送您的第一条消息。
第 1 步:启用机器人账户
必须先启用机器人账户,然后才能创建。
- 以系统管理员身份登录 Mattermost。
- 前往 系统控制台 → 集成 → 机器人账户。
- 将 启用机器人账户创建 设置为 true。
- 点击 保存。
:::info 如果您没有系统管理员访问权限,请让您的 Mattermost 管理员启用机器人账户并为您创建一个。 :::
第 2 步:创建机器人账户
- 在 Mattermost 中,点击 ☰ 菜单(左上角)→ 集成 → 机器人账户。
- 点击 添加机器人账户。
- 填写详细信息:
- 用户名:例如
hermes - 显示名称:例如
Hermes Agent - 描述:可选
- 角色:
成员就足够了
- 用户名:例如
- 点击 创建机器人账户。
- Mattermost 会显示机器人令牌。立即复制它。
:::warning[令牌仅显示一次] 机器人令牌仅在创建机器人账户时显示一次。如果您丢失了它,您需要从机器人账户设置重新生成。切勿公开分享您的令牌或将其提交到 Git——任何拥有此令牌的人都可以完全控制机器人。 :::
将令牌安全地存储起来(例如密码管理器)。您将在第 5 步中用到它。
:::tip 您也可以使用个人访问令牌代替机器人账户。前往 个人资料 → 安全 → 个人访问令牌 → 创建令牌。如果您希望 Hermes 以您自己的用户身份发布而不是单独的机器人用户,这很有用。 :::
第 3 步:将机器人添加到频道
机器人需要是其要回复的任何频道的成员:
- 打开您想要机器人所在的频道。
- 点击频道名称 → 添加成员。
- 搜索您的机器人用户名(例如
hermes)并添加它。
对于私信,只需与机器人打开直接消息——它就能立即回复。
第 4 步:查找您的 Mattermost 用户 ID
Hermes Agent 使用您的 Mattermost 用户 ID 来控制谁可以与机器人交互。查找方法:
- 点击您的头像(左上角)→ 个人资料。
- 您的用户 ID 显示在个人资料对话框中——点击它进行复制。
您的用户 ID 是一个 26 位字母数字字符串,如 3uo8dkh1p7g1mfk49ear5fzs5c。
:::warning
您的用户 ID 不是您的用户名。用户名是 @ 后面的部分(例如 @alice)。用户 ID 是 Mattermost 内部使用的长字母数字标识符。
:::
替代方法:您也可以通过 API 获取您的用户 ID:
curl -H "Authorization: Bearer ***" \
https://your-mattermost-server/api/v4/users/me | jq .id:::tip 要获取频道 ID:点击频道名称 → 查看信息。频道 ID 显示在信息面板中。如果您想手动设置主频道,您将需要这个。 :::
第 5 步:配置 Hermes Agent
选项 A:交互式设置(推荐)
运行引导式设置命令:
hermes gateway setup根据提示选择 Mattermost,然后粘贴您的服务器 URL、机器人令牌和用户 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
# 可选:无需 @提及 即可回复(默认:true = 需要提及)
# MATTERMOST_REQUIRE_MENTION=false
# 可选:机器人无需 @提及 即可回复的频道(逗号分隔的频道 ID)
# MATTERMOST_FREE_RESPONSE_CHANNELS=channel_id_1,channel_id_2在 ~/.hermes/config.yaml 中的可选行为设置:
group_sessions_per_user: truegroup_sessions_per_user: true保持每个参与者的上下文在共享频道和线程内隔离
启动网关
配置完成后,启动 Mattermost 网关:
hermes gateway机器人应在几秒内连接到您的 Mattermost 服务器。给它发送一条消息——无论是私信还是它已被添加到的频道——进行测试。
:::tip
您可以在后台或作为 systemd 服务运行 hermes gateway 以实现持久运行。详情请参阅部署文档。
:::
主频道
您可以指定一个”主频道”,机器人将主动消息(例如定时任务输出、提醒和通知)发送到此频道。有两种设置方式:
使用斜杠命令
在机器人所在的任何 Mattermost 频道中键入 /sethome。该频道成为主频道。
手动配置
将此添加到您的 ~/.hermes/.env:
MATTERMOST_HOME_CHANNEL=abc123def456ghi789jkl012mn将 ID 替换为实际的频道 ID(点击频道名称 → 查看信息 → 复制 ID)。
回复模式
MATTERMOST_REPLY_MODE 设置控制 Hermes 如何发布回复:
| 模式 | 行为 |
|---|---|
off(默认) | Hermes 在频道中发布扁平消息,就像普通用户一样。 |
thread | Hermes 在您的原始消息下的线程中回复。当有大量来回对话时保持频道整洁。 |
在您的 ~/.hermes/.env 中设置:
MATTERMOST_REPLY_MODE=thread提及行为
默认情况下,机器人仅在频道中被 @提及 时回复。您可以更改此设置:
| 变量 | 默认值 | 描述 |
|---|---|---|
MATTERMOST_REQUIRE_MENTION | true | 设为 false 以响应频道中的所有消息(私信始终工作)。 |
MATTERMOST_FREE_RESPONSE_CHANNELS | (无) | 逗号分隔的频道 ID,即使 require_mention 为 true,这些频道中的机器人也无需 @提及 即可回复。 |
在 Mattermost 中查找频道 ID:打开频道,点击频道名称标题,在 URL 或频道详情中查找 ID。
当机器人被 @提及 时,提及会自动从消息中剥离后再处理。
频道白名单(allowed_channels)
将机器人限制到固定的 Mattermost 频道集合。设置后,机器人仅在 ID 出现在列表中的频道回复——来自其他任何频道的消息被静默忽略,即使机器人被 @提及。
私信不受此过滤器影响,因此授权用户始终可以通过直接消息联系到机器人。
mattermost:
allowed_channels:
- "abc123def456ghi789jkl012mno" # #ops
- "xyz987uvw654rst321opq098nml" # #incident-response或通过环境变量(逗号分隔):
MATTERMOST_ALLOWED_CHANNELS="abc123def456ghi789jkl012mno,xyz987uvw654rst321opq098nml"行为:
- 空/未设置 → 无限制(完全向后兼容)。
- 非空 → 频道 ID 必须在列表中,否则消息在任何其他门控(提及要求、
MATTERMOST_FREE_RESPONSE_CHANNELS等)运行之前被丢弃。 - 通过 Mattermost UI → 频道标题 → “View Info” 查找频道 ID,或从频道 URL 中读取。
另请参阅:用户斜杠命令分拆。
故障排除
机器人不响应消息
原因:机器人不是频道的成员,或 MATTERMOST_ALLOWED_USERS 不包含您的用户 ID。
修复:将机器人添加到频道(频道名称 → 添加成员 → 搜索机器人)。验证您的用户 ID 在 MATTERMOST_ALLOWED_USERS 中。重启网关。
403 Forbidden 错误
原因:机器人令牌无效,或机器人没有在频道中发布的权限。
修复:检查 .env 文件中的 MATTERMOST_TOKEN 是否正确。确保机器人账户未被停用。验证机器人已被添加到频道。如果使用个人访问令牌,确保您的账户具有所需权限。
WebSocket 断开 / 重连循环
原因:网络不稳定、Mattermost 服务器重启,或 WebSocket 连接的防火墙/代理问题。
修复:适配器自动重连,带有指数退避(2 秒 → 60 秒)。检查服务器的 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”
原因:令牌或服务器 URL 不正确。
修复:验证 MATTERMOST_URL 指向您的 Mattermost 服务器(包含 https://,无尾部斜杠)。检查 MATTERMOST_TOKEN 是否有效——用 curl 测试:
curl -H "Authorization: Bearer ***" \
https://your-server/api/v4/users/me如果返回您机器人的用户信息,令牌有效。如果返回错误,重新生成令牌。
机器人离线
原因:Hermes 网关未运行,或连接失败。
修复:检查 hermes gateway 是否在运行。查看终端输出中的错误消息。常见问题:错误的 URL、过期的令牌、Mattermost 服务器不可达。
“用户不被允许” / 机器人忽略您
原因:您的用户 ID 不在 MATTERMOST_ALLOWED_USERS 中。
修复:将您的用户 ID 添加到 ~/.hermes/.env 的 MATTERMOST_ALLOWED_USERS 中并重启网关。记住:用户 ID 是一个 26 位字母数字字符串,不是您的 @username。
每频道提示
为特定的 Mattermost 频道分配临时系统提示。提示在每轮运行时注入——从不持久化到会话历史——因此更改立即生效。
mattermost:
channel_prompts:
"channel_id_abc123": |
你是一个研究助手。专注于学术来源、
引用和简洁的综合。
"channel_id_def456": |
代码审查模式。对边界情况和
性能影响要精确。键是 Mattermost 频道 ID(在频道 URL 或通过 API 中查找)。匹配频道中的所有消息都会获得该提示作为临时系统指令注入。
安全性
:::warning
始终设置 MATTERMOST_ALLOWED_USERS 以限制谁可以与机器人交互。否则,网关默认拒绝所有用户作为安全措施。仅添加您信任的用户 ID——授权用户对 agent 的能力具有完全访问权限,包括工具使用和系统访问。
:::
有关保护 Hermes Agent 部署的更多信息,请参阅安全指南。
说明
- 自托管友好:适用于任何自托管的 Mattermost 实例。无需 Mattermost Cloud 账户或订阅。
- 无额外依赖:适配器使用
aiohttp进行 HTTP 和 WebSocket,这已随 Hermes Agent 一起提供。 - 团队版兼容:适用于 Mattermost 团队版(免费)和企业版。