Mensagens¶
Esta página reúne como o OpenClaw lida com mensagens de entrada, sessões, enfileiramento, streaming e visibilidade do raciocínio.
Fluxo de mensagens (visão geral)¶
Inbound message
-> routing/bindings -> session key
-> queue (if a run is active)
-> agent run (streaming + tools)
-> outbound replies (channel limits + chunking)
Principais ajustes ficam na configuração:
messages.*para prefixos, enfileiramento e comportamento em grupos.agents.defaults.*para streaming em blocos e padrões de fragmentação.- Substituições por canal (
channels.whatsapp.*,channels.telegram.*, etc.) para limites e alternâncias de streaming.
Veja Configuração para o esquema completo.
Deduplicação de entrada¶
Canais podem reenviar a mesma mensagem após reconexões. O OpenClaw mantém um cache de curta duração com chave por canal/conta/par/sessão/id da mensagem para que entregas duplicadas não acionem outra execução do agente.
Debouncing de entrada¶
Mensagens rápidas e consecutivas do mesmo remetente podem ser agrupadas em um
único turno do agente via messages.inbound. O debouncing é delimitado por canal + conversa
e usa a mensagem mais recente para encadeamento/IDs de resposta.
Configuração (padrão global + substituições por canal):
{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500,
},
},
},
}
Notas:
- O debounce se aplica a mensagens somente de texto; mídia/anexos são enviados imediatamente.
- Comandos de controle ignoram o debounce para permanecerem independentes.
Sessões e dispositivos¶
As sessões pertencem ao gateway, não aos clientes.
- Conversas diretas colapsam na chave principal de sessão do agente.
- Grupos/canais recebem suas próprias chaves de sessão.
- O armazenamento de sessões e as transcrições ficam no host do Gateway.
Vários dispositivos/canais podem mapear para a mesma sessão, mas o histórico não é totalmente sincronizado de volta para todos os clientes. Recomendação: use um dispositivo principal para conversas longas para evitar contexto divergente. A UI de Controle e a TUI sempre exibem a transcrição da sessão mantida pelo gateway, portanto são a fonte de verdade.
Detalhes: Gerenciamento de sessões.
Corpos de entrada e contexto de histórico¶
O OpenClaw separa o corpo do prompt do corpo do comando:
Body: texto do prompt enviado ao agente. Pode incluir envelopes do canal e wrappers opcionais de histórico.CommandBody: texto bruto do usuário para análise de diretivas/comandos.RawBody: alias legado paraCommandBody(mantido por compatibilidade).
Quando um canal fornece histórico, ele usa um wrapper compartilhado:
[Chat messages since your last reply - for context][Current message - respond to this]
Para chats não diretos (grupos/canais/salas), o corpo da mensagem atual recebe um prefixo com o rótulo do remetente (mesmo estilo usado para entradas de histórico). Isso mantém consistentes as mensagens em tempo real e as enfileiradas/de histórico no prompt do agente.
Os buffers de histórico são somente pendentes: incluem mensagens de grupo que não acionaram uma execução (por exemplo, mensagens com gatilho por menção) e excluem mensagens já presentes na transcrição da sessão.
A remoção de diretivas se aplica apenas à seção da mensagem atual, para que o histórico
permaneça intacto. Canais que encapsulam histórico devem definir CommandBody (ou
RawBody) com o texto original da mensagem e manter Body como o prompt combinado.
Os buffers de histórico são configuráveis via messages.groupChat.historyLimit (padrão global) e substituições
por canal como channels.slack.historyLimit ou channels.telegram.accounts.<id>.historyLimit (defina 0 para desativar).
Enfileiramento e acompanhamentos¶
Se uma execução já estiver ativa, mensagens de entrada podem ser enfileiradas, direcionadas para a execução atual ou coletadas para um turno de acompanhamento.
- Configure via
messages.queue(emessages.queue.byChannel). - Modos:
interrupt,steer,followup,collect, além de variantes com backlog.
Detalhes: Enfileiramento.
Streaming, fragmentação e agrupamento¶
O streaming em blocos envia respostas parciais conforme o modelo produz blocos de texto. A fragmentação respeita os limites de texto do canal e evita dividir código delimitado.
Principais configurações:
agents.defaults.blockStreamingDefault(on|off, desativado por padrão)agents.defaults.blockStreamingBreak(text_end|message_end)agents.defaults.blockStreamingChunk(minChars|maxChars|breakPreference)agents.defaults.blockStreamingCoalesce(agrupamento baseado em inatividade)agents.defaults.humanDelay(pausa semelhante à humana entre respostas em blocos)- Substituições por canal:
*.blockStreaminge*.blockStreamingCoalesce(canais não Telegram exigem*.blockStreaming: trueexplícito)
Detalhes: Streaming + fragmentação.
Visibilidade do raciocínio e tokens¶
O OpenClaw pode expor ou ocultar o raciocínio do modelo:
/reasoning on|off|streamcontrola a visibilidade.- O conteúdo de raciocínio ainda conta para o uso de tokens quando produzido pelo modelo.
- O Telegram oferece suporte ao streaming do raciocínio para o balão de rascunho.
Detalhes: Diretivas de pensamento + raciocínio e Uso de tokens.
Prefixos, encadeamento e respostas¶
A formatação de mensagens de saída é centralizada em messages:
messages.responsePrefix,channels.<channel>.responsePrefixechannels.<channel>.accounts.<id>.responsePrefix(cascata de prefixos de saída), além dechannels.whatsapp.messagePrefix(prefixo de entrada do WhatsApp)- Encadeamento de respostas via
replyToModee padrões por canal
Detalhes: Configuração e documentação dos canais.