Сообщени я и доставка
Сообщения
На этой странице собрана информация о том, как OpenClaw обрабатывает входящие сообщения, сессии, очереди, потоковую передачу и видимость рассуждений.
Поток сообщений (высокоуровнево)
Входящее сообщение
-> маршрутизация/привязки -> ключ сессии
-> очередь (если запущен процесс)
-> процесс агента (потоковая передача + инструменты)
-> исходящие ответы (ограничения канала + разбиение на части)
Основ ные настройки находятся в конфигурации:
messages.*для префиксов, очередей и группового поведения.agents.defaults.*для потоковой передачи блоков и настроек разбиения по умолчанию.- Переопределения для каналов (
channels.whatsapp.*,channels.telegram.*и т.д.) для ограничений и переключения потоковой передачи.
Полную схему смотрите в Конфигурации.
Дедупликация входящих сообщений
Каналы могут повторно доставлять одно и то же сообщение после переподключения. OpenClaw хранит кратковременный кеш, ключом которого является канал/аккаунт/отправитель/сессия/идентификатор сообщения, чтобы повторные доставки не запускали новый процесс агента.
Дебаунсинг входящих сообщений
Быстрые последовательные сообщения от одного и того же отправителя могут быть объединены в один ход агента с помощью messages.inbound. Дебаунсинг применяется в рамках канала + беседы и использует самое последнее сообщение для формирования цепочки ответов/идентификаторов. Конфигурация (глобальная по умолчанию + переопределения для каждого канала):
{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500,
},
},
},
}
Примечания:
- Дебаунсинг применяется только к текстовым сообщениям; медиа/вложения отправляются немедленно.
- Управляющие команды обходят дебаунсинг, чтобы оставаться самостоятельными.
Сессии и устройства
Сессиями владеет шлюз, а не клиенты.
- Прямые чаты объединяются в основной ключ сессии агента.
- Группы/каналы получают свои собственные ключи сессий.
- Хранилище сессий и транскрипты находятся на хосте шлюза.
Несколько устройств/каналов могут быть привязаны к одной сессии, но история не синхронизируется полностью со всеми клиентами. Рекомендация: используйте одно основное устройство для длинных бесед, чтобы из бежать расхождения контекста. Панель управления (Control UI) и TUI всегда показывают транскрипт сессии с шлюза, поэтому они являются источником истины. Подробнее: Управление сессиями.
Тела входящих сообщений и контекст истории
OpenClaw разделяет тело промпта и тело команды:
Body: текст промпта, отправляемый агенту. Он может включать оболочки канала и дополнительные обёртки истории.CommandBody: исходный текст пользователя для разбора директив/команд.RawBody: устаревший алиас дляCommandBody(сохранён для совместимости).
Когда канал предоставляет историю, используется общая обёртка:
[Сообщения чата с момента вашего последнего ответа - для контекста][Текущее сообщение - ответьте на него]
Для не прямых чатов (группы/каналы/комнаты) тело текущего сообщения предваряется меткой отправителя (в том же стиле, что и для записей истории). Это обеспечивает согласованность сообщений в реальном времени и поставленных в очередь/истории в промпте агента. Буферы истории являются только ожидающими: они включают групповые сообщения, которые не запустили процесс (например, сообщения, требующие упоминания), и исключают сообщения, уже находящиеся в транскрипте сессии. Удаление директив применяется только к разделу текущего сообщения, чтобы история оставалась нетронутой. Каналы, которые оборачивают историю, должны установить CommandBody (или RawBody) в исходный текст сообщения, а Body оставить как объединённый промпт. Буферы истории настраиваются через messages.groupChat.historyLimit (глобальное значение по умолчанию) и переопределения для каждого канала, такие как channels.slack.historyLimit или channels.telegram.accounts..historyLimit (установите 0 для отключения).