Каналы и маршрутизация
OpenClaw маршрутизирует ответы обратно на канал, откуда пришло сообщение. Модель не выбирает канал; маршрутизация детерминирована и контролируется конфигурацией хоста.
Ключевые термины
- Канал: 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:42
- agent: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",
"[email protected]": ["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 ...].
Это согласовано между каналами.