Kanały i routing¶
OpenClaw kieruje odpowiedzi z powrotem do kanału, z którego pochodziła wiadomość. Model nie wybiera kanału; routing jest deterministyczny i kontrolowany przez konfigurację hosta.
Kluczowe pojęcia¶
- Kanał:
whatsapp,telegram,discord,slack,signal,imessage,webchat. - AccountId: instancja konta per kanał (jeśli obsługiwane).
- AgentId: izolowany obszar roboczy + magazyn sesji („mózg”).
- SessionKey: klucz koszyka używany do przechowywania kontekstu i kontroli współbieżności.
Kształty klucza sesji (przykłady)¶
Wiadomości bezpośrednie są łączone do głównej sesji agenta:
agent:<agentId>:<mainKey>(domyślnie:agent:main:main)
Grupy i kanały pozostają izolowane per kanał:
- Grupy:
agent:<agentId>:<channel>:group:<id> - Kanały/pokoje:
agent:<agentId>:<channel>:channel:<id>
Wątki:
- Wątki Slack/Discord dołączają
:thread:<threadId>do klucza bazowego. - Tematy forum Telegrama osadzają
:topic:<topicId>w kluczu grupy.
Przykłady:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Reguły routingu (jak wybierany jest agent)¶
Routing wybiera jednego agenta dla każdej wiadomości przychodzącej:
- Dokładne dopasowanie rozmówcy (
bindingszpeer.kind+peer.id). - Dopasowanie gildii (Discord) przez
guildId. - Dopasowanie zespołu (Slack) przez
teamId. - Dopasowanie konta (
accountIdna kanale). - Dopasowanie kanału (dowolne konto na tym kanale).
- Agent domyślny (
agents.list[].default, w przeciwnym razie pierwsza pozycja listy, awaryjniemain).
Dopasowany agent determinuje, który obszar roboczy i magazyn sesji są używane.
Grupy rozgłoszeniowe (uruchamianie wielu agentów)¶
Grupy rozgłoszeniowe pozwalają uruchamiać wielu agentów dla tego samego rozmówcy gdy OpenClaw normalnie by odpowiedział (na przykład: w grupach WhatsApp, po bramkowaniu wzmianką/aktywacją).
Konfiguracja:
{
broadcast: {
strategy: "parallel",
"120363403215116621@g.us": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
Zobacz: Grupy rozgłoszeniowe.
Przegląd konfiguracji¶
agents.list: nazwane definicje agentów (obszar roboczy, model itp.).bindings: mapowanie kanałów/kont/rozmówców przychodzących na agentów.
Przykład:
{
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" },
],
}
Przechowywanie sesji¶
Magazyny sesji znajdują się w katalogu stanu (domyślnie ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- Transkrypty JSONL znajdują się obok magazynu
Ścieżkę magazynu można nadpisać za pomocą session.store oraz szablonowania {agentId}.
Zachowanie WebChat¶
WebChat dołącza do wybranego agenta i domyślnie używa głównej sesji agenta. Z tego powodu WebChat pozwala zobaczyć w jednym miejscu kontekst międzykanałowy dla tego agenta.
Kontekst odpowiedzi¶
Odpowiedzi przychodzące zawierają:
ReplyToId,ReplyToBodyorazReplyToSender, gdy są dostępne.- Cytowany kontekst jest dołączany do
Bodyjako blok[Replying to ...].
Jest to spójne we wszystkich kanałach.