Перейти к основному содержанию

Каналы и маршрутизация

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:42
  • agent:main:discord:channel:123456:thread:987654

Правила маршрутизации (как выбирается агент)

Маршрутизация выбирает одного агента для каждого входящего сообщения:
  1. Точное совпадение пира (bindings с peer.kind + peer.id).
  2. Совпадение родительского peer (наследование потока).
  3. Потоки:
  4. Совпадение гильдии (Discord) через guildId.
  5. Совпадение команды (Slack) через teamId.
  6. Совпадение аккаунта (accountId на канале).
  7. Совпадение канала (любой аккаунт в этом канале).
  8. Агент по умолчанию (agents.list[].default, иначе первый элемент списка, с резервным переходом к main).
Если привязка включает несколько полей сопоставления (peer, guildId, teamId, roles), все указанные поля должны совпадать, чтобы привязка применялась. Подобранный агент определяет, какое рабочее пространство и какое хранилище сеансов используются.

Группы рассылки (запуск нескольких агентов)

Группы рассылки позволяют запускать несколько агентов для одного и того же пира когда 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 ...].
Это единообразно для всех каналов.