Configuration
Grupos
O 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 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"); os remetentes dos grupos são bloqueados até serem incluídos na lista de permissões. - As respostas exigem uma menção, a menos que você desative essa restriçã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 mencionando-o.
Fluxo rápido (o que acontece com uma mensagem de grupo):
groupPolicy? disabled -> dropgroupPolicy? allowlist -> group allowed? no -> droprequireMention? yes -> mentioned? no -> store for context onlymention/reply/command/DM -> user requestalways-on group chatter -> user request, or room event when configuredRespostas visíveis
Para solicitações normais de grupo/canal, 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 deve 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 relevante, o OpenClaw manterá esse texto privado em vez de publicá-lo na sala.
Use "automatic" para modelos ou ambientes de execução que não seguem de maneira confiável a entrega exclusiva por ferramenta: os 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 segundo a política de ferramentas ativa, o OpenClaw usará respostas visíveis automáticas como alternativa, em vez de suprimir silenciosamente a resposta. O openclaw doctor alerta sobre essa incompatibilidade.
Para conversas diretas e qualquer outro evento de origem, messages.visibleReplies: "message_tool" aplica globalmente o mesmo comportamento exclusivo por ferramenta; messages.groupChat.visibleReplies continua sendo a substituição mais específica para salas de grupo/canal. As interações diretas internas do WebChat usam por padrão a entrega automática da resposta final, para que Pi e Codex recebam o mesmo contrato de resposta visível.
O modo exclusivo por ferramenta substitui o padrão antigo de forçar o modelo a responder NO_REPLY na maioria das interações no modo de observação. No modo exclusivo por ferramenta, o prompt não define um contrato NO_REPLY; não tornar nada visível significa simplesmente não chamar a ferramenta de mensagens.
Os vínculos de conversa pertencentes a Plugins são a exceção. Depois que um Plugin vincula uma thread e assume a interação recebida, a resposta retornada pelo Plugin é a resposta visível do vínculo; ela não precisa de message(action=send). Essa resposta é uma saída do ambiente de execução do Plugin, não o texto final privado do modelo.
Os indicadores de digitação ainda são enviados para solicitações diretas de grupo. Quando ativados, os eventos de salas sempre ativas em segundo plano 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 somente 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ção, comandos, solicitações de cancelamento e mensagens diretas continuam sendo solicitações do usuário.
Para exigir que a saída visível de solicitações de grupo/canal passe pela ferramenta de mensagens:
{ messages: { groupChat: { visibleReplies: "message_tool", }, },}Para exigir isso em todas as conversas de origem:
{ messages: { visibleReplies: "message_tool", },}O Gateway aplica as alterações da configuração messages sem reinicialização depois que o arquivo é salvo. Reinicie somente quando o recarregamento da configuração estiver desativado (gateway.reload.mode: "off").
As 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 superfícies compatíveis com comandos nativos) quanto os comandos de texto /... autorizados publicam suas respostas na conversa de origem. Interações de texto /... não autorizadas em grupos continuam sendo exclusivas da ferramenta de mensagens; interações comuns de conversa seguem o padrão configurado.
Visibilidade do contexto e listas de permissões
Dois controles diferentes estão envolvidos na segurança dos 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 é inserido no modelo (texto de resposta/citação, histórico da thread, metadados encaminhados).
Por padrão, o OpenClaw mantém o contexto como foi recebido: as listas de permissões determinam quem pode acionar ações, não quais trechos citados ou históricos o modelo pode ver. Para também filtrar o contexto complementar, defina contextVisibility:
| Modo | Comportamento |
|---|---|
"all" (padrão) |
Mantém o contexto complementar como foi recebido. |
"allowlist" |
Insere somente contexto de histórico/thread/citação/encaminhamento proveniente de remetentes permitidos. |
"allowlist_quote" |
Igual a allowlist, mas também mantém a mensagem explicitamente citada/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 falham de modo seguro 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" |
| Permitir somente grupos específicos | groups: { "<group-id>": { ... } } (sem a chave "*") |
| Permitir que somente você acione o agente nos grupos | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
| Reutilizar um conjunto de remetentes confiáveis entre canais | groupAllowFrom: ["accessGroup:operators"] |
Para listas reutilizáveis de remetentes permitidos, 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órum 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" for composto por mensagens diretas e o tráfego "público" por 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ê ativar o isolamento com mode: "non-main", essas sessões de grupo serão executadas no backend de isolamento configurado, enquanto sua sessão principal de mensagens diretas permanecerá no host. Docker é o backend padrão caso você não escolha outro.
Isso oferece um único "cérebro" de agente (espaço de trabalho + memória compartilhados), mas duas posturas de execução:
- Mensagens diretas: ferramentas completas (host)
- Grupos: ambiente isolado + ferramentas restritas
Mensagens diretas no host, grupos isolados
{ 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"], }, }, },}Grupos veem somente uma pasta permitida
Quer que "os grupos só possam ver a pasta X" em vez de "nenhum acesso ao host"? Mantenha workspaceAccess: "none" e monte no ambiente isolado somente os caminhos permitidos:
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", docker: { binds: [ // hostPath:containerPath:mode "/home/user/FriendsShared:/data:ro", ], }, }, }, },}Conteúdo relacionado:
- Chaves de configuração e padrões: Configuração do Gateway
- Como depurar por que uma ferramenta foi bloqueada: Ambiente isolado vs. política de ferramentas vs. acesso elevado
- Detalhes das montagens vinculadas: Isolamento
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 ->-, preserva#@+._-). IDs opacos muito longos são abreviados para um token estável, em vez de expor IDs completos de rota na interface.
Política de grupos
Controle como as mensagens de grupos/salas são tratadas por canal:
{ channels: { whatsapp: { groupPolicy: "disabled", // "open" | "disabled" | "allowlist" groupAllowFrom: ["+15551234567"], }, telegram: { groupPolicy: "disabled", groupAllowFrom: ["123456789"], // numeric Telegram user id (setup resolves @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 somente grupos/salas que correspondam à lista de permissões configurada. |
Per-channel notes
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 de remetentes em grupos permanece 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 só correspondem comchannels.matrix.dangerouslyAllowNameMatching: true, e entradas não resolvidas são ignoradas durante a 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 somente IDs numéricos de usuários (
"123456789"; os prefixostelegram:/tg:são removidos sem diferenciar maiúsculas de minúsculas). Entradas@usernamenão correspondem durante a execução e registram um aviso; a configuração resolve@usernamepara IDs. IDs negativos de chats pertencem achannels.telegram.groups, não às listas de permissões de remetentes. - O padrão é
groupPolicy: "allowlist"; se sua lista de permissões de grupos estiver vazia, as mensagens de grupo serão bloqueadas. - Segurança durante a execução: quando um bloco de provedor está completamente ausente (
channels.<provider>ausente), a política de grupos falha de forma segura usandoallowlist, em vez de herdarchannels.defaults.groupPolicy, e o Gateway registra essa alternativa uma vez por conta.
Modelo mental rápido (ordem de avaliação das mensagens de grupo):
groupPolicy
groupPolicy (aberto/desativado/lista de permissões).
Group allowlists
Listas de permissões de grupos (*.groups, *.groupAllowFrom, lista de permissões específica do canal).
Mention gating
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 para cada 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 atualmente: 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 alternativos de expressões regulares. Use-os quando a plataforma não fornecer uma menção nativa ao bot ou quando texto simples, como openclaw:, deva contar como menção. As menções nativas da plataforma são separadas: quando Discord, Slack, Telegram, Matrix ou outro canal puder comprovar que a mensagem mencionou explicitamente o bot, essa menção nativa ainda acionará o agente mesmo onde os padrões de expressões regulares configurados forem negados.
Por padrão, os padrões de menção configurados se aplicam em todos os locais nos quais o canal fornece informações do provedor e da conversa à detecção de menções. Para impedir que padrões abrangentes despertem o agente em todos os grupos, defina o escopo deles por canal com channels.<channel>.mentionPatterns.
Use mode: "deny" quando os padrões de menção por expressão regular devam ficar desativados por padrão em um canal e, em seguida, habilite 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 de menção por expressão regular devam se aplicar de forma ampla e, em seguida, desative-os em salas com muito ruído usando 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 de menção por expressão regular ficam habilitados, a menos que o ID da conversa esteja em denyIn. Este é o padrão. |
mode: "deny" |
Os padrões de menção por expressão regular ficam desabilitados, a menos que o ID da conversa esteja em allowIn. |
allowIn |
IDs de conversas nos quais os padrões de menção por expressão regular ficam habilitados no modo de negação. |
denyIn |
IDs de conversas nos quais os padrões de menção por expressão regular ficam desabilitados. denyIn prevalece sobre allowIn se ambos incluírem o mesmo ID. |
Política de expressões regulares 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. |
Configurações de canal no nível da conta podem definir a mesma política em channels.<channel>.accounts.<accountId>.mentionPatterns quando o canal aceita várias contas. A política da conta prevalece sobre a política do canal no nível superior para essa conta.
Mention gating notes
mentionPatternssão padrões seguros de expressões regulares que não diferenciam maiúsculas de minúsculas; padrões inválidos e formas inseguras com repetição aninhada são ignorados (com um aviso).- Precedência dos padrões:
agents.list[].groupChat.mentionPatterns(útil quando vários agentes compartilham um grupo) substituimessages.groupChat.mentionPatterns; quando nenhum deles 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 (há menções nativas ou
mentionPatternsconfigurados). - Incluir um grupo ou remetente na 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 a cada turno; os arquivos do espaço de trabalho não devem duplicar os mecanismos de
NO_REPLY. - Grupos nos quais respostas silenciosas automáticas são permitidas tratam turnos do modelo completamente vazios ou contendo somente raciocínio como silenciosos, equivalentes a
NO_REPLY. Chats diretos nunca recebem instruções deNO_REPLY, e respostas de grupo que usam somente a ferramenta de mensagens permanecem silenciosas ao não chamarmessage(action=send). - Conversas ambientes e contínuas em grupos 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ários, e texto privado do assistente proveniente de eventos de sala sem uso da ferramenta de mensagens não é reproduzido 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 uniformemente entre os canais. Grupos com exigência de menção mantêm mensagens pendentes ignoradas; grupos sempre ativos também podem manter mensagens recentes já 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 canais 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 explícitos nas chaves:channel:<channelId>:<senderId>,id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>e o caractere curinga"*". IDs de canais usam IDs de canais 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 (o mais específico prevalece):
Group toolsBySender
Correspondência de toolsBySender do grupo/canal.
Group tools
tools do grupo/canal.
Default toolsBySender
Correspondência de toolsBySender padrão ("*").
Default tools
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 (copiar/colar):
Desativar todas as respostas em grupos
{ channels: { whatsapp: { groupPolicy: "disabled" } },}Permitir somente 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 de cada grupo com uma mensagem independente:
/activation mention/activation always
/activation é um comando central restrito ao proprietário e se aplica somente a conversas em grupo. Proprietário significa que o remetente corresponde a allowFrom / commands.ownerAllowFrom do canal (quando nenhuma lista de permissões está configurada, o próprio identificador da conta conta como proprietário). 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 canais.
Campos de contexto
As cargas úteis recebidas de grupos definem:
ChatType=groupGroupSubject(se conhecido)GroupMembers(se conhecidos)WasMentioned(resultado do controle por menção)- Os tópicos de fórum 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 feitas com /activation). Ela orienta o modelo a responder como uma pessoa, minimizar linhas vazias, seguir o espaçamento normal de conversas e evitar digitar sequências literais \n. Grupos que não são do Telegram também desencorajam tabelas Markdown; as orientações de texto enriquecido do Telegram vêm do prompt do canal Telegram. Os nomes de grupos e rótulos de participantes provenientes do canal são renderizados como metadados não confiáveis delimitados por cercas, e não como instruções de sistema embutidas.
Detalhes específicos do iMessage
- Prefira
chat_id:<id>ao rotear ou adicionar à lista de permissões. - Liste as conversas:
imsg chats --limit 20. - As respostas em grupo 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.
Detalhes específicos do WhatsApp
Consulte Mensagens de grupo para ver o comportamento exclusivo do WhatsApp (injeção de histórico e detalhes do tratamento de menções).