Broadcast Groups

ステータス: 実験的
バージョン: 2026.1.9で追加

概要

Broadcast Groupsを使用すると、複数のエージェントが同じメッセージを同時に処理して応答できます。これにより、単一のWhatsAppグループまたはDM内で協力する専門エージェントチームを作成できます—すべて1つの電話番号を使用します。

現在の範囲:WhatsAppのみ(webチャネル)。

ブロードキャストグループは、チャネル許可リストとグループアクティベーションルールの後に評価されます。WhatsAppグループでは、これはOpenClawが通常応答する場合(例:メンション時、グループ設定に応じて)にブロードキャストが発生することを意味します。

使用例

1. 専門エージェントチーム

原子的で焦点を絞った責任を持つ複数のエージェントを展開:

グループ: "Development Team"
エージェント:
  - CodeReviewer (コードスニペットをレビュー)
  - DocumentationBot (ドキュメントを生成)
  - SecurityAuditor (脆弱性をチェック)
  - TestGenerator (テストケースを提案)

各エージェントは同じメッセージを処理し、専門的な視点を提供します。

2. 多言語サポート

グループ: "International Support"
エージェント:
  - Agent_EN (英語で応答)
  - Agent_DE (ドイツ語で応答)
  - Agent_ES (スペイン語で応答)

3. 品質保証ワークフロー

グループ: "Customer Support"
エージェント:
  - SupportAgent (回答を提供)
  - QAAgent (品質をレビュー、問題が見つかった場合のみ応答)

4. タスク自動化

グループ: "Project Management"
エージェント:
  - TaskTracker (タスクデータベースを更新)
  - TimeLogger (費やした時間を記録)
  - ReportGenerator (サマリーを作成)

設定

基本セットアップ

