---
read_when:
    - Вы хотите разобраться в маршрутизации и изоляции сеансов
    - Вы хотите настроить область личных сообщений для многопользовательских конфигураций
    - Вы устраняете неполадки с ежедневными сбросами сессий или сбросами из-за бездействия
summary: Как OpenClaw управляет сеансами диалогов
title: Управление сеансами
x-i18n:
    generated_at: "2026-07-13T19:44:38Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 8ec9e33b4d288fa12016092ab2201431631fc9cb77e6e9d4261d348d5a849f65
    source_path: concepts/session.md
    workflow: 16
---

OpenClaw направляет каждое входящее сообщение в **сеанс** в зависимости от его
источника: личные сообщения, групповые чаты, задания Cron и т. д. Всем состоянием
сеансов управляет **Gateway**; клиенты пользовательского интерфейса запрашивают данные сеансов у Gateway.

## Как маршрутизируются сообщения

| Источник          | Поведение                  |
| --------------- | ------------------------- |
| Личные сообщения | По умолчанию общий сеанс |
| Групповые чаты     | Отдельный сеанс для каждой группы        |
| Комнаты/каналы  | Отдельный сеанс для каждой комнаты         |
| Задания Cron       | Новый сеанс при каждом запуске     |
| Webhook        | Отдельный сеанс для каждого Webhook         |

## Изоляция личных сообщений

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

<Warning>
Если вашему агенту могут писать несколько человек, включите изоляцию личных сообщений. Без неё все
пользователи используют общий контекст диалога, поэтому личные сообщения Алисы будут
видны Бобу.
</Warning>

```json5
{
  session: {
    dmScope: "per-channel-peer", // isolate by channel + sender
  },
}
```

Варианты `session.dmScope`:

| Значение                      | Поведение                                  |
| -------------------------- | ----------------------------------------- |
| `main` (по умолчанию)           | Все личные сообщения используют один общий сеанс                 |
| `per-peer`                 | Изоляция по отправителю независимо от канала        |
| `per-channel-peer`         | Изоляция по каналу и отправителю (рекомендуется) |
| `per-account-channel-peer` | Изоляция по учётной записи, каналу и отправителю     |

<Tip>
Если один и тот же человек связывается с вами через несколько каналов, используйте
`session.identityLinks`, чтобы сопоставить его идентификаторы с одним каноническим идентификатором собеседника и
обеспечить для них общий сеанс.
</Tip>

### Закрепление связанных каналов

Команды закрепления переносят маршрут ответа текущего сеанса личного чата в другой
связанный канал, не создавая новый сеанс. Примеры, конфигурацию и сведения об
устранении неполадок см. в разделе [Закрепление каналов](/ru/concepts/channel-docking).

Проверьте свою конфигурацию с помощью `openclaw security audit`.

## Жизненный цикл сеанса

Сеансы используются повторно до истечения срока их действия согласно `session.reset`:

- **Ежедневный сброс** (по умолчанию `mode: "daily"`) — новый сеанс в заданный локальный
  час (`session.reset.atHour`, по умолчанию `4`, 0-23) на хосте Gateway. Срок ежедневного
  обновления отсчитывается с момента запуска текущего `sessionId`, а не с последующих
  записей метаданных.
- **Сброс при простое** (`mode: "idle"`) — новый сеанс после `session.reset.idleMinutes`
  бездействия. Срок простоя отсчитывается с момента последнего реального взаимодействия
  с пользователем или каналом, поэтому системные события Heartbeat, Cron и exec не поддерживают
  сеанс активным.
- **Ручной сброс** — введите `/new` или `/reset` в чате. `/new <model>` также
  переключает модель.

Если настроены и ежедневный сброс, и сброс при простое, применяется тот, срок которого
истечёт первым. Ходы Heartbeat, Cron, exec и других системных событий могут записывать метаданные сеанса,
но эти записи не продлевают срок ежедневного сброса или сброса при простое. Когда при сбросе
создаётся новый сеанс, уведомления о системных событиях из очереди для старого сеанса
отбрасываются, чтобы устаревшие фоновые обновления не добавлялись в начало первого запроса
нового сеанса.

Сеансы с активным CLI-сеансом, принадлежащим провайдеру, не прерываются неявным
ежедневным сбросом по умолчанию. Используйте `/reset` или явно настройте `session.reset`, если срок действия таких
сеансов должен истекать по таймеру.

Переопределите значение по умолчанию для каждого типа чата или канала:

```json5
{
  session: {
    reset: { mode: "daily", atHour: 4 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 120 },
      thread: { mode: "daily", atHour: 6 },
    },
    resetByChannel: {
      discord: { mode: "idle", idleMinutes: 10080 },
    },
  },
}
```

`resetByType` поддерживает `direct` (устаревший псевдоним `dm`), `group` и `thread`.
Устаревший параметр верхнего уровня `session.idleMinutes` по-прежнему работает как псевдоним совместимости для
режима простоя по умолчанию, если блок `session.reset`/`resetByType` не задан.

## Где хранится состояние

