Kanalen & routering
OpenClaw routeert antwoorden terug naar het kanaal waar een bericht vandaan kwam. Het model kiest geen kanaal; routering is deterministisch en wordt beheerd door de hostconfiguratie.
Belangrijke termen
- Kanaal:
whatsapp,telegram,discord,slack,signal,imessage,webchat. - AccountId: per-kanaal accountinstantie (indien ondersteund).
- Optioneel kanaalstandaardaccount:
channels.<channel>.defaultAccountbepaalt welk account wordt gebruikt wanneer een uitgaand pad geenaccountIdspecificeert.- Bij multi-accountconfiguraties stel je een expliciet standaardaccount in (
defaultAccountofaccounts.default) wanneer twee of meer accounts zijn geconfigureerd. Zonder dit kan fallback-routering het eerste genormaliseerde account-ID kiezen.
- Bij multi-accountconfiguraties stel je een expliciet standaardaccount in (
- AgentId: een geïsoleerde workspace + sessieopslag (“brein”).
- SessionKey: de bucketsleutel die wordt gebruikt om context op te slaan en gelijktijdigheid te beheren.
Sessiesleutelvormen (voorbeelden)
Directe berichten worden samengevouwen naar de main-sessie van de agent:
agent:<agentId>:<mainKey>(standaard:agent:main:main)
Groepen en kanalen blijven geïsoleerd per kanaal:
- Groepen:
agent:<agentId>:<channel>:group:<id> - Kanalen/kamers:
agent:<agentId>:<channel>:channel:<id>
Threads:
- Slack/Discord-threads voegen
:thread:<threadId>toe aan de basissleutel. - Telegram-forumonderwerpen bevatten
:topic:<topicId>in de groepssleutel.
Voorbeelden:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Main DM-routevastpinning
Wanneer session.dmScope main is, kunnen directe berichten één main-sessie delen. Om te voorkomen dat de lastRoute van de sessie wordt overschreven door niet-eigenaar DM’s, leidt OpenClaw een vastgepinde eigenaar af uit allowFrom wanneer aan al deze voorwaarden is voldaan:
allowFromheeft precies één niet-wildcard vermelding.- De vermelding kan worden genormaliseerd naar een concreet afzender-ID voor dat kanaal.
- De inkomende DM-afzender komt niet overeen met die vastgepinde eigenaar.
In dat geval registreert OpenClaw nog steeds inkomende sessiemetadata, maar slaat het bijwerken van de main-sessie lastRoute over.
Routeringsregels (hoe een agent wordt gekozen)
Routering kiest één agent voor elk inkomend bericht:
- Exacte peer-match (
bindingsmetpeer.kind+peer.id). - Bovenliggende peer-match (thread-overerving).
- Guild + rollen match (Discord) via
guildId+roles. - Guild-match (Discord) via
guildId. - Team-match (Slack) via
teamId. - Account-match (
accountIdop het kanaal). - Kanaal-match (elk account op dat kanaal,
accountId: "*"). - Standaard-agent (
agents.list[].default, anders eerste lijstvermelding, terugval naarmain).
Wanneer een binding meerdere matchvelden bevat (peer, guildId, teamId, roles), moeten alle opgegeven velden overeenkomen om die binding toe te passen.
De gematchte agent bepaalt welke workspace en sessieopslag worden gebruikt.
Broadcastgroepen (meerdere agents uitvoeren)
Broadcastgroepen stellen je in staat om meerdere agents uit te voeren voor dezelfde peer wanneer OpenClaw normaal zou antwoorden (bijvoorbeeld: in WhatsApp-groepen, na vermeldings-/activeringsgating).
Configuratie:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
Zie: Broadcastgroepen.
Configuratieoverzicht
agents.list: benoemde agentdefinities (workspace, model, etc.).bindings: koppel inkomende kanalen/accounts/peers aan agents.
Voorbeeld:
{
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" },
],
}
Sessieopslag
Sessieopslag bevindt zich onder de statusmap (standaard ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- JSONL-transcripten bevinden zich naast de opslag
Je kunt het opslagpad overschrijven via session.store en {agentId}-templating.
Gateway- en ACP-sessie-ontdekking scant ook schijfgebaseerde agentopslagen onder de standaard agents/-root en onder getemplatte session.store-roots. Ontdekte opslagen moeten binnen die opgeloste agentroot blijven en een regulier sessions.json-bestand gebruiken. Symlinks en paden buiten de root worden genegeerd.
WebChat-gedrag
WebChat koppelt aan de geselecteerde agent en gebruikt standaard de main-sessie van de agent. Hierdoor kun je in WebChat cross-kanaal context voor die agent op één plek zien.
Antwoordcontext
Inkomende antwoorden bevatten:
ReplyToId,ReplyToBodyenReplyToSenderwanneer beschikbaar.- Geciteerde context wordt als
[Replying to ...]-blok aanBodytoegevoegd.
Dit is consistent over alle kanalen.