Groupes
OpenClaw traite les discussions de groupe de maniere coherente sur toutes les surfaces : WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams, Zalo.
Introduction pour debutants (2 minutes)
OpenClaw « vit » sur vos propres comptes de messagerie. Il nây a pas dâutilisateur bot WhatsApp separe. Si vous etes dans un groupe, OpenClaw peut voir ce groupe et y repondre.
Comportement par defaut :
- Les groupes sont restreints (
groupPolicy: "allowlist"). - Les reponses necessitent une mention sauf si vous desactivez explicitement le filtrage par mention.
Autrement dit : les expediteurs autorises peuvent declencher OpenClaw en le mentionnant.
En resume
- Lâacces DM est controle par
*.allowFrom.- Lâacces groupe est controle par
*.groupPolicy+ listes dâautorisation (*.groups,*.groupAllowFrom).- Le declenchement des reponses est controle par le filtrage par mention (
requireMention,/activation).
Flux rapide (ce qui arrive a un message de groupe) :
groupPolicy? disabled -> ignorer
groupPolicy? allowlist -> groupe autorise? non -> ignorer
requireMention? yes -> mentionne? non -> stocker pour contexte uniquement
sinon -> repondre
Si vous souhaitezâŠ
| Objectif | Configuration |
|---|---|
| Autoriser tous les groupes mais repondre seulement aux @mentions | groups: { "*": { requireMention: true } } |
| Desactiver toutes les reponses de groupe | groupPolicy: "disabled" |
| Seulement des groupes specifiques | groups: { "<group-id>": { ... } } (pas de cle "*") |
| Seul vous pouvez declencher dans les groupes | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Cles de session
- Les sessions de groupe utilisent des cles
agent:<agentId>:<channel>:group:<id>(les salons/canaux utilisentagent:<agentId>:<channel>:channel:<id>). - Les sujets de forum Telegram ajoutent
:topic:<threadId>a lâID du groupe pour que chaque sujet ait sa propre session. - Les discussions directes utilisent la session principale (ou par expediteur si configure).
- Les heartbeats sont ignores pour les sessions de groupe.
Patron : DMs personnels + groupes publics (agent unique)
Oui â cela fonctionne bien si votre trafic « personnel » est en DMs et votre trafic « public » en groupes.
Raison : en mode agent unique, les DMs atterrissent generalement dans la cle de session principale (agent:main:main), tandis que les groupes utilisent toujours des cles de session non-principales (agent:main:<channel>:group:<id>). Si vous activez le sandboxing avec mode: "non-main", ces sessions de groupe sâexecutent dans Docker tandis que votre session DM principale reste sur lâhote.
Cela vous donne un seul « cerveau » dâagent (workspace + memoire partages), mais deux postures dâexecution :
- DMs : outils complets (hote)
- Groupes : sandbox + outils restreints (Docker)
Si vous avez besoin dâespaces de travail/personas vraiment separes (« personnel » et « public » ne doivent jamais se melanger), utilisez un second agent + des bindings. Voir Routage multi-agents.
Exemple (DMs sur lâhote, groupes en sandbox + outils de messagerie uniquement) :
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // les groupes/canaux sont non-main -> sandboxes
scope: "session", // isolation la plus forte (un conteneur par groupe/canal)
workspaceAccess: "none",
},
},
},
tools: {
sandbox: {
tools: {
// Si allow n'est pas vide, tout le reste est bloque (deny a toujours la priorite).
allow: ["group:messaging", "group:sessions"],
deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
},
},
},
}
Vous voulez « les groupes ne peuvent voir que le dossier X » au lieu de « pas dâacces hote » ? Gardez workspaceAccess: "none" et montez uniquement les chemins autorises dans le sandbox :
{
agents: {
defaults: {
sandbox: {
mode: "non-main",
scope: "session",
workspaceAccess: "none",
docker: {
binds: [
// hostPath:containerPath:mode
"/home/user/FriendsShared:/data:ro",
],
},
},
},
},
}
Liens connexes :
- Cles de configuration et valeurs par defaut : Configuration de la gateway
- Diagnostiquer pourquoi un outil est bloque : Sandbox vs politique dâoutils vs eleve
- Details des montages bind : Sandboxing
Labels dâaffichage
- Les labels de lâinterface utilisent
displayNamequand disponible, formates comme<channel>:<token>. #roomest reserve pour les salons/canaux ; les discussions de groupe utilisentg-<slug>(minuscules, espaces ->-, conserve#@+._-).
Politique de groupe
Controlez comment les messages de groupe/salon sont geres par canal :
{
channels: {
whatsapp: {
groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
groupAllowFrom: ["+15551234567"],
},
telegram: {
groupPolicy: "disabled",
groupAllowFrom: ["123456789"], // ID utilisateur Telegram numerique (l'assistant peut resoudre @username)
},
signal: {
groupPolicy: "disabled",
groupAllowFrom: ["+15551234567"],
},
imessage: {
groupPolicy: "disabled",
groupAllowFrom: ["chat_id:123"],
},
msteams: {
groupPolicy: "disabled",
groupAllowFrom: ["[email protected]"],
},
discord: {
groupPolicy: "allowlist",
guilds: {
GUILD_ID: { channels: { help: { allow: true } } },
},
},
slack: {
groupPolicy: "allowlist",
channels: { "#general": { allow: true } },
},
matrix: {
groupPolicy: "allowlist",
groupAllowFrom: ["@owner:example.org"],
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
},
},
}
| Politique | Comportement |
|---|---|
"open" | Les groupes contournent les listes dâautorisation ; le filtrage par mention sâapplique toujours. |
"disabled" | Bloque entierement tous les messages de groupe. |
"allowlist" | Nâautorise que les groupes/salons correspondant a la liste dâautorisation configuree. |
Remarques :
groupPolicyest separe du filtrage par mention (qui exige des @mentions).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo : utilisez
groupAllowFrom(repli :allowFromexplicite). - Les approbations dâappairage DM (entrees
*-allowFromdu store) sâappliquent uniquement a lâacces DM ; lâautorisation dâexpediteur de groupe reste explicite 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(IDs de salon, alias ou noms). Utilisezchannels.matrix.groupAllowFrompour restreindre les expediteurs ; des listesuserspar salon sont aussi prises en charge. - Les DMs de groupe sont controles separement (
channels.discord.dm.*,channels.slack.dm.*). - La liste dâautorisation Telegram peut correspondre aux IDs utilisateur (
"123456789","telegram:123456789","tg:123456789") ou aux noms dâutilisateur ("@alice"ou"alice") ; les prefixes sont insensibles a la casse. - Par defaut câest
groupPolicy: "allowlist"; si votre liste dâautorisation de groupe est vide, les messages de groupe sont bloques. - Securite a lâexecution : quand un bloc fournisseur est completement absent (
channels.<provider>absent), la politique de groupe se replie sur un mode ferme par defaut (generalementallowlist) au lieu dâheriter dechannels.defaults.groupPolicy.
Modele mental rapide (ordre dâevaluation pour les messages de groupe) :
groupPolicy(open/disabled/allowlist)- listes dâautorisation de groupe (
*.groups,*.groupAllowFrom, liste dâautorisation specifique au canal) - filtrage par mention (
requireMention,/activation)
Filtrage par mention (par defaut)
Les messages de groupe necessitent une mention sauf surcharge par groupe. Les valeurs par defaut vivent par sous-systeme sous *.groups."*".
Repondre a un message du bot compte comme une mention implicite (quand le canal supporte les metadonnees de reponse). Cela sâapplique a Telegram, WhatsApp, Slack, Discord et Microsoft Teams.
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
"[email protected]": { requireMention: false },
},
},
telegram: {
groups: {
"*": { requireMention: true },
"123456789": { requireMention: false },
},
},
imessage: {
groups: {
"*": { requireMention: true },
"123": { requireMention: false },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
historyLimit: 50,
},
},
],
},
}
Remarques :
mentionPatternssont des regex insensibles a la casse.- Les surfaces qui fournissent des mentions explicites passent toujours ; les patterns sont un repli.
- Surcharge par agent :
agents.list[].groupChat.mentionPatterns(utile quand plusieurs agents partagent un groupe). - Le filtrage par mention nâest applique que quand la detection de mention est possible (mentions natives ou
mentionPatternssont configures). - Les valeurs par defaut Discord vivent dans
channels.discord.guilds."*"(surchargeable par guild/canal). - Le contexte dâhistorique de groupe est encapsule uniformement entre les canaux et est en attente uniquement (messages ignores a cause du filtrage par mention) ; utilisez
messages.groupChat.historyLimitpour le defaut global etchannels.<channel>.historyLimit(ouchannels.<channel>.accounts.*.historyLimit) pour les surcharges. Mettez0pour desactiver.
Restrictions dâoutils par groupe/canal (optionnel)
Certaines configurations de canal supportent la restriction des outils disponibles a lâinterieur dâun groupe/salon/canal specifique.
tools: autoriser/interdire des outils pour tout le groupe.toolsBySender: surcharges par expediteur dans le groupe. Utilisez des prefixes de cle explicites :id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>, et le joker"*". Les cles legacy non prefixees sont toujours acceptees et correspondent uniquement aid:.
Ordre de resolution (le plus specifique lâemporte) :
- correspondance
toolsBySenderdu groupe/canal toolsdu groupe/canal- correspondance
toolsBySenderpar defaut ("*") toolspar defaut ("*")
Exemple (Telegram) :
{
channels: {
telegram: {
groups: {
"*": { tools: { deny: ["exec"] } },
"-1001234567890": {
tools: { deny: ["exec", "read", "write"] },
toolsBySender: {
"id:123456789": { alsoAllow: ["exec"] },
},
},
},
},
},
}
Remarques :
- Les restrictions dâoutils de groupe/canal sont appliquees en plus de la politique dâoutils globale/agent (deny lâemporte toujours).
- Certains canaux utilisent une imbrication differente pour les salons/canaux (ex : Discord
guilds.*.channels.*, Slackchannels.*, MS Teamsteams.*.channels.*).
Listes dâautorisation de groupe
Quand channels.whatsapp.groups, channels.telegram.groups, ou channels.imessage.groups est configure, les cles agissent comme liste dâautorisation de groupe. Utilisez "*" pour autoriser tous les groupes tout en definissant le comportement de mention par defaut.
Intentions courantes (copier/coller) :
- Desactiver toutes les reponses de groupe
{
channels: { whatsapp: { groupPolicy: "disabled" } },
}
- Nâautoriser que des groupes specifiques (WhatsApp)
{
channels: {
whatsapp: {
groups: {
"[email protected]": { requireMention: true },
"[email protected]": { requireMention: false },
},
},
},
}
- Autoriser tous les groupes mais exiger une mention (explicite)
{
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Seul le proprietaire peut declencher dans les groupes (WhatsApp)
{
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
groups: { "*": { requireMention: true } },
},
},
}
Activation (proprietaire uniquement)
Les proprietaires de groupe peuvent basculer lâactivation par groupe :
/activation mention/activation always
Le proprietaire est determine par channels.whatsapp.allowFrom (ou le E.164 propre du bot quand non defini). Envoyez la commande comme message autonome. Les autres surfaces ignorent actuellement /activation.
Champs de contexte
Les charges utiles entrantes de groupe definissent :
ChatType=groupGroupSubject(si connu)GroupMembers(si connu)WasMentioned(resultat du filtrage par mention)- Les sujets de forum Telegram incluent aussi
MessageThreadIdetIsForum.
Le prompt systeme de lâagent inclut une introduction de groupe au premier tour dâune nouvelle session de groupe. Il rappelle au modele de repondre comme un humain, dâeviter les tableaux Markdown et dâeviter de taper des sequences \n litterales.
Specificites iMessage
- Preferez
chat_id:<id>pour le routage ou les listes dâautorisation. - Listez les chats :
imsg chats --limit 20. - Les reponses de groupe retournent toujours au meme
chat_id.
Specificites WhatsApp
Voir Messages de groupe pour le comportement specifique a WhatsApp (injection dâhistorique, details du traitement des mentions).