グループチャット
グループ挙動:メンション制御、グループコンテキスト注入、allowlist、ルーティング。
OpenClawのグループチャットモデルは:デフォルトで公開ルームで「常時オン」にしないことです。ほとんどのチャンネルはデフォルトで@mention(またはmention patternsの一致)を必要とし、グループ会話は独立したsession keyを使用して、DMのメインセッションを汚染することを防ぎます。
これにより大幅に削減されます:
- ノイズ(ボットの割り込み)
- prompt injection攻撃面(見知らぬ人がボットをツールとして使用できる)
- 多人数会話のコンテキストの混乱
Session Isolation
グループチャットは独立したsession keysを使用します。例:
- WhatsApp: ''agent:<agentId>:whatsapp:group:<jid>''
- Telegram: ''agent:<agentId>:telegram:group:<chatId>'' (topics append '':topic:<threadId>'')
- Discord: ''agent:<agentId>:discord:channel:<channelId>'' (threads append '':thread:<threadId>'')
- Slack: ''agent:<agentId>:slack:channel:<channelId>''
DMはデフォルトでagentのmain sessionに折りたたまれます(''/concepts/session''を参照)。
Mention Gating
デフォルト戦略:OpenClawはグループで言及された場合のみagent runをトリガーします。
トリガーソース(チャンネル機能により異なります):
- ネイティブmentions(Telegram/Discord/Slack/WhatsAppの一部のシナリオ)
- ''messages.groupChat.mentionPatterns''(グローバル)
- ''agents.list[].groupChat.mentionPatterns''(agentごとのオーバーライド)
グループでmention gatingがメッセージをブロックした場合、OpenClawはそれをpending history buffer(以下を参照)に配置し、次回のトリガー時に最近のメッセージをコンテキストとして注入します。
グループごとにrequireMentionを無効にできます(そのグループをalways-onにする):
- Telegram: ''channels.telegram.groups.<chatId>.requireMention=false''
- WhatsApp: ''channels.whatsapp.groups.<jid>.requireMention=false''
- Discord: ''channels.discord.guilds.<guildId>.channels.<channel>.requireMention=false''
- Slack: ''channels.slack.channels.<channel>.requireMention=false''
セキュリティのヒント:「見知らぬ人がいる可能性がある」ルームでは、''requireMention=true''を維持してください。
グループAllowlists
allowlistの形式はチャンネルによって異なりますが、原則は一貫しています:''groups/guilds/channels''を明示的に設定し始めると、通常はallowlistになります。
- Telegram:
- ''channels.telegram.groups''を書かない:すべてのグループを許可(その後、mention gatingがトリガーするかどうかを決定します)。
- ''channels.telegram.groups''を書く:リストされたグループまたは''"*"''のみを許可します。
- WhatsApp:
- ''channels.whatsapp.groups''はグループallowlistです(''"*"''を使用してすべてのグループを許可します)。
- Discord:
- ''channels.discord.guilds''はguild allowlistです。guild内で''channels''が定義されている場合、そのguildはリストされたチャンネルのみを許可します。
- Slack:
- ''channels.slack.groupPolicy'' + ''channels.slack.channels''がchannel allowlistを制御します。
グループで誰がトリガーできるか
多くのチャンネルには2層のグループアクセス制御があります:
- どのグループ/チャンネルが許可されているか(上記のallowlist)
- ''許可されたグループで、どの送信者がトリガーできるか''(''groupPolicy'' + ''groupAllowFrom''またはルームごとの''users'')
Telegramの例:
{
channels: {
telegram: {
groupPolicy: "allowlist",
groupAllowFrom: ["123456789"],
groups: {
"-1001234567890": { requireMention: true }
}
}
}
}''groupPolicy="allowlist"''で''groupAllowFrom''がない場合、デフォルトでブロックされます(fail-closed)。
グループ履歴コンテキスト注入
グループメッセージが返信をトリガーしない場合(mentionなし/allowlistによってブロック)、OpenClawはこれらのメッセージをpendingとして保存し、次回のトリガー時にpromptに注入します:
[Chat messages since your last reply - for context] ... [/Chat messages since your last reply - for context] [Current message - respond to this] ... [/Current message - respond to this]
重要な特性:
- pending-only:「最後の返信後だが処理されていない」メッセージのみを注入します。
- transcriptに書き込まれたメッセージを再注入しません。
- 現在のメッセージはdirective strippingを受けます。履歴ブロックは変更されません。
Limits:
- グローバル:''messages.groupChat.historyLimit''
- チャンネルオーバーライド:''channels.telegram.historyLimit'' / ''channels.slack.historyLimit'' / ''channels.whatsapp.historyLimit''など
- ''0''に設定して無効にします。
Activation
一部のチャンネルは''/activation''コマンドをサポートしています(現在のセッションにのみ影響):
- ''/activation mention'':mentionが必要(デフォルト)
- ''/activation always'':すべてのメッセージに返信
Notes:
- このコマンドは通常、認証された送信者(owner/allowlist)に対してのみ機能します。
マルチエージェントグループルーティング
グループメッセージはモデルに「誰が返信するかを決定」させません。代わりに、決定論的ルーティングは''bindings''を通じて行われます。
一般的な戦略:
- 「1グループ1エージェント」:''bindings''で、''peer.kind="group"'' + ''peer.id''で特定のエージェントを指します。
- 「チャンネルアカウントごとにエージェントを割り当て」:''accountId''で一致します。
- 「ブロードキャストグループ」:同じトリガーメッセージが複数のエージェントを実行します(''/broadcast-groups''を参照)。
一般的な落とし穴
- ''requireMention=false''を設定したがまだ返信しない:ほとんどの場合、''groupPolicy="allowlist"''で''groupAllowFrom'' / グループallowlistが設定されていません。
- Discord:''requireMention''は''channels.discord.guilds''または特定のチャンネルの下に記述する必要があります。トップレベルの''channels.discord.requireMention''は無視されます。
- Telegram:BotFatherプライバシーモードを無効にした後、設定を有効にするには、ボットをグループから削除して再追加する必要があります。