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"]
}
}
仕組み
メッセージフロー
- 受信メッセージがWhatsAppグループに到着
- ブロードキャストチェック:システムがピアIDがbroadcastにあるかチェック
- ブロードキャストリストにある場合:
- リストされたすべてのエージェントがメッセージを処理
- 各エージェントは独自のセッションキーと分離されたコンテキストを持つ
- エージェントは並列(デフォルト)または順次処理
- ブロードキャストリストにない場合:
- 通常のルーティングが適用される(最初に一致するバインディング)
注意:ブロードキャストグループは、チャネル許可リストやグループアクティベーションルール(メンション/コマンドなど)をバイパスしません。メッセージが処理対象である場合にどのエージェントが実行されるかを変更するだけです。
セッション分離
ブロードキャストグループ内の各エージェントは、完全に分離された以下を維持します:
- セッションキー(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の両方が応答(ブロードキャスト)
優先順位: broadcastはbindingsより優先されます。
トラブルシューティング
エージェントが応答しない
チェック:
- エージェントIDがagents.listに存在する
- ピアIDの形式が正しい(例:[email protected])
- エージェントが拒否リストにない
デバッグ:
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の配列
制限事項
- 最大エージェント数: ハードリミットはないが、10以上のエージェントは遅くなる可能性
- 共有コンテキスト: エージェントは互いの応答を見ない(設計上)
- メッセージの順序: 並列応答は任意の順序で到着する可能性
- レート制限: すべてのエージェントがWhatsAppレート制限にカウントされる
今後の機能強化
計画されている機能:
- 共有コンテキストモード(エージェントが互いの応答を見る)
- エージェント調整(エージェントが互いに信号を送る)
- 動的エージェント選択(メッセージ内容に基づいてエージェントを選択)
- エージェントの優先順位(一部のエージェントが他より先に応答)