Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

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

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. Совпадение гильдии (Discord) через guildId.
  3. Совпадение команды (Slack) через teamId.
  4. Совпадение аккаунта (accountId на канале).
  5. Совпадение канала (любой аккаунт в этом канале).
  6. Агент по умолчанию (agents.list[].default, иначе первый элемент списка, с резервным переходом к main).

Подобранный агент определяет, какое рабочее пространство и какое хранилище сеансов используются.

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

Группы рассылки позволяют запускать несколько агентов для одного и того же пира когда OpenClaw обычно отвечает (например: в группах WhatsApp — после упоминания/активации).

Конфиг:

{
  broadcast: {
    strategy: "parallel",
    "120363403215116621@g.us": ["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 ...].

Это единообразно для всех каналов.