Configuration
Kanaalroutering
Kanalen en routering
OpenClaw routeert antwoorden terug naar het kanaal waar een bericht vandaan kwam. Het model kiest geen kanaal; de routering is deterministisch en wordt bepaald door de hostconfiguratie. Binnen het standaardbereik voor privéberichten komen privéberichten van elk kanaal samen in de hoofdsessie van de agent.
Belangrijke termen
- Kanaal: een meegeleverde kanaalplugin zoals
discord,googlechat,imessage,irc,line,signal,slack,telegramofwhatsapp, plus geïnstalleerde pluginkanalen.webchatis het interne WebChat-UI-kanaal en is geen configureerbaar uitgaand kanaal. - AccountId: accountinstantie per kanaal (indien ondersteund).
- Optioneel standaardaccount voor het kanaal:
channels.<channel>.defaultAccountbepaalt welk account wordt gebruikt wanneer een uitgaand pad geenaccountIdopgeeft.- Stel in configuraties met meerdere accounts een expliciete standaard in (
defaultAccountof een account met de naamdefault) wanneer twee of meer accounts zijn geconfigureerd. Zonder deze instelling kan reserveroutering 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 aanwijzing voor kanaalselectie wanneer het geselecteerde kanaal last of anderszins onopgelost is, en alleen wanneer de geladen plugin dat voorvoegsel aanbiedt. Als de aanroeper al een expliciet kanaal heeft geselecteerd, moet het providervoorvoegsel overeenkomen met dat kanaal; kanaaloverschrijdende combinaties, zoals bezorging via WhatsApp aan telegram:123, mislukken vóór pluginspecifieke normalisatie van het doel.
Voorvoegsels voor doelsoorten en diensten, zoals channel:<id>, user:<id>, room:<id>, thread:<id>, imessage:<handle> en sms:<number>, blijven binnen de grammatica van het geselecteerde kanaal. Ze selecteren niet zelfstandig de provider.
Vormen van sessiesleutels (voorbeelden)
Privéberichten worden standaard samengevoegd in de hoofdsessie van de agent:
agent:<agentId>:<mainKey>(standaard:agent:main:main)
session.dmScope bepaalt het samenvoegen van privéberichten: main (standaard) deelt één hoofdsessie,
terwijl per-peer, per-channel-peer en per-account-channel-peer
privéberichten in afzonderlijke sessies houden. Een routeringsbinding kan het bereik voor de
overeenkomende peers overschrijven via bindings[].session.dmScope.
Zelfs wanneer de gespreksgeschiedenis van privéberichten met de hoofdsessie wordt gedeeld, gebruiken het sandbox- en toolbeleid voor externe privéberichten een afgeleide runtimesleutel per account voor privéchats, zodat van kanalen afkomstige berichten niet worden behandeld als lokale uitvoeringen van de hoofdsessie.
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
Vastzetten van de hoofdroute voor privéberichten
Wanneer session.dmScope gelijk is aan main, kunnen privéberichten één hoofdsessie delen.
Om te voorkomen dat de lastRoute van de sessie wordt overschreven door privéberichten van niet-eigenaren,
leidt OpenClaw een vastgezette eigenaar af uit allowFrom wanneer aan al deze voorwaarden is voldaan:
allowFrombevat precies één item dat geen jokerteken is.- Het item kan voor dat kanaal worden genormaliseerd tot een concrete afzender-ID.
- De afzender van het inkomende privébericht komt niet overeen met die vastgezette eigenaar.
Bij zo'n verschil registreert OpenClaw nog steeds de inkomende sessiemetadata, maar
slaat het bijwerken van lastRoute in de hoofdsessie over.
Beveiligde registratie van inkomende berichten
Kanaalplugins kunnen een inkomende sessieregistratie markeren als createIfMissing: false
wanneer een beveiligd pad geen nieuwe OpenClaw-sessie mag aanmaken. In die modus
kan OpenClaw metadata en lastRoute voor een bestaande sessie bijwerken, maar
maakt het niet alleen omdat een bericht is waargenomen een sessie-item aan dat uitsluitend voor routering dient.
Routeringsregels (hoe een agent wordt gekozen)
De routering kiest één agent voor elk inkomend bericht:
- Exacte peer-overeenkomst (
bindingsmetpeer.kind+peer.id). - Overeenkomst met bovenliggende peer (thread-overerving).
- Overeenkomst met peer-jokerteken (
peer.id: "*"voor een peersoort). - Overeenkomst met guild + rollen (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.entries.*.default, anders het eerste lijstitem, metmainals reserve).
Wanneer een binding meerdere overeenkomstvelden bevat (peer, guildId, teamId, roles), moeten alle opgegeven velden overeenkomen voordat die binding wordt toegepast.
De overeenkomende agent bepaalt welke werkruimte en sessieopslag worden gebruikt.
Uitzendgroepen (meerdere agents uitvoeren)
Met uitzendgroepen kun je meerdere agents uitvoeren voor dezelfde peer wanneer OpenClaw normaal gesproken zou antwoorden (bijvoorbeeld: in WhatsApp-groepen, na controle op vermelding/activering).
Configuratie:
{ broadcast: { strategy: "parallel", "120363403215116621@g.us": ["alfred", "baerbel"], "+15555550123": ["support", "logger"], },}Zie: Uitzendgroepen.
Configuratieoverzicht
agents.entries: benoemde agentdefinities (werkruimte, model enz.).bindings: wijst inkomende kanalen/accounts/peers toe 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
Runtimesessierijen bevinden zich in de SQLite-database van elke agent onder de statusmap
(standaard ~/.openclaw):
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
Oudere installaties kunnen verouderde JSONL-bestanden met transcripties en een sessions.json-rijopslag
onder ~/.openclaw/agents/<agentId>/sessions/ bevatten. Bij het starten van de Gateway en via
openclaw doctor --fix worden actieve verouderde rijen/geschiedenis automatisch in SQLite
geïmporteerd. Gebruik openclaw doctor --session-sqlite inspect --session-sqlite-all-agents en de
validatiereeks van Doctor wanneer je
expliciet bewijs van de migratie nodig hebt.
Je kunt nog steeds een verouderd opslagpad selecteren via session.store en {agentId}-
sjablonen voor migratie- en offline-onderhoudsworkflows.
De sessiedetectie van Gateway en ACP scant ook schijfgebaseerde agentopslag onder de
standaardhoofdmap agents/ en onder gesjabloneerde hoofdmappen van session.store. Gedetecteerde
opslag moet binnen die herleide hoofdmap van de agent blijven en een regulier verouderd
sessions.json-bestand gebruiken. Symbolische koppelingen en paden buiten de hoofdmap worden genegeerd.
WebChat-gedrag
WebChat wordt gekoppeld aan de geselecteerde agent en gebruikt standaard de hoofdsessie van de agent. Hierdoor kun je in WebChat de kanaaloverschrijdende context voor die agent op één plaats bekijken.
Antwoordcontext
Inkomende antwoorden bevatten:
ReplyToId,ReplyToBodyenReplyToSenderwanneer beschikbaar.- Geciteerde context wordt als een
[Replying to ...]-blok toegevoegd aanBody.
Dit is consistent voor alle kanalen.