Каналы и маршрутизация
OpenClaw маршрутизирует ответы обратно в канал, из которого пришло сообщение. Модель не выбирает канал; маршрутизация детерминирована и управляется конфигурацией хоста.Ключевые термины
- Канал:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, а также каналы Plugin.webchat— это внутренний канал интерфейса WebChat, который не является настраиваемым исходящим каналом. - AccountId: экземпляр учетной записи для каждого канала (если поддерживается).
- Необязательная учетная запись канала по умолчанию:
channels.<channel>.defaultAccountвыбирает, какая учетная запись используется, когда исходящий путь не указываетaccountId.- В конфигурациях с несколькими учетными записями задайте явное значение по умолчанию (
defaultAccountилиaccounts.default), когда настроены две или более учетные записи. Без него резервная маршрутизация может выбрать первый нормализованный идентификатор учетной записи.
- В конфигурациях с несколькими учетными записями задайте явное значение по умолчанию (
- AgentId: изолированное рабочее пространство + хранилище сессий («мозг»).
- SessionKey: ключ корзины, используемый для хранения контекста и управления параллелизмом.
Префиксы исходящих целей
Явные исходящие цели могут включать префикс провайдера, напримерtelegram:123 или tg:123. Ядро рассматривает этот префикс как подсказку для выбора канала только когда выбранный канал равен last или иначе не разрешен, и только когда загруженный Plugin объявляет этот префикс. Если вызывающая сторона уже выбрала явный канал, префикс провайдера должен соответствовать этому каналу; межканальные комбинации, такие как доставка WhatsApp в telegram:123, завершаются ошибкой до нормализации цели, специфичной для Plugin.
Префиксы типа цели и сервиса, такие как channel:<id>, user:<id>, room:<id>, thread:<id>, imessage:<handle> и sms:<number>, остаются внутри грамматики выбранного канала. Сами по себе они не выбирают провайдера.
Форматы ключей сессий (примеры)
Личные сообщения по умолчанию сворачиваются в основную сессию агента: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
Закрепление основного маршрута личных сообщений
Когдаsession.dmScope равно main, личные сообщения могут использовать одну основную сессию совместно.
Чтобы предотвратить перезапись lastRoute сессии личными сообщениями не от владельца,
OpenClaw выводит закрепленного владельца из allowFrom, когда выполняются все условия:
allowFromсодержит ровно одну запись без wildcard.- Запись можно нормализовать в конкретный идентификатор отправителя для этого канала.
- Отправитель входящего личного сообщения не соответствует этому закрепленному владельцу.
lastRoute основной сессии.
Защищенная запись входящих сообщений
Канальные Plugin могут пометить запись входящей сессии какcreateIfMissing: false,
когда защищенный путь не должен создавать новую сессию OpenClaw. В этом режиме
OpenClaw может обновлять метаданные и lastRoute для существующей сессии, но
не создает запись сессии только для маршрута лишь потому, что было замечено сообщение.
Правила маршрутизации (как выбирается агент)
Маршрутизация выбирает одного агента для каждого входящего сообщения:- Точное совпадение участника (
bindingsсpeer.kind+peer.id). - Совпадение родительского участника (наследование треда).
- Совпадение гильдии + ролей (Discord) через
guildId+roles. - Совпадение гильдии (Discord) через
guildId. - Совпадение команды (Slack) через
teamId. - Совпадение учетной записи (
accountIdв канале). - Совпадение канала (любая учетная запись в этом канале,
accountId: "*"). - Агент по умолчанию (
agents.list[].default, иначе первая запись списка, резервноmain).
peer, guildId, teamId, roles), все предоставленные поля должны совпасть, чтобы эта привязка применилась.
Найденный агент определяет, какое рабочее пространство и хранилище сессий используются.
Группы рассылки (запуск нескольких агентов)
Группы рассылки позволяют запускать нескольких агентов для одного и того же участника когда OpenClaw обычно отправил бы ответ (например: в группах WhatsApp, после проверки упоминания/активации). Конфигурация:Обзор конфигурации
agents.list: именованные определения агентов (рабочее пространство, модель и т. д.).bindings: сопоставляет входящие каналы/учетные записи/участников с агентами.
Хранилище сессий
Хранилища сессий находятся в каталоге состояния (по умолчанию~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- Транскрипты JSONL находятся рядом с хранилищем
session.store и шаблонизацию {agentId}.
Обнаружение сессий Gateway и ACP также сканирует дисковые хранилища агентов в
корне agents/ по умолчанию и в корнях шаблонных session.store. Обнаруженные
хранилища должны оставаться внутри этого разрешенного корня агента и использовать обычный
файл sessions.json. Символические ссылки и пути за пределами корня игнорируются.
Поведение WebChat
WebChat подключается к выбранному агенту и по умолчанию использует основную сессию агента. Благодаря этому WebChat позволяет видеть межканальный контекст этого агента в одном месте.Контекст ответа
Входящие ответы включают:ReplyToId,ReplyToBodyиReplyToSender, когда доступны.- Цитируемый контекст добавляется в
Bodyкак блок[Replying to ...].