Каналы и маршрутизация¶
OpenClaw направляет ответы обратно в тот канал, откуда пришло сообщение. Модель не выбирает канал; маршрутизация детерминирована и управляется конфигурацией хоста.
Ключевые термины¶
- Channel:
whatsapp,telegram,discord,slack,signal,imessage,webchat. - AccountId: экземпляр аккаунта на канал (когда поддерживается).
- AgentId: изолированное рабочее пространство + хранилище сеансов («мозг»).
- SessionKey: ключ-бакет, используемый для хранения контекста и контроля конкурентности.
Формы ключей сеанса (примеры)¶
Личные сообщения сворачиваются в основной сеанс агента:
agent:<agentId>:<mainKey>(по умолчанию:agent:main:main)
Группы и каналы остаются изолированными в рамках канала:
- Группы:
agent:<agentId>:<channel>:group:<id> - Каналы/комнаты:
agent:<agentId>:<channel>:channel:<id>
Потоки:
- Треды Slack/Discord добавляют
:thread:<threadId>к базовому ключу. - Темы форумов Telegram встраивают
:topic:<topicId>в ключ группы.
Примеры:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Правила маршрутизации (как выбирается агент)¶
Маршрутизация выбирает одного агента для каждого входящего сообщения:
- Точное совпадение пира (
bindingsсpeer.kind+peer.id). - Совпадение гильдии (Discord) через
guildId. - Совпадение команды (Slack) через
teamId. - Совпадение аккаунта (
accountIdна канале). - Совпадение канала (любой аккаунт в этом канале).
- Агент по умолчанию (
agents.list[].default, иначе первый элемент списка, с резервным переходом кmain).
Подобранный агент определяет, какое рабочее пространство и какое хранилище сеансов используются.
Группы рассылки (запуск нескольких агентов)¶
Группы рассылки позволяют запускать несколько агентов для одного и того же пира когда OpenClaw обычно отвечает (например: в группах WhatsApp — после упоминания/активации).
Конфиг:
{
broadcast: {
strategy: "parallel",
"120363403215116621@g.us": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
См.: Группы рассылки.
Обзор конфига¶
agents.list: именованные определения агентов (рабочее пространство, модель и т. д.).bindings: сопоставление входящих каналов/аккаунтов/пиров агентам.
Пример:
{
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" },
],
}
Хранилище сеансов¶
Хранилища сеансов находятся в каталоге состояния (по умолчанию ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- Транскрипты JSONL располагаются рядом с хранилищем
Вы можете переопределить путь к хранилищу с помощью шаблонов session.store и {agentId}.
Поведение WebChat¶
WebChat подключается к выбранному агенту и по умолчанию использует основной сеанс агента. Благодаря этому WebChat позволяет видеть межканальный контекст для этого агента в одном месте.
Контекст ответа¶
Входящие ответы включают:
ReplyToId,ReplyToBodyиReplyToSenderпри наличии.- Цитируемый контекст добавляется к
Bodyкак блок[Replying to ...].
Это единообразно для всех каналов.