- **Строки сеансов среды выполнения:** `~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite`
- **Архивные файлы расшифровок:** `~/.openclaw/agents/<agentId>/sessions/`
- **Источник миграции устаревших строк:** `~/.openclaw/agents/<agentId>/sessions/sessions.json`

Строки сеансов в базе данных SQLite каждого агента содержат отдельные временные
метки жизненного цикла:

- `sessionStartedAt`: момент начала текущего `sessionId`; используется для ежедневного сброса.
- `lastInteractionAt`: последнее взаимодействие пользователя или канала, продлевающее срок простоя.
- `updatedAt`: последнее изменение строки хранилища; полезно для вывода списка и очистки, но не
  является определяющим для срока ежедневного сброса или сброса при простое.

Во время миграции со старых установок запуск Gateway и `openclaw doctor
--fix` автоматически импортируют устаревшие строки `sessions.json` и актуальную историю расшифровок JSONL в
SQLite. Значения строк без `sessionStartedAt` извлекаются из заголовка сеанса
устаревшей расшифровки JSONL, если он доступен. Если в старой строке также
отсутствует `lastInteractionAt`, срок простоя отсчитывается от времени начала этого сеанса,
а не от последующих служебных записей. Используйте `openclaw doctor --session-sqlite inspect
--session-sqlite-all-agents` и [последовательность миграции
Doctor](/ru/cli/doctor#session-sqlite-migration), если требуется явная
проверка или подтверждение миграции.

## Обслуживание сеансов

OpenClaw со временем ограничивает размер хранилища сеансов с помощью `session.maintenance`;
ниже показаны значения по умолчанию:

```json5
{
  session: {
    maintenance: {
      mode: "enforce", // "enforce" applies cleanup; "warn" only reports
      pruneAfter: "30d",
      maxEntries: 500,
    },
  },
}
```

При значениях ограничения `maxEntries`, характерных для рабочей среды, операции записи Gateway используют небольшой
буфер верхнего порога и пакетно сокращают объём до настроенного предела.
Операции чтения хранилища сеансов не очищают и не ограничивают записи во время запуска Gateway, поэтому
запуск и изолированные сеансы Cron не требуют полной очистки хранилища.
`openclaw sessions cleanup --enforce` применяет ограничение немедленно.

Сеансы проверки запуска модели Gateway по умолчанию кратковременны. Для строк, соответствующих
`agent:*:explicit:model-run-<uuid>`, используется фиксированный срок хранения `24h`, но очистка
выполняется только при достижении порога: устаревшие строки проверок удаляются лишь при возникновении
нагрузки на обслуживание или ограничение количества записей сеансов, причём это происходит до применения общего
возрастного порога устаревших записей и ограничения количества записей. Обычные личные, групповые, потоковые сеансы,
а также сеансы Cron, Webhook, Heartbeat, ACP и субагентов не наследуют этот срок хранения 24h.

При обслуживании сохраняются постоянные внешние указатели на диалоги, включая групповые
сеансы и ограниченные потоком сеансы чатов, тогда как синтетические записи Cron,
Webhook, Heartbeat, ACP и субагентов могут устаревать и удаляться.

Если ранее вы использовали изоляцию личных сообщений, а затем вернули `session.dmScope` к
`main`, предварительно просмотрите устаревшие строки личных сообщений с ключами собеседников с помощью
`openclaw sessions cleanup --dry-run --fix-dm-scope`. Применение того же флага
выводит эти старые строки личных сообщений из использования и сохраняет их расшифровки как удалённые
архивы.

Предварительно просмотреть любой запуск обслуживания можно с помощью `openclaw sessions cleanup --dry-run`.

## Просмотр сеансов

| Команда                    | Что показывает                                           |
| -------------------------- | ----------------------------------------------- |
| `openclaw status`          | Путь к хранилищу сеансов и недавнюю активность          |
| `openclaw sessions --json` | Все сеансы (фильтрация с помощью `--active <minutes>`) |
| `/status` в чате          | Использование контекста, модель и переключатели               |
| `/context list`            | Содержимое системного запроса                    |

## Дополнительные материалы

- [Поиск по сеансам](/ru/concepts/session-search) — полнотекстовый поиск по прошлым расшифровкам
- [Очистка сеансов](/ru/concepts/session-pruning) — сокращение результатов инструментов
- [Compaction](/ru/concepts/compaction) — краткое изложение длинных диалогов
- [Инструменты сеансов](/ru/concepts/session-tool) — инструменты агента для работы между сеансами
- [Подробное руководство по управлению сеансами](/ru/reference/session-management-compaction) —
  схема хранилища, расшифровки, политика отправки, метаданные источника и расширенная конфигурация
- [Несколько агентов](/ru/concepts/multi-agent) — маршрутизация и изоляция сеансов между агентами
- [Фоновые задачи](/ru/automation/tasks) — как автономная работа создаёт записи задач со ссылками на сеансы
- [Маршрутизация каналов](/ru/channels/channel-routing) — как входящие сообщения направляются в сеансы

## Связанные материалы

- [Очистка сеансов](/ru/concepts/session-pruning)
- [Инструменты сеансов](/ru/concepts/session-tool)
- [Очередь команд](/ru/concepts/queue)
