Mainstream messaging
Правила push-уведомлений Matrix для ненавязчивых предпросмотров
Когда channels.matrix.streaming.mode имеет значение "quiet", OpenClaw передаёт ответ потоково, редактируя одно событие предварительного просмотра на месте. Предварительные версии отправляются как события m.notice без уведомлений, а итоговое редактирование помечается маркером content["com.openclaw.finalized_preview"] = true. Клиенты Matrix уведомляют только об этом итоговом редактировании и только в том случае, если пользовательское правило push-уведомлений соответствует маркеру. Эта страница предназначена для операторов, самостоятельно размещающих Matrix и желающих установить такое правило для каждой учётной записи получателя.
streaming.mode: "progress" завершает свои черновики тем же способом, поэтому это же правило срабатывает и для итоговых редактирований в режиме отображения прогресса.
Если вам достаточно стандартного поведения уведомлений Matrix, используйте streaming.mode: "partial" или отключите потоковую передачу. См. раздел Настройка канала Matrix.
Предварительные требования
- пользователь-получатель = человек, который должен получить уведомление
- пользователь-бот = учётная запись OpenClaw в Matrix, отправляющая ответ
- для приведённых ниже вызовов API используйте токен доступа пользователя-получателя
- в правиле push-уведомлений сопоставляйте
senderс полным MXID пользователя-бота - для учётной записи получателя уже должны работать механизмы доставки push-уведомлений; правила тихого предварительного просмотра работают только при исправной обычной доставке push-уведомлений Matrix
Шаги
Настройте тихий предварительный просмотр
{channels: {matrix: { streaming: { mode: "quiet" },},},}Получите токен доступа получателя
По возможности повторно используйте токен существующего клиентского сеанса. Чтобы выпустить новый:
curl -sS -X POST \"https://matrix.example.org/_matrix/client/v3/login" \-H "Content-Type: application/json" \--data '{"type": "m.login.password","identifier": { "type": "m.id.user", "user": "@alice:example.org" },"password": "REDACTED"}'Убедитесь в наличии механизмов доставки push-уведомлений
curl -sS \-H "Authorization: Bearer $USER_ACCESS_TOKEN" \"https://matrix.example.org/_matrix/client/v3/pushers"Если механизмы доставки push-уведомлений отсутствуют в ответе, прежде чем продолжить, исправьте обычную доставку push-уведомлений Matrix для этой учётной записи.
Установите переопределяющее правило push-уведомлений
Установите правило, сопоставляющее маркер завершённого предварительного просмотра и MXID бота в качестве отправителя:
curl -sS -X PUT \"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" \-H "Authorization: Bearer $USER_ACCESS_TOKEN" \-H "Content-Type: application/json" \--data '{"conditions": [ { "kind": "event_match", "key": "type", "pattern": "m.room.message" }, { "kind": "event_property_is", "key": "content.m\\.relates_to.rel_type", "value": "m.replace" }, { "kind": "event_property_is", "key": "content.com\\.openclaw\\.finalized_preview", "value": true }, { "kind": "event_match", "key": "sender", "pattern": "@bot:example.org" }],"actions": [ "notify", { "set_tweak": "sound", "value": "default" }, { "set_tweak": "highlight", "value": false }]}'Перед запуском замените:
https://matrix.example.org: базовый URL вашего домашнего сервера$USER_ACCESS_TOKEN: токен доступа пользователя-получателяopenclaw-finalized-preview-botname: уникальный идентификатор правила для каждой пары «бот — получатель» (шаблон:openclaw-finalized-preview-<botname>)@bot:example.org: MXID вашего бота OpenClaw, а не получателя
Проверьте
curl -sS \-H "Authorization: Bearer $USER_ACCESS_TOKEN" \"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname"Затем протестируйте потоковый ответ. В тихом режиме в комнате отображается тихая предварительная версия черновика, а уведомление отправляется один раз после завершения блока или хода.
Чтобы позднее удалить правило, выполните DELETE для того же URL правила с токеном получателя.
Примечания о нескольких ботах
Правила push-уведомлений индексируются по ruleId: повторное выполнение PUT с тем же идентификатором обновляет одно правило. Если несколько ботов OpenClaw уведомляют одного получателя, создайте отдельное правило для каждого бота с отдельным условием сопоставления отправителя.
Новые пользовательские правила override вставляются перед стандартными серверными правилами подавления, поэтому дополнительный параметр порядка не требуется. Правило влияет только на текстовые редактирования предварительного просмотра, которые можно завершить на месте; ответы с медиафайлами, резервные варианты для устаревших предварительных версий и итоговые тексты, которые активировали бы упоминания Matrix, вместо этого доставляются как обычные сообщения с уведомлениями.
Примечания о домашнем сервере
Synapse
Специально изменять homeserver.yaml не требуется. Если обычные уведомления Matrix уже доходят до этого пользователя, основной шаг настройки — токен получателя и приведённый выше вызов pushrules.
Если Synapse работает за обратным прокси-сервером или с рабочими процессами, убедитесь, что /_matrix/client/.../pushrules/ корректно достигает Synapse. Доставка push-уведомлений выполняется основным процессом либо synapse.app.pusher / настроенными рабочими процессами доставки push-уведомлений — убедитесь в их исправности.
В правиле используется условие правила push-уведомлений event_property_is (MSC3758, правило push-уведомлений версии 1.10), добавленное в Synapse в 2023 году. Более старые выпуски Synapse принимают вызов PUT pushrules/..., но условие никогда не срабатывает без каких-либо сообщений — обновите Synapse, если уведомление не приходит при итоговом редактировании предварительного просмотра.
Tuwunel
Используется тот же процесс, что и для Synapse; для маркера завершённого предварительного просмотра отдельная настройка Tuwunel не требуется.
Если уведомления исчезают, пока пользователь активен на другом устройстве, проверьте, включён ли параметр suppress_push_when_active. Tuwunel добавил этот параметр в версии 1.4.2 (сентябрь 2025 года), и он может намеренно подавлять push-уведомления на других устройствах, пока одно из устройств активно.