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

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

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

Маршрутизация выбирает одного агента для каждого входящего сообщения:

  1. Точное совпадение пира (bindings с peer.kind + peer.id).
  2. Совпадение гильдии (Discord) через guildId.
  3. Совпадение команды (Slack) через teamId.
  4. Совпадение аккаунта (accountId на канале).
  5. Совпадение канала (любой аккаунт на этом канале).
  6. Агент по умолчанию (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 ...].

Это согласовано между каналами.