Канали та маршрутизація
OpenClaw маршрутизує відповіді назад до каналу, звідки надійшло повідомлення. Модель не вибирає канал; маршрутизація є детермінованою та керується конфігурацією хоста.Ключові терміни
- Канал:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, а також канали розширень.webchat— це внутрішній канал інтерфейсу WebChat і не є налаштовуваним вихідним каналом. - AccountId: екземпляр облікового запису для каналу (коли підтримується).
- Необов’язковий типовий обліковий запис каналу:
channels.<channel>.defaultAccountвизначає, який обліковий запис використовується, коли вихідний шлях не задаєaccountId.- У конфігураціях із кількома обліковими записами задайте явний типовий обліковий запис (
defaultAccountабоaccounts.default), коли налаштовано два або більше облікових записів. Без цього резервна маршрутизація може вибрати перший нормалізований ідентифікатор облікового запису.
- У конфігураціях із кількома обліковими записами задайте явний типовий обліковий запис (
- 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
Закріплення основного маршруту особистих повідомлень
Колиsession.dmScope має значення main, особисті повідомлення можуть використовувати спільну основну сесію.
Щоб lastRoute сесії не перезаписувався особистими повідомленнями не від власника,
OpenClaw визначає закріпленого власника з allowFrom, якщо виконуються всі ці умови:
allowFromмає рівно один запис без wildcard.- Цей запис можна нормалізувати до конкретного ідентифікатора відправника для цього каналу.
- Відправник вхідного особистого повідомлення не збігається з цим закріпленим власником.
lastRoute основної сесії.
Правила маршрутизації (як вибирається агент)
Маршрутизація вибирає одного агента для кожного вхідного повідомлення:- Точний збіг вузла (
bindingsзpeer.kind+peer.id). - Збіг батьківського вузла (успадкування треду).
- Збіг сервера + ролей (Discord) через
guildId+roles. - Збіг сервера (Discord) через
guildId. - Збіг команди (Slack) через
teamId. - Збіг облікового запису (
accountIdу каналі). - Збіг каналу (будь-який обліковий запис у цьому каналі,
accountId: "*"). - Типовий агент (
agents.list[].default, інакше перший запис списку, резервно —main).
peer, guildId, teamId, roles), усі вказані поля мають збігатися, щоб ця прив’язка застосувалася.
Вибраний агент визначає, який робочий простір і сховище сесій використовуються.
Broadcast groups (запуск кількох агентів)
Broadcast groups дають змогу запускати кількох агентів для одного й того самого вузла коли 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 ...].