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

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

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

По умолчанию все личные сообщения используют один общий сеанс для сохранения непрерывности диалога, что подходит для конфигураций с одним пользователем.
Если вашему агенту могут писать несколько человек, включите изоляцию личных сообщений. Без неё все пользователи используют общий контекст диалога, поэтому личные сообщения Алисы будут видны Бобу.
Варианты session.dmScope:
Если один и тот же человек связывается с вами через несколько каналов, используйте session.identityLinks, чтобы сопоставить его идентификаторы с одним каноническим идентификатором собеседника и обеспечить для них общий сеанс.

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

Команды закрепления переносят маршрут ответа текущего сеанса личного чата в другой связанный канал, не создавая новый сеанс. Примеры, конфигурацию и сведения об устранении неполадок см. в разделе Закрепление каналов. Проверьте свою конфигурацию с помощью 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, если срок действия таких сеансов должен истекать по таймеру. Переопределите значение по умолчанию для каждого типа чата или канала:
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, если требуется явная проверка или подтверждение миграции.

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

OpenClaw со временем ограничивает размер хранилища сеансов с помощью session.maintenance; ниже показаны значения по умолчанию:
При значениях ограничения 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.

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

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

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