Naar hoofdinhoud gaan

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).
  • AgentId: een geïsoleerde werkruimte + sessieopslag (“brein”).
  • SessionKey: de bucketsleutel die wordt gebruikt om context op te slaan en gelijktijdigheid te beheren.

Vormen van sessiesleutels (voorbeelden)

Directe berichten worden samengevoegd tot de hoofdsessie van de agent:
  • agent:<agentId>:<mainKey> (standaard: agent:main:main)
Groepen en kanalen blijven per kanaal geïsoleerd:
  • Groepen: agent:<agentId>:<channel>:group:<id>
  • Kanalen/rooms: agent:<agentId>:<channel>:channel:<id>
Discussies:
  • Slack/Discord-threads voegen :thread:<threadId> toe aan de basissleutel.
  • Telegram-forumtopics embedden :topic:<topicId> in de groepssleutel.
Voorbeelden:
  • agent:main:telegram:group:-1001234567890:topic:42
  • agent:main:discord:channel:123456:thread:987654

Routeringsregels (hoe een agent wordt gekozen)

Routering kiest één agent voor elk inkomend bericht:
  1. Exacte peer-match (bindings met peer.kind + peer.id).
  2. Overeenkomende bovenliggende peer (thread-overerving).
  3. Guild + rollen komen overeen (Discord) via guildId + roles.
  4. Guild-match (Discord) via guildId.
  5. Team-match (Slack) via teamId.
  6. Account-match (accountId op het kanaal).
  7. Kanaal-match (elk account op dat kanaal).
  8. Standaardagent (agents.list[].default, anders eerste lijstitem, fallback naar main).
Wanneer een binding meerdere matchvelden bevat (peer, guildId, teamId, roles), moeten alle opgegeven velden overeenkomen voordat die binding wordt toegepast. De gematchte agent bepaalt welke werkruimte en sessieopslag worden gebruikt.

Broadcast-groepen (meerdere agents draaien)

Broadcast-groepen laten je meerdere agents draaien voor dezelfde peer wanneer OpenClaw normaal gesproken zou antwoorden (bijvoorbeeld: in WhatsApp-groepen, na mention-/activeringsgating). Config:
{
  broadcast: {
    strategy: "parallel",
    "[email protected]": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"],
  },
}
Zie: Broadcast Groups.

Config-overzicht

  • agents.list: benoemde agentdefinities (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" },
  ],
}

Sessiesopslag

Sessiestores bevinden zich onder de state-directory (standaard ~/.openclaw):
  • ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • JSONL-transcripten staan naast de store
Je kunt het pad van de store overschrijven via session.store en {agentId}-templating.

WebChat-gedrag

WebChat koppelt aan de geselecteerde agent en gebruikt standaard de hoofd- sessie van de agent. Hierdoor kun je met WebChat de context over meerdere kanalen voor die agent op één plek bekijken.

Antwoordcontext

Inkomende antwoorden bevatten:
  • ReplyToId, ReplyToBody en ReplyToSender wanneer beschikbaar.
  • Geciteerde context wordt toegevoegd aan Body als een [Replying to ...]-blok.
Dit is consistent over alle kanalen.