Configuration
Kanaalroutering
Kanalen en routering
OpenClaw routeert antwoorden terug naar het kanaal waar een bericht vandaan kwam. Het model kiest geen kanaal; routering is deterministisch en wordt gestuurd door de hostconfiguratie.
Kernbegrippen
- Kanaal:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, plus Plugin-kanalen.webchatis het interne WebChat-UI-kanaal en is geen configureerbaar uitgaand kanaal. - AccountId: accountinstantie per kanaal (wanneer ondersteund).
- Optioneel standaardaccount voor kanaal:
channels.<channel>.defaultAccountkiest welk account wordt gebruikt wanneer een uitgaand pad geenaccountIdopgeeft.- Stel in configuraties met meerdere accounts een expliciete standaard in (
defaultAccountofaccounts.default) wanneer twee of meer accounts zijn geconfigureerd. Zonder die instelling kan fallback-routering de eerste genormaliseerde account-ID kiezen.
- Stel in configuraties met meerdere accounts een expliciete standaard in (
- AgentId: een geïsoleerde werkruimte + sessieopslag ("brein").
- SessionKey: de bucketsleutel die wordt gebruikt om context op te slaan en gelijktijdigheid te beheren.
Voorvoegsels voor uitgaande doelen
Expliciete uitgaande doelen kunnen een providervoorvoegsel bevatten, zoals telegram:123 of tg:123. Core behandelt dat voorvoegsel alleen als hint voor kanaalselectie wanneer het geselecteerde kanaal last is of anderszins onopgelost, en alleen wanneer de geladen Plugin dat voorvoegsel adverteert. Als de aanroeper al een expliciet kanaal heeft geselecteerd, moet het providervoorvoegsel overeenkomen met dat kanaal; kanaaloverschrijdende combinaties zoals WhatsApp-bezorging naar telegram:123 mislukken vóór Plugin-specifieke doelnormalisatie.
Doelsoort- en servicevoorvoegsels zoals channel:<id>, user:<id>, room:<id>, thread:<id>, imessage:<handle> en sms:<number> blijven binnen de grammatica van het geselecteerde kanaal. Ze selecteren de provider niet zelfstandig.
Vormen van sessiesleutels (voorbeelden)
Directe berichten vallen standaard samen met de main-sessie van de agent:
agent:<agentId>:<mainKey>(standaard:agent:main:main)
Zelfs wanneer gespreksgeschiedenis van directe berichten wordt gedeeld met main, gebruiken sandbox en toolbeleid een afgeleide runtime-sleutel per account voor directe chats voor externe DM's, zodat berichten die uit kanalen afkomstig zijn niet worden behandeld als lokale main-sessie-uitvoeringen.
Groepen en kanalen blijven per kanaal geïsoleerd:
- Groepen:
agent:<agentId>:<channel>:group:<id> - Kanalen/ruimten:
agent:<agentId>:<channel>:channel:<id>
Threads:
- Slack/Discord-threads voegen
:thread:<threadId>toe aan de basissleutel. - Telegram-forumonderwerpen nemen
:topic:<topicId>op in de groepssleutel.
Voorbeelden:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Routeringspinning voor main-DM's
Wanneer session.dmScope main is, kunnen directe berichten één main-sessie delen.
Om te voorkomen dat de lastRoute van de sessie wordt overschreven door DM's van niet-eigenaren,
leidt OpenClaw een vastgepinde eigenaar af uit allowFrom wanneer al het volgende waar is:
allowFromheeft precies één niet-wildcardvermelding.- De vermelding kan worden genormaliseerd naar een concrete afzender-ID voor dat kanaal.
- De inkomende DM-afzender komt niet overeen met die vastgepinde eigenaar.
In dat geval van niet-overeenstemming registreert OpenClaw nog steeds inkomende sessiemetadata, maar het
slaat het bijwerken van lastRoute voor de main-sessie over.
Bewaakte inkomende registratie
Kanaal-Plugins kunnen een inkomend sessierecord markeren als createIfMissing: false
wanneer een bewaakt pad geen nieuwe OpenClaw-sessie mag maken. In die modus kan
OpenClaw metadata en lastRoute voor een bestaande sessie bijwerken, maar het
maakt geen routeringsloze sessievermelding aan alleen omdat er een bericht is waargenomen.
Routeringsregels (hoe een agent wordt gekozen)
Routering kiest één agent voor elk inkomend bericht:
- Exacte peer-overeenkomst (
bindingsmetpeer.kind+peer.id). - Overeenkomst met bovenliggende peer (thread-overerving).
- Guild + rollen-overeenkomst (Discord) via
guildId+roles. - Guild-overeenkomst (Discord) via
guildId. - Teamovereenkomst (Slack) via
teamId. - Accountovereenkomst (
accountIdop het kanaal). - Kanaalovereenkomst (elk account op dat kanaal,
accountId: "*"). - Standaardagent (
agents.list[].default, anders eerste lijstvermelding, fallback naarmain).
Wanneer een binding meerdere matchvelden bevat (peer, guildId, teamId, roles), moeten alle opgegeven velden overeenkomen voordat die binding van toepassing is.
De overeenkomende agent bepaalt welke werkruimte en sessieopslag worden gebruikt.
Broadcastgroepen (meerdere agents uitvoeren)
Met broadcastgroepen kun je meerdere agents uitvoeren voor dezelfde peer wanneer OpenClaw normaal zou antwoorden (bijvoorbeeld: in WhatsApp-groepen, na vermelding-/activeringscontrole).
Configuratie:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
Zie: Broadcastgroepen.
Configuratieoverzicht
agents.list: definities van benoemde agents (werkruimte, model, enz.).bindings: koppelt 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
Sessieopslagen bevinden zich onder de statusdirectory (standaard ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- JSONL-transcripten staan naast de opslag
Je kunt het opslagpad overschrijven via session.store en {agentId}-templating.
Gateway- en ACP-sessieontdekking scant ook schijfgebonden agentopslagen onder de
standaardroot agents/ en onder getemplate session.store-roots. Ontdekte
opslagen moeten binnen die opgeloste agentroot blijven en een normaal
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 met WebChat context uit meerdere kanalen voor die agent op één plek zien.
Antwoordcontext
Inkomende antwoorden bevatten:
ReplyToId,ReplyToBodyenReplyToSenderwanneer beschikbaar.- Geciteerde context wordt aan
Bodytoegevoegd als een blok[Replying to ...].
Dit is consistent over kanalen heen.