Configuration
Groupes de diffusion
Vue d’ensemble
Les groupes de diffusion exécutent plusieurs agents sur le même message entrant. Chaque agent traite le message dans sa propre session isolée et publie sa propre réponse. Un même numéro WhatsApp peut ainsi héberger une équipe d’agents spécialisés dans une discussion de groupe ou un message privé.
Les groupes de diffusion sont évalués après les listes d’autorisation du canal et les règles d’activation des groupes. Dans les groupes WhatsApp, la diffusion a lieu lorsque OpenClaw répondrait normalement (par exemple, en cas de mention, selon les paramètres de votre groupe). Elle modifie uniquement les agents exécutés, jamais l’admissibilité d’un message au traitement.
Le parcours d’assurance qualité WhatsApp en conditions réelles comprend whatsapp-broadcast-group-fanout, qui vérifie qu’un message de groupe mentionnant OpenClaw peut produire des réponses visibles distinctes de deux agents configurés.
Configuration
Configuration de base
Ajoutez une section broadcast de premier niveau (à côté de bindings). Les clés sont des identifiants de correspondants WhatsApp et les valeurs sont des tableaux d’identifiants d’agents :
- discussions de groupe : JID du groupe (par ex.
120363403215116621@g.us) - messages privés : numéro de téléphone E.164 de l’expéditeur (par ex.
+15551234567)
{ "broadcast": { "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"] }}Résultat : lorsque OpenClaw répondrait dans cette discussion, il exécute les trois agents.
Chaque identifiant d’agent répertorié doit exister dans agents.list : la validation de la configuration signale les identifiants inconnus et l’environnement d’exécution les ignore avec l’avertissement Broadcast agent <id> not found in agents.list; skipping.
Stratégie de traitement
broadcast.strategy définit la manière dont les agents traitent le message :
| Stratégie | Comportement |
|---|---|
parallel (défaut) |
Tous les agents traitent simultanément ; les réponses arrivent sans ordre défini. |
sequential |
Les agents traitent dans l’ordre du tableau ; chacun attend la fin du précédent. |
{ "broadcast": { "strategy": "sequential", "120363403215116621@g.us": ["alfred", "baerbel"] }}Exemple complet
{ "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", "120363403215116621@g.us": ["code-reviewer", "security-auditor", "docs-generator"], "120363424282127706@g.us": ["support-en", "support-de"], "+15555550123": ["assistant", "logger"] }}Fonctionnement
Flux des messages
Arrivée d’un message entrant
Un message de groupe ou privé WhatsApp arrive.
Routage et admission
OpenClaw applique les listes d’autorisation du canal, les règles d’activation des groupes et la propriété des liaisons ACP configurées.
Vérification de la diffusion
Si aucune liaison ACP configurée ne possède la route, OpenClaw vérifie si l’identifiant du correspondant figure dans broadcast.
Si la diffusion s’applique
- Tous les agents répertoriés traitent le message.
- Chaque agent possède sa propre clé de session et son propre contexte isolé.
- Les agents traitent en parallèle (par défaut) ou séquentiellement.
- Les pièces jointes audio sont transcrites une seule fois avant la distribution, de sorte que les agents partagent une même transcription au lieu d’effectuer des appels STT distincts.
Si la diffusion ne s’applique pas
OpenClaw distribue la route ordinaire ou la route de session ACP configurée sélectionnée pendant le routage.
Isolation des sessions
Chaque agent d’un groupe de diffusion conserve des éléments entièrement distincts :
- Clés de session (
agent:alfred:whatsapp:group:120363...contreagent:baerbel:whatsapp:group:120363...) - Historique de conversation (un agent ne voit pas les réponses des autres agents)
- Espace de travail (environnements isolés distincts s’ils sont configurés)
- Accès aux outils (listes d’autorisation et de refus différentes)
- Mémoire/contexte (
IDENTITY.md,SOUL.md, etc. distincts)
Une exception est volontairement partagée : le tampon de contexte du groupe (messages récents du groupe utilisés comme contexte) est partagé par correspondant. Tous les agents de diffusion voient donc le même contexte lorsqu’ils sont déclenchés. Il est effacé une fois la distribution terminée.
Chaque agent peut ainsi disposer d’une personnalité, de modèles, de Skills et d’un accès aux outils différents (par exemple, lecture seule ou lecture-écriture).
Exemple : sessions isolées
Dans le groupe 120363403215116621@g.us avec les agents ["alfred", "baerbel"] :
Contexte d’Alfred
Session: agent:alfred:whatsapp:group:120363403215116621@g.usHistorique : [message de l’utilisateur, réponses précédentes d’alfred]Espace de travail : ~/openclaw-alfred/Outils : lecture, écriture, exécutionContexte de Baerbel
Session: agent:baerbel:whatsapp:group:120363403215116621@g.usHistorique : [message de l’utilisateur, réponses précédentes de baerbel]Espace de travail : ~/openclaw-baerbel/Outils : lecture seuleCas d’utilisation
- Équipes d’agents spécialisés : un groupe de développement dans lequel
code-reviewer,security-auditor,test-generatoretdocs-checkerrépondent chacun au même message selon leur propre domaine. - Assistance multilingue : une discussion d’assistance dans laquelle
support-en,support-deetsupport-esrépondent dans leurs langues respectives. - Assurance qualité :
support-agentrépond tandis queqa-agenteffectue une vérification et ne répond que s’il détecte des problèmes. - Automatisation des tâches :
task-tracker,time-loggeretreport-generatortraitent tous la même mise à jour d’état.
Bonnes pratiques
1. Garder les agents spécialisés
Attribuez à chaque agent une responsabilité unique et claire (formatter, linter, tester) plutôt que d’utiliser un agent générique « dev-helper ».
2. Utiliser des identifiants et des noms descriptifs
{ "agents": { "list": [ { "id": "security-scanner", "name": "Security Scanner" }, { "id": "code-formatter", "name": "Code Formatter" }, { "id": "test-generator", "name": "Test Generator" } ] }}3. Configurer différents accès aux outils
{ "agents": { "list": [ { "id": "reviewer", "tools": { "allow": ["read", "exec"] } }, { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } } ] }}reviewer est en lecture seule. fixer peut lire et écrire.
4. Surveiller les performances
Avec de nombreux agents, privilégiez "strategy": "parallel" (valeur par défaut), limitez les groupes de diffusion à quelques agents et utilisez des modèles plus rapides pour les agents simples.
5. Maintenir l’isolation des défaillances
Les agents échouent indépendamment. L’erreur d’un agent est consignée (Broadcast agent <id> failed: ...) et ne bloque pas les autres.
Compatibilité
Fournisseurs
Les groupes de diffusion ne sont actuellement mis en œuvre que pour WhatsApp (canal web). Les autres canaux ignorent la configuration broadcast.
Routage
Les groupes de diffusion fonctionnent avec le routage existant :
{ "bindings": [ { "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } }, "agentId": "alfred" } ], "broadcast": { "GROUP_B": ["agent1", "agent2"] }}GROUP_A: seul alfred répond (routage normal).GROUP_B: agent1 ET agent2 répondent (diffusion).
Dépannage
Les agents ne répondent pas
Vérifications :
- Les identifiants des agents existent dans
agents.list(la validation de la configuration rejette les identifiants inconnus). - Le format de l’identifiant du correspondant est correct (JID de groupe tel que
120363403215116621@g.us, ou numéro E.164 tel que+15551234567pour les messages privés). - Le message a franchi les contrôles normaux (les règles de mention et d’activation s’appliquent toujours).
Débogage :
openclaw logs --follow | grep -i broadcastUne distribution réussie consigne Broadcasting message to <n> agents (<strategy>).
Un seul agent répond
Cause : l’identifiant du correspondant peut figurer dans les liaisons de routes ordinaires, mais pas dans broadcast, ou il peut correspondre à une liaison ACP configurée exclusive.
Correction : ajoutez à la configuration de diffusion les correspondants liés à une route ordinaire, ou supprimez/modifiez la liaison ACP configurée si une diffusion à plusieurs agents est souhaitée.
Problèmes de performances
En cas de lenteur avec de nombreux agents : réduisez le nombre d’agents par groupe, utilisez des modèles plus légers et vérifiez le temps de démarrage de l’environnement isolé.
Exemples
Exemple 1 : équipe de revue de code
{ "broadcast": { "strategy": "parallel", "120363403215116621@g.us": [ "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"] } } ] }}Un extrait de code dans le groupe produit quatre réponses : des corrections de mise en forme, un problème de sécurité, une lacune de couverture et une remarque mineure sur la documentation.
Exemple 2 : chaîne de traitement multilingue
{ "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" } ] }}Référence de l’API
Schéma de configuration
interface OpenClawConfig { broadcast?: { strategy?: "parallel" | "sequential"; [peerId: string]: string[]; };}Champs
strategy"parallel" | "sequential"default: "parallel"Méthode de traitement des agents. parallel exécute tous les agents simultanément ; sequential les exécute dans l’ordre du tableau.
[peerId]string[]JID de groupe WhatsApp ou numéro de téléphone E.164. La valeur est le tableau des identifiants des agents qui doivent tous traiter les messages de ce correspondant.
Limitations
- Nombre maximal d’agents : aucune limite stricte, mais un grand nombre d’agents (10 ou plus) peut ralentir le traitement.
- Contexte partagé : les agents ne voient pas les réponses des autres agents (par conception).
- Ordre des messages : les réponses parallèles peuvent arriver dans n’importe quel ordre.
- Limites de débit : toutes les réponses proviennent d’un même compte WhatsApp ; la réponse de chaque agent est donc comptabilisée dans les mêmes limites de débit WhatsApp.