メッセージフローの概要
openclaw.json) 内にあります:
messages.*: プレフィックス、キューイング、グループチャットの挙動。agents.defaults.*: ブロックストリーミングやチャンク化のデフォルト設定。- チャネルごとのオーバーライド (
channels.whatsapp.*,channels.telegram.*など): 各プラットフォームの制限事項やストリーミングの有効・無効。
受信メッセージの重複排除 (Dedupe)
チャネルによっては、再接続後に同じメッセージを再度配信することがあります。OpenClaw は、チャネル、アカウント、送信者、セッション、メッセージ ID をキーとした短期間のキャッシュを保持し、同じメッセージによってエージェントが二重に実行されるのを防ぎます。入力メッセージの集約 (Debouncing)
同じ送信者 から短時間に連続して届いたテキストメッセージは、messages.inbound 設定により 1 つのエージェントターンにまとめて処理できます。デバウンス(集約)はチャネルと会話(conversation)ごとに適用され、返信のスレッドや ID には最新のメッセージの情報が使用されます。
構成例 (グローバルデフォルト + チャネルごとの上書き):
- デバウンスはテキストのみのメッセージに適用されます。メディアや添付ファイルは即座に処理されます。
- 制御用コマンドはデバウンスをバイパスし、単独で実行されます。
セッションとデバイス
セッションはクライアント側ではなく、ゲートウェイ側で管理されます。- ダイレクトチャット(DM)は、エージェントのメインセッションキーに集約されます。
- グループチャットやチャネルは、それぞれ独自のセッションキーを持ちます。
- セッションのデータや記録(トランスクリプト)はゲートウェイが動作しているホスト上に保存されます。
受信本文と履歴コンテキスト
OpenClaw は、エージェントへ送るプロンプト用本文と、コマンド解析用のコマンド用本文を分けて扱います:Body: エージェントに送信されるプロンプトテキスト。チャネル固有の情報や、オプションの履歴情報が含まれる場合があります。CommandBody: ディレクティブやコマンド解析に使用される、生のユーザーテキスト。RawBody:CommandBodyの古い別名(互換性のために保持)。
[Chat messages since your last reply - for context](前回の返信以降のメッセージ - コンテキスト用)[Current message - respond to this](現在のメッセージ - これに応答してください)
CommandBody (または RawBody) に元のメッセージテキストをセットし、Body には結合されたプロンプトをセットする必要があります。履歴バッファの制限数は、グローバル設定の messages.groupChat.historyLimit、またはチャネルごとの上書き(channels.slack.historyLimit, channels.telegram.accounts.<id>.historyLimit など。0 で無効化)で調整可能です。
キューイングとフォローアップ
すでに実行中のエージェントがある場合、新しく届いたメッセージはキュー(待ち行列)に入れられるか、実行中のプロセスに割り込む(ステアリング)か、あるいは現在のターン終了後にまとめて処理(フォローアップ)されます。messages.queue(およびmessages.queue.byChannel) で設定します。- モード:
interrupt,steer,followup,collect、およびそれぞれのバックログ(未処理分)対応バリアント。
ストリーミング、チャンク化、およびバッチ処理
ブロックストリーミング機能を使用すると、モデルがテキストを生成するそばから部分的な返信を送信できます。チャンク化(分割)の際はチャネルごとの文字数制限を遵守し、コードブロックなどが途中で途切れないよう配慮されます。 主な設定項目:agents.defaults.blockStreamingDefault(on|off。デフォルトは off)agents.defaults.blockStreamingBreak(text_endまたはmessage_end)agents.defaults.blockStreamingChunk(minChars,maxChars, 分割優先度)agents.defaults.blockStreamingCoalesce(アイドル時間に基づくバッチ処理)agents.defaults.humanDelay(ブロックごとの返信間に挟む人間らしい一時停止)- チャネルごとの設定:
*.blockStreaming,*.blockStreamingCoalesce(Telegram 以外のチャネルでブロック返信を有効にするには、明示的にtrueに設定する必要があります)
推論プロセス(Reasoning)の可視性とトークン
モデルの思考プロセス(推論内容)を表示するかどうかを制御できます:/reasoning on|off|streamコマンドで切り替え可能です。- 推論内容は表示設定にかかわらず、モデルが生成した時点でトークン消費の対象となります。
- Telegram では、ドラフト(下書き)バブル内への推論ストリーミングをサポートしています。
プレフィックス、スレッド、および返信
送信メッセージの形式はmessages セクションで一元管理されています:
messages.responsePrefix,channels.<channel>.responsePrefix,channels.<channel>.accounts.<id>.responsePrefix(送信時のプレフィックス階層)、およびchannels.whatsapp.messagePrefix(WhatsApp 受信時のプレフィックス)。replyToModeおよびチャネルごとのデフォルト設定による、返信スレッドの紐付け。