> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Маршрутизация каналов

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

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 — после упоминания/активации).

Конфиг:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  broadcast: {
    strategy: "parallel",
    "120363403215116621@g.us": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"],
  },
}
```

См.: [Группы рассылки](/channels/broadcast-groups).

## Обзор конфига

* `agents.list`: именованные определения агентов (рабочее пространство, модель и т. д.).
* `bindings`: сопоставление входящих каналов/аккаунтов/пиров агентам.

Пример:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 ...]`.

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