訊息
本頁將 OpenClaw 如何處理入站訊息、sessions、佇列、串流和推理可見性串在一起說明。
訊息流程(高層概覽)
入站訊息
-> 路由/綁定 -> session key
-> 佇列(如果有執行中的 run)
-> agent 執行(串流 + 工具)
-> 出站回覆(頻道限制 + 分段)
關鍵設定參數:
messages.*控制前綴、佇列和群組行為。agents.defaults.*控制區塊串流和分段預設值。- 頻道覆寫(
channels.whatsapp.*、channels.telegram.*等)控制上限和串流開關。
請參閱 Configuration 瞭解完整 schema。
入站去重
頻道在重連後可能會重新傳送相同的訊息。OpenClaw 維護一個以 channel/account/peer/session/message id 為 key 的短期快取,避免重複傳送觸發另一次 agent 執行。
入站 Debounce
來自同一發送者的快速連續訊息可以批次合併為單一 agent 回合,透過 messages.inbound 設定。Debounce 以 channel + 對話為範圍,使用最近一則訊息的回覆串接/ID。
設定(全域預設 + 按頻道覆寫):
{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500,
},
},
},
}
注意事項:
- Debounce 適用於純文字訊息;媒體/附件會立即處理。
- 控制指令繞過 debounce,保持獨立執行。
Sessions 與裝置
Sessions 由 gateway 擁有,不是由用戶端擁有。
- 私訊聊天合併到 agent 的主要 session key。
- 群組/頻道有各自的 session key。
- Session 儲存區和對話記錄存放在 gateway 主機上。
多個裝置/頻道可以對應到同一個 session,但歷史記錄不會完整同步回每個用戶端。建議:長對話使用一個主要裝置,避免上下文分歧。Control UI 和 TUI 始終顯示 gateway 端的 session 對話記錄,是唯一的真實來源。
入站內容與歷史上下文
OpenClaw 區分提示內容和指令內容:
Body:送給 agent 的提示文字。可能包含頻道信封和可選的歷史包裝。CommandBody:用於指示詞/指令解析的原始使用者文字。RawBody:CommandBody的舊版別名(保留以維持相容性)。
當頻道提供歷史記錄時,使用共享的包裝格式:
[Chat messages since your last reply - for context][Current message - respond to this]
在非直接聊天(群組/頻道/聊天室)中,當前訊息內容會加上發送者標籤(與歷史條目使用相同的格式)。這讓即時和排隊/歷史訊息在 agent 提示中保持一致。
歷史緩衝是僅限待處理的:它們包含未觸發 run 的群組訊息(例如被 mention 過濾的訊息),並排除已在 session 對話記錄中的訊息。
指示詞剝除只適用於當前訊息區段,歷史記錄保持原樣。包裝歷史的頻道應該將 CommandBody(或 RawBody)設為原始訊息文字,將 Body 保留為合併後的提示。
歷史緩衝可透過 messages.groupChat.historyLimit(全域預設)和按頻道覆寫(如 channels.slack.historyLimit 或 channels.telegram.accounts.<id>.historyLimit)設定。設 0 停用。
佇列與後續訊息
如果已有 run 在執行中,入站訊息可以被佇列、轉向到當前 run,或收集起來做後續回合。
- 透過
messages.queue(和messages.queue.byChannel)設定。 - 模式:
interrupt、steer、followup、collect,以及 backlog 變體。
細節:Queueing。
串流、分段與批次
區塊串流在模型產生文字區塊時發送部分回覆。分段遵守頻道文字限制,避免切斷程式碼區塊。
關鍵設定:
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(區塊回覆之間的擬人暫停)- 頻道覆寫:
*.blockStreaming和*.blockStreamingCoalesce(非 Telegram 頻道需要明確設定*.blockStreaming: true)
推理可見性與 token
OpenClaw 可以顯示或隱藏模型的推理過程:
/reasoning on|off|stream控制可見性。- 模型產生推理內容時,仍然計入 token 用量。
- Telegram 支援將推理串流到草稿氣泡中。
細節:Thinking + reasoning directives 和 Token use。
前綴、串接與回覆
出站訊息格式集中在 messages 中設定:
messages.responsePrefix、channels.<channel>.responsePrefix和channels.<channel>.accounts.<id>.responsePrefix(出站前綴層疊),以及channels.whatsapp.messagePrefix(WhatsApp 入站前綴)- 透過
replyToMode和按頻道預設值控制回覆串接
細節:Configuration 和各頻道文件。