Channel Routing
Channels & routing
Section intitulée « Channels & routing »OpenClaw routes replies back to the channel where a message came from. The model does not choose a channel; routing is deterministic and controlled by the host configuration.
Key terms
Section intitulée « Key terms »- Channel :
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, plus les canaux d’extension.webchatest le canal de l’interface utilisateur WebChat interne et n’est pas un canal sortant configurable. - AccountId: per‑channel account instance (when supported).
- Compte par défaut du canal facultatif :
channels.<channel>.defaultAccountchoisit quel compte est utilisé lorsqu’un chemin sortant ne spécifie pasaccountId.- Dans les configurations multi-comptes, définissez une valeur par défaut explicite (
defaultAccountouaccounts.default) lorsque deux comptes ou plus sont configurés. Sans cela, le routage de secours peut choisir le premier ID de compte normalisé.
- Dans les configurations multi-comptes, définissez une valeur par défaut explicite (
- AgentId: an isolated workspace + session store (“brain”).
- SessionKey: the bucket key used to store context and control concurrency.
Session key shapes (examples)
Section intitulée « Session key shapes (examples) »Direct messages collapse to the agent’s main session:
agent:<agentId>:<mainKey>(par défaut :agent:main:main)
Groups and channels remain isolated per channel:
- Groupes :
agent:<agentId>:<channel>:group:<id> - Canaux/salons :
agent:<agentId>:<channel>:channel:<id>
Threads:
- Les fils de discussion Slack/Discord ajoutent
:thread:<threadId>à la clé de base. - Les sujets de forum Telegram intègrent
:topic:<topicId>dans la clé de groupe.
Examples:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Main DM route pinning
Section intitulée « Main DM route pinning »Lorsque session.dmScope est main, les messages directs peuvent partager une session principale.
Pour empêcher que le lastRoute de la session ne soit écrasé par des messages directs de non-propriétaires,
OpenClaw déduit un propriétaire épinglé à partir de allowFrom lorsque toutes ces conditions sont remplies :
allowFroma exactement une entrée sans caractère générique.- L’entrée peut être normalisée en un ID d’expéditeur concret pour ce channel.
- L’expéditeur du message privé entrant ne correspond pas à ce propriétaire épinglé.
Dans ce cas de non-correspondance, OpenClaw enregistre toujours les métadonnées de session entrantes, mais il
ignore la mise à jour du lastRoute de la session principale.
Règles de routage (choix d’un agent)
Section intitulée « Règles de routage (choix d’un agent) »Le routage choisit un agent pour chaque message entrant :
- Correspondance exacte des homologues (
bindingsavecpeer.kind+peer.id). - Correspondance de pair parent (héritage de fil de discussion).
- Correspondance Guilde + rôles (Discord) via
guildId+roles. - Correspondance de Guilde (Discord) via
guildId. - Correspondance d’équipe (Slack) via
teamId. - Correspondance de compte (
accountIdsur le canal). - Correspondance de channel (n’importe quel compte sur ce channel,
accountId: "*"). - Agent par défaut (
agents.list[].default, sinon première entrée de la liste, repli surmain).
Lorsqu’une liaison inclut plusieurs champs de correspondance (peer, guildId, teamId, roles), tous les champs fournis doivent correspondre pour que cette liaison s’applique.
L’agent correspondant détermine quel espace de travail et quel magasin de session sont utilisés.
Groupes de diffusion (exécuter plusieurs agents)
Section intitulée « Groupes de diffusion (exécuter plusieurs agents) »Les groupes de diffusion vous permettent d’exécuter plusieurs agents pour le même pair lorsqu’OpenClaw répondrait normalement (par exemple : dans les groupes WhatsApp, après filtrage par mention/activation).
Configuration :
{ broadcast: { strategy: "parallel", "+15555550123": ["support", "logger"], },}Voir : Broadcast Groups.
Aperçu de la configuration
Section intitulée « Aperçu de la configuration »agents.list: définitions d’agents nommés (espace de travail, modèle, etc.).bindings: faire correspondre les channels/comptes/pairs entrants aux agents.
Exemple :
{ agents: { list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }], }, bindings: [ { match: { channel: "slack", teamId: "T123" }, agentId: "support" }, { match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" }, ],}Stockage de session
Section intitulée « Stockage de session »Les magasins de session résident dans le répertoire d’état (par défaut ~/.openclaw) :
~/.openclaw/agents/<agentId>/sessions/sessions.json- Les transcriptions JSONL résident à côté du magasin
Vous pouvez remplacer le chemin du magasin via le modèle session.store et {agentId}.
La découverte de session Gateway et ACP analyse également les magasins d’agents sur disque sous la racine agents/ par défaut et sous les racines session.store basées sur des modèles. Les magasins découverts doivent rester à l’intérieur de cette racine d’agent résolue et utiliser un fichier sessions.json standard. Les liens symboliques et les chemins hors racine sont ignorés.
Comportement WebChat
Section intitulée « Comportement WebChat »WebChat s’attache à l’agent sélectionné et utilise par défaut la session principale de l’agent. Pour cette raison, WebChat vous permet de voir le contexte inter-canaux de cet agent en un seul endroit.
Contexte de réponse
Section intitulée « Contexte de réponse »Les réponses entrantes incluent :
ReplyToId,ReplyToBodyetReplyToSenderlorsqu’ils sont disponibles.- Le contexte cité est ajouté à
Bodysous forme de bloc[Replying to ...].
Ceci est cohérent sur tous les canaux.