群组
OpenClaw 会在各个表面上一致地处理群聊:Discord、iMessage、Matrix、Microsoft Teams、Signal、Slack、Telegram、WhatsApp、Zalo。新手介绍(2 分钟)
OpenClaw “运行”在你自己的消息账号上。没有单独的 WhatsApp 机器人用户。 如果你在某个群组中,OpenClaw 就能看到该群组并在那里回复。 默认行为:- 群组受限(
groupPolicy: "allowlist")。 - 回复需要提及,除非你明确禁用提及门控。
TL;DR快速流程(群组消息会发生什么):
- 私信访问权限由
*.allowFrom控制。- 群组访问权限由
*.groupPolicy+ 允许列表(*.groups、*.groupAllowFrom)控制。- 回复触发由提及门控控制(
requireMention、/activation)。
上下文可见性与允许列表
群组安全涉及两种不同的控制:- 触发授权:谁可以触发智能体(
groupPolicy、groups、groupAllowFrom、特定渠道的允许列表)。 - 上下文可见性:哪些补充上下文会被注入到模型中(回复文本、引用、线程历史、转发元数据)。
- 某些渠道已经在特定路径上对补充上下文应用基于发送者的过滤(例如 Slack 线程种子数据、Matrix 回复/线程查询)。
- 其他渠道仍然会按接收到的原样传递引用/回复/转发上下文。
contextVisibility: "all"(默认)保持当前按接收原样处理的行为。contextVisibility: "allowlist"会将补充上下文过滤为仅来自允许列表发送者。contextVisibility: "allowlist_quote"等同于allowlist,并额外允许一个显式的引用/回复例外。
| 目标 | 应设置内容 |
|---|---|
| 允许所有群组,但只在 @ 提及时回复 | groups: { "*": { requireMention: true } } |
| 禁用所有群组回复 | groupPolicy: "disabled" |
| 仅限特定群组 | groups: { "<group-id>": { ... } }(不使用 "*" 键) |
| 只有你可以在群组中触发 | groupPolicy: "allowlist",groupAllowFrom: ["+1555..."] |
会话键
- 群组会话使用
agent:<agentId>:<channel>:group:<id>会话键(房间/频道使用agent:<agentId>:<channel>:channel:<id>)。 - Telegram 论坛话题会在群组 id 后附加
:topic:<threadId>,因此每个话题都有自己的会话。 - 私聊使用主会话(或按配置使用每发送者单独会话)。
- 群组会话会跳过心跳。
模式:个人私信 + 公开群组(单个智能体)
可以——如果你的“个人”流量是私信,而“公开”流量是群组,这种方式效果很好。 原因:在单智能体模式下,私信通常会进入主会话键(agent:main:main),而群组始终使用非主会话键(agent:main:<channel>:group:<id>)。如果你启用 mode: "non-main" 的沙箱隔离,这些群组会话会在 Docker 中运行,而你的主私信会话则保留在主机上运行。
这样你就能拥有一个智能体“大脑”(共享工作区 + 记忆),但有两种执行姿态:
- 私信:完整工具(主机)
- 群组:沙箱 + 受限工具(Docker)
如果你需要真正独立的工作区/人格(“个人”和“公开”绝不能混用),请使用第二个智能体 + 绑定。参见 Multi-Agent Routing。示例(私信在主机上运行,群组在沙箱中运行 + 仅消息工具):
workspaceAccess: "none",并仅将允许列表中的路径挂载到沙箱中:
- 配置键和默认值:Gateway configuration
- 调试为什么某个工具被阻止:Sandbox vs Tool Policy vs Elevated
- 绑定挂载详情:Sandboxing
显示标签
- UI 标签在可用时使用
displayName,格式为<channel>:<token>。 #room保留给房间/频道;群聊使用g-<slug>(小写,空格转为-,保留#@+._-)。
群组策略
控制每个渠道如何处理群组/房间消息:| 策略 | 行为 |
|---|---|
"open" | 群组绕过允许列表;提及门控仍然适用。 |
"disabled" | 完全阻止所有群组消息。 |
"allowlist" | 仅允许与配置的允许列表匹配的群组/房间。 |
groupPolicy与提及门控是分开的(后者要求 @ 提及)。- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo:使用
groupAllowFrom(回退为显式allowFrom)。 - 私信配对批准(
*-allowFrom存储条目)只适用于私信访问;群组发送者授权仍需通过群组允许列表显式配置。 - Discord:允许列表使用
channels.discord.guilds.<id>.channels。 - Slack:允许列表使用
channels.slack.channels。 - Matrix:允许列表使用
channels.matrix.groups。优先使用房间 ID 或别名;已加入房间的名称查询仅尽力而为,运行时无法解析的名称会被忽略。使用channels.matrix.groupAllowFrom来限制发送者;也支持按房间配置的users允许列表。 - 群组私信单独控制(
channels.discord.dm.*、channels.slack.dm.*)。 - Telegram 允许列表可匹配用户 ID(
"123456789"、"telegram:123456789"、"tg:123456789")或用户名("@alice"或"alice");前缀大小写不敏感。 - 默认值是
groupPolicy: "allowlist";如果你的群组允许列表为空,则群组消息会被阻止。 - 运行时安全:当某个提供商配置块完全缺失时(
channels.<provider>不存在),群组策略会回退到失效关闭模式(通常是allowlist),而不是继承channels.defaults.groupPolicy。
groupPolicy(open/disabled/allowlist)- 群组允许列表(
*.groups、*.groupAllowFrom、特定渠道允许列表) - 提及门控(
requireMention、/activation)
提及门控(默认)
除非按群组覆盖,否则群组消息需要提及。默认值按各子系统存放在*.groups."*" 下。
回复机器人消息会被视为隐式提及,前提是该渠道支持回复元数据。
引用机器人消息也可能被视为隐式提及,前提是该渠道公开引用元数据。
当前内置支持的渠道包括 Telegram、WhatsApp、Slack、Discord、Microsoft Teams 和 ZaloUser。
mentionPatterns是大小写不敏感的安全正则模式;无效模式和不安全的嵌套重复形式会被忽略。- 提供显式提及的表面仍然会通过;这些模式只是回退方案。
- 按智能体覆盖:
agents.list[].groupChat.mentionPatterns(多个智能体共享同一群组时很有用)。 - 只有在可以进行提及检测时,才会强制执行提及门控(原生提及,或已配置
mentionPatterns)。 - Discord 默认值位于
channels.discord.guilds."*"(可按 guild/频道覆盖)。 - 群组历史上下文在各渠道间会被统一包装,并且仅包含待处理消息(因提及门控而被跳过的消息);使用
messages.groupChat.historyLimit作为全局默认值,使用channels.<channel>.historyLimit(或channels.<channel>.accounts.*.historyLimit)进行覆盖。设为0可禁用。
群组/频道工具限制(可选)
某些渠道配置支持限制特定群组/房间/频道内可用的工具。tools:对整个群组允许/拒绝工具。toolsBySender:群组内按发送者覆盖。 使用显式键前缀:id:<senderId>、e164:<phone>、username:<handle>、name:<displayName>和"*"通配符。 旧版无前缀键仍然接受,但只会按id:匹配。
- 群组/频道
toolsBySender匹配 - 群组/频道
tools - 默认值(
"*")toolsBySender匹配 - 默认值(
"*")tools
- 群组/频道工具限制会与全局/智能体工具策略一同应用(拒绝仍然优先)。
- 某些渠道对房间/频道使用不同的嵌套结构(例如 Discord
guilds.*.channels.*、Slackchannels.*、Microsoft Teamsteams.*.channels.*)。
群组允许列表
配置channels.whatsapp.groups、channels.telegram.groups 或 channels.imessage.groups 时,这些键会作为群组允许列表。使用 "*" 可以允许所有群组,同时仍然设置默认提及行为。
常见混淆:私信配对批准并不等于群组授权。
对于支持私信配对的渠道,配对存储只会解锁私信。群组命令仍然需要通过配置允许列表显式授权群组发送者,例如 groupAllowFrom 或该渠道文档中说明的配置回退项。
常见意图(可直接复制粘贴):
- 禁用所有群组回复
- 仅允许特定群组(WhatsApp)
- 允许所有群组,但要求提及(显式)
- 只有所有者可以在群组中触发(WhatsApp)
激活(仅所有者)
群组所有者可以切换每个群组的激活状态:/activation mention/activation always
channels.whatsapp.allowFrom 决定(未设置时则使用机器人自身的 E.164)。请将命令作为独立消息发送。其他表面当前会忽略 /activation。
上下文字段
群组入站负载会设置:ChatType=groupGroupSubject(如果已知)GroupMembers(如果已知)WasMentioned(提及门控结果)- Telegram 论坛话题还会包含
MessageThreadId和IsForum
- BlueBubbles 可以选择在填充
GroupMembers之前,先从本地联系人数据库中补全未命名的 macOS 群组参与者信息。此功能默认关闭,且只会在正常群组门控通过后运行。
\n 序列。
iMessage 细节
- 在路由或允许列表中,优先使用
chat_id:<id>。 - 列出聊天:
imsg chats --limit 20。 - 群组回复始终返回到同一个
chat_id。