Configuration
Grupos
OpenClaw aplica as mesmas regras de grupo em todos os canais compatíveis com grupos, incluindo Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp e Zalo.
Para salas sempre ativas que devem fornecer contexto silencioso, a menos que o agente envie explicitamente uma mensagem visível, consulte Eventos de sala em segundo plano.
Introdução para iniciantes (2 minutos)
O OpenClaw "vive" nas suas próprias contas de mensagens. Não há um usuário 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"); os remetentes dos grupos ficam bloqueados até serem incluídos na lista de permissões. - As respostas exigem uma menção, a menos que você desative a exigência de menção para um grupo.
- O texto da resposta final é publicado automaticamente na sala (
visibleReplies: "automatic").
Em outras palavras: remetentes incluídos na lista de permissões podem acionar o OpenClaw ao mencioná-lo.
Fluxo rápido (o que acontece com uma mensagem de grupo):
groupPolicy? disabled -> descartargroupPolicy? allowlist -> grupo permitido? não -> descartarrequireMention? sim -> houve menção? não -> armazenar apenas para contextomenção/resposta/comando/mensagem direta -> solicitação do usuárioconversa de grupo sempre ativa -> solicitação do usuário ou evento de sala, quando configuradoRespostas visíveis
Para solicitações normais de grupos/canais, o padrão do OpenClaw é messages.groupChat.visibleReplies: "automatic": o texto final do assistente é publicado na sala como resposta visível.
Use messages.groupChat.visibleReplies: "message_tool" quando uma sala compartilhada precisar permitir que o agente decida quando falar chamando message(action=send). Isso funciona melhor com modelos que usam ferramentas de forma confiável (por exemplo, GPT-5.6 Sol). Se o modelo não usar a ferramenta e retornar um texto final substancial, o OpenClaw manterá esse texto privado em vez de publicá-lo na sala.
Use "automatic" para modelos ou runtimes que não seguem de forma confiável a entrega somente por ferramenta: textos finais normais são publicados diretamente na sala, e o agente ainda pode chamar message(action=send) para arquivos, imagens ou outros anexos que não possam acompanhar o texto final.
Se a ferramenta de mensagens não estiver disponível de acordo com a política de ferramentas ativa, o OpenClaw voltará às respostas visíveis automáticas em vez de suprimir silenciosamente a resposta. openclaw doctor alerta sobre essa incompatibilidade.
Para conversas diretas e qualquer outro evento de origem, messages.visibleReplies: "message_tool" aplica globalmente o mesmo comportamento somente por ferramenta; messages.groupChat.visibleReplies continua sendo a substituição mais específica para salas de grupos/canais. Por padrão, interações diretas internas do WebChat usam a entrega automática da resposta final, para que Pi e Codex recebam o mesmo contrato de resposta visível.
O modo somente por ferramenta substitui o padrão antigo de forçar o modelo a responder NO_REPLY na maioria das interações em modo observador. No modo somente por ferramenta, o prompt não define um contrato NO_REPLY; não fazer nada visível significa simplesmente não chamar a ferramenta de mensagens.
Vinculações de conversa pertencentes a plugins são a exceção. Depois que um plugin vincula uma thread e assume a interação de entrada, a resposta retornada pelo plugin é a resposta visível da vinculação; ela não precisa de message(action=send). Essa resposta é uma saída do runtime do plugin, não um texto final privado do modelo.
Os indicadores de digitação ainda são enviados para solicitações diretas de grupos. Quando habilitados, os eventos em segundo plano de salas sempre ativas permanecem estritos e silenciosos, a menos que o agente chame a ferramenta de mensagens.
Por padrão, as sessões suprimem resumos detalhados de ferramentas/progresso. Use /verbose on (ou /verbose full) para exibi-los na sessão atual durante a depuração e /verbose off para retornar ao comportamento que mostra apenas a resposta final. O estado detalhado é específico de cada sessão e funciona da mesma forma em conversas diretas, grupos, canais e tópicos de fóruns.
Para enviar conversas não mencionadas de grupos sempre ativos como contexto silencioso da sala em vez de solicitações do usuário, use Eventos de sala em segundo plano:
{ messages: { groupChat: { unmentionedInbound: "room_event", }, },}O padrão é unmentionedInbound: "user_request". Mensagens com menções, comandos, solicitações de cancelamento e mensagens diretas continuam sendo solicitações do usuário.
Para exigir que a saída visível passe pela ferramenta de mensagens nas solicitações de grupos/canais:
{ messages: { groupChat: { visibleReplies: "message_tool", }, },}Para exigir isso em todas as conversas de origem:
{ messages: { visibleReplies: "message_tool", },}O Gateway detecta alterações na configuração messages sem precisar ser reiniciado após o arquivo ser salvo. Reinicie somente quando o recarregamento da configuração estiver desativado (gateway.reload.mode: "off").
Interações de comando ignoram visibleReplies: "message_tool" e sempre respondem de forma visível: tanto os comandos de barra nativos (Discord, Telegram e outras interfaces com suporte nativo a comandos) quanto os comandos de texto /... autorizados publicam suas respostas na conversa de origem. Interações de texto /... não autorizadas em grupos permanecem somente por ferramenta de mensagens; interações de conversa comuns seguem o padrão configurado.
Visibilidade do contexto e listas de permissões
Dois controles diferentes estão envolvidos na segurança de grupos:
- Autorização de acionamento: quem pode acionar o agente (
groupPolicy,groups,groupAllowFrom, listas de permissões específicas do canal). - Visibilidade do contexto: qual contexto complementar é injetado no modelo (texto de resposta/citação, histórico da thread, metadados encaminhados).
Por padrão, o OpenClaw mantém o contexto como recebido: as listas de permissões determinam quem pode acionar ações, não quais trechos citados ou históricos o modelo vê. Para também filtrar o contexto complementar, defina contextVisibility:
| Modo | Comportamento |
|---|---|
"all" (padrão) |
Mantém o contexto complementar como recebido. |
"allowlist" |
Injeta apenas contexto de histórico/thread/citação/encaminhamento de remetentes incluídos na lista de permissões. |
"allowlist_quote" |
allowlist, além de manter a mensagem explicitamente citada ou respondida de qualquer remetente. |
Defina essa opção por canal (channels.<channel>.contextVisibility), por conta (channels.<channel>.accounts.<accountId>.contextVisibility) ou globalmente (channels.defaults.contextVisibility). Os canais que obtêm contexto complementar (Discord, Feishu, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp) aplicam a política ao criar o contexto de entrada; combinações de políticas desconhecidas adotam uma postura fechada e omitem o contexto.
Se você quiser...
| Objetivo | O que definir |
|---|---|
| Permitir todos os grupos, mas responder somente a @menções | groups: { "*": { requireMention: true } } |
| Desativar todas as respostas em grupos | groupPolicy: "disabled" |
| Somente grupos específicos | groups: { "<group-id>": { ... } } (sem a chave "*") |
| Somente você pode acionar em grupos | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
| Reutilizar um conjunto de remetentes confiáveis entre canais | groupAllowFrom: ["accessGroup:operators"] |
Para listas de permissões de remetentes reutilizáveis, consulte Grupos de acesso.
Chaves de sessão
- As sessões de grupo usam chaves de sessão
agent:<agentId>:<channel>:group:<id>(salas/canais usamagent:<agentId>:<channel>:channel:<id>). - Os tópicos de fóruns do Telegram adicionam
:topic:<threadId>ao ID do grupo, para que cada tópico tenha sua própria sessão. - As conversas diretas usam a sessão principal (ou sessões por remetente, se
session.dmScopeestiver configurado). - Heartbeats são executados na sessão de Heartbeat configurada (padrão: a sessão principal do agente); as sessões de grupo não executam seus próprios Heartbeats.
Padrão: mensagens diretas pessoais + grupos públicos (um único agente)
Sim — isso funciona bem se o seu tráfego "pessoal" ocorrer por mensagens diretas e o seu tráfego "público" ocorrer em grupos.
Motivo: no modo de agente único, as mensagens diretas normalmente chegam à chave de sessão principal (agent:main:main), enquanto os grupos sempre usam chaves de sessão não principais (agent:main:<channel>:group:<id>). Se você habilitar o sandboxing com mode: "non-main", essas sessões de grupo serão executadas no backend de sandbox configurado, enquanto sua sessão principal de mensagens diretas permanecerá no host. Docker será o backend padrão se você não escolher um.
Isso oferece um único "cérebro" de agente (workspace + memória compartilhados), mas duas posturas de execução:
- Mensagens diretas: ferramentas completas (host)
- Grupos: sandbox + ferramentas restritas
Mensagens diretas no host, grupos no sandbox
{ agents: { defaults: { sandbox: { mode: "non-main", // grupos/canais não são principais -> no sandbox scope: "session", // isolamento mais forte (um contêiner por grupo/canal) workspaceAccess: "none", }, }, }, tools: { sandbox: { tools: { // Se allow não estiver vazio, todo o restante será bloqueado (deny ainda prevalece). allow: ["group:messaging", "group:sessions"], deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"], }, }, },}Os grupos veem apenas uma pasta incluída na lista de permissões
Quer que "os grupos possam ver apenas a pasta X" em vez de "sem acesso ao host"? Mantenha workspaceAccess: "none" e monte no sandbox apenas os caminhos incluídos na lista de permissões:
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", docker: { binds: [ // caminhoNoHost:caminhoNoContêiner:modo "/home/user/FriendsShared:/data:ro", ], }, }, }, },}Relacionado:
- Chaves de configuração e padrões: Configuração do Gateway
- Como depurar por que uma ferramenta está bloqueada: Sandbox vs. política de ferramentas vs. modo elevado
- Detalhes das montagens bind: Sandboxing
Rótulos de exibição
- Os rótulos da interface usam
displayNamequando disponível, formatado como<channel>:<token>. #roomé reservado para salas/canais; conversas em grupo usamg-<slug>(minúsculas, espaços ->-, manter#@+._-). IDs opacos muito longos são reduzidos a um token estável, em vez de expor IDs completos de rotas na interface.
Política de grupos
Controle como as mensagens de grupos/salas são tratadas em cada canal:
{ channels: { whatsapp: { groupPolicy: "disabled", // "open" | "disabled" | "allowlist" groupAllowFrom: ["+15551234567"], }, telegram: { groupPolicy: "disabled", groupAllowFrom: ["123456789"], // ID numérico de usuário do Telegram (a configuração resolve @username) }, signal: { groupPolicy: "disabled", groupAllowFrom: ["+15551234567"], }, imessage: { groupPolicy: "disabled", groupAllowFrom: ["chat_id:123"], }, msteams: { groupPolicy: "disabled", groupAllowFrom: ["user@org.com"], }, discord: { groupPolicy: "allowlist", guilds: { GUILD_ID: { channels: { help: { enabled: true } } }, }, }, slack: { groupPolicy: "allowlist", channels: { "#general": { enabled: true } }, }, matrix: { groupPolicy: "allowlist", groupAllowFrom: ["@owner:example.org"], groups: { "!roomId:example.org": { enabled: true }, "#alias:example.org": { enabled: true }, }, }, },}| Política | Comportamento |
|---|---|
"open" |
Os grupos ignoram as listas de permissões; a exigência de menção ainda se aplica. |
"disabled" |
Bloqueia completamente todas as mensagens de grupo. |
"allowlist" |
Permite apenas grupos/salas que correspondam à lista de permissões configurada. |
Observações por canal
groupPolicyé separado da exigência de menção (que requer @menções).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: use
groupAllowFrom(alternativa:allowFromexplícito). - Signal:
groupAllowFrompode corresponder ao ID do grupo do Signal recebido ou ao telefone/UUID do remetente. - As aprovações de pareamento de MD (entradas do armazenamento
*-allowFrom) aplicam-se somente ao acesso por MD; a autorização do remetente em grupos continua explícita nas listas de permissões de grupos. - Discord: a lista de permissões usa
channels.discord.guilds.<id>.channels. - Slack: a lista de permissões usa
channels.slack.channels. - Matrix: a lista de permissões usa
channels.matrix.groups. Use IDs de sala (!room:server) ou aliases (#alias:server); chaves de nome de sala correspondem somente comchannels.matrix.dangerouslyAllowNameMatching: true, e entradas não resolvidas são ignoradas em tempo de execução. Usechannels.matrix.groupAllowFrompara restringir remetentes; listas de permissõesuserspor sala também são compatíveis. - MDs em grupo são controladas separadamente (
channels.discord.dm.*,channels.slack.dm.*:groupEnabled,groupChannels). - Telegram: as listas de permissões de remetentes aceitam apenas IDs numéricos de usuário (
"123456789"; os prefixostelegram:/tg:são removidos sem diferenciar maiúsculas de minúsculas). Entradas@usernamenão correspondem em tempo de execução e registram um aviso; a configuração resolve@usernameem IDs. IDs negativos de chat devem ficar emchannels.telegram.groups, não nas listas de permissões de remetentes. - O padrão é
groupPolicy: "allowlist"; se a lista de permissões de grupos estiver vazia, as mensagens de grupo serão bloqueadas. - Segurança em tempo de execução: quando um bloco de provedor está completamente ausente (
channels.<provider>ausente), a política de grupos assume de forma seguraallowlist, em vez de herdarchannels.defaults.groupPolicy, e o Gateway registra a alternativa uma vez por conta.
Modelo mental rápido (ordem de avaliação das mensagens de grupo):
groupPolicy
groupPolicy (open/disabled/allowlist).
Listas de permissões de grupos
Listas de permissões de grupos (*.groups, *.groupAllowFrom, lista de permissões específica do canal).
Exigência de menção
Exigência de menção (requireMention, /activation).
Exigência de menção (padrão)
Mensagens de grupo exigem uma menção, a menos que isso seja substituído por grupo. Os padrões ficam em cada subsistema, em *.groups."*".
Responder a uma mensagem do bot conta como uma menção implícita quando o canal fornece metadados de resposta; citar uma mensagem do bot também pode contar em canais que fornecem metadados de citação. Casos integrados atuais: Discord, Microsoft Teams, QQBot, Slack, Telegram, WhatsApp e Zalo pessoal.
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, "123@g.us": { requireMention: false }, }, }, telegram: { groups: { "*": { requireMention: true }, "123456789": { requireMention: false }, }, }, imessage: { groups: { "*": { requireMention: true }, "123": { requireMention: false }, }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"], historyLimit: 50, }, }, ], },}Definir o escopo dos padrões de menção configurados
Os mentionPatterns configurados são gatilhos regex alternativos. Use-os quando a
plataforma não fornecer uma menção nativa ao bot ou quando quiser que texto simples,
como openclaw:, conte como uma menção. As menções nativas da plataforma são separadas:
quando Discord, Slack, Telegram, Matrix, Signal ou outro canal puder comprovar que a mensagem
mencionou explicitamente o bot, essa menção nativa ainda será acionada, mesmo que
os padrões regex configurados sejam negados.
Por padrão, os padrões de menção configurados se aplicam em todos os locais em que o canal passa informações do provedor e da conversa para a detecção de menções. Para impedir que padrões amplos despertem o agente em todos os grupos, defina o escopo por canal com channels.<channel>.mentionPatterns.
Use mode: "deny" quando os padrões regex de menção devam ficar desativados por padrão em um canal e, depois, habilite-os em salas específicas com allowIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"], }, }, channels: { slack: { mentionPatterns: { mode: "deny", allowIn: ["C0123OPS"], }, }, },}Use o padrão mode: "allow" (ou omita mode) quando os padrões regex de menção devam se aplicar amplamente e, depois, desative-os em salas movimentadas com denyIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b"], }, }, channels: { telegram: { mentionPatterns: { denyIn: ["-1001234567890", "-1001234567890:topic:42"], }, }, },}Resolução da política:
| Campo | Efeito |
|---|---|
mode: "allow" |
Os padrões regex de menção ficam habilitados, a menos que o ID da conversa esteja em denyIn. Esse é o padrão. |
mode: "deny" |
Os padrões regex de menção ficam desabilitados, a menos que o ID da conversa esteja em allowIn. |
allowIn |
IDs de conversas nos quais os padrões regex de menção ficam habilitados no modo de negação. |
denyIn |
IDs de conversas nos quais os padrões regex de menção ficam desabilitados. denyIn prevalece sobre allowIn se ambos incluírem o mesmo ID. |
Política regex com escopo compatível atualmente:
| Canal | IDs usados em allowIn / denyIn |
|---|---|
| Discord | IDs de canais do Discord. |
| Matrix | IDs de salas do Matrix. |
| Slack | IDs de canais do Slack. |
| Telegram | IDs de chats em grupo ou chatId:topic:threadId para tópicos de fórum. |
IDs de conversas do WhatsApp, como 123@g.us. |
As configurações de canal no nível da conta podem definir a mesma política em channels.<channel>.accounts.<accountId>.mentionPatterns quando esse canal oferece suporte a várias contas. Para essa conta, a política da conta tem precedência sobre a política de canal de nível superior.
Observações sobre a exigência de menção
mentionPatternssão padrões regex seguros que não diferenciam maiúsculas de minúsculas; padrões inválidos e formas inseguras de repetição aninhada são ignorados (com um aviso).- Precedência de padrões:
agents.list[].groupChat.mentionPatterns(útil quando vários agentes compartilham um grupo) substituimessages.groupChat.mentionPatterns; quando nenhum dos dois está definido, os padrões são derivados do nome/emoji da identidade do agente. - A exigência de menção só é aplicada quando a detecção de menções é possível (menções nativas ou
mentionPatternsconfigurados). - Adicionar um grupo ou remetente à lista de permissões não desativa a exigência de menção; defina
requireMentiondesse grupo comofalsequando todas as mensagens devam acionar o agente. - O contexto automático do prompt de chat em grupo inclui a instrução resolvida de resposta silenciosa em cada turno; os arquivos do espaço de trabalho não devem duplicar a mecânica de
NO_REPLY. - Grupos nos quais respostas silenciosas automáticas são permitidas tratam turnos do modelo completamente vazios ou somente com raciocínio como silenciosos, de forma equivalente a
NO_REPLY. Chats diretos nunca recebem orientações deNO_REPLY, e respostas de grupo que usam somente a ferramenta de mensagens permanecem silenciosas ao não chamarmessage(action=send). - Conversas ambientes de grupo sempre ativas usam a semântica de solicitação do usuário por padrão. Defina
messages.groupChat.unmentionedInbound: "room_event"para enviá-las como contexto silencioso. Consulte Eventos ambientes de sala para ver exemplos de configuração. - Eventos de sala não são armazenados como solicitações falsas de usuário, e textos privados do assistente provenientes de eventos de sala sem ferramenta de mensagens não são reproduzidos como histórico do chat.
- Os padrões do Discord ficam em
channels.discord.guilds."*"(substituíveis por servidor/canal). - O contexto do histórico de grupos é encapsulado de maneira uniforme entre os canais. Grupos com exigência de menção mantêm mensagens pendentes ignoradas; grupos sempre ativos também podem manter mensagens recentes processadas da sala quando o canal oferece suporte. Use
messages.groupChat.historyLimitcomo padrão global echannels.<channel>.historyLimit(ouchannels.<channel>.accounts.*.historyLimit) para substituições. Defina0para desabilitar.
Restrições de ferramentas por grupo/canal (opcional)
Algumas configurações de canal permitem restringir quais ferramentas estão disponíveis dentro de um grupo/sala/canal específico.
tools: permite/nega ferramentas para todo o grupo (allow,alsoAllow,deny; a negação prevalece).toolsBySender: substituições por remetente dentro do grupo. Use prefixos de chave explícitos:channel:<channelId>:<senderId>,id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>e o curinga"*". IDs de canal usam IDs de canal canônicos do OpenClaw; aliases comoteamssão normalizados paramsteams. Chaves legadas sem prefixo ainda são aceitas, correspondem somente comoid:e registram um aviso de descontinuação.
Ordem de resolução (a mais específica prevalece):
toolsBySender do grupo
Correspondência de toolsBySender do grupo/canal.
Ferramentas do grupo
tools do grupo/canal.
toolsBySender padrão
Correspondência de toolsBySender padrão ("*").
Ferramentas padrão
tools padrão ("*").
Exemplo (Telegram):
{ channels: { telegram: { groups: { "*": { tools: { deny: ["exec"] } }, "-1001234567890": { tools: { deny: ["exec", "read", "write"] }, toolsBySender: { "id:123456789": { alsoAllow: ["exec"] }, }, }, }, }, },}Listas de permissões de grupos
Quando channels.whatsapp.groups, channels.telegram.groups ou channels.imessage.groups está configurado, as chaves funcionam como uma lista de permissões de grupos. Use "*" para permitir todos os grupos e ainda definir o comportamento padrão de menções.
Intenções comuns (copie e cole):
Desativar todas as respostas em grupos
{ channels: { whatsapp: { groupPolicy: "disabled" } },}Permitir apenas grupos específicos (WhatsApp)
{ channels: { whatsapp: { groups: { "123@g.us": { requireMention: true }, "456@g.us": { requireMention: false }, }, }, },}Permitir todos os grupos, mas exigir menção
{ channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}Acionamentos exclusivos do proprietário (WhatsApp)
{ channels: { whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], groups: { "*": { requireMention: true } }, }, },}Ativação (somente proprietário)
Os proprietários de grupos podem alternar a ativação por grupo com uma mensagem independente:
/activation mention/activation always
/activation é um comando central restrito ao proprietário e se aplica apenas a conversas em grupo. Proprietário significa que o remetente corresponde a commands.ownerAllowFrom; as listas allowFrom do canal controlam apenas o acesso comum ao canal e aos comandos. O modo armazenado substitui o requireMention desse grupo nos canais que o consultam (Google Chat, QQBot, Telegram, WhatsApp), e a introdução do prompt de sistema do grupo reflete o modo ativo em todos os lugares.
Campos de contexto
As cargas de entrada de grupos definem:
ChatType=groupGroupSubject(se conhecido)GroupMembers(se conhecido)WasMentioned(resultado da restrição por menção)- Os tópicos de fóruns do Telegram também incluem
MessageThreadIdeIsForum.
O prompt de sistema do agente inclui uma introdução de grupo no primeiro turno de uma nova sessão de grupo (e após alterações em /activation). Ela lembra o modelo de responder como uma pessoa, minimizar linhas vazias, seguir o espaçamento normal de conversas e evitar digitar sequências literais \n. Canais cujo modo de tabela declarado não preserva tabelas nativas ou brutas também desaconselham tabelas Markdown. Nomes de grupos e rótulos de participantes provenientes de canais são renderizados como metadados não confiáveis delimitados por cercas, e não como instruções de sistema em linha.
Particularidades do iMessage
- Prefira
chat_id:<id>ao rotear ou adicionar à lista de permissões. - Liste as conversas:
imsg chats --limit 20. - As respostas em grupos sempre retornam ao mesmo
chat_id.
Prompts de sistema do WhatsApp
Consulte WhatsApp para ver as regras canônicas de prompts de sistema do WhatsApp, incluindo a resolução de prompts de grupo e diretos, o comportamento de curingas e a semântica de substituição por conta.
Particularidades do WhatsApp
Consulte Mensagens em grupo para conhecer o comportamento exclusivo do WhatsApp (injeção de histórico e detalhes do tratamento de menções).