Channels & routing(チャネルとルーティング)

OpenClaw は、メッセージが来たチャネルに返信をルーティングします。モデルはチャネルを選択しません。ルーティングは決定論的であり、ホスト設定によって制御されます。

主要用語

  • Channel(チャネル):whatsapptelegramdiscordslacksignalimessagewebchat
  • AccountId(アカウント ID):チャネルごとのアカウントインスタンス(サポートされている場合)。
  • AgentId(エージェント ID):分離されたワークスペース + セッションストア(「脳」)。
  • SessionKey(セッションキー):コンテキストを格納し、同時実行を制御するために使用されるバケットキー。

セッションキーの形状(例)

ダイレクトメッセージは、エージェントの main セッションに統合されます:

  • agent:<agentId>:<mainKey>(デフォルト:agent:main:main

グループとチャネルは、チャネルごとに分離されたままです:

  • グループ:agent:<agentId>:<channel>:group:<id>
  • チャネル/ルーム:agent:<agentId>:<channel>:channel:<id>

スレッド(thread):

  • Slack/Discord スレッドは、ベースキーに :thread:<threadId> を追加します。
  • Telegram フォーラムトピックは、グループキーに :topic:<topicId> を埋め込みます。

例:

  • agent:main:telegram:group:-1001234567890:topic:42
  • agent:main:discord:channel:123456:thread:987654

ルーティングルール(エージェントの選択方法)

ルーティングは、受信メッセージごとに1 つのエージェントを選択します:

  1. 正確なピアマッチpeer.kind + peer.id を含む bindings)。
  2. ギルドマッチ(Discord)guildId 経由。
  3. チームマッチ(Slack)teamId 経由。
  4. アカウントマッチ(チャネルの accountId)。
  5. チャネルマッチ(そのチャネルの任意のアカウント)。
  6. デフォルトエージェントagents.list[].default、そうでなければ最初のリストエントリ、フォールバックは main)。

マッチしたエージェントによって、使用されるワークスペースとセッションストアが決定されます。

ブロードキャストグループ(複数のエージェントを実行)

ブロードキャストグループ(broadcast groups)を使用すると、OpenClaw が通常返信する場合(例:WhatsApp グループで、メンション/アクティベーションゲーティング後)、同じピアに対して複数のエージェントを実行できます。

設定:

{
  broadcast: {
    strategy: "parallel",
    "[email protected]": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"]
  }
}

参照:Broadcast Groups

設定概要

  • agents.list:名前付きエージェント定義(workspace、model など)。
  • bindings:受信チャネル/アカウント/ピアをエージェントにマッピング。

例:

{
  agents: {
    list: [
      { id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }
    ]
  },
  bindings: [
    { match: { channel: "slack", teamId: "T123" }, agentId: "support" },
    { match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" }
  ]
}

セッションストレージ

セッションストアは、state ディレクトリ(デフォルト ~/.openclaw)の下に存在します:

  • ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • JSONL トランスクリプトはストアと並んで存在します

session.store{agentId} テンプレートを使用して、ストアパスをオーバーライドできます。

WebChat の動作

WebChat は選択されたエージェントにアタッチし、エージェントのメインセッションにデフォルト設定されます。このため、WebChat では、そのエージェントのクロスチャネルコンテキストを 1 つの場所で確認できます。

返信コンテキスト

受信返信には次のものが含まれます:

  • 利用可能な場合、ReplyToIdReplyToBody、および ReplyToSender
  • 引用されたコンテキストは、[Replying to ...] ブロックとして Body に追加されます。

これはチャネル間で一貫しています。