Groups
OpenClaw 在各个表面上一致地处理 group chats:WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams。初学者介绍(2 分钟)
OpenClaw “生活”在你自己的消息账户上。没有单独的 WhatsApp bot 用户。如果 你 在一个 group 中,OpenClaw 可以看到该 group 并在那里响应。 默认行为:- Groups 受限制(
groupPolicy: "allowlist")。 - 回复需要 mention,除非你明确禁用 mention gating。
TL;DR快速流程(group 消息会发生什么):
- DM 访问 由
*.allowFrom控制。- Group 访问 由
*.groupPolicy+ 允许列表(*.groups、*.groupAllowFrom)控制。- 回复触发 由 mention gating(
requireMention、/activation)控制。
| 目标 | 设置什么 |
|---|---|
| 允许所有 groups 但仅在 @mentions 时回复 | groups: { "*": { requireMention: true } } |
| 禁用所有 group 回复 | groupPolicy: "disabled" |
| 仅特定 groups | groups: { "<group-id>": { ... } } (无 "*" 键) |
| 仅你可以在 groups 中触发 | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Session keys
- Group sessions 使用
agent:<agentId>:<channel>:group:<id>session keys(rooms/channels 使用agent:<agentId>:<channel>:channel:<id>)。 - Telegram forum topics 将
:topic:<threadId>添加到 group id,以便每个 topic 都有自己的 session。 - 直接聊天使用 main session(或按发送者配置)。
- Heartbeats 对 group sessions 跳过。
模式: 个人 DMs + 公共 groups(单个 agent)
是的 — 如果你的”个人”流量是 DMs,而你的”公共”流量是 groups,这很有效。 原因:在单 agent 模式下,DMs 通常落在 main session key(agent:main:main)中,而 groups 始终使用 非 main session keys(agent:main:<channel>:group:<id>)。如果使用 mode: "non-main" 启用沙盒,这些 group sessions 在 Docker 中运行,而你的 main DM session 保持在主机上。
这为你提供了一个 agent “大脑”(共享 workspace + memory),但有两种执行姿态:
- DMs: 完整工具(主机)
- Groups: sandbox + 受限工具(Docker)
如果你需要真正分离的 workspaces/personas(“个人”和”公共”绝不能混合),请使用第二个 agent + bindings。参见 Multi-Agent Routing。示例(主机上的 DMs,沙盒 + 仅消息工具的 groups):
workspaceAccess: "none" 并仅将允许列表中的路径挂载到 sandbox:
- 配置键和默认值:Gateway configuration
- 调试为什么工具被阻止:Sandbox vs Tool Policy vs Elevated
- Bind mounts 详细信息:Sandboxing
显示标签
- UI 标签在可用时使用
displayName,格式为<channel>:<token>。 #room保留给 rooms/channels;group chats 使用g-<slug>(小写,空格 ->-,保留#@+._-)。
Group policy
控制每个 channel 如何处理 group/room 消息:| Policy | 行为 |
|---|---|
"open" | Groups 绕过允许列表;mention-gating 仍然适用。 |
"disabled" | 完全阻止所有 group 消息。 |
"allowlist" | 仅允许匹配配置的允许列表的 groups/rooms。 |
groupPolicy与 mention-gating(需要 @mentions)分开。- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams: 使用
groupAllowFrom(后备:显式allowFrom)。 - Discord: 允许列表使用
channels.discord.guilds.<id>.channels。 - Slack: 允许列表使用
channels.slack.channels。 - Matrix: 允许列表使用
channels.matrix.groups(room IDs、aliases 或 names)。使用channels.matrix.groupAllowFrom限制发送者;也支持每个 room 的users允许列表。 - Group DMs 单独控制(
channels.discord.dm.*、channels.slack.dm.*)。 - Telegram 允许列表可以匹配用户 IDs(
"123456789"、"telegram:123456789"、"tg:123456789")或 usernames("@alice"或"alice");前缀不区分大小写。 - 默认为
groupPolicy: "allowlist";如果你的 group 允许列表为空,则 group 消息被阻止。
groupPolicy(open/disabled/allowlist)- group 允许列表(
*.groups、*.groupAllowFrom、channel 特定的允许列表) - mention gating(
requireMention、/activation)
Mention gating (默认)
Group 消息需要 mention,除非按 group 覆盖。默认值位于*.groups."*" 下的每个子系统中。
回复 bot 消息算作隐式 mention(当 channel 支持 reply 元数据时)。这适用于 Telegram、WhatsApp、Slack、Discord 和 Microsoft Teams。
mentionPatterns是不区分大小写的 regexes。- 提供显式 mentions 的表面仍然通过;patterns 是后备。
- Per-agent 覆盖:
agents.list[].groupChat.mentionPatterns(当多个 agents 共享一个 group 时很有用)。 - Mention gating 仅在可以进行 mention 检测时强制执行(配置了 native mentions 或
mentionPatterns)。 - Discord 默认值位于
channels.discord.guilds."*"(可按 guild/channel 覆盖)。 - Group history context 在 channels 之间统一包装,并且是 仅待处理(由于 mention gating 而跳过的消息);使用
messages.groupChat.historyLimit作为全局默认值,使用channels.<channel>.historyLimit(或channels.<channel>.accounts.*.historyLimit)进行覆盖。设置0以禁用。
Group/channel tool 限制(可选)
某些 channel 配置支持限制 特定 group/room/channel 内 可用的工具。tools: 允许/拒绝整个 group 的工具。toolsBySender: group 内的每个发送者覆盖(键是发送者 IDs/usernames/emails/phone numbers,具体取决于 channel)。使用"*"作为通配符。
- group/channel
toolsBySender匹配 - group/channel
tools - 默认(
"*")toolsBySender匹配 - 默认(
"*")tools
- Group/channel tool 限制除了全局/agent tool policy 之外应用(deny 仍然获胜)。
- 某些 channels 对 rooms/channels 使用不同的嵌套(例如,Discord
guilds.*.channels.*、Slackchannels.*、MS Teamsteams.*.channels.*)。
Group 允许列表
当配置channels.whatsapp.groups、channels.telegram.groups 或 channels.imessage.groups 时,键充当 group 允许列表。使用 "*" 允许所有 groups,同时仍设置默认 mention 行为。
常见意图(复制/粘贴):
- 禁用所有 group 回复
- 仅允许特定 groups(WhatsApp)
- 允许所有 groups 但需要 mention(显式)
- 仅所有者可以在 groups 中触发(WhatsApp)
Activation(仅所有者)
Group 所有者可以切换每个 group 的 activation:/activation mention/activation always
channels.whatsapp.allowFrom(或未设置时 bot 的自身 E.164)确定。将命令作为独立消息发送。其他表面目前忽略 /activation。
Context 字段
Group 入站 payloads 设置:ChatType=groupGroupSubject(如果已知)GroupMembers(如果已知)WasMentioned(mention gating 结果)- Telegram forum topics 还包括
MessageThreadId和IsForum。
\n 序列。
iMessage 特定信息
- 路由或允许列表时更喜欢
chat_id:<id>。 - 列出聊天:
imsg chats --limit 20。 - Group 回复始终返回相同的
chat_id。