グループ
OpenClaw は、Discord、iMessage、Matrix、Microsoft Teams、Signal、Slack、Telegram、WhatsApp、Zalo の各サーフェスでグループチャットを一貫して扱います。初心者向けイントロ(2分)
OpenClaw はあなた自身のメッセージングアカウント上で「動作」します。別個の WhatsApp ボットユーザーは存在しません。 あなた がグループに参加していれば、OpenClaw はそのグループを確認でき、そこで応答できます。 デフォルトの動作:- グループは制限されています(
groupPolicy: "allowlist")。 - 明示的にメンションゲーティングを無効にしない限り、返信にはメンションが必要です。
要点クイックフロー(グループメッセージで何が起こるか):
- DM アクセス は
*.allowFromで制御されます。- グループアクセス は
*.groupPolicyと allowlist(*.groups、*.groupAllowFrom)で制御されます。- 返信のトリガー はメンションゲーティング(
requireMention、/activation)で制御されます。
コンテキストの可視性と allowlist
グループの安全性には、2 つの異なる制御が関係します。- トリガー認可: 誰がエージェントをトリガーできるか(
groupPolicy、groups、groupAllowFrom、チャネル固有の allowlist)。 - コンテキストの可視性: どの補足コンテキストがモデルに注入されるか(返信テキスト、引用、スレッド履歴、転送メタデータ)。
- 一部のチャネルでは、特定の経路で補足コンテキストに対して送信者ベースのフィルタリングがすでに適用されています(たとえば Slack のスレッドシード、Matrix の返信/スレッド参照)。
- 他のチャネルでは、引用/返信/転送コンテキストが受信したまま渡されます。
contextVisibility: "all"(デフォルト)は、現在の受信したままの動作を維持します。contextVisibility: "allowlist"は、補足コンテキストを allowlist に登録された送信者に絞り込みます。contextVisibility: "allowlist_quote"は、allowlistに 1 つの明示的な引用/返信例外を加えたものです。
| 目的 | 設定内容 |
|---|---|
すべてのグループを許可しつつ、@mentions のときだけ返信する | groups: { "*": { requireMention: true } } |
| すべてのグループ返信を無効にする | groupPolicy: "disabled" |
| 特定のグループのみ | groups: { "<group-id>": { ... } } ("*" キーなし) |
| グループ内でトリガーできるのは自分だけ | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
セッションキー
- グループセッションは
agent:<agentId>:<channel>:group:<id>セッションキーを使用します(ルーム/チャネルはagent:<agentId>:<channel>:channel:<id>を使用します)。 - Telegram のフォーラムトピックでは、各トピックが独自のセッションを持つように、グループ ID に
:topic:<threadId>が追加されます。 - ダイレクトチャットはメインセッション(または、設定されている場合は送信者ごとのセッション)を使用します。
- ハートビートはグループセッションではスキップされます。
パターン: 個人 DM + 公開グループ(単一エージェント)
はい。あなたの「個人」トラフィックが DM で、「公開」トラフィックが グループ なら、これはうまく機能します。 理由: 単一エージェントモードでは、DM は通常 メイン セッションキー(agent:main:main)に入り、グループは常に 非メイン セッションキー(agent:main:<channel>:group:<id>)を使用します。mode: "non-main" でサンドボックス化を有効にすると、それらのグループセッションは Docker 内で実行され、メインの DM セッションはホスト上に残ります。
これにより、1 つのエージェント「頭脳」(共有ワークスペース + メモリ)を維持しつつ、2 つの実行姿勢を持てます。
- DM: フルツール(ホスト)
- グループ: サンドボックス + 制限付きツール(Docker)
本当に分離されたワークスペース/ペルソナ(「個人」と「公開」を決して混在させてはいけない)が必要な場合は、2 つ目のエージェント + バインディングを使用してください。Multi-Agent Routing を参照してください。例(DM はホスト、グループはサンドボックス化 + メッセージング専用ツール):
workspaceAccess: "none" を維持しつつ、allowlist に登録されたパスだけをサンドボックスにマウントしてください。
- 設定キーとデフォルト: Gateway configuration
- ツールがブロックされる理由のデバッグ: Sandbox vs Tool Policy vs Elevated
- バインドマウントの詳細: Sandboxing
表示ラベル
- UI ラベルは、利用可能な場合
displayNameを使用し、<channel>:<token>形式で表示されます。 #roomはルーム/チャネル用に予約されています。グループチャットはg-<slug>を使用します(小文字、スペースは-に変換し、#@+._-は維持します)。
グループポリシー
チャネルごとに、グループ/ルームメッセージをどのように扱うかを制御します。| ポリシー | 動作 |
|---|---|
"open" | グループは allowlist をバイパスします。メンションゲーティングは引き続き適用されます。 |
"disabled" | すべてのグループメッセージを完全にブロックします。 |
"allowlist" | 設定された allowlist に一致するグループ/ルームのみを許可します。 |
groupPolicyはメンションゲーティング(@mentions を要求するもの)とは別です。- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo:
groupAllowFromを使用します(フォールバック: 明示的なallowFrom)。 - DM ペアリング承認(
*-allowFromストアエントリ)は DM アクセスにのみ適用されます。グループ送信者の認可は、グループ allowlist に対して明示的なままです。 - Discord: allowlist は
channels.discord.guilds.<id>.channelsを使用します。 - Slack: allowlist は
channels.slack.channelsを使用します。 - Matrix: allowlist は
channels.matrix.groupsを使用します。ルーム ID またはエイリアスを優先してください。参加済みルーム名の参照はベストエフォートで、解決できない名前は実行時に無視されます。送信者を制限するにはchannels.matrix.groupAllowFromを使用します。ルーム単位のusersallowlist もサポートされています。 - グループ DM は別途制御されます(
channels.discord.dm.*、channels.slack.dm.*)。 - Telegram の allowlist はユーザー ID(
"123456789"、"telegram:123456789"、"tg:123456789")またはユーザー名("@alice"または"alice")に一致できます。プレフィックスは大文字/小文字を区別しません。 - デフォルトは
groupPolicy: "allowlist"です。グループ allowlist が空の場合、グループメッセージはブロックされます。 - ランタイム安全性: プロバイダーブロック全体が完全に欠落している場合(
channels.<provider>が存在しない場合)、グループポリシーはchannels.defaults.groupPolicyを継承せず、フェイルクローズドモード(通常はallowlist)にフォールバックします。
groupPolicy(open/disabled/allowlist)- グループ allowlist(
*.groups、*.groupAllowFrom、チャネル固有の allowlist) - メンションゲーティング(
requireMention、/activation)
メンションゲーティング(デフォルト)
グループメッセージは、グループごとに上書きしない限り、メンションを必要とします。デフォルトは各サブシステムの*.groups."*" 配下にあります。
チャネルが返信メタデータをサポートしている場合、ボットメッセージへの返信は暗黙のメンションとして扱われます。
引用メタデータを公開するチャネルでは、ボットメッセージの引用も暗黙の
メンションとして扱われることがあります。現在の組み込みケースには
Telegram、WhatsApp、Slack、Discord、Microsoft Teams、ZaloUser が含まれます。
mentionPatternsは大文字/小文字を区別しない安全な正規表現パターンです。無効なパターンや、安全でないネストされた反復形式は無視されます。- 明示的なメンションを提供するサーフェスは、そのまま通過します。パターンはフォールバックです。
- エージェント単位の上書き:
agents.list[].groupChat.mentionPatterns(複数のエージェントが同じグループを共有する場合に便利です)。 - メンションゲーティングは、メンション検出が可能な場合にのみ適用されます(ネイティブメンション、または
mentionPatternsが設定されている場合)。 - Discord のデフォルトは
channels.discord.guilds."*"配下にあります(guild/channel ごとに上書き可能)。 - グループ履歴コンテキストは、チャネル間で一貫した形でラップされ、保留中のみ です(メンションゲーティングのためにスキップされたメッセージ)。グローバルデフォルトには
messages.groupChat.historyLimitを使用し、上書きにはchannels.<channel>.historyLimit(またはchannels.<channel>.accounts.*.historyLimit)を使用します。無効にするには0を設定します。
グループ/チャネルのツール制限(任意)
一部のチャネル設定では、特定のグループ/ルーム/チャネル内 で利用できるツールを制限できます。tools: グループ全体に対するツールの許可/拒否。toolsBySender: グループ内の送信者ごとの上書き。 明示的なキープレフィックスを使用します:id:<senderId>、e164:<phone>、username:<handle>、name:<displayName>、および"*"ワイルドカード。 従来のプレフィックスなしキーも引き続き受け付けられ、id:のみとして一致します。
- グループ/チャネルの
toolsBySender一致 - グループ/チャネルの
tools - デフォルト(
"*")のtoolsBySender一致 - デフォルト(
"*")のtools
- グループ/チャネルのツール制限は、グローバル/エージェントのツールポリシーに加えて適用されます(deny が引き続き優先されます)。
- チャネルによって、ルーム/チャネルに異なるネストを使用するものがあります(例: Discord
guilds.*.channels.*、Slackchannels.*、Microsoft Teamsteams.*.channels.*)。
グループ allowlist
channels.whatsapp.groups、channels.telegram.groups、または channels.imessage.groups が設定されている場合、それらのキーはグループ allowlist として機能します。すべてのグループを許可しつつデフォルトのメンション動作を設定したい場合は、"*" を使用してください。
よくある混乱: DM のペアリング承認は、グループ認可と同じではありません。
DM ペアリングをサポートするチャネルでは、ペアリングストアは DM のみを解放します。グループコマンドには、groupAllowFrom やそのチャネルで文書化されている設定フォールバックなど、設定 allowlist からの明示的なグループ送信者認可が引き続き必要です。
よくある意図(コピー/貼り付け用):
- すべてのグループ返信を無効にする
- 特定のグループのみ許可する(WhatsApp)
- すべてのグループを許可するが、メンションを必須にする(明示的)
- グループ内でトリガーできるのはオーナーだけ(WhatsApp)
Activation(owner-only)
グループオーナーは、グループごとの activation を切り替えられます。/activation mention/activation always
channels.whatsapp.allowFrom(未設定時はボット自身の E.164)によって判定されます。コマンドは単独のメッセージとして送信してください。現在、他のサーフェスでは /activation は無視されます。
コンテキストフィールド
グループの受信ペイロードでは、次が設定されます。ChatType=groupGroupSubject(わかっている場合)GroupMembers(わかっている場合)WasMentioned(メンションゲーティングの結果)- Telegram のフォーラムトピックでは、
MessageThreadIdとIsForumも含まれます。
- BlueBubbles は、
GroupMembersを設定する前に、名前のない macOS グループ参加者をローカル Contacts データベースから任意で補完できます。これはデフォルトでオフであり、通常のグループゲーティングを通過した後にのみ実行されます。
\n シーケンスを入力しないことを促します。
iMessage 固有事項
- ルーティングや allowlist には
chat_id:<id>を優先してください。 - チャット一覧:
imsg chats --limit 20 - グループ返信は常に同じ
chat_idに返されます。