Groupes
OpenClaw traite les discussions de groupe de manière cohérente sur les différentes surfaces : Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Introduction pour débutants (2 minutes)
OpenClaw « vit » sur vos propres comptes de messagerie. Il n’y a pas d’utilisateur bot WhatsApp distinct. Si vous êtes dans un groupe, OpenClaw peut voir ce groupe et y répondre. Comportement par défaut :- Les groupes sont restreints (
groupPolicy: "allowlist"). - Les réponses nécessitent une mention, sauf si vous désactivez explicitement le contrôle par mention.
TL;DRFlux rapide (ce qui se passe pour un message de groupe) :
- L’accès DM est contrôlé par
*.allowFrom.- L’accès aux groupes est contrôlé par
*.groupPolicy+ les listes d’autorisation (*.groups,*.groupAllowFrom).- Le déclenchement des réponses est contrôlé par le contrôle par mention (
requireMention,/activation).
Visibilité du contexte et listes d’autorisation
Deux contrôles différents interviennent dans la sécurité des groupes :- Autorisation de déclenchement : qui peut déclencher l’agent (
groupPolicy,groups,groupAllowFrom, listes d’autorisation spécifiques au canal). - Visibilité du contexte : quel contexte supplémentaire est injecté dans le modèle (texte de réponse, citations, historique du fil, métadonnées de transfert).
- Certains canaux appliquent déjà un filtrage basé sur l’expéditeur pour le contexte supplémentaire dans certains parcours (par exemple l’initialisation des fils Slack, les recherches de réponses/fils Matrix).
- D’autres canaux transmettent encore le contexte de citation/réponse/transfert tel qu’il a été reçu.
contextVisibility: "all"(par défaut) conserve le comportement actuel tel que reçu.contextVisibility: "allowlist"filtre le contexte supplémentaire pour les expéditeurs sur liste d’autorisation.contextVisibility: "allowlist_quote"correspond àallowlistavec une exception explicite pour une citation/réponse.
| Objectif | Ce qu’il faut définir |
|---|---|
| Autoriser tous les groupes mais ne répondre qu’aux @mentions | groups: { "*": { requireMention: true } } |
| Désactiver toutes les réponses dans les groupes | groupPolicy: "disabled" |
| Uniquement des groupes spécifiques | groups: { "<group-id>": { ... } } (sans clé "*") |
| Vous seul pouvez déclencher dans les groupes | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Clés de session
- Les sessions de groupe utilisent les clés de session
agent:<agentId>:<channel>:group:<id>(les salons/canaux utilisentagent:<agentId>:<channel>:channel:<id>). - Les sujets de forum Telegram ajoutent
:topic:<threadId>à l’identifiant du groupe afin que chaque sujet ait sa propre session. - Les discussions directes utilisent la session principale (ou une session par expéditeur si configuré).
- Les heartbeats sont ignorés pour les sessions de groupe.
Modèle : DMs personnels + groupes publics (agent unique)
Oui — cela fonctionne bien si votre trafic « personnel » correspond aux DMs et votre trafic « public » aux groupes. Pourquoi : en mode agent unique, les DMs aboutissent généralement dans la clé de session principale (agent:main:main), tandis que les groupes utilisent toujours des clés de session non principales (agent:main:<channel>:group:<id>). Si vous activez le sandboxing avec mode: "non-main", ces sessions de groupe s’exécutent dans Docker tandis que votre session DM principale reste sur l’hôte.
Cela vous donne un seul « cerveau » d’agent (espace de travail + mémoire partagés), mais deux postures d’exécution :
- DMs : outils complets (hôte)
- Groupes : sandbox + outils restreints (Docker)
Si vous avez besoin d’espaces de travail/personas réellement séparés (« personnel » et « public » ne doivent jamais se mélanger), utilisez un second agent + des bindings. Voir Routage multi-agent.Exemple (DMs sur l’hôte, groupes dans un sandbox + outils de messagerie uniquement) :
workspaceAccess: "none" et montez uniquement les chemins sur liste d’autorisation dans le sandbox :
- Clés de configuration et valeurs par défaut : Configuration de la passerelle
- Déboguer pourquoi un outil est bloqué : Sandbox vs Tool Policy vs Elevated
- Détails des bind mounts : Sandboxing
Libellés d’affichage
- Les libellés de l’interface utilisent
displayNamelorsqu’il est disponible, au format<channel>:<token>. #roomest réservé aux salons/canaux ; les discussions de groupe utilisentg-<slug>(minuscules, espaces ->-, conserver#@+._-).
Politique de groupe
Contrôlez la façon dont les messages de groupe/salon sont traités par canal :| Politique | Comportement |
|---|---|
"open" | Les groupes contournent les listes d’autorisation ; le contrôle par mention s’applique toujours. |
"disabled" | Bloque complètement tous les messages de groupe. |
"allowlist" | Autorise uniquement les groupes/salons qui correspondent à la liste d’autorisation configurée. |
groupPolicyest distinct du contrôle par mention (qui nécessite des @mentions).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo : utilisez
groupAllowFrom(repli :allowFromexplicite). - Les approbations d’association DM (entrées stockées
*-allowFrom) s’appliquent uniquement à l’accès DM ; l’autorisation des expéditeurs de groupe reste explicitement liée aux listes d’autorisation de groupe. - Discord : la liste d’autorisation utilise
channels.discord.guilds.<id>.channels. - Slack : la liste d’autorisation utilise
channels.slack.channels. - Matrix : la liste d’autorisation utilise
channels.matrix.groups. Préférez les identifiants ou alias de salon ; la recherche par nom de salon rejoint est effectuée au mieux, et les noms non résolus sont ignorés à l’exécution. Utilisezchannels.matrix.groupAllowFrompour restreindre les expéditeurs ; des listes d’autorisationuserspar salon sont également prises en charge. - Les DM de groupe sont contrôlés séparément (
channels.discord.dm.*,channels.slack.dm.*). - La liste d’autorisation Telegram peut correspondre à des identifiants utilisateur (
"123456789","telegram:123456789","tg:123456789") ou à des noms d’utilisateur ("@alice"ou"alice") ; les préfixes sont insensibles à la casse. - La valeur par défaut est
groupPolicy: "allowlist"; si votre liste d’autorisation de groupe est vide, les messages de groupe sont bloqués. - Sécurité à l’exécution : lorsqu’un bloc de fournisseur est complètement absent (
channels.<provider>absent), la politique de groupe revient à un mode fermé par défaut (généralementallowlist) au lieu d’hériter dechannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- listes d’autorisation de groupe (
*.groups,*.groupAllowFrom, liste d’autorisation spécifique au canal) - contrôle par mention (
requireMention,/activation)
Contrôle par mention (par défaut)
Les messages de groupe nécessitent une mention, sauf si cela est remplacé par groupe. Les valeurs par défaut se trouvent par sous-système sous*.groups."*".
Répondre à un message du bot compte comme une mention implicite lorsque le canal
prend en charge les métadonnées de réponse. Citer un message du bot peut aussi compter comme une mention implicite
sur les canaux qui exposent les métadonnées de citation. Les cas intégrés actuels incluent
Telegram, WhatsApp, Slack, Discord, Microsoft Teams et ZaloUser.
mentionPatternssont des motifs regex sûrs insensibles à la casse ; les motifs invalides et les formes dangereuses de répétition imbriquée sont ignorés.- Les surfaces qui fournissent des mentions explicites sont toujours acceptées ; les motifs servent de repli.
- Remplacement par agent :
agents.list[].groupChat.mentionPatterns(utile lorsque plusieurs agents partagent un groupe). - Le contrôle par mention n’est appliqué que lorsque la détection de mention est possible (mentions natives ou
mentionPatternsconfigurés). - Les valeurs par défaut de Discord se trouvent dans
channels.discord.guilds."*"(remplaçables par serveur/canal). - Le contexte de l’historique de groupe est encapsulé uniformément sur tous les canaux et est en attente uniquement (messages ignorés à cause du contrôle par mention) ; utilisez
messages.groupChat.historyLimitpour la valeur par défaut globale etchannels.<channel>.historyLimit(ouchannels.<channel>.accounts.*.historyLimit) pour les remplacements. Définissez0pour désactiver.
Restrictions d’outils par groupe/canal (optionnel)
Certaines configurations de canal permettent de restreindre quels outils sont disponibles dans un groupe/salon/canal spécifique.tools: autoriser/interdire des outils pour tout le groupe.toolsBySender: remplacements par expéditeur dans le groupe. Utilisez des préfixes de clé explicites :id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>et le joker"*". Les anciennes clés sans préfixe sont toujours acceptées et correspondent uniquement àid:.
- correspondance
toolsBySenderdu groupe/canal toolsdu groupe/canal- correspondance
toolsBySenderpar défaut ("*") toolspar défaut ("*")
- Les restrictions d’outils par groupe/canal s’appliquent en plus de la politique d’outils globale/de l’agent (deny reste prioritaire).
- Certains canaux utilisent une imbrication différente pour les salons/canaux (par ex. Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Listes d’autorisation de groupe
Lorsquechannels.whatsapp.groups, channels.telegram.groups ou channels.imessage.groups est configuré, les clés servent de liste d’autorisation de groupe. Utilisez "*" pour autoriser tous les groupes tout en définissant le comportement de mention par défaut.
Confusion fréquente : l’approbation d’association DM n’est pas la même chose que l’autorisation de groupe.
Pour les canaux qui prennent en charge l’association DM, le magasin d’association déverrouille uniquement les DMs. Les commandes de groupe nécessitent toujours une autorisation explicite de l’expéditeur du groupe à partir des listes d’autorisation de configuration telles que groupAllowFrom ou du mécanisme de repli documenté pour ce canal.
Intentions courantes (copier/coller) :
- Désactiver toutes les réponses de groupe
- Autoriser uniquement des groupes spécifiques (WhatsApp)
- Autoriser tous les groupes mais exiger une mention (explicite)
- Seul le propriétaire peut déclencher dans les groupes (WhatsApp)
Activation (propriétaire uniquement)
Les propriétaires de groupe peuvent basculer l’activation par groupe :/activation mention/activation always
channels.whatsapp.allowFrom (ou par l’E.164 du bot lui-même si non défini). Envoyez la commande comme message autonome. Les autres surfaces ignorent actuellement /activation.
Champs de contexte
Les charges utiles entrantes de groupe définissent :ChatType=groupGroupSubject(si connu)GroupMembers(si connu)WasMentioned(résultat du contrôle par mention)- Les sujets de forum Telegram incluent également
MessageThreadIdetIsForum.
- BlueBubbles peut éventuellement enrichir les participants de groupe macOS sans nom depuis la base de données Contacts locale avant de remplir
GroupMembers. Cette fonction est désactivée par défaut et ne s’exécute qu’après le passage normal du contrôle de groupe.
\n.
Spécificités iMessage
- Préférez
chat_id:<id>pour le routage ou les listes d’autorisation. - Lister les discussions :
imsg chats --limit 20. - Les réponses de groupe reviennent toujours au même
chat_id.