Сообщения
На этой странице собрана информация о том, как 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.<id>.historyLimit (установите 0 для отключения).
Очередь и последующие действия
Если процесс уже активен, входящие сообщения могут быть поставлены в очередь, направлены в текущий процесс или собраны для следующего хода.
- Настройка через
messages.queue(иmessages.queue.byChannel). - Режимы:
interrupt,steer,followup,collect, а также варианты с отложенными сообщениями.
Подробнее: Очередь.
Потоковая передача, разбиение на части и пакетирование
Потоковая передача блоков отправляет частичные ответы по мере генерации текстовых блоков моделью. Разбиение на части учитывает ограничения канала по длине текста и избегает разделения блоков кода. Ключевые настройки:
agents.defaults.blockStreamingDefault(on|off, по умолчанию off)agents.defaults.blockStreamingBreak(text_end|message_end)agents.defaults.blockStreamingChunk(minChars|maxChars|breakPreference)agents.defaults.blockStreamingCoalesce(пакетирование на основе простоя)agents.defaults.humanDelay(человеческая пауза между ответами-блоками)- Переопределения для каналов:
*.blockStreamingи*.blockStreamingCoalesce(не-Telegram каналы требуют явного*.blockStreaming: true)
Подробнее: Потоковая передача + разбиение на части.
Видимость рассуждений и токены
OpenClaw может показывать или скрывать рассуждения модели:
/reasoning on|off|streamуправляет видимостью.- Контент рассуждений всё равно учитывается в использовании токенов, когда генерируется моделью.
- Telegram поддерживает поток рассуждений в пузырёк черновика.
Подробнее: Директивы мышления + рассуждений и Использование токенов.
Префиксы, цепочки ответов и ответы
Форматирование исходящих сообщений централизовано в messages:
messages.responsePrefix,channels.<channel>.responsePrefixиchannels.<channel>.accounts.<id>.responsePrefix(каскад префиксов для исходящих), а такжеchannels.whatsapp.messagePrefix(префикс для входящих WhatsApp)- Цепочки ответов через
replyToModeи значения по умолчанию для каждого канала
Подробнее: Конфигурация и документация по каналам.