Grupos
O OpenClaw trata chats em grupo de forma consistente entre superfícies: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Introdução para iniciantes (2 minutos)
O OpenClaw “vive” nas suas próprias contas de mensagens. Não existe um usuário de bot separado no WhatsApp. Se você estiver em um grupo, o OpenClaw poderá ver esse grupo e responder nele. Comportamento padrão:- Os grupos são restritos (
groupPolicy: "allowlist"). - As respostas exigem uma menção, a menos que você desative explicitamente o controle por menção.
ResumindoFluxo rápido (o que acontece com uma mensagem de grupo):
- O acesso por DM é controlado por
*.allowFrom.- O acesso em grupos é controlado por
*.groupPolicy+ allowlists (*.groups,*.groupAllowFrom).- O acionamento de respostas é controlado pelo controle por menção (
requireMention,/activation).
Visibilidade de contexto e allowlists
Dois controles diferentes estão envolvidos na segurança de grupos:- Autorização de acionamento: quem pode acionar o agente (
groupPolicy,groups,groupAllowFrom, allowlists específicas de canal). - Visibilidade de contexto: qual contexto suplementar é injetado no modelo (texto de resposta, citações, histórico de thread, metadados encaminhados).
- Alguns canais já aplicam filtragem baseada no remetente para contexto suplementar em caminhos específicos (por exemplo, semeadura de thread no Slack, buscas de resposta/thread no Matrix).
- Outros canais ainda repassam o contexto de citação/resposta/encaminhamento como foi recebido.
contextVisibility: "all"(padrão) mantém o comportamento atual de como foi recebido.contextVisibility: "allowlist"filtra o contexto suplementar para remetentes na allowlist.contextVisibility: "allowlist_quote"éallowlistmais uma exceção explícita para citação/resposta.
| Objetivo | O que definir |
|---|---|
| Permitir todos os grupos, mas responder só a @menções | groups: { "*": { requireMention: true } } |
| Desativar todas as respostas em grupo | groupPolicy: "disabled" |
| Apenas grupos específicos | groups: { "<group-id>": { ... } } (sem a chave "*") |
| Só você pode acionar em grupos | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Chaves de sessão
- Sessões de grupo usam chaves de sessão
agent:<agentId>:<channel>:group:<id>(salas/canais usamagent:<agentId>:<channel>:channel:<id>). - Tópicos de fórum do Telegram adicionam
:topic:<threadId>ao id do grupo para que cada tópico tenha sua própria sessão. - Chats diretos usam a sessão principal (ou por remetente, se configurado).
- Heartbeats são ignorados para sessões de grupo.
Padrão: DMs pessoais + grupos públicos (agente único)
Sim — isso funciona bem se o seu tráfego “pessoal” for em DMs e o seu tráfego “público” for em grupos. Motivo: no modo de agente único, DMs normalmente vão para a chave de sessão principal (agent:main:main), enquanto grupos sempre usam chaves de sessão não principais (agent:main:<channel>:group:<id>). Se você ativar sandboxing com mode: "non-main", essas sessões de grupo serão executadas no Docker enquanto sua sessão principal de DM permanecerá no host.
Isso oferece um único “cérebro” de agente (workspace + memória compartilhados), mas duas posturas de execução:
- DMs: ferramentas completas (host)
- Grupos: sandbox + ferramentas restritas (Docker)
Se você precisar de workspaces/personas realmente separados (“pessoal” e “público” nunca devem se misturar), use um segundo agente + bindings. Consulte Roteamento multiagente.Exemplo (DMs no host, grupos em sandbox + ferramentas apenas de mensagens):
workspaceAccess: "none" e monte apenas caminhos na allowlist dentro da sandbox:
- Chaves e padrões de configuração: Configuração do gateway
- Depuração de por que uma ferramenta está bloqueada: Sandbox vs Tool Policy vs Elevated
- Detalhes de bind mounts: Sandboxing
Rótulos de exibição
- Os rótulos na UI usam
displayNamequando disponível, formatado como<channel>:<token>. #roomé reservado para salas/canais; chats em grupo usamg-<slug>(minúsculas, espaços ->-, manter#@+._-).
Política de grupo
Controle como mensagens de grupo/sala são tratadas por canal:| Política | Comportamento |
|---|---|
"open" | Grupos ignoram allowlists; o controle por menção ainda se aplica. |
"disabled" | Bloqueia totalmente todas as mensagens de grupo. |
"allowlist" | Permite apenas grupos/salas que correspondam à allowlist configurada. |
groupPolicyé separado do controle por menção (que exige @menções).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: use
groupAllowFrom(fallback:allowFromexplícito). - Aprovações de pareamento por DM (entradas armazenadas em
*-allowFrom) se aplicam apenas ao acesso por DM; a autorização de remetentes em grupo continua explícita nas allowlists de grupo. - Discord: a allowlist usa
channels.discord.guilds.<id>.channels. - Slack: a allowlist usa
channels.slack.channels. - Matrix: a allowlist usa
channels.matrix.groups. Prefira IDs ou aliases de sala; a busca por nome de sala ingressada é best-effort, e nomes não resolvidos são ignorados em tempo de execução. Usechannels.matrix.groupAllowFrompara restringir remetentes; allowlistsuserspor sala também são suportadas. - DMs em grupo são controladas separadamente (
channels.discord.dm.*,channels.slack.dm.*). - A allowlist do Telegram pode corresponder a IDs de usuário (
"123456789","telegram:123456789","tg:123456789") ou nomes de usuário ("@alice"ou"alice"); os prefixos não diferenciam maiúsculas de minúsculas. - O padrão é
groupPolicy: "allowlist"; se sua allowlist de grupos estiver vazia, as mensagens de grupo serão bloqueadas. - Segurança em tempo de execução: quando um bloco de provider está totalmente ausente (
channels.<provider>ausente), a política de grupo recua para um modo fail-closed (normalmenteallowlist) em vez de herdarchannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- allowlists de grupo (
*.groups,*.groupAllowFrom, allowlist específica do canal) - controle por menção (
requireMention,/activation)
Controle por menção (padrão)
Mensagens em grupo exigem uma menção, a menos que isso seja sobrescrito por grupo. Os padrões ficam por subsistema em*.groups."*".
Responder a uma mensagem do bot conta como uma menção implícita quando o canal
oferece suporte a metadados de resposta. Citar uma mensagem do bot também pode contar como uma menção implícita em canais que expõem metadados de citação. Os casos integrados atuais incluem
Telegram, WhatsApp, Slack, Discord, Microsoft Teams e ZaloUser.
mentionPatternssão padrões regex seguros e sem diferenciação entre maiúsculas e minúsculas; padrões inválidos e formas inseguras de repetição aninhada são ignorados.- Superfícies que fornecem menções explícitas ainda passam; os padrões são um fallback.
- Sobrescrita por agente:
agents.list[].groupChat.mentionPatterns(útil quando vários agentes compartilham um grupo). - O controle por menção só é aplicado quando a detecção de menção é possível (menções nativas ou
mentionPatternsconfigurados). - Os padrões do Discord ficam em
channels.discord.guilds."*"(sobrescritíveis por guild/canal). - O contexto do histórico de grupo é encapsulado de forma uniforme entre os canais e é apenas pendente (mensagens ignoradas devido ao controle por menção); use
messages.groupChat.historyLimitpara o padrão global echannels.<channel>.historyLimit(ouchannels.<channel>.accounts.*.historyLimit) para sobrescritas. Defina0para desativar.
Restrições de ferramentas por grupo/canal (opcional)
Algumas configurações de canal oferecem suporte à restrição de quais ferramentas estão disponíveis dentro de um grupo/sala/canal específico.tools: permitir/negar ferramentas para todo o grupo.toolsBySender: sobrescritas por remetente dentro do grupo. Use prefixos explícitos de chave:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>e curinga"*". Chaves legadas sem prefixo ainda são aceitas e correspondem apenas aid:.
- correspondência de
toolsBySenderdo grupo/canal toolsdo grupo/canal- correspondência de
toolsBySenderpadrão ("*") toolspadrão ("*")
- As restrições de ferramentas por grupo/canal são aplicadas além da política global/de agente para ferramentas (negação ainda vence).
- Alguns canais usam aninhamento diferente para salas/canais (por exemplo, Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Allowlists de grupo
Quandochannels.whatsapp.groups, channels.telegram.groups ou channels.imessage.groups está configurado, as chaves funcionam como uma allowlist de grupos. Use "*" para permitir todos os grupos e ainda definir o comportamento padrão de menção.
Confusão comum: aprovação de pareamento por DM não é a mesma coisa que autorização de grupo.
Para canais com suporte a pareamento por DM, o armazenamento de pareamento libera apenas DMs. Comandos em grupo ainda exigem autorização explícita de remetente em grupo a partir de allowlists de configuração como groupAllowFrom ou o fallback de configuração documentado para esse canal.
Intenções comuns (copiar/colar):
- Desativar todas as respostas em grupo
- Permitir apenas grupos específicos (WhatsApp)
- Permitir todos os grupos, mas exigir menção (explícito)
- Somente o proprietário pode acionar em grupos (WhatsApp)
Ativação (somente proprietário)
Proprietários de grupo podem alternar a ativação por grupo:/activation mention/activation always
channels.whatsapp.allowFrom (ou pelo próprio E.164 do bot quando não definido). Envie o comando como uma mensagem independente. Outras superfícies atualmente ignoram /activation.
Campos de contexto
Payloads de entrada de grupo definem:ChatType=groupGroupSubject(se conhecido)GroupMembers(se conhecido)WasMentioned(resultado do controle por menção)- Tópicos de fórum do Telegram também incluem
MessageThreadIdeIsForum.
- O BlueBubbles pode opcionalmente enriquecer participantes sem nome de grupos no macOS a partir do banco de dados local de Contatos antes de preencher
GroupMembers. Isso vem desativado por padrão e só é executado depois que o controle normal de grupo é aprovado.
\n.
Especificidades do iMessage
- Prefira
chat_id:<id>ao rotear ou usar allowlist. - Listar chats:
imsg chats --limit 20. - Respostas em grupo sempre retornam ao mesmo
chat_id.