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 há um usuário de bot separado no WhatsApp. Se você estiver em um grupo, o OpenClaw pode ver esse grupo e responder nele. Comportamento padrão:- Grupos são restritos (
groupPolicy: "allowlist"). - As respostas exigem uma menção, a menos que você desative explicitamente o bloqueio por menção.
ResumindoFluxo rápido (o que acontece com uma mensagem de grupo):
- O acesso por DM é controlado por
*.allowFrom.- O acesso a grupos é controlado por
*.groupPolicy+ allowlists (*.groups,*.groupAllowFrom).- O acionamento de respostas é controlado pelo bloqueio 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 da thread, metadados encaminhados).
- Alguns canais já aplicam filtragem baseada em remetente para contexto suplementar em caminhos específicos (por exemplo, semeadura de thread no Slack, pesquisas de resposta/thread no Matrix).
- Outros canais ainda repassam contexto de citação/resposta/encaminhamento como recebido.
contextVisibility: "all"(padrão) mantém o comportamento atual como 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 só responder a @menções | groups: { "*": { requireMention: true } } |
| Desativar todas as respostas em grupo | groupPolicy: "disabled" |
| Apenas grupos específicos | groups: { "<group-id>": { ... } } (sem 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 DMs e o seu tráfego “público” for grupos. Por quê: no modo de agente único, as DMs normalmente chegam à chave de sessão main (agent:main:main), enquanto grupos sempre usam chaves de sessão não main (agent:main:<channel>:group:<id>). Se você ativar sandboxing com mode: "non-main", essas sessões de grupo serão executadas em Docker enquanto sua sessão principal de DM permanece 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. Veja Roteamento multiagente.Exemplo (DMs no host, grupos em sandbox + ferramentas apenas de mensagens):
workspaceAccess: "none" e monte apenas caminhos na allowlist dentro do sandbox:
- Chaves de configuração e padrões: Configuração do Gateway
- Depurar por que uma ferramenta foi bloqueada: Sandbox vs Política de ferramentas vs Elevado
- Detalhes de bind mounts: Sandboxing
Rótulos de exibição
- Rótulos da 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 bloqueio por menção ainda se aplica. |
"disabled" | Bloqueia completamente todas as mensagens de grupo. |
"allowlist" | Só permite grupos/salas que correspondam à allowlist configurada. |
groupPolicyé separado do bloqueio 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 em
*-allowFromstore) se aplicam apenas ao acesso por DM; a autorização de remetente 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 no runtime. Usechannels.matrix.groupAllowFrompara restringir remetentes; allowlistsuserspor sala também são compatíveis. - 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 usernames ("@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, mensagens de grupo serão bloqueadas. - Segurança no runtime: quando um bloco de provedor está completamente ausente (
channels.<provider>ausente), a política de grupo recai 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) - bloqueio por menção (
requireMention,/activation)
Bloqueio por menção (padrão)
Mensagens de grupo exigem uma menção, a menos que isso seja substituído 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). Isso se aplica a Telegram, WhatsApp, Slack, Discord e Microsoft Teams.
mentionPatternssão padrões regex seguros 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 são aceitas; os padrões são um fallback.
- Substituição por agente:
agents.list[].groupChat.mentionPatterns(útil quando vários agentes compartilham um grupo). - O bloqueio 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."*"(substituível por guild/canal). - O contexto do histórico de grupo é encapsulado uniformemente entre canais e é somente pendente (mensagens ignoradas devido ao bloqueio por menção); use
messages.groupChat.historyLimitpara o padrão global echannels.<channel>.historyLimit(ouchannels.<channel>.accounts.*.historyLimit) para substituições. Defina0para desativar.
Restrições de ferramentas por grupo/canal (opcional)
Algumas configurações de canal permitem restringir quais ferramentas ficam disponíveis dentro de um grupo/sala/canal específico.tools: permitir/negar ferramentas para o grupo inteiro.toolsBySender: substituições por remetente dentro do grupo. Use prefixos explícitos de chave:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>e o curinga"*". Chaves legadas sem prefixo ainda são aceitas e correspondem apenas aid:.
- correspondência em
toolsBySenderdo grupo/canal toolsdo grupo/canal- correspondência em
toolsBySenderdo padrão ("*"). toolsdo padrão ("*")
- Restrições de ferramentas por grupo/canal são aplicadas além da política global/de agente para ferramentas (
denyainda prevalece). - 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 grupo. Use "*" para permitir todos os grupos enquanto ainda define 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 que oferecem suporte a pareamento por DM, o armazenamento de pareamento libera apenas DMs. Comandos em grupo ainda exigem autorização explícita de remetente do grupo pelas allowlists de configuração, como groupAllowFrom ou o fallback de configuração documentado para aquele 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)
- Só o dono pode acionar em grupos (WhatsApp)
Ativação (somente dono)
Donos 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 bloqueio 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 fica desativado por padrão e só é executado depois que o bloqueio normal de grupo é aprovado.
\n.
Detalhes específicos do iMessage
- Prefira
chat_id:<id>ao rotear ou usar allowlist. - Liste chats:
imsg chats --limit 20. - Respostas em grupo sempre voltam para o mesmo
chat_id.