群组
OpenClaw 在各平台上统一处理群聊:WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams。入门简介(2 分钟)
OpenClaw “运行”在你自己的消息账户上。没有单独的 WhatsApp 机器人用户。 如果你在某个群组中,OpenClaw 就能看到该群组并在其中回复。 默认行为:- 群组受限(
groupPolicy: "allowlist")。 - 除非你显式禁用提及门控,否则回复需要 @提及。
简而言之快速流程(群消息的处理过程):
- 私聊访问由
*.allowFrom控制。- 群组访问由
*.groupPolicy+ 允许列表(*.groups、*.groupAllowFrom)控制。- 回复触发由提及门控(
requireMention、/activation)控制。
| 目标 | 需要设置的内容 |
|---|---|
| 允许所有群组但仅在 @提及时回复 | 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)
如果你需要真正独立的工作区/角色(“个人”和”公开”绝不能混合),请使用第二个智能体 + 绑定。参见多智能体路由。示例(私聊在主机上,群组沙箱隔离 + 仅消息工具):
workspaceAccess: "none" 并仅将允许的路径挂载到沙箱中:
- 配置键和默认值:Gateway网关配置
- 调试工具被阻止的原因:沙箱 vs 工具策略 vs 提权
- 绑定挂载详情:沙箱隔离
显示标签
- UI 标签在可用时使用
displayName,格式为<channel>:<token>。 #room保留给房间/频道;群聊使用g-<slug>(小写,空格转为-,保留#@+._-)。
群组策略
按渠道控制群组/房间消息的处理方式:| 策略 | 行为 |
|---|---|
"open" | 群组绕过允许列表;提及门控仍然适用。 |
"disabled" | 完全阻止所有群组消息。 |
"allowlist" | 仅允许匹配已配置允许列表的群组/房间。 |
groupPolicy与提及门控(要求 @提及)是分开的。- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams:使用
groupAllowFrom(回退:显式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";如果你的群组允许列表为空,群组消息将被阻止。
groupPolicy(open/disabled/allowlist)- 群组允许列表(
*.groups、*.groupAllowFrom、渠道特定的允许列表) - 提及门控(
requireMention、/activation)
提及门控(默认)
群消息需要提及才能触发,除非按群组覆盖。默认值位于*.groups."*" 下的各子系统中。
回复机器人消息视为隐式提及(当渠道支持回复元数据时)。这适用于 Telegram、WhatsApp、Slack、Discord 和 Microsoft Teams。
mentionPatterns是不区分大小写的正则表达式。- 提供原生提及的平台仍然通过;模式匹配是备用方案。
- 按智能体覆盖:
agents.list[].groupChat.mentionPatterns(多个智能体共享一个群组时很有用)。 - 提及门控仅在可以检测提及时生效(原生提及或已配置
mentionPatterns)。 - Discord 默认值位于
channels.discord.guilds."*"中(可按服务器/频道覆盖)。 - 群组历史上下文在各渠道中统一包装,且为仅待处理(因提及门控跳过的消息);使用
messages.groupChat.historyLimit设置全局默认值,使用channels.<channel>.historyLimit(或channels.<channel>.accounts.*.historyLimit)进行覆盖。设为0以禁用。
群组/频道工具限制(可选)
某些渠道配置支持限制特定群组/房间/频道内可用的工具。tools:为整个群组允许/拒绝工具。toolsBySender:群组内按发送者覆盖(键为发送者 ID/用户名/邮箱/电话号码,取决于渠道)。使用"*"作为通配符。
- 群组/频道
toolsBySender匹配 - 群组/频道
tools - 默认(
"*")toolsBySender匹配 - 默认(
"*")tools
- 群组/频道工具限制在全局/智能体工具策略之上额外应用(拒绝仍然优先)。
- 某些渠道对房间/频道使用不同的嵌套结构(例如 Discord
guilds.*.channels.*、Slackchannels.*、Microsoft Teamsteams.*.channels.*)。
群组允许列表
当配置了channels.whatsapp.groups、channels.telegram.groups 或 channels.imessage.groups 时,键充当群组允许列表。使用 "*" 允许所有群组,同时仍可设置默认提及行为。
常见意图(可直接复制粘贴):
- 禁用所有群组回复
- 仅允许特定群组(WhatsApp)
- 允许所有群组但要求提及(显式)
- 仅所有者可以在群组中触发(WhatsApp)
激活(仅所有者)
群组所有者可以切换按群组的激活方式:/activation mention/activation always
channels.whatsapp.allowFrom 确定(未设置时使用机器人自身的 E.164 号码)。以独立消息发送该命令。其他平台目前忽略 /activation。
上下文字段
群组入站消息负载设置:ChatType=groupGroupSubject(如已知)GroupMembers(如已知)WasMentioned(提及门控结果)- Telegram 论坛主题还包含
MessageThreadId和IsForum。
\n 序列。
iMessage 特定说明
- 路由或添加允许列表时优先使用
chat_id:<id>。 - 列出聊天:
imsg chats --limit 20。 - 群组回复始终返回到同一个
chat_id。