群组

OpenClaw 在各平台上一致地处理群组聊天:WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams、Zalo?

入门介绍? 分钟?

OpenClaw”生活”在您自己的消息账户上。没有单独的 WhatsApp 机器人用户? 如果**?*在群组中,OpenClaw 可以看到该群组并在那里回复?

默认行为?

  • 群组受限(groupPolicy: "allowlist")?
  • 回复需要提及,除非您明确禁用提及门控?

翻译:白名单发件人可以通过提及 OpenClaw 来触发它?

简要说?

  • DM 访问?*.allowFrom 控制?
  • 群组访问?*.groupPolicy + 白名单(*.groups*.groupAllowFrom)控制?
  • 回复触发由提及门控控制(requireMention/activation)?

快速流程(群组消息会发生什么)?

groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply

如果您想?..

目标设置内容
允许所有群组但仅在 @mentions 时回?groups: { "*": { requireMention: true } }
禁用所有群组回?groupPolicy: "disabled"
仅特定群?groups: { "<group-id>": { ... } }(无 "*" 键)
只有您可以在群组中触?groupPolicy: "allowlist"groupAllowFrom: ["+1555..."]

会话密钥

  • 群组会话使用 agent:<agentId>:<channel>:group:<id> 会话密钥(房?频道使用 agent:<agentId>:<channel>:channel:<id>)?
  • Telegram 论坛主题添加 :topic:<threadId> 到群?ID,以便每个主题有自己的会话?
  • 直接聊天使用主会话(或按发件人配置)?
  • 心跳针对群组会话被跳过?

模式:个?DM + 公共群组(单个代理)

是的 ?如果您的”个人”流量?DM 且您?公共”流量?群组,这很有效?

原因:在单代理模式下,DM 通常落在**?*会话密钥(agent:main:main)中,而群组始终使?*非主**会话密钥(agent:main:<channel>:group:<id>)。如果您使用 mode: "non-main" 启用沙盒,那些群组会话在 Docker 中运行,而您的主 DM 会话留在主机上?

这给您一个代?大脑”(共享工作区 + 内存),但有两种执行姿态:

  • DM:完整工具(主机?
  • 群组:沙?+ 受限工具(Docker?

如果您需要真正独立的工作?角色?个人”?公共”绝不能混合),请使用第二个代?+ 绑定。请参阅多代理路由?

示例(DM 在主机上,群组沙盒化 + 仅消息工具)?

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // groups/channels are non-main -> sandboxed
        scope: "session", // strongest isolation (one container per group/channel)
        workspaceAccess: "none",
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        // If allow is non-empty, everything else is blocked (deny still wins).
        allow: ["group:messaging", "group:sessions"],
        deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
      },
    },
  },
}

想要”群组只能看到文件?X”而不?无主机访??保?workspaceAccess: "none" 并仅将白名单路径挂载到沙盒中?

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",
        scope: "session",
        workspaceAccess: "paths",
        workspaceAllowedPaths: ["/data/public"],
      },
    },
  },
}

会话密钥详情

格式

agent:<agentId>:<channel>:group:<groupId>

例如?

  • agent:main:whatsapp:group:123456789
  • agent:main:telegram:group:-1001234567890
  • agent:ops:discord:group:987654321

Telegram 论坛主题

agent:<agentId>:telegram:group:<chatId>:topic:<threadId>

例如:agent:main:telegram:group:-1001234567890:topic:123

多代?

如果您有多个代理,每个代理有自己的群组会话:

agent:ops:whatsapp:group:123456789
agent:support:whatsapp:group:987654321

配置

基本群组配置

{
  channels: {
    whatsapp: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
      groups: {
        allow: ["[email protected]"],
      },
    },
    telegram: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["123456789"],
      groups: {
        "-1001234567890": {
          requireMention: true,
        },
      },
    },
  },
}

允许所有群?

{
  channels: {
    whatsapp: {
      groupPolicy: "allowlist",
      groups: {
        "*": {
          requireMention: true,
        },
      },
    },
  },
}

禁用所有群?

{
  channels: {
    whatsapp: {
      groupPolicy: "disabled",
    },
  },
}

激活命?

用户可以在群组中使用以下命令?

  • /activation mention - 仅在提及时回?
  • /activation always - 始终回复(需要白名单?
  • /activation off - 禁用该群组的响应

行为详情

消息处理流程

  1. 检查群组策略(如果禁用则丢弃)
  2. 检查群组是否在白名单中(如果使用白名单?
  3. 检查是否需要提?
  4. 如果需要提及但未提及,则仅存储为上下文
  5. 否则回复

提及检?

OpenClaw 检测提及:

  • 明确提及机器人身?
  • 配置的提及正则表达式模式
  • 隐式回复检测(回复发件人匹配机器人身份?

安全考虑

  • 引用/回复仅满足提及门控,不授予发件人授权
  • 使用 groupPolicy: "allowlist" 时,非白名单发件人即使回复白名单用户的消息也会被阻止
  • 始终审查群组成员资格

故障排除

群组消息未收?

  • 检?groupPolicy 设置
  • 确认群组在白名单?
  • 验证需要提及设?

机器人不回复

  • 确认已提及机器人
  • 检查发件人是否?groupAllowFrom ?
  • 使用 /activation always 启用自动回复

错误回复到错误群?

  • 检查会话密钥配?
  • 验证代理绑定
  • 检查频道配?

相关链接