matrix-js-sdk і підтримує DM, кімнати, потоки, медіа, реакції, опитування, геолокацію та E2EE.
Встановлення
Встановіть Matrix із ClawHub перед налаштуванням каналу:openclaw plugins install clawhub:@openclaw/matrix або openclaw plugins install npm:@openclaw/matrix.
З локального checkout:
plugins install реєструє й вмикає плагін, тому окремий крок openclaw plugins enable matrix не потрібен. Плагін усе одно нічого не робитиме, доки ви не налаштуєте канал нижче. Загальну поведінку плагінів і правила встановлення дивіться в Плагіни.
Налаштування
- Створіть обліковий запис Matrix на своєму homeserver.
- Налаштуйте
channels.matrixзhomeserver+accessTokenабо зhomeserver+userId+password. - Перезапустіть Gateway.
- Почніть DM з ботом або запросіть його до кімнати (див. автоприєднання - нові запрошення спрацьовують лише тоді, коли їх дозволяє
autoJoin).
Інтерактивне налаштування
MATRIX_* уже існують, а вибраний обліковий запис не має збереженої автентифікації, майстер пропонує shortcut через env-var. Щоб розв’язати назви кімнат перед збереженням allowlist, запустіть openclaw channels resolve --channel matrix "Project Room". Коли E2EE увімкнено, майстер записує конфігурацію та запускає той самий bootstrap, що й openclaw matrix encryption setup.
Мінімальна конфігурація
На основі токена:Автоприєднання
channels.matrix.autoJoin за замовчуванням має значення off. Із типовим значенням бот не з’являтиметься в нових кімнатах або DM із нових запрошень, доки ви не приєднаєте його вручну.
OpenClaw не може визначити під час запрошення, чи запрошена кімната є DM або групою, тому всі запрошення - включно із запрошеннями в стилі DM - спершу проходять через autoJoin. dm.policy застосовується лише пізніше, після того як бот приєднався і кімнату класифіковано.
autoJoin: "always".
Формати цілей allowlist
Allowlist для DM і кімнат найкраще заповнювати стабільними ID:- DM (
dm.allowFrom,groupAllowFrom,groups.<room>.users): використовуйте@user:server. Відображувані імена за замовчуванням ігноруються, бо вони змінні; задавайтеdangerouslyAllowNameMatching: trueлише тоді, коли вам явно потрібна сумісність із записами відображуваних імен. - Ключі allowlist кімнат (
groups, legacyrooms): використовуйте!room:serverабо#alias:server. Звичайні назви кімнат за замовчуванням ігноруються; задавайтеdangerouslyAllowNameMatching: trueлише тоді, коли вам явно потрібна сумісність із пошуком за назвою приєднаної кімнати. - Allowlist запрошень (
autoJoinAllowlist): використовуйте!room:server,#alias:serverабо*. Звичайні назви кімнат відхиляються.
Нормалізація ID облікового запису
Майстер перетворює дружню назву на нормалізований ID облікового запису. Наприклад,Ops Bot стає ops-bot. Розділові знаки екрануються в scoped env-var names, щоб два облікові записи не могли зіткнутися: - → _X2D_, тому ops-prod відображається на MATRIX_OPS_X2D_PROD_*.
Кешовані облікові дані
Matrix зберігає кешовані облікові дані в~/.openclaw/credentials/matrix/:
- типовий обліковий запис:
credentials.json - іменовані облікові записи:
credentials-<account>.json
openclaw doctor і зонди стану каналу.
Змінні середовища
Використовуються, коли еквівалентний ключ конфігурації не задано. Типовий обліковий запис використовує назви без префікса; іменовані облікові записи використовують ID облікового запису, вставлений перед суфіксом.| Типовий обліковий запис | Іменований обліковий запис (<ID> — нормалізований ID облікового запису) |
|---|---|
MATRIX_HOMESERVER | MATRIX_<ID>_HOMESERVER |
MATRIX_ACCESS_TOKEN | MATRIX_<ID>_ACCESS_TOKEN |
MATRIX_USER_ID | MATRIX_<ID>_USER_ID |
MATRIX_PASSWORD | MATRIX_<ID>_PASSWORD |
MATRIX_DEVICE_ID | MATRIX_<ID>_DEVICE_ID |
MATRIX_DEVICE_NAME | MATRIX_<ID>_DEVICE_NAME |
MATRIX_RECOVERY_KEY | MATRIX_<ID>_RECOVERY_KEY |
ops назви стають MATRIX_OPS_HOMESERVER, MATRIX_OPS_ACCESS_TOKEN тощо. Env-vars ключа відновлення читаються CLI-потоками, що підтримують відновлення (verify backup restore, verify device, verify bootstrap), коли ви передаєте ключ через --recovery-key-stdin.
MATRIX_HOMESERVER не можна задати з workspace .env; дивіться Workspace .env files.
Приклад конфігурації
Практична базова конфігурація з паруванням DM, allowlist кімнат і E2EE:Попередні перегляди streaming
Streaming відповідей Matrix вмикається явно.streaming керує тим, як OpenClaw доставляє відповідь асистента в процесі створення; blockStreaming керує тим, чи кожен завершений блок зберігається як окреме повідомлення Matrix.
{ mode, preview, progress }:
progress.label: власна мітка,"auto"або незадане значення, щоб вибрати з налаштованих чи вбудованих міток, абоfalse, щоб приховати рядок мітки.progress.labels: кандидатні мітки, що використовуються лише колиlabelмає значення"auto"або не задано. Залиште незаданим для вбудованих типових значень.progress.maxLines: максимальна кількість rolling progress lines, що зберігаються в чернетці. Після цього ліміту старіші рядки обрізаються.progress.maxLineChars: максимальна кількість символів у компактному рядку прогресу перед усіченням.progress.toolProgress: колиtrue(за замовчуванням), live-активність інструментів/прогресу з’являється в чернетці.
streaming | Поведінка |
|---|---|
"off" (за замовчуванням) | Чекає на повну відповідь, надсилає один раз. true ↔ "partial", false ↔ "off". |
"partial" | Редагує одне звичайне текстове повідомлення на місці, поки модель пише поточний блок. Стандартні клієнти Matrix можуть сповістити про перший preview, а не про фінальне редагування. |
"quiet" | Те саме, що "partial", але повідомлення є notice без сповіщення. Одержувачі отримують сповіщення лише тоді, коли per-user push rule збігається з фіналізованим редагуванням (див. нижче). |
"progress" | Надсилає окремі компактні рядки прогресу за допомогою чернетки прогресу. |
blockStreaming не залежить від streaming:
streaming | blockStreaming: true | blockStreaming: false (за замовчуванням) |
|---|---|---|
"partial" / "quiet" | Live-чернетка для поточного блока, завершені блоки збережені як повідомлення | Live-чернетка для поточного блока, фіналізована на місці |
"off" | Одне повідомлення Matrix зі сповіщенням на кожен завершений блок | Одне повідомлення Matrix зі сповіщенням для повної відповіді |
- Якщо preview перевищує per-event size limit Matrix, OpenClaw зупиняє preview streaming і повертається до доставки лише фінального повідомлення.
- Медіавідповіді завжди надсилають вкладення звичайним способом. Якщо застарілий preview більше не можна безпечно використати повторно, OpenClaw редагує його перед надсиланням фінальної медіавідповіді.
- Оновлення preview прогресу інструментів увімкнені за замовчуванням, коли активний Matrix preview streaming. Задайте
streaming.preview.toolProgress: false, щоб залишити preview edits для тексту відповіді, але перенести прогрес інструментів на звичайний шлях доставки. - Preview edits коштують додаткових викликів Matrix API. Залиште
streaming: "off", якщо хочете найконсервативніший профіль rate-limit.
Голосові повідомлення
Вхідні голосові нотатки Matrix транскрибуються перед gate згадки кімнати. Це дозволяє голосовій нотатці, яка вимовляє ім’я бота, запустити агента в кімнаті зrequireMention: true, і дає агенту транскрипт замість лише placeholder аудіовкладення.
Matrix використовує спільний audio media provider, налаштований у tools.media.audio, наприклад OpenAI gpt-4o-mini-transcribe. Дивіться Огляд медіаінструментів, щоб налаштувати provider і переглянути ліміти.
Деталі поведінки:
- Події
m.audioта подіїm.fileз MIME-типомaudio/*підлягають обробці. - У зашифрованих кімнатах OpenClaw розшифровує вкладення через наявний шлях медіа Matrix перед транскрибуванням.
- Транскрипт позначається в промпті агента як машинно згенерований і ненадійний.
- Вкладення позначається як уже транскрибоване, щоб нижчі за потоком медіаінструменти не транскрибували ту саму голосову нотатку повторно.
- Установіть
tools.media.audio.enabled: false, щоб вимкнути аудіотранскрибування глобально.
Метадані схвалення
Нативні запити схвалення Matrix є звичайними подіямиm.room.message зі специфічним для OpenClaw власним вмістом події в com.openclaw.approval. Matrix дозволяє власні ключі вмісту подій, тому стандартні клієнти все одно відображають текстове тіло, а клієнти, що підтримують OpenClaw, можуть читати структурований ідентифікатор схвалення, тип, стан, доступні рішення та деталі exec/plugin.
Коли запит схвалення надто довгий для однієї події Matrix, OpenClaw розбиває видимий текст на фрагменти й додає com.openclaw.approval лише до першого фрагмента. Реакції для рішень дозволити/відхилити прив’язуються до цієї першої події, тому довгі запити зберігають ту саму ціль схвалення, що й запити з однією подією.
Self-hosted push-правила для тихих фіналізованих прев’ю
streaming: "quiet" сповіщає одержувачів лише після фіналізації блока або ходу - push-правило для кожного користувача має збігатися з маркером фіналізованого прев’ю. Повний рецепт дивіться в push-правилах Matrix для тихих прев’ю (токен одержувача, перевірка pusher, установлення правила, примітки для кожного homeserver).
Кімнати бот-до-бота
За замовчуванням повідомлення Matrix від інших налаштованих облікових записів OpenClaw Matrix ігноруються. ВикористовуйтеallowBots, коли навмисно хочете дозволити міжагентний трафік Matrix:
allowBots: trueприймає повідомлення від інших налаштованих бот-облікових записів Matrix у дозволених кімнатах і DM.allowBots: "mentions"приймає такі повідомлення лише тоді, коли вони видимо згадують цього бота в кімнатах. DM усе ще дозволені.groups.<room>.allowBotsперевизначає налаштування рівня облікового запису для однієї кімнати.- Прийняті повідомлення від налаштованих ботів використовують спільний захист від циклів ботів. Налаштуйте
channels.defaults.botLoopProtection, а потім перевизначте черезchannels.matrix.botLoopProtectionабоchannels.matrix.groups.<room>.botLoopProtection, коли одній кімнаті потрібен інший бюджет. - OpenClaw усе ще ігнорує повідомлення від того самого ID користувача Matrix, щоб уникнути циклів самовідповідей.
- Matrix тут не надає нативного прапорця бота; OpenClaw трактує «створено ботом» як «надіслано іншим налаштованим обліковим записом Matrix на цьому OpenClaw gateway».
Шифрування й верифікація
У зашифрованих (E2EE) кімнатах вихідні події зображень використовуютьthumbnail_file, щоб прев’ю зображень шифрувалися разом із повним вкладенням. Незашифровані кімнати все ще використовують звичайний thumbnail_url. Налаштування не потрібне - Plugin автоматично визначає стан E2EE.
Усі команди openclaw matrix приймають --verbose (повна діагностика), --json (машинозчитуваний вивід) і --account <id> (налаштування з кількома обліковими записами). За замовчуванням вивід стислий із тихим внутрішнім логуванням SDK. Наведені нижче приклади показують канонічну форму; додавайте прапорці за потреби.
Увімкнення шифрування
--recovery-key <key>застосувати ключ відновлення перед ініціалізацією (надавайте перевагу формі через stdin, задокументованій нижче)--force-reset-cross-signingвідкинути поточну ідентичність cross-signing і створити нову (використовуйте лише свідомо)
--encryption є псевдонімом для --enable-e2ee.
Еквівалент ручної конфігурації:
Стан і сигнали довіри
verify status повідомляє три незалежні сигнали довіри (--verbose показує їх усі):
Locally trusted: довірений лише цим клієнтомCross-signing verified: SDK повідомляє про верифікацію через cross-signingSigned by owner: підписано вашим власним ключем самопідписування (лише діагностика)
Verified by owner стає yes лише тоді, коли Cross-signing verified має значення yes. Локальної довіри або самого лише підпису власника недостатньо.
--allow-degraded-local-state повертає best-effort діагностику без попередньої підготовки облікового запису Matrix; корисно для офлайн- або частково налаштованих перевірок.
Верифікація цього пристрою ключем відновлення
Ключ відновлення чутливий - передавайте його через stdin замість передавання в командному рядку. УстановітьMATRIX_RECOVERY_KEY (або MATRIX_<ID>_RECOVERY_KEY для іменованого облікового запису):
Recovery key accepted: Matrix прийняв ключ для секретного сховища або довіри пристрою.Backup usable: резервну копію ключів кімнат можна завантажити з довіреним матеріалом відновлення.Device verified by owner: цей пристрій має повну довіру ідентичності Matrix cross-signing.
verify self чекає на Cross-signing verified: yes, перш ніж успішно завершитися. Використовуйте --timeout-ms <ms>, щоб налаштувати очікування.
Форма з буквальним ключем openclaw matrix verify device "<recovery-key>" також приймається, але ключ потрапляє в історію вашої оболонки.
Ініціалізація або відновлення cross-signing
verify bootstrap — це команда відновлення й налаштування для зашифрованих облікових записів. По черзі вона:
- ініціалізує секретне сховище, повторно використовуючи наявний ключ відновлення, коли це можливо
- ініціалізує cross-signing і завантажує відсутні публічні ключі
- позначає та підписує поточний пристрій через cross-signing
- створює серверну резервну копію ключів кімнат, якщо її ще не існує
m.login.dummy, потім m.login.password (потребує channels.matrix.password).
Корисні прапорці:
--recovery-key-stdin(поєднуйте зprintf '%s\n' "$MATRIX_RECOVERY_KEY" | …) або--recovery-key <key>--force-reset-cross-signing, щоб відкинути поточну ідентичність cross-signing (лише навмисно; потребує, щоб активний ключ відновлення був збережений або переданий через--recovery-key-stdin)
Резервна копія ключів кімнат
backup status показує, чи існує серверна резервна копія і чи може цей пристрій її розшифрувати. backup restore імпортує збережені в резервній копії ключі кімнат у локальне криптосховище; якщо ключ відновлення вже є на диску, можна опустити --recovery-key-stdin.
Щоб замінити пошкоджену резервну копію новою базовою версією (погоджуючись на втрату невідновлюваної старої історії; також може повторно створити секретне сховище, якщо поточний секрет резервної копії неможливо завантажити):
--rotate-recovery-key лише тоді, коли навмисно хочете, щоб попередній ключ відновлення перестав розблоковувати нову базову резервну копію.
Перелік, запит і відповіді на верифікації
--own-user запитує самоверифікацію (ви приймаєте запит в іншому клієнті Matrix того самого користувача); --user-id/--device-id/--room-id спрямовують запит на когось іншого. --own-user не можна поєднувати з іншими прапорцями націлювання.
Для нижчорівневої обробки життєвого циклу - зазвичай під час супроводу вхідних запитів з іншого клієнта - ці команди діють на конкретний запит <id> (виводиться verify list і verify request):
| Команда | Призначення |
|---|---|
openclaw matrix verify accept <id> | Прийняти вхідний запит |
openclaw matrix verify start <id> | Запустити SAS-потік |
openclaw matrix verify sas <id> | Вивести SAS emoji або десяткові числа |
openclaw matrix verify confirm-sas <id> | Підтвердити, що SAS збігається з тим, що показує інший клієнт |
openclaw matrix verify mismatch-sas <id> | Відхилити SAS, коли emoji або десяткові числа не збігаються |
openclaw matrix verify cancel <id> | Скасувати; приймає необов’язкові --reason <text> і --code <matrix-code> |
accept, start, sas, confirm-sas, mismatch-sas і cancel усі приймають --user-id і --room-id як підказки подальшого DM, коли верифікація прив’язана до конкретної кімнати прямих повідомлень.
Примітки щодо кількох облікових записів
Без--account <id> команди Matrix CLI використовують неявний типовий обліковий запис. Якщо у вас кілька іменованих облікових записів і ви не встановили channels.matrix.defaultAccount, вони відмовляться вгадувати й попросять вас вибрати. Коли E2EE вимкнено або недоступне для іменованого облікового запису, помилки вказують на ключ конфігурації цього облікового запису, наприклад channels.matrix.accounts.assistant.encryption.
Поведінка під час запуску
Поведінка під час запуску
З
encryption: true значення startupVerification за замовчуванням дорівнює "if-unverified". Під час запуску неверифікований пристрій запитує самоверифікацію в іншому клієнті Matrix, пропускаючи дублікати й застосовуючи cooldown (24 години за замовчуванням). Налаштуйте через startupVerificationCooldownHours або вимкніть через startupVerification: "off".Під час запуску також виконується консервативний прохід ініціалізації криптографії, який повторно використовує поточне секретне сховище й ідентичність cross-signing. Якщо стан ініціалізації пошкоджений, OpenClaw намагається виконати захищене відновлення навіть без channels.matrix.password; якщо homeserver вимагає пароль UIA, запуск записує попередження в журнал і не завершується аварійно. Пристрої, уже підписані власником, зберігаються.Дивіться повний потік оновлення в міграції Matrix.Сповіщення про верифікацію
Сповіщення про верифікацію
Matrix публікує сповіщення життєвого циклу верифікації в сувору DM-кімнату верифікації як повідомлення
m.notice: запит, готовність (із підказкою “Verify by emoji”), запуск/завершення та деталі SAS (emoji/десяткові), коли доступні.Вхідні запити з іншого клієнта Matrix відстежуються й автоматично приймаються. Для самоверифікації OpenClaw автоматично запускає SAS-потік і підтверджує свій бік, щойно верифікація emoji стане доступною - вам усе одно потрібно порівняти й підтвердити “They match” у вашому клієнті Matrix.Системні сповіщення верифікації не пересилаються в конвеєр чату агента.Видалений або недійсний пристрій Matrix
Видалений або недійсний пристрій Matrix
Якщо Для автентифікації токеном створіть свіжий токен доступу у вашому Matrix-клієнті або інтерфейсі адміністратора, а потім оновіть OpenClaw:Замініть
verify status повідомляє, що поточного пристрою більше немає в списку на homeserver, створіть новий пристрій OpenClaw Matrix. Для входу з паролем:assistant на ID облікового запису з команди, що завершилася помилкою, або пропустіть --account для типового облікового запису.Device hygiene
Device hygiene
Старі пристрої, керовані OpenClaw, можуть накопичуватися. Перегляньте список і очистьте зайві:
Crypto store
Crypto store
Matrix E2EE використовує офіційний шлях Rust-криптографії
matrix-js-sdk з fake-indexeddb як shim для IndexedDB. Криптографічний стан зберігається в crypto-idb-snapshot.json (обмежувальні дозволи файлу).Зашифрований runtime-стан розташований у ~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/ і включає сховище синхронізації, криптосховище, ключ відновлення, знімок IDB, прив’язки потоків і стан перевірки запуску. Коли токен змінюється, але ідентичність облікового запису лишається тією самою, OpenClaw повторно використовує найкращий наявний корінь, щоб попередній стан лишався видимим.Один старіший корінь token-hash може бути нормальною траєкторією безперервності ротації токена. Якщо OpenClaw журналює matrix: multiple populated token-hash storage roots detected, перевірте каталог облікового запису й архівуйте застарілі сусідні корені лише після підтвердження, що вибраний активний корінь справний. Надавайте перевагу переміщенню застарілих коренів у каталог _archive/, а не негайному видаленню.Керування профілем
Оновіть Matrix self-profile для вибраного облікового запису:mxc:// напряму; коли ви передаєте http:// або https://, OpenClaw спершу завантажує файл і зберігає вирішений URL mxc:// у channels.matrix.avatarUrl (або в перевизначення для окремого облікового запису).
Потоки
Matrix підтримує нативні потоки Matrix як для автоматичних відповідей, так і для надсилань через інструмент повідомлень. Дві незалежні ручки керують поведінкою:Маршрутизація сесій (sessionScope)
dm.sessionScope визначає, як Matrix DM-кімнати зіставляються із сесіями OpenClaw:
"per-user"(типово): усі DM-кімнати з тим самим маршрутизованим співрозмовником спільно використовують одну сесію."per-room": кожна Matrix DM-кімната отримує власний ключ сесії, навіть коли співрозмовник той самий.
sessionScope, тому прив’язані кімнати й потоки зберігають вибрану цільову сесію.
Відповіді в потоках (threadReplies)
threadReplies визначає, де бот публікує свою відповідь:
"off": відповіді є верхньорівневими. Вхідні повідомлення в потоках лишаються в батьківській сесії."inbound": відповідати всередині потоку лише тоді, коли вхідне повідомлення вже було в цьому потоці."always": відповідати всередині потоку, коренем якого є повідомлення-тригер; ця розмова маршрутизується через відповідну сесію з областю дії потоку, починаючи з першого тригера.
dm.threadReplies перевизначає це лише для DM - наприклад, щоб ізолювати потоки кімнат, але лишити DM пласкими.
Успадкування потоків і slash-команди
- Вхідні повідомлення в потоках включають кореневе повідомлення потоку як додатковий контекст агента.
- Надсилання через інструмент повідомлень автоматично успадковують поточний Matrix-потік, коли цільова кімната та сама (або та сама ціль користувача DM), якщо не надано явний
threadId. - Повторне використання цілі DM-користувача спрацьовує лише тоді, коли метадані поточної сесії доводять того самого DM-співрозмовника в тому самому Matrix-обліковому записі; інакше OpenClaw повертається до звичайної маршрутизації з областю дії користувача.
/focus,/unfocus,/agents,/session idle,/session max-ageі прив’язаний до потоку/acp spawnпрацюють у Matrix-кімнатах і DM.- Верхньорівневий
/focusстворює новий Matrix-потік і прив’язує його до цільової сесії, колиthreadBindings.spawnSessionsувімкнено. - Запуск
/focusабо/acp spawn --thread hereвсередині наявного Matrix-потоку прив’язує цей потік на місці.
m.notice у цій кімнаті з посиланням на запасний вихід /focus і пропозицією змінити dm.sessionScope. Сповіщення з’являється лише тоді, коли прив’язки потоків увімкнені.
Прив’язки розмов ACP
Matrix-кімнати, DM і наявні Matrix-потоки можна перетворити на довговічні ACP-робочі простори без зміни поверхні чату. Швидкий операторський потік:- Запустіть
/acp spawn codex --bind hereвсередині Matrix DM, кімнати або наявного потоку, яким хочете й надалі користуватися. - У верхньорівневому Matrix DM або кімнаті поточний DM/кімната лишається поверхнею чату, а майбутні повідомлення маршрутизуються до створеної ACP-сесії.
- Усередині наявного Matrix-потоку
--bind hereприв’язує цей поточний потік на місці. /newі/resetскидають ту саму прив’язану ACP-сесію на місці./acp closeзакриває ACP-сесію та видаляє прив’язку.
--bind hereне створює дочірній Matrix-потік.threadBindings.spawnSessionsконтролює/acp spawn --thread auto|here, де OpenClaw потрібно створити або прив’язати дочірній Matrix-потік.
Конфігурація прив’язки потоків
Matrix успадковує глобальні типові значення зsession.threadBindings, а також підтримує перевизначення для окремих каналів:
threadBindings.enabledthreadBindings.idleHoursthreadBindings.maxAgeHoursthreadBindings.spawnSessionsthreadBindings.defaultSpawnContext
- Установіть
threadBindings.spawnSessions: false, щоб заблокувати створення/прив’язування Matrix-потоків верхньорівневим/focusі/acp spawn --thread auto|here. - Установіть
threadBindings.defaultSpawnContext: "isolated", коли нативні створення потоків субагентів не мають відгалужувати батьківську стенограму.
Реакції
Matrix підтримує вихідні реакції, вхідні сповіщення про реакції та реакції-підтвердження. Інструменти вихідних реакцій контролюютьсяchannels.matrix.actions.reactions:
reactдодає реакцію до Matrix-події.reactionsперелічує поточний підсумок реакцій для Matrix-події.emoji=""видаляє власні реакції бота на цій події.remove: trueвидаляє лише вказану emoji-реакцію від бота.
| Налаштування | Порядок |
|---|---|
ackReaction | для облікового запису → канал → messages.ackReaction → запасний emoji ідентичності агента |
ackReactionScope | для облікового запису → канал → messages.ackReactionScope → типово "group-mentions" |
reactionNotifications | для облікового запису → канал → типово "own" |
reactionNotifications: "own" пересилає додані події m.reaction, коли вони спрямовані на Matrix-повідомлення, написані ботом; "off" вимикає системні події реакцій. Видалення реакцій не синтезуються в системні події, тому що Matrix представляє їх як редагування-вилучення, а не як окремі видалення m.reaction.
Контекст історії
channels.matrix.historyLimitкерує тим, скільки останніх повідомлень кімнати включається якInboundHistory, коли повідомлення Matrix-кімнати запускає агента. Повертається доmessages.groupChat.historyLimit; якщо обидва не задані, ефективне типове значення дорівнює0. Установіть0, щоб вимкнути.- Історія Matrix-кімнати стосується лише кімнати. DM продовжують використовувати звичайну історію сесії.
- Історія Matrix-кімнати є лише очікуваною: OpenClaw буферизує повідомлення кімнати, які ще не спричинили відповідь, а потім робить знімок цього вікна, коли надходить згадка або інший тригер.
- Поточне повідомлення-тригер не включається в
InboundHistory; воно лишається в основному вхідному тілі для цього ходу. - Повторні спроби тієї самої Matrix-події повторно використовують початковий знімок історії, а не зсуваються вперед до новіших повідомлень кімнати.
Видимість контексту
Matrix підтримує спільний елемент керуванняcontextVisibility для додаткового контексту кімнати, такого як отриманий текст відповіді, корені потоків і очікувана історія.
contextVisibility: "all"є типовим. Додатковий контекст зберігається таким, як отриманий.contextVisibility: "allowlist"фільтрує додатковий контекст до відправників, дозволених активними перевірками allowlist кімнати/користувача.contextVisibility: "allowlist_quote"поводиться якallowlist, але все одно зберігає одну явну цитовану відповідь.
groupPolicy, groups, groupAllowFrom і налаштувань політики DM.
Політика DM і кімнат
dm.enabled: false:
Відновлення прямих кімнат
Якщо стан direct-message розсинхронізується, OpenClaw може опинитися із застарілими зіставленнямиm.direct, які вказують на старі solo-кімнати замість активного DM. Перевірте поточне зіставлення для співрозмовника:
--account <id> для конфігурацій із кількома обліковими записами. Потік відновлення:
- надає перевагу строгому 1:1 DM, який уже зіставлений у
m.direct - повертається до будь-якого наразі приєднаного строгого 1:1 DM з цим користувачем
- створює свіжу пряму кімнату й переписує
m.direct, якщо справного DM не існує
Схвалення exec
Matrix може діяти як нативний клієнт схвалень. Налаштуйте вchannels.matrix.execApprovals (або channels.matrix.accounts.<account>.execApprovals для перевизначення окремого облікового запису):
enabled: доставляти схвалення через нативні підказки Matrix. Коли не задано або встановлено"auto", Matrix автоматично вмикається після того, як можна визначити принаймні одного approver. Установітьfalse, щоб явно вимкнути.approvers: ID користувачів Matrix (@owner:example.org), яким дозволено схвалювати exec-запити. Необов’язково - повертається доchannels.matrix.dm.allowFrom.target: куди надходять підказки."dm"(типово) надсилає в DM approver;"channel"надсилає до початкової Matrix-кімнати або DM;"both"надсилає в обидва місця.agentFilter/sessionFilter: необов’язкові allowlist для того, які агенти/сесії запускають доставку Matrix.
- Схвалення exec використовують
execApprovals.approvers, повертаючись доdm.allowFrom. - Схвалення Plugin авторизуються лише через
dm.allowFrom.
✅дозволити один раз❌відхилити♾️дозволяти завжди (коли ефективна політика exec це дозволяє)
/approve <id> allow-once, /approve <id> allow-always, /approve <id> deny.
Лише визначені затверджувачі можуть схвалювати або відхиляти. Доставка каналом для exec-схвалень містить текст команди - вмикайте channel або both лише в довірених кімнатах.
Пов’язано: Exec-схвалення.
Slash-команди
Slash-команди (/new, /reset, /model, /focus, /unfocus, /agents, /session, /acp, /approve тощо) працюють безпосередньо в DM. У кімнатах OpenClaw також розпізнає команди з префіксом власної Matrix-згадки бота, тож @bot:server /new запускає шлях команди без власного regex для згадок. Це зберігає чутливість бота до дописів у стилі кімнат @mention /command, які Element і подібні клієнти надсилають, коли користувач завершує ім’я бота клавішею Tab перед введенням команди.
Правила авторизації й далі застосовуються: відправники команд мають відповідати тим самим політикам allowlist/власника для DM або кімнат, що й звичайні повідомлення.
Кілька облікових записів
- Значення верхнього рівня
channels.matrixдіють як типові для іменованих облікових записів, якщо обліковий запис їх не перевизначає. - Обмежте успадкований запис кімнати конкретним обліковим записом за допомогою
groups.<room>.account. Записи безaccountспільні для всіх облікових записів;account: "default"і далі працює, коли типовий обліковий запис налаштовано на верхньому рівні.
- Задайте
defaultAccount, щоб вибрати іменований обліковий запис, якому надають перевагу неявна маршрутизація, зондування та CLI-команди. - Якщо у вас кілька облікових записів і один буквально названий
default, OpenClaw використовує його неявно, навіть колиdefaultAccountне задано. - Якщо у вас кілька іменованих облікових записів і типовий не вибрано, CLI-команди відмовляються вгадувати - задайте
defaultAccountабо передайте--account <id>. - Блок верхнього рівня
channels.matrix.*розглядається як неявний обліковий записdefaultлише коли його автентифікація повна (homeserver+accessTokenабоhomeserver+userId+password). Іменовані облікові записи залишаються доступними для виявлення заhomeserver+userId, щойно кешовані облікові дані покривають автентифікацію.
- Коли OpenClaw під час виправлення або налаштування підвищує конфігурацію з одним обліковим записом до конфігурації з кількома обліковими записами, він зберігає наявний іменований обліковий запис, якщо такий існує або
defaultAccountуже вказує на нього. До підвищеного облікового запису переміщуються лише ключі автентифікації/початкового завантаження Matrix; спільні ключі політики доставки залишаються на верхньому рівні.
Приватні/LAN homeserver-и
Типово OpenClaw блокує приватні/внутрішні Matrix homeserver-и для захисту від SSRF, якщо ви явно не ввімкнете це для кожного облікового запису. Якщо ваш homeserver працює на localhost, IP у LAN/Tailscale або внутрішньому імені хоста, увімкнітьnetwork.dangerouslyAllowPrivateNetwork для цього облікового запису Matrix:
http://matrix.example.org:8008, залишаються заблокованими. За можливості надавайте перевагу https://.
Проксіювання Matrix-трафіку
Якщо вашому розгортанню Matrix потрібен явний вихідний HTTP(S)-проксі, задайтеchannels.matrix.proxy:
channels.matrix.accounts.<id>.proxy.
OpenClaw використовує те саме налаштування проксі для Matrix-трафіку під час виконання і для перевірок стану облікового запису.
Визначення цілі
Matrix приймає ці форми цілей усюди, де OpenClaw запитує у вас ціль кімнати або користувача:- Користувачі:
@user:server,user:@user:serverабоmatrix:user:@user:server - Кімнати:
!room:server,room:!room:serverабоmatrix:room:!room:server - Псевдоніми:
#alias:server,channel:#alias:serverабоmatrix:channel:#alias:server
- Пошуки користувачів запитують каталог користувачів Matrix на цьому homeserver-і.
- Пошуки кімнат безпосередньо приймають явні ID кімнат і псевдоніми. Пошук за назвою приєднаної кімнати виконується за принципом best-effort і застосовується лише до allowlist-ів кімнат під час виконання, коли задано
dangerouslyAllowNameMatching: true. - Якщо назву кімнати не можна визначити як ID або псевдонім, вона ігнорується під час визначення allowlist-а під час виконання.
Довідник з конфігурації
Поля користувачів у стилі allowlist (groupAllowFrom, dm.allowFrom, groups.<room>.users) приймають повні ID користувачів Matrix (найбезпечніше). Записи користувачів, які не є ID, типово ігноруються. Якщо ви задаєте dangerouslyAllowNameMatching: true, точні збіги відображуваних імен у каталозі Matrix визначаються під час запуску і щоразу, коли allowlist змінюється під час роботи монітора; записи, які неможливо визначити, ігноруються під час виконання.
Ключі allowlist-а кімнат (groups, застаріле rooms) мають бути ID кімнат або псевдонімами. Звичайні ключі-назви кімнат типово ігноруються; dangerouslyAllowNameMatching: true відновлює best-effort пошук за назвами приєднаних кімнат.
Обліковий запис і підключення
enabled: увімкнути або вимкнути канал.name: необов’язкова відображувана мітка для облікового запису.defaultAccount: бажаний ID облікового запису, коли налаштовано кілька облікових записів Matrix.accounts: іменовані перевизначення для окремих облікових записів. Значення верхнього рівняchannels.matrixуспадковуються як типові.homeserver: URL homeserver-а, наприкладhttps://matrix.example.org.network.dangerouslyAllowPrivateNetwork: дозволити цьому обліковому запису підключатися доlocalhost, IP у LAN/Tailscale або внутрішніх імен хостів.proxy: необов’язковий URL HTTP(S)-проксі для Matrix-трафіку. Підтримується перевизначення для окремого облікового запису.userId: повний ID користувача Matrix (@bot:example.org).accessToken: токен доступу для автентифікації на основі токена. Підтримуються відкритий текст і значення SecretRef у провайдерах env/file/exec (Керування секретами).password: пароль для входу на основі пароля. Підтримуються відкритий текст і значення SecretRef.deviceId: явний ID пристрою Matrix.deviceName: відображуване ім’я пристрою, що використовується під час входу з паролем.avatarUrl: збережений URL власного аватара для синхронізації профілю та оновленьprofile set.initialSyncLimit: максимальна кількість подій, отриманих під час синхронізації запуску.
Шифрування
encryption: увімкнути E2EE. Типово:false.startupVerification:"if-unverified"(типово, коли E2EE увімкнено) або"off". Автоматично запитує самоперевірку під час запуску, коли цей пристрій неперевірений.startupVerificationCooldownHours: період очікування перед наступним автоматичним запитом під час запуску. Типово:24.
Доступ і політика
groupPolicy:"open","allowlist"або"disabled". Типово:"allowlist".groupAllowFrom: allowlist ID користувачів для трафіку кімнат.mentionPatterns: scoped regex-шаблони для згадок у кімнатах. Об’єкт із{ mode: "allow"|"deny", allowIn: [roomId, ...], denyIn: [roomId, ...] }. Керує тим, чи налаштованіagents.list[].groupChat.mentionPatternsзастосовуються для кожної кімнати.dm.enabled: колиfalse, ігнорувати всі DM. Типово:true.dm.policy:"pairing"(типово),"allowlist","open"або"disabled". Застосовується після того, як бот приєднався й класифікував кімнату як DM; не впливає на обробку запрошень.dm.allowFrom: allowlist ID користувачів для DM-трафіку.dm.sessionScope:"per-user"(типово) або"per-room".dm.threadReplies: перевизначення лише для DM для потокових відповідей ("off","inbound","always").allowBots: приймати повідомлення від інших налаштованих облікових записів ботів Matrix (trueабо"mentions").allowlistOnly: колиtrue, примусово переводить усі активні політики DM (крім"disabled") і групові політики"open"у"allowlist". Не змінює політики"disabled".dangerouslyAllowNameMatching: колиtrue, дозволяє пошук за відображуваними іменами в каталозі Matrix для записів allowlist-а користувачів і пошук за назвами приєднаних кімнат для ключів allowlist-а кімнат. Надавайте перевагу повним ID@user:serverта ID кімнат або псевдонімам.autoJoin:"always","allowlist"або"off". Типово:"off". Застосовується до кожного запрошення Matrix, включно із запрошеннями у стилі DM.autoJoinAllowlist: кімнати/псевдоніми, дозволені, колиautoJoinмає значення"allowlist". Записи псевдонімів визначаються відносно homeserver-а, а не відносно стану, заявленого запрошеною кімнатою.contextVisibility: додаткова видимість контексту ("all"типово,"allowlist","allowlist_quote").
Поведінка відповідей
replyToMode:"off","first","all"або"batched".threadReplies:"off","inbound"або"always".threadBindings: перевизначення для кожного каналу для маршрутизації та життєвого циклу сесій, прив’язаних до тредів.streaming:"off"(типово),"partial","quiet","progress"або об’єктна форма{ mode, preview: { toolProgress }, progress: { label, labels, maxLines, maxLineChars, toolProgress } }.true↔"partial",false↔"off".blockStreaming: колиtrue, завершені блоки асистента зберігаються як окремі повідомлення перебігу.markdown: необов’язкова конфігурація рендерингу Markdown для вихідного тексту.responsePrefix: необов’язковий рядок, що додається на початок вихідних відповідей.textChunkLimit: розмір вихідного фрагмента в символах, колиchunkMode: "length". Типово:4000.chunkMode:"length"(типово, розбиває за кількістю символів) або"newline"(розбиває на межах рядків).historyLimit: кількість нещодавніх повідомлень кімнати, включених якInboundHistory, коли повідомлення кімнати запускає агента. Повертається доmessages.groupChat.historyLimit; ефективне типове значення0(вимкнено).mediaMaxMb: обмеження розміру медіа в МБ для вихідних надсилань і вхідної обробки.
Налаштування реакцій
ackReaction: перевизначення ack-реакції для цього каналу/облікового запису.ackReactionScope: перевизначення області ("group-mentions"типово,"group-all","direct","all","none","off").reactionNotifications: режим сповіщень про вхідні реакції ("own"типово,"off").
Інструменти та перевизначення для окремих кімнат
actions: обмеження інструментів для кожної дії (messages,reactions,pins,profile,memberInfo,channelInfo,verification).groups: мапа політик для кожної кімнати. Ідентичність сесії використовує стабільний ID кімнати після розв’язання. (rooms— застарілий псевдонім.)groups.<room>.account: обмежує один успадкований запис кімнати конкретним обліковим записом.groups.<room>.enabled: перемикач для кожної кімнати. Колиfalse, кімната ігнорується так, ніби її немає в мапі.groups.<room>.requireMention: перевизначення вимоги згадки рівня каналу для окремої кімнати.groups.<room>.allowBots: перевизначення налаштування рівня каналу для окремої кімнати (trueабо"mentions").groups.<room>.botLoopProtection: перевизначення бюджету захисту від циклів бот-до-бота для окремої кімнати.groups.<room>.users: список дозволених відправників для окремої кімнати.groups.<room>.tools: перевизначення дозволів/заборон інструментів для окремої кімнати.groups.<room>.autoReply: перевизначення керування згадками для окремої кімнати.trueвимикає вимоги згадок для цієї кімнати;falseпримусово вмикає їх знову.groups.<room>.skills: фільтр Skills для окремої кімнати.groups.<room>.systemPrompt: фрагмент системного промпта для окремої кімнати.
Налаштування схвалення exec
execApprovals.enabled: доставляти схвалення exec через нативні для Matrix запити.execApprovals.approvers: ID користувачів Matrix, яким дозволено схвалювати. Повертається доdm.allowFrom.execApprovals.target:"dm"(типово),"channel"або"both".execApprovals.agentFilter/execApprovals.sessionFilter: необов’язкові списки дозволених агентів/сесій для доставки.
Пов’язане
- Огляд каналів - усі підтримувані канали
- Пов’язування - автентифікація DM і потік пов’язування
- Групи - поведінка групового чату та керування згадками
- Маршрутизація каналів - маршрутизація сесій для повідомлень
- Безпека - модель доступу та посилення захисту