訊息處理
OpenClaw 處理入站訊息的完整流程,包括去重、防抖、工作階段管理、佇列、串流及推理可見性。
概覽
此頁面整合說明 OpenClaw 如何處理入站訊息、工作階段、佇列、串流及推理可見性。
訊息流程(高階概覽)
Inbound message
-> routing/bindings -> session key
-> queue (if a run is active)
-> agent run (streaming + tools)
-> outbound replies (channel limits + chunking)
關鍵設定位於:
messages.*用於前綴、佇列和群組行為。agents.defaults.*用於 block streaming 和分塊預設值。- 頻道覆寫(
channels.whatsapp.*、channels.telegram.*等)用於上限和串流開關。
完整結構描述請參閱 設定。
入站去重
頻道可能在重新連線後重新送達相同訊息。OpenClaw 維護一個以 channel/account/peer/session/message id 為鍵的短期快取,以防止重複送達觸發另一次 Agent 執行。
入站防抖
來自同一發送者的快速連續訊息可以透過 messages.inbound 批次合併為單一 Agent 回合。防抖按頻道 + 對話範圍,並使用最新的訊息進行回覆串接/ID。
設定(全域預設 + 每頻道覆寫):
{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500,
},
},
},
}
注意事項:
- 防抖僅適用於純文字訊息;媒體/附件會立即刷新。
- 控制命令繞過防抖,因此它們保持獨立。
工作階段與裝置
工作階段由 Gateway 擁有,而非客戶端。
- 直接聊天合併為 Agent 主要工作階段金鑰。
- 群組/頻道擁有各自的工作階段金鑰。
- 工作階段儲存和逐字稿位於 Gateway 主機上。
多個裝置/頻道可以對應到相同的工作階段,但歷史記錄不會完全同步回每個客戶端。建議:在長對話中使用一個主要裝置以避免上下文分歧。控制面板 UI 和 TUI 始終顯示 Gateway 支持的工作階段逐字稿,因此它們是唯一的真實來源。
詳情:工作階段管理。
入站訊息本體與歷史上下文
OpenClaw 將提示本體與命令本體分開:
Body:傳送給 Agent 的提示文字。這可能包含頻道封套和可選的歷史包裝。CommandBody:用於指令/命令解析的原始使用者文字。RawBody:CommandBody的舊版別名(保留以相容)。
當頻道提供歷史記錄時,使用共享的包裝格式:
[Chat messages since your last reply - for context][Current message - respond to this]
對於非直接聊天(群組/頻道/房間),當前訊息本體會加上發送者標籤(與歷史條目使用相同的樣式)。這使 Agent 提示中的即時和排隊/歷史訊息保持一致。
歷史緩衝區為僅待處理:它們包含未觸發執行的群組訊息(例如被提及閘控的訊息),並排除已在工作階段逐字稿中的訊息。
指令剝離僅適用於當前訊息區段,因此歷史記錄保持完整。包裝歷史的頻道應將 CommandBody(或 RawBody)設為原始訊息文字,並將 Body 保持為組合的提示。
歷史緩衝區可透過 messages.groupChat.historyLimit(全域預設)和每頻道覆寫如 channels.slack.historyLimit 或 channels.telegram.accounts.<id>.historyLimit 進行設定(設為 0 以停用)。
佇列與後續處理
若執行已在進行中,入站訊息可以被排隊、導向到當前執行中,或收集作為後續回合。
- 透過
messages.queue(和messages.queue.byChannel)設定。 - 模式:
interrupt、steer、followup、collect,加上 backlog 變體。
詳情:佇列。
串流、分塊與批次處理
Block streaming 在模型產生文字區塊時傳送部分回覆。分塊遵守頻道文字限制,並避免分割圍欄式程式碼。
關鍵設定:
agents.defaults.blockStreamingDefault(on|off,預設 off)agents.defaults.blockStreamingBreak(text_end|message_end)agents.defaults.blockStreamingChunk(minChars|maxChars|breakPreference)agents.defaults.blockStreamingCoalesce(基於閒置的批次處理)agents.defaults.humanDelay(block 回覆之間的擬人化暫停)- 頻道覆寫:
*.blockStreaming和*.blockStreamingCoalesce(非 Telegram 頻道需要明確設定*.blockStreaming: true)
詳情:串流 + 分塊。
推理可見性與 Token
OpenClaw 可以顯示或隱藏模型推理過程:
/reasoning on|off|stream控制可見性。- 推理內容在模型產生時仍計入 Token 使用量。
- Telegram 支援將推理串流到草稿氣泡中。
前綴、串接與回覆
出站訊息格式集中在 messages 中:
messages.responsePrefix、channels.<channel>.responsePrefix和channels.<channel>.accounts.<id>.responsePrefix(出站前綴層疊),加上channels.whatsapp.messagePrefix(WhatsApp 入站前綴)- 透過
replyToMode和每頻道預設值進行回覆串接
詳情:設定 和頻道文件。