トップレベルのbroadcastセクション(bindingsの隣)を追加します。キーはWhatsAppピアIDです:

  • グループチャット:グループJID(例:[email protected]
  • DM:E.164電話番号(例:+15551234567
{
  "broadcast": {
    "[email protected]": ["alfred", "baerbel", "assistant3"]
  }
}

結果: OpenClawがこのチャットで応答する場合、3つのエージェントすべてが実行されます。

処理戦略

エージェントがメッセージを処理する方法を制御:

Parallel(デフォルト)

すべてのエージェントが同時に処理:

{
  "broadcast": {
    "strategy": "parallel",
    "[email protected]": ["alfred", "baerbel"]
  }
}

Sequential

エージェントが順番に処理(1つが前のエージェントの完了を待つ):

{
  "broadcast": {
    "strategy": "sequential",
    "[email protected]": ["alfred", "baerbel"]
  }
}

完全な例

{
  "agents": {
    "list": [
      {
        "id": "code-reviewer",
        "name": "Code Reviewer",
        "workspace": "/path/to/code-reviewer",
        "sandbox": { "mode": "all" }
      },
      {
        "id": "security-auditor",
        "name": "Security Auditor",
        "workspace": "/path/to/security-auditor",
        "sandbox": { "mode": "all" }
      },
      {
        "id": "docs-generator",
        "name": "Documentation Generator",
        "workspace": "/path/to/docs-generator",
        "sandbox": { "mode": "all" }
      }
    ]
  },
  "broadcast": {
    "strategy": "parallel",
    "[email protected]": ["code-reviewer", "security-auditor", "docs-generator"],
    "[email protected]": ["support-en", "support-de"],
    "+15555550123": ["assistant", "logger"]
  }
}

仕組み

メッセージフロー

  1. 受信メッセージがWhatsAppグループに到着
  2. ブロードキャストチェック:システムがピアIDがbroadcastにあるかチェック
  3. ブロードキャストリストにある場合
    • リストされたすべてのエージェントがメッセージを処理
    • 各エージェントは独自のセッションキーと分離されたコンテキストを持つ
    • エージェントは並列(デフォルト)または順次処理
  4. ブロードキャストリストにない場合
    • 通常のルーティングが適用される(最初に一致するバインディング)

注意:ブロードキャストグループは、チャネル許可リストやグループアクティベーションルール(メンション/コマンドなど)をバイパスしません。メッセージが処理対象である場合にどのエージェントが実行されるかを変更するだけです。

セッション分離

ブロードキャストグループ内の各エージェントは、完全に分離された以下を維持します:

  • セッションキーagent:alfred:whatsapp:group:120363... vs agent:baerbel:whatsapp:group:120363...
  • 会話履歴(エージェントは他のエージェントのメッセージを見ない)
  • ワークスペース(設定されている場合は別々のサンドボックス)
  • ツールアクセス(異なる許可/拒否リスト)
  • メモリ/コンテキスト(別々のIDENTITY.md、SOUL.mdなど)
  • グループコンテキストバッファー(コンテキストに使用される最近のグループメッセージ)はピアごとに共有されるため、すべてのブロードキャストエージェントはトリガー時に同じコンテキストを見る

これにより、各エージェントは以下を持つことができます:

  • 異なる性格
  • 異なるツールアクセス(例:読み取り専用vs読み書き)
  • 異なるモデル(例:opus vs sonnet)
  • 異なるインストールされたスキル

例:分離されたセッション

グループ[email protected]でエージェント["alfred", "baerbel"]の場合:

Alfredのコンテキスト:

セッション: agent:alfred:whatsapp:group:[email protected]
履歴: [ユーザーメッセージ、alfredの以前の応答]
ワークスペース: /Users/pascal/openclaw-alfred/
ツール: read, write, exec

Bärbelのコンテキスト:

セッション: agent:baerbel:whatsapp:group:[email protected]  
履歴: [ユーザーメッセージ、bärbelの以前の応答]
ワークスペース: /Users/pascal/openclaw-baerbel/
ツール: 読み取り専用

ベストプラクティス

1. エージェントを焦点を絞った状態に保つ

各エージェントを単一の明確な責任で設計:

{
  "broadcast": {
    "DEV_GROUP": ["formatter", "linter", "tester"]
  }
}

良い: 各エージェントは1つの仕事を持つ
悪い: 1つの汎用的な「dev-helper」エージェント

2. 説明的な名前を使用

各エージェントが何をするかを明確に:

{
  "agents": {
    "security-scanner": { "name": "Security Scanner" },
    "code-formatter": { "name": "Code Formatter" },
    "test-generator": { "name": "Test Generator" }
  }
}

3. 異なるツールアクセスを設定

エージェントに必要なツールのみを与える:

{
  "agents": {
    "reviewer": {
      "tools": { "allow": ["read", "exec"] }  // 読み取り専用
    },
    "fixer": {
      "tools": { "allow": ["read", "write", "edit", "exec"] }  // 読み書き
    }
  }
}

4. パフォーマンスを監視

多くのエージェントがある場合、以下を検討:

  • "strategy": "parallel"(デフォルト)を使用して速度向上
  • ブロードキャストグループを5-10エージェントに制限
  • よりシンプルなエージェントにはより高速なモデルを使用

5. 障害を適切に処理

エージェントは独立して失敗します。1つのエージェントのエラーが他をブロックしません:

メッセージ → [エージェントA ✓、エージェントB ✗ エラー、エージェントC ✓]
結果:エージェントAとCが応答、エージェントBはエラーをログ

互換性

プロバイダー

ブロードキャストグループは現在以下と連携:

  • ✅ WhatsApp(実装済み)
  • 🚧 Telegram(予定)
  • 🚧 Discord(予定)
  • 🚧 Slack(予定)

ルーティング

ブロードキャストグループは既存のルーティングと並行して機能:

{
  "bindings": [
    { "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } }, "agentId": "alfred" }
  ],
  "broadcast": {
    "GROUP_B": ["agent1", "agent2"]
  }
}
  • GROUP_A:alfredのみが応答(通常のルーティング)
  • GROUP_B:agent1とagent2の両方が応答(ブロードキャスト)

優先順位: broadcastbindingsより優先されます。

トラブルシューティング

エージェントが応答しない

チェック:

  1. エージェントIDがagents.listに存在する
  2. ピアIDの形式が正しい(例:[email protected]
  3. エージェントが拒否リストにない

デバッグ:

tail -f ~/.openclaw/logs/gateway.log | grep broadcast

1つのエージェントのみが応答

原因: ピアIDがbindingsにあるがbroadcastにない可能性がある。

修正: ブロードキャスト設定に追加するか、bindingsから削除。

パフォーマンスの問題

多くのエージェントで遅い場合:

  • グループごとのエージェント数を減らす
  • より軽量なモデルを使用(opusの代わりにsonnet)
  • サンドボックスの起動時間をチェック

例1:コードレビューチーム

{
  "broadcast": {
    "strategy": "parallel",
    "[email protected]": [
      "code-formatter",
      "security-scanner",
      "test-coverage",
      "docs-checker"
    ]
  },
  "agents": {
    "list": [
      { "id": "code-formatter", "workspace": "~/agents/formatter", "tools": { "allow": ["read", "write"] } },
      { "id": "security-scanner", "workspace": "~/agents/security", "tools": { "allow": ["read", "exec"] } },
      { "id": "test-coverage", "workspace": "~/agents/testing", "tools": { "allow": ["read", "exec"] } },
      { "id": "docs-checker", "workspace": "~/agents/docs", "tools": { "allow": ["read"] } }
    ]
  }
}

ユーザーが送信: コードスニペット
応答:

  • code-formatter:「インデントを修正し、型ヒントを追加しました」
  • security-scanner:「⚠️ 12行目にSQLインジェクションの脆弱性」
  • test-coverage:「カバレッジは45%、エラーケースのテストが不足」
  • docs-checker:「関数process_dataのdocstringが不足」

例2:多言語サポート

{
  "broadcast": {
    "strategy": "sequential",
    "+15555550123": ["detect-language", "translator-en", "translator-de"]
  },
  "agents": {
    "list": [
      { "id": "detect-language", "workspace": "~/agents/lang-detect" },
      { "id": "translator-en", "workspace": "~/agents/translate-en" },
      { "id": "translator-de", "workspace": "~/agents/translate-de" }
    ]
  }
}

APIリファレンス

設定スキーマ

interface OpenClawConfig {
  broadcast?: {
    strategy?: "parallel" | "sequential";
    [peerId: string]: string[];
  };
}

フィールド

  • strategy(オプション):エージェントの処理方法

    • "parallel"(デフォルト):すべてのエージェントが同時に処理
    • "sequential":エージェントが配列の順序で処理
  • [peerId]:WhatsAppグループJID、E.164番号、または他のピアID

    • 値:メッセージを処理すべきエージェントIDの配列

制限事項

  1. 最大エージェント数: ハードリミットはないが、10以上のエージェントは遅くなる可能性
  2. 共有コンテキスト: エージェントは互いの応答を見ない(設計上)
  3. メッセージの順序: 並列応答は任意の順序で到着する可能性
  4. レート制限: すべてのエージェントがWhatsAppレート制限にカウントされる

今後の機能強化

計画されている機能:

  • 共有コンテキストモード(エージェントが互いの応答を見る)
  • エージェント調整(エージェントが互いに信号を送る)
  • 動的エージェント選択(メッセージ内容に基づいてエージェントを選択)
  • エージェントの優先順位(一部のエージェントが他より先に応答)

関連項目