Canais e roteamento
O OpenClaw roteia respostas de volta para o canal de onde uma mensagem veio. O modelo não escolhe um canal; o roteamento é determinístico e controlado pela configuração do host.Termos principais
- Canal:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, além de canais de extensão.webchaté o canal interno da UI do WebChat e não é um canal de saída configurável. - AccountId: instância de conta por canal (quando compatível).
- Conta padrão opcional do canal:
channels.<channel>.defaultAccountescolhe qual conta é usada quando um caminho de saída não especificaaccountId.- Em configurações com várias contas, defina um padrão explícito (
defaultAccountouaccounts.default) quando duas ou mais contas estiverem configuradas. Sem isso, o roteamento de fallback pode escolher o primeiro ID de conta normalizado.
- Em configurações com várias contas, defina um padrão explícito (
- AgentId: um workspace + armazenamento de sessão isolados (“cérebro”).
- SessionKey: a chave de bucket usada para armazenar contexto e controlar a concorrência.
Formatos de chave de sessão (exemplos)
Mensagens diretas são recolhidas na sessão principal do agente:agent:<agentId>:<mainKey>(padrão:agent:main:main)
- Grupos:
agent:<agentId>:<channel>:group:<id> - Canais/salas:
agent:<agentId>:<channel>:channel:<id>
- Threads do Slack/Discord acrescentam
:thread:<threadId>à chave base. - Tópicos de fórum do Telegram incorporam
:topic:<topicId>na chave do grupo.
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Fixação da rota principal de DM
Quandosession.dmScope é main, mensagens diretas podem compartilhar uma sessão principal.
Para impedir que lastRoute da sessão seja sobrescrito por DMs de não proprietários,
o OpenClaw infere um proprietário fixado a partir de allowFrom quando tudo isso é verdadeiro:
allowFromtem exatamente uma entrada sem wildcard.- A entrada pode ser normalizada para um ID de remetente concreto desse canal.
- O remetente da DM recebida não corresponde a esse proprietário fixado.
lastRoute da sessão principal.
Regras de roteamento (como um agente é escolhido)
O roteamento escolhe um agente para cada mensagem recebida:- Correspondência exata de peer (
bindingscompeer.kind+peer.id). - Correspondência de peer pai (herança de thread).
- Correspondência de guild + funções (Discord) via
guildId+roles. - Correspondência de guild (Discord) via
guildId. - Correspondência de equipe (Slack) via
teamId. - Correspondência de conta (
accountIdno canal). - Correspondência de canal (qualquer conta nesse canal,
accountId: "*"). - Agente padrão (
agents.list[].default, caso contrário a primeira entrada da lista, com fallback paramain).
peer, guildId, teamId, roles), todos os campos fornecidos devem corresponder para que esse binding seja aplicado.
O agente correspondente determina qual workspace e qual armazenamento de sessão são usados.
Grupos de broadcast (executar vários agentes)
Os grupos de broadcast permitem executar vários agentes para o mesmo peer quando o OpenClaw normalmente responderia (por exemplo: em grupos do WhatsApp, após o gating de menção/ativação). Configuração:Visão geral da configuração
agents.list: definições de agentes nomeados (workspace, modelo etc.).bindings: mapeia canais/contas/peers de entrada para agentes.
Armazenamento de sessão
Os armazenamentos de sessão ficam no diretório de estado (padrão~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- As transcrições JSONL ficam ao lado do armazenamento
session.store e templating com {agentId}.
A descoberta de sessão do Gateway e do ACP também verifica armazenamentos de agentes com suporte em disco sob a
raiz padrão agents/ e sob raízes de session.store com template. Os armazenamentos
descobertos devem permanecer dentro dessa raiz de agente resolvida e usar um arquivo
sessions.json regular. Links simbólicos e caminhos fora da raiz são ignorados.
Comportamento do WebChat
O WebChat se conecta ao agente selecionado e usa por padrão a sessão principal do agente. Por isso, o WebChat permite ver o contexto entre canais desse agente em um único lugar.Contexto de resposta
As respostas recebidas incluem:ReplyToId,ReplyToBodyeReplyToSenderquando disponíveis.- O contexto citado é acrescentado a
Bodycomo um bloco[Replying to ...].