diff --git a/docs/uk/channels/matrix.md b/docs/uk/channels/matrix.md index cde13328b..249b2f62d 100644 --- a/docs/uk/channels/matrix.md +++ b/docs/uk/channels/matrix.md @@ -1,29 +1,29 @@ --- read_when: - Налаштування Matrix в OpenClaw - - Налаштування Matrix E2EE та верифікації + - Налаштування Matrix E2EE і верифікації summary: Стан підтримки Matrix, налаштування та приклади конфігурації title: Matrix x-i18n: - generated_at: "2026-04-07T18:44:59Z" + generated_at: "2026-04-08T18:43:29Z" model: gpt-5.4 provider: openai - source_hash: ec926df79a41fa296d63f0ec7219d0f32e075628d76df9ea490e93e4c5030f83 + source_hash: 28fc13c7620c1152200315ae69c94205da6de3180c53c814dd8ce03b5cb1758f source_path: channels/matrix.md workflow: 15 --- # Matrix -Matrix — це вбудований плагін каналу Matrix для OpenClaw. +Matrix — це вбудований плагін каналу для OpenClaw. Він використовує офіційний `matrix-js-sdk` і підтримує DM, кімнати, треди, медіа, реакції, опитування, геолокацію та E2EE. ## Вбудований плагін -Matrix постачається як вбудований плагін у поточних релізах OpenClaw, тож звичайним -пакетним збіркам не потрібне окреме встановлення. +Matrix постачається як вбудований плагін у поточних випусках OpenClaw, тому звичайні +пакетні збірки не потребують окремого встановлення. -Якщо ви використовуєте старішу збірку або кастомне встановлення без Matrix, встановіть +Якщо у вас старіша збірка або користувацьке встановлення без Matrix, встановіть його вручну: Встановлення з npm: @@ -43,15 +43,15 @@ openclaw plugins install ./path/to/local/matrix-plugin ## Налаштування 1. Переконайтеся, що плагін Matrix доступний. - - У поточних пакетних релізах OpenClaw він уже вбудований. - - У старіших/кастомних встановленнях його можна додати вручну наведеними вище командами. + - Поточні пакетні випуски OpenClaw уже містять його. + - У старіших/користувацьких встановленнях його можна додати вручну командами вище. 2. Створіть обліковий запис Matrix на своєму homeserver. 3. Налаштуйте `channels.matrix` одним із варіантів: - `homeserver` + `accessToken`, або - `homeserver` + `userId` + `password`. 4. Перезапустіть gateway. 5. Почніть DM із ботом або запросіть його до кімнати. - - Нові запрошення Matrix працюють лише тоді, коли їх дозволяє `channels.matrix.autoJoin`. + - Нові запрошення Matrix працюють лише тоді, коли `channels.matrix.autoJoin` це дозволяє. Інтерактивні шляхи налаштування: @@ -60,34 +60,30 @@ openclaw channels add openclaw configure --section channels ``` -Що саме запитує майстер Matrix: +Майстер Matrix запитує: - URL homeserver -- метод автентифікації: токен доступу або пароль -- user ID лише якщо ви обираєте автентифікацію за паролем -- необов’язкова назва пристрою +- метод автентифікації: access token або пароль +- user ID (лише для автентифікації паролем) +- необов’язкову назву пристрою - чи вмикати E2EE -- чи налаштувати доступ до кімнат Matrix зараз -- чи налаштувати авто-приєднання до запрошень Matrix зараз -- коли авто-приєднання до запрошень увімкнено, чи має це бути `allowlist`, `always` або `off` +- чи налаштовувати доступ до кімнат і автоматичне приєднання за запрошенням -Важлива поведінка майстра: +Ключова поведінка майстра: -- Якщо змінні середовища автентифікації Matrix вже існують для вибраного облікового запису, і для цього облікового запису ще не збережено автентифікацію в конфігурації, майстер запропонує скористатися env, щоб зберігати автентифікацію у змінних середовища замість копіювання секретів у конфігурацію. -- Коли ви інтерактивно додаєте ще один обліковий запис Matrix, введена назва облікового запису нормалізується до ID облікового запису, який використовується в конфігурації та змінних середовища. Наприклад, `Ops Bot` стає `ops-bot`. -- Підказки allowlist для DM одразу приймають повні значення `@user:server`. Відображувані імена працюють лише тоді, коли live directory lookup знаходить одну точну відповідність; інакше майстер попросить повторити спробу з повним Matrix ID. -- Підказки allowlist для кімнат безпосередньо приймають room ID та alias. Вони також можуть live-режимом визначати назви приєднаних кімнат, але назви, які не вдалося визначити, зберігаються лише як були введені під час налаштування і пізніше ігноруються під час runtime-визначення allowlist. Надавайте перевагу `!room:server` або `#alias:server`. -- Тепер майстер показує явне попередження перед кроком авто-приєднання до запрошень, оскільки `channels.matrix.autoJoin` за замовчуванням має значення `off`; агенти не приєднуватимуться до запрошених кімнат або нових запрошень у стилі DM, якщо ви це не налаштуєте. -- У режимі авто-приєднання за allowlist використовуйте лише стабільні цілі запрошень: `!roomId:server`, `#alias:server` або `*`. Звичайні назви кімнат відхиляються. -- Ідентичність runtime-кімнати/сесії використовує стабільний Matrix room ID. Оголошені для кімнати alias використовуються лише як вхідні дані для пошуку, а не як довгостроковий ключ сесії чи стабільна ідентичність групи. -- Щоб визначити назви кімнат перед їх збереженням, використовуйте `openclaw channels resolve --channel matrix "Project Room"`. +- Якщо змінні середовища автентифікації Matrix уже існують і для цього облікового запису автентифікацію ще не збережено в конфігурації, майстер запропонує скорочений варіант із env для зберігання автентифікації у змінних середовища. +- Назви облікових записів нормалізуються до ID облікового запису. Наприклад, `Ops Bot` стає `ops-bot`. +- Записи allowlist для DM напряму приймають `@user:server`; відображувані імена працюють лише тоді, коли live lookup каталогу знаходить один точний збіг. +- Записи allowlist для кімнат напряму приймають ID кімнат і псевдоніми. Надавайте перевагу `!room:server` або `#alias:server`; нерозпізнані назви ігноруються під час виконання розв’язання allowlist. +- У режимі allowlist для автоматичного приєднання за запрошенням використовуйте лише стабільні цілі запрошення: `!roomId:server`, `#alias:server` або `*`. Звичайні назви кімнат відхиляються. +- Щоб розв’язати назви кімнат перед збереженням, використайте `openclaw channels resolve --channel matrix "Project Room"`. `channels.matrix.autoJoin` за замовчуванням має значення `off`. -Якщо залишити його невизначеним, бот не приєднуватиметься до запрошених кімнат або нових запрошень у стилі DM, тож не з’являтиметься в нових групах чи запрошених DM, якщо ви спочатку не приєднаєтеся вручну. +Якщо залишити його невстановленим, бот не приєднуватиметься до запрошених кімнат або нових запрошень у стилі DM, тому не з’являтиметься в нових групах або запрошених DM, якщо ви спершу не приєднаєте його вручну. -Встановіть `autoJoin: "allowlist"` разом із `autoJoinAllowlist`, щоб обмежити, які запрошення він приймає, або встановіть `autoJoin: "always"`, якщо хочете, щоб він приєднувався до кожного запрошення. +Установіть `autoJoin: "allowlist"` разом із `autoJoinAllowlist`, щоб обмежити, які запрошення він приймає, або встановіть `autoJoin: "always"`, якщо хочете, щоб він приєднувався до кожного запрошення. У режимі `allowlist` `autoJoinAllowlist` приймає лише `!roomId:server`, `#alias:server` або `*`. @@ -137,7 +133,7 @@ openclaw configure --section channels } ``` -Налаштування на основі пароля (після входу токен кешується): +Налаштування на основі пароля (токен кешується після входу): ```json5 { @@ -157,7 +153,7 @@ Matrix зберігає кешовані облікові дані в `~/.opencl Обліковий запис за замовчуванням використовує `credentials.json`; іменовані облікові записи використовують `credentials-.json`. Коли там існують кешовані облікові дані, OpenClaw вважає Matrix налаштованим для setup, doctor і виявлення стану каналу, навіть якщо поточну автентифікацію не задано безпосередньо в конфігурації. -Еквівалентні змінні середовища (використовуються, коли ключ конфігурації не задано): +Еквіваленти змінних середовища (використовуються, коли ключ конфігурації не задано): - `MATRIX_HOMESERVER` - `MATRIX_ACCESS_TOKEN` @@ -185,14 +181,14 @@ Matrix зберігає кешовані облікові дані в `~/.opencl - `MATRIX_OPS_X2D_BOT_HOMESERVER` - `MATRIX_OPS_X2D_BOT_ACCESS_TOKEN` -Matrix екранує розділові знаки в ID облікових записів, щоб уникнути колізій у змінних середовища з областю видимості. -Наприклад, `-` перетворюється на `_X2D_`, тож `ops-prod` відповідає `MATRIX_OPS_X2D_PROD_*`. +Matrix екранує розділові знаки в ID облікових записів, щоб уникнути колізій у змінних середовища з областю дії. +Наприклад, `-` стає `_X2D_`, тому `ops-prod` перетворюється на `MATRIX_OPS_X2D_PROD_*`. -Інтерактивний майстер пропонує скористатися ярликом змінних середовища лише тоді, коли ці змінні автентифікації вже присутні, а для вибраного облікового запису ще не збережено автентифікацію Matrix у конфігурації. +Інтерактивний майстер пропонує скорочений варіант через env vars лише тоді, коли ці змінні середовища автентифікації вже присутні, а для вибраного облікового запису автентифікацію Matrix ще не збережено в конфігурації. ## Приклад конфігурації -Це практична базова конфігурація з DM pairing, allowlist для кімнат і ввімкненим E2EE: +Це практична базова конфігурація з pairing для DM, allowlist для кімнат і ввімкненим E2EE: ```json5 { @@ -227,19 +223,17 @@ Matrix екранує розділові знаки в ID облікових з } ``` -`autoJoin` застосовується до запрошень Matrix загалом, а не лише до запрошень у кімнати/групи. -Сюди також входять нові запрошення у стилі DM. На момент запрошення OpenClaw не може надійно визначити, чи -запрошену кімнату буде зрештою оброблено як DM чи як групу, тому всі запрошення спочатку проходять через одне й те саме -рішення `autoJoin`. `dm.policy` як і раніше застосовується після того, як бот приєднався і кімнату -класифіковано як DM, тож `autoJoin` керує поведінкою приєднання, а `dm.policy` — поведінкою відповіді/доступу. +`autoJoin` застосовується до всіх запрошень Matrix, включно із запрошеннями у стилі DM. OpenClaw не може надійно +класифікувати запрошену кімнату як DM або групу в момент запрошення, тому всі запрошення спочатку проходять через `autoJoin`. +`dm.policy` застосовується після того, як бот уже приєднався і кімнату класифіковано як DM. -## Потокові попередні перегляди +## Попередній перегляд потокових відповідей -Потокова передача відповідей Matrix вмикається лише за бажанням. +Потокова передача відповідей Matrix є опціональною. -Установіть `channels.matrix.streaming` у `"partial"`, якщо хочете, щоб OpenClaw надсилав один live-попередній -перегляд відповіді, редагував цей попередній перегляд на місці під час генерації тексту моделлю, а потім завершував його, -коли відповідь буде готова: +Установіть `channels.matrix.streaming` у `"partial"`, якщо хочете, щоб OpenClaw надсилав один live preview +відповіді, редагував цей preview на місці, поки модель генерує текст, а потім фіналізував його, коли +відповідь буде готова: ```json5 { @@ -251,38 +245,38 @@ Matrix екранує розділові знаки в ID облікових з } ``` -- `streaming: "off"` — значення за замовчуванням. OpenClaw чекає фінальної відповіді й надсилає її один раз. -- `streaming: "partial"` створює одне редаговане повідомлення попереднього перегляду для поточного блоку відповіді асистента, використовуючи звичайні текстові повідомлення Matrix. Це зберігає застарілу поведінку Matrix із сповіщенням спочатку про попередній перегляд, тому стандартні клієнти можуть сповіщати про перший потоковий текст попереднього перегляду замість завершеного блоку. -- `streaming: "quiet"` створює одне редаговане тихе повідомлення-попередній перегляд для поточного блоку асистента. Використовуйте це лише тоді, коли ви також налаштовуєте push rules отримувача для фіналізованих редагувань попереднього перегляду. -- `blockStreaming: true` вмикає окремі повідомлення прогресу Matrix. Коли потоковий попередній перегляд увімкнено, Matrix зберігає live-чернетку для поточного блоку і залишає завершені блоки як окремі повідомлення. -- Коли попередній потоковий перегляд увімкнено, а `blockStreaming` вимкнено, Matrix редагує live-чернетку на місці та фіналізує ту саму подію, коли блок або хід завершуються. -- Якщо попередній перегляд більше не вміщується в одну подію Matrix, OpenClaw припиняє потоковий попередній перегляд і повертається до звичайної фінальної доставки. -- Відповіді з медіа, як і раніше, надсилають вкладення звичайним способом. Якщо застарілий попередній перегляд більше неможливо безпечно використати повторно, OpenClaw редагує його перед надсиланням фінальної відповіді з медіа. -- Редагування попереднього перегляду потребують додаткових викликів Matrix API. Залиште потокову передачу вимкненою, якщо хочете найбільш консервативну поведінку щодо rate limit. +- `streaming: "off"` — значення за замовчуванням. OpenClaw чекає на фінальну відповідь і надсилає її один раз. +- `streaming: "partial"` створює одне редаговане preview-повідомлення для поточного блоку асистента, використовуючи звичайні текстові повідомлення Matrix. Це зберігає застарілу поведінку Matrix із preview перед фіналом для сповіщень, тому стандартні клієнти можуть сповіщати про перший потоковий preview-текст, а не про завершений блок. +- `streaming: "quiet"` створює одне редаговане тихе preview-сповіщення для поточного блоку асистента. Використовуйте це лише тоді, коли ви також налаштовуєте push rules одержувача для фіналізованих редагувань preview. +- `blockStreaming: true` вмикає окремі повідомлення прогресу Matrix. Коли ввімкнено потоковий preview, Matrix зберігає live draft для поточного блоку та залишає завершені блоки як окремі повідомлення. +- Коли preview streaming увімкнено, а `blockStreaming` вимкнено, Matrix редагує live draft на місці й фіналізує цю саму подію, коли блок або хід завершується. +- Якщо preview більше не вміщується в одну подію Matrix, OpenClaw зупиняє preview streaming і повертається до звичайної фінальної доставки. +- Відповіді з медіа все одно надсилають вкладення у звичайному режимі. Якщо застарілий preview більше не можна безпечно повторно використати, OpenClaw редагує його перед надсиланням фінальної медіавідповіді. +- Редагування preview вимагають додаткових викликів Matrix API. Залишайте streaming вимкненим, якщо хочете максимально консервативну поведінку щодо обмежень швидкості. -`blockStreaming` сам по собі не вмикає чернетки попереднього перегляду. -Використовуйте `streaming: "partial"` або `streaming: "quiet"` для редагувань попереднього перегляду; потім додайте `blockStreaming: true`, лише якщо також хочете, щоб завершені блоки асистента залишалися видимими як окремі повідомлення прогресу. +`blockStreaming` сам по собі не вмикає чернеткові preview. +Використовуйте `streaming: "partial"` або `streaming: "quiet"` для редагувань preview; потім додайте `blockStreaming: true`, лише якщо ви також хочете, щоб завершені блоки асистента залишалися видимими як окремі повідомлення прогресу. -Якщо вам потрібні стандартні сповіщення Matrix без користувацьких push rules, використовуйте `streaming: "partial"` для поведінки з попереднім переглядом спочатку або залиште `streaming` вимкненим для доставки лише фінального варіанта. Із `streaming: "off"`: +Якщо вам потрібні стандартні сповіщення Matrix без користувацьких push rules, використовуйте `streaming: "partial"` для поведінки preview-first або залиште `streaming` вимкненим для доставки лише фінального варіанта. За `streaming: "off"`: -- `blockStreaming: true` надсилає кожен завершений блок як звичайне повідомлення Matrix зі сповіщенням. -- `blockStreaming: false` надсилає лише фінальну завершену відповідь як звичайне повідомлення Matrix зі сповіщенням. +- `blockStreaming: true` надсилає кожен завершений блок як звичайне сповіщувальне повідомлення Matrix. +- `blockStreaming: false` надсилає лише фінальну завершену відповідь як звичайне сповіщувальне повідомлення Matrix. -### Самохостингові push rules для тихих фіналізованих попередніх переглядів +### Self-hosted push rules для тихих фіналізованих preview -Якщо ви запускаєте власну Matrix-інфраструктуру і хочете, щоб тихі попередні перегляди сповіщали лише тоді, коли блок або -фінальна відповідь завершені, установіть `streaming: "quiet"` і додайте push rule на рівні користувача для фіналізованих редагувань попереднього перегляду. +Якщо ви запускаєте власну інфраструктуру Matrix і хочете, щоб тихі preview сповіщали лише тоді, коли блок або +фінальна відповідь завершені, установіть `streaming: "quiet"` і додайте push rule для кожного користувача для фіналізованих редагувань preview. -Зазвичай це налаштування для користувача-отримувача, а не глобальна зміна конфігурації homeserver: +Зазвичай це налаштування на рівні користувача-одержувача, а не глобальна зміна конфігурації homeserver: Швидка схема перед початком: -- користувач-отримувач = людина, яка має отримати сповіщення -- користувач-бот = обліковий запис OpenClaw Matrix, що надсилає відповідь -- для наведених нижче викликів API використовуйте access token користувача-отримувача -- у push rule зіставляйте `sender` з повним MXID користувача-бота +- recipient user = людина, яка має отримувати сповіщення +- bot user = обліковий запис Matrix OpenClaw, який надсилає відповідь +- для наведених нижче викликів API використовуйте access token користувача-одержувача +- у push rule звіряйте `sender` із повним MXID користувача-бота -1. Налаштуйте OpenClaw на використання тихих попередніх переглядів: +1. Налаштуйте OpenClaw на використання тихих preview: ```json5 { @@ -294,13 +288,13 @@ Matrix екранує розділові знаки в ID облікових з } ``` -2. Переконайтеся, що обліковий запис отримувача вже отримує звичайні push-сповіщення Matrix. Правила для тихих попередніх переглядів - працюють лише тоді, коли в цього користувача вже є робочі pusher-и/пристрої. +2. Переконайтеся, що обліковий запис одержувача вже отримує звичайні push-сповіщення Matrix. Правила тихих preview + працюють лише тоді, коли цей користувач уже має робочі pushers/пристрої. -3. Отримайте access token користувача-отримувача. - - Використовуйте токен користувача, який отримує повідомлення, а не токен бота. - - Найпростіше зазвичай повторно використати токен наявної клієнтської сесії. - - Якщо потрібно випустити новий токен, можна ввійти через стандартний Matrix Client-Server API: +3. Отримайте access token користувача-одержувача. + - Використовуйте токен користувача-одержувача, а не токен бота. + - Найпростіше зазвичай повторно використати токен наявної сесії клієнта. + - Якщо потрібно випустити новий токен, ви можете увійти через стандартний Matrix Client-Server API: ```bash curl -sS -X POST \ @@ -316,7 +310,7 @@ curl -sS -X POST \ }' ``` -4. Перевірте, що в облікового запису отримувача вже є pusher-и: +4. Перевірте, що обліковий запис одержувача вже має pushers: ```bash curl -sS \ @@ -324,10 +318,10 @@ curl -sS \ "https://matrix.example.org/_matrix/client/v3/pushers" ``` -Якщо у відповіді немає активних pusher-ів/пристроїв, спочатку виправте звичайні сповіщення Matrix, а вже потім додавайте +Якщо це повертає нуль активних pushers/пристроїв, спочатку виправте звичайні сповіщення Matrix, а вже потім додавайте наведене нижче правило OpenClaw. -OpenClaw позначає фіналізовані редагування попереднього перегляду лише для тексту так: +OpenClaw позначає фіналізовані редагування preview лише для тексту таким маркером: ```json { @@ -335,7 +329,7 @@ OpenClaw позначає фіналізовані редагування поп } ``` -5. Створіть override push rule для кожного облікового запису отримувача, який має отримувати ці сповіщення: +5. Створіть override push rule для кожного облікового запису одержувача, який має отримувати ці сповіщення: ```bash curl -sS -X PUT \ @@ -365,23 +359,23 @@ curl -sS -X PUT \ }' ``` -Замініть ці значення перед виконанням команди: +Замініть ці значення перед запуском команди: - `https://matrix.example.org`: базовий URL вашого homeserver -- `$USER_ACCESS_TOKEN`: access token користувача, який отримує повідомлення -- `openclaw-finalized-preview-botname`: rule ID, унікальний для цього бота для цього користувача-отримувача -- `@bot:example.org`: MXID вашого Matrix-бота OpenClaw, а не MXID користувача-отримувача +- `$USER_ACCESS_TOKEN`: access token користувача-одержувача +- `openclaw-finalized-preview-botname`: ID правила, унікальний для цього бота для цього користувача-одержувача +- `@bot:example.org`: MXID вашого Matrix-бота OpenClaw, а не MXID користувача-одержувача Важливо для конфігурацій із кількома ботами: -- Ключем push rules є `ruleId`. Повторний `PUT` для того самого rule ID оновлює лише це правило. -- Якщо один користувач-отримувач має отримувати сповіщення для кількох облікових записів Matrix-ботів OpenClaw, створіть окреме правило для кожного бота з унікальним rule ID для кожної відповідності sender. +- Push rules прив’язані до `ruleId`. Повторний запуск `PUT` для того самого ID правила оновлює саме це правило. +- Якщо один користувач-одержувач має отримувати сповіщення від кількох облікових записів Matrix-ботів OpenClaw, створіть по одному правилу на кожного бота з унікальним ID правила для кожного збігу sender. - Простий шаблон — `openclaw-finalized-preview-`, наприклад `openclaw-finalized-preview-ops` або `openclaw-finalized-preview-support`. Правило оцінюється відносно відправника події: -- автентифікуйтеся токеном користувача-отримувача -- зіставляйте `sender` з MXID бота OpenClaw +- автентифікуйтеся токеном користувача-одержувача +- звіряйте `sender` із MXID бота OpenClaw 6. Перевірте, що правило існує: @@ -391,10 +385,10 @@ curl -sS \ "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" ``` -7. Протестуйте потокову відповідь. У тихому режимі кімната має показати тихий чернетковий попередній перегляд, а фінальне - редагування на місці має надіслати сповіщення, коли блок або хід завершиться. +7. Протестуйте потокову відповідь. У тихому режимі в кімнаті має з’явитися тиха чернетка preview, а фінальне + редагування на місці має надіслати одне сповіщення, коли блок або хід завершиться. -Якщо згодом потрібно видалити правило, видаліть той самий rule ID токеном користувача-отримувача: +Якщо згодом потрібно видалити правило, видаліть той самий ID правила токеном користувача-одержувача: ```bash curl -sS -X DELETE \ @@ -402,39 +396,35 @@ curl -sS -X DELETE \ "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" ``` -Нотатки: +Примітки: -- Створюйте правило за допомогою access token користувача-отримувача, а не токена бота. -- Нові користувацькі правила `override` вставляються перед стандартними suppress rules, тож додатковий параметр порядку не потрібен. -- Це впливає лише на текстові редагування попереднього перегляду, які OpenClaw може безпечно фіналізувати на місці. Резервні варіанти для медіа та застарілих попередніх переглядів, як і раніше, використовують звичайну доставку Matrix. -- Якщо `GET /_matrix/client/v3/pushers` не показує pusher-ів, користувач ще не має робочої доставки push-сповіщень Matrix для цього облікового запису/пристрою. +- Створюйте правило за допомогою access token користувача-одержувача, а не токена бота. +- Нові користувацькі правила `override` вставляються перед типовими правилами придушення, тому додатковий параметр порядку не потрібен. +- Це впливає лише на редагування preview лише з текстом, які OpenClaw може безпечно фіналізувати на місці. Запасні варіанти для медіа та застарілих preview усе одно використовують звичайну доставку Matrix. +- Якщо `GET /_matrix/client/v3/pushers` показує відсутність pushers, у користувача ще немає робочої доставки push-сповіщень Matrix для цього облікового запису/пристрою. #### Synapse -Для Synapse наведеного вище налаштування зазвичай достатньо: +Для Synapse зазвичай достатньо наведеного вище налаштування: -- Жодних спеціальних змін у `homeserver.yaml` для фіналізованих сповіщень про попередній перегляд OpenClaw не потрібно. -- Якщо ваше розгортання Synapse вже надсилає звичайні push-сповіщення Matrix, основним кроком налаштування є токен користувача + виклик `pushrules` вище. -- Якщо ви запускаєте Synapse за reverse proxy або workers, переконайтеся, що `/_matrix/client/.../pushrules/` коректно надходить до Synapse. -- Якщо ви використовуєте Synapse workers, переконайтеся, що pusher-и справні. Доставка push-сповіщень обробляється головним процесом або `synapse.app.pusher` / налаштованими pusher workers. +- Жодних спеціальних змін у `homeserver.yaml` для фіналізованих preview-сповіщень OpenClaw не потрібно. +- Якщо ваш розгорнутий Synapse уже надсилає звичайні push-сповіщення Matrix, токен користувача + виклик `pushrules` вище є основним кроком налаштування. +- Якщо ви запускаєте Synapse за reverse proxy або workers, переконайтеся, що `/_matrix/client/.../pushrules/` коректно доходить до Synapse. +- Якщо ви використовуєте Synapse workers, переконайтеся, що pushers працездатні. Доставку push виконує головний процес або `synapse.app.pusher` / налаштовані pusher workers. #### Tuwunel -Для Tuwunel використовуйте той самий потік налаштування і виклик API `pushrules`, показаний вище: +Для Tuwunel використовуйте той самий процес налаштування і виклик API `push-rule`, наведені вище: -- Жодної специфічної конфігурації Tuwunel для самого маркера фіналізованого попереднього перегляду не потрібно. -- Якщо звичайні сповіщення Matrix для цього користувача вже працюють, основним кроком налаштування є токен користувача + виклик `pushrules` вище. -- Якщо здається, що сповіщення зникають, поки користувач активний на іншому пристрої, перевірте, чи увімкнено `suppress_push_when_active`. Tuwunel додав цей параметр у Tuwunel 1.4.2 12 вересня 2025 року, і він може навмисно приглушувати push-сповіщення на інші пристрої, поки один пристрій активний. +- Жодної специфічної для Tuwunel конфігурації для самого маркера фіналізованого preview не потрібно. +- Якщо звичайні сповіщення Matrix для цього користувача вже працюють, токен користувача + виклик `pushrules` вище є основним кроком налаштування. +- Якщо сповіщення ніби зникають, поки користувач активний на іншому пристрої, перевірте, чи ввімкнено `suppress_push_when_active`. Tuwunel додав цей параметр у Tuwunel 1.4.2 12 вересня 2025 року, і він може навмисно пригнічувати push на інші пристрої, поки один пристрій активний. -## Шифрування та верифікація +## Кімнати бот-до-бота -У зашифрованих (E2EE) кімнатах вихідні події зображень використовують `thumbnail_file`, тому попередні перегляди зображень шифруються разом із повним вкладенням. Незашифровані кімнати, як і раніше, використовують звичайний `thumbnail_url`. Жодної конфігурації не потрібно — плагін автоматично визначає стан E2EE. +За замовчуванням повідомлення Matrix від інших налаштованих облікових записів Matrix OpenClaw ігноруються. -### Кімнати бот-бот - -За замовчуванням повідомлення Matrix від інших налаштованих облікових записів OpenClaw Matrix ігноруються. - -Використовуйте `allowBots`, якщо ви навмисно хочете міжагентський трафік Matrix: +Використовуйте `allowBots`, якщо ви свідомо хочете міжагентний трафік Matrix: ```json5 { @@ -452,12 +442,16 @@ curl -sS -X DELETE \ ``` - `allowBots: true` приймає повідомлення від інших налаштованих облікових записів Matrix-ботів у дозволених кімнатах і DM. -- `allowBots: "mentions"` приймає ці повідомлення лише тоді, коли вони явно згадують цього бота в кімнатах. DM, як і раніше, дозволені. -- `groups..allowBots` перевизначає налаштування рівня облікового запису для однієї кімнати. -- OpenClaw, як і раніше, ігнорує повідомлення від того самого Matrix user ID, щоб уникнути циклів самовідповіді. -- Matrix тут не надає нативного прапорця бота; OpenClaw вважає "створене ботом" повідомленням, "надісланим іншим налаштованим обліковим записом Matrix на цьому gateway OpenClaw". +- `allowBots: "mentions"` приймає ці повідомлення лише тоді, коли вони явно згадують цього бота в кімнатах. DM усе одно дозволені. +- `groups..allowBots` перевизначає параметр рівня облікового запису для однієї кімнати. +- OpenClaw усе одно ігнорує повідомлення від того самого Matrix user ID, щоб уникнути циклів самовідповідей. +- Matrix тут не надає вбудованого прапорця бота; OpenClaw трактує «створено ботом» як «надіслано іншим налаштованим обліковим записом Matrix на цьому gateway OpenClaw». -Використовуйте суворі allowlist кімнат і вимоги щодо згадок, коли вмикаєте трафік бот-бот у спільних кімнатах. +Використовуйте суворі allowlist для кімнат і вимоги до згадувань, коли вмикаєте трафік бот-до-бота у спільних кімнатах. + +## Шифрування та верифікація + +У зашифрованих (E2EE) кімнатах вихідні події зображень використовують `thumbnail_file`, тож preview зображень шифруються разом із повним вкладенням. У незашифрованих кімнатах, як і раніше, використовується звичайний `thumbnail_url`. Додаткова конфігурація не потрібна — плагін автоматично визначає стан E2EE. Увімкнення шифрування: @@ -475,19 +469,19 @@ curl -sS -X DELETE \ } ``` -Перевірка статусу верифікації: +Перевірка стану верифікації: ```bash openclaw matrix verify status ``` -Докладний статус (повна діагностика): +Розширений стан (повна діагностика): ```bash openclaw matrix verify status --verbose ``` -Включити збережений recovery key у машиночитаному виводі: +Включити збережений recovery key у машиночитний вивід: ```bash openclaw matrix verify status --include-recovery-key --json @@ -499,15 +493,13 @@ openclaw matrix verify status --include-recovery-key --json openclaw matrix verify bootstrap ``` -Підтримка кількох облікових записів: використовуйте `channels.matrix.accounts` з обліковими даними для кожного облікового запису та необов’язковим `name`. Див. [Довідник із конфігурації](/uk/gateway/configuration-reference#multi-account-all-channels) щодо спільного шаблону. - -Докладна діагностика bootstrap: +Розширена діагностика bootstrap: ```bash openclaw matrix verify bootstrap --verbose ``` -Примусово скинути поточну ідентичність cross-signing і створити нову перед bootstrap: +Примусово скинути поточну ідентичність cross-signing перед bootstrap: ```bash openclaw matrix verify bootstrap --force-reset-cross-signing @@ -519,50 +511,50 @@ openclaw matrix verify bootstrap --force-reset-cross-signing openclaw matrix verify device "" ``` -Докладні відомості про верифікацію пристрою: +Розширені подробиці верифікації пристрою: ```bash openclaw matrix verify device "" --verbose ``` -Перевірити стан резервного копіювання room-key: +Перевірка стану резервного копіювання ключів кімнат: ```bash openclaw matrix verify backup status ``` -Докладна діагностика стану резервного копіювання: +Розширена діагностика стану резервного копіювання: ```bash openclaw matrix verify backup status --verbose ``` -Відновити room keys із резервної копії на сервері: +Відновити ключі кімнат із резервної копії на сервері: ```bash openclaw matrix verify backup restore ``` -Докладна діагностика відновлення: +Розширена діагностика відновлення: ```bash openclaw matrix verify backup restore --verbose ``` -Видалити поточну резервну копію на сервері та створити нову базову резервну копію. Якщо збережений -ключ резервної копії не вдається коректно завантажити, це скидання також може повторно створити secret storage, щоб -майбутні холодні запуски могли завантажити новий ключ резервної копії: +Видалити поточну резервну копію на сервері й створити нову базову резервну копію. Якщо збережений +ключ резервного копіювання не вдається коректно завантажити, це скидання також може повторно створити secret storage, щоб +майбутні cold start могли завантажувати новий ключ резервного копіювання: ```bash openclaw matrix verify backup reset --yes ``` -Усі команди `verify` за замовчуванням лаконічні (включно з тихим внутрішнім логуванням SDK) і показують докладну діагностику лише з `--verbose`. -Використовуйте `--json` для повного машиночитаного виводу під час написання скриптів. +Усі команди `verify` за замовчуванням лаконічні (включно з тихим внутрішнім логуванням SDK) і показують детальну діагностику лише з `--verbose`. +Для повного машиночитного виводу під час скриптування використовуйте `--json`. -У конфігураціях із кількома обліковими записами Matrix CLI-команди використовують неявний обліковий запис Matrix за замовчуванням, якщо ви не передасте `--account `. -Якщо налаштовано кілька іменованих облікових записів, спочатку встановіть `channels.matrix.defaultAccount`, інакше такі неявні CLI-операції зупиняться і попросять вас явно вибрати обліковий запис. -Використовуйте `--account`, коли хочете, щоб операції верифікації або роботи з пристроями були явно націлені на іменований обліковий запис: +У конфігураціях із кількома обліковими записами команди Matrix CLI використовують неявний обліковий запис Matrix за замовчуванням, якщо не передати `--account `. +Якщо ви налаштували кілька іменованих облікових записів, спочатку задайте `channels.matrix.defaultAccount`, інакше такі неявні операції CLI зупиняться й попросять вас явно вибрати обліковий запис. +Використовуйте `--account` щоразу, коли хочете, щоб операції верифікації або пристроїв явно були націлені на іменований обліковий запис: ```bash openclaw matrix verify status --account assistant @@ -572,41 +564,41 @@ openclaw matrix devices list --account assistant Коли шифрування вимкнено або недоступне для іменованого облікового запису, попередження Matrix і помилки верифікації вказують на ключ конфігурації цього облікового запису, наприклад `channels.matrix.accounts.assistant.encryption`. -### Що означає "verified" +### Що означає «verified» -OpenClaw вважає цей пристрій Matrix верифікованим лише тоді, коли його верифіковано вашою власною ідентичністю cross-signing. +OpenClaw вважає цей пристрій Matrix verified лише тоді, коли він верифікований вашою власною cross-signing identity. На практиці `openclaw matrix verify status --verbose` показує три сигнали довіри: - `Locally trusted`: цьому пристрою довіряє лише поточний клієнт - `Cross-signing verified`: SDK повідомляє, що пристрій верифіковано через cross-signing - `Signed by owner`: пристрій підписано вашим власним self-signing key -`Verified by owner` стає `yes` лише тоді, коли присутні верифікація через cross-signing або підпис власника. -Самої лише локальної довіри недостатньо, щоб OpenClaw вважав пристрій повністю верифікованим. +`Verified by owner` стає `yes` лише тоді, коли є верифікація через cross-signing або підпис власника. +Локальної довіри самої по собі недостатньо, щоб OpenClaw вважав пристрій повністю verified. ### Що робить bootstrap `openclaw matrix verify bootstrap` — це команда відновлення та налаштування для зашифрованих облікових записів Matrix. -Вона послідовно робить усе наведене нижче: +Вона робить усе наведене нижче в такому порядку: - ініціалізує secret storage, повторно використовуючи наявний recovery key, коли це можливо - ініціалізує cross-signing і завантажує відсутні публічні ключі cross-signing -- намагається позначити та cross-sign поточний пристрій -- створює нову серверну резервну копію room-key, якщо такої ще не існує +- намагається позначити й перехресно підписати поточний пристрій +- створює нову серверну резервну копію ключів кімнат, якщо її ще не існує -Якщо homeserver вимагає інтерактивну автентифікацію для завантаження ключів cross-signing, OpenClaw спочатку намагається виконати завантаження без автентифікації, потім із `m.login.dummy`, а потім із `m.login.password`, коли налаштовано `channels.matrix.password`. +Якщо homeserver вимагає інтерактивну автентифікацію для завантаження ключів cross-signing, OpenClaw спочатку пробує завантаження без автентифікації, потім із `m.login.dummy`, а потім із `m.login.password`, коли налаштовано `channels.matrix.password`. -Використовуйте `--force-reset-cross-signing` лише тоді, коли ви навмисно хочете відкинути поточну ідентичність cross-signing і створити нову. +Використовуйте `--force-reset-cross-signing` лише тоді, коли свідомо хочете відкинути поточну ідентичність cross-signing і створити нову. -Якщо ви навмисно хочете відкинути поточну резервну копію room-key і почати нову -базову резервну копію для майбутніх повідомлень, використовуйте `openclaw matrix verify backup reset --yes`. -Робіть це лише тоді, коли погоджуєтеся, що невідновлювана стара зашифрована історія -залишиться недоступною і що OpenClaw може повторно створити secret storage, якщо поточний -секрет резервної копії неможливо безпечно завантажити. +Якщо ви свідомо хочете відкинути поточну резервну копію ключів кімнат і почати нову +базову резервну копію для майбутніх повідомлень, використайте `openclaw matrix verify backup reset --yes`. +Робіть це лише тоді, коли погоджуєтеся, що невідновлювана стара зашифрована історія залишиться +недоступною і що OpenClaw може повторно створити secret storage, якщо поточний секрет +резервного копіювання неможливо безпечно завантажити. ### Нова базова резервна копія -Якщо ви хочете, щоб майбутні зашифровані повідомлення працювали й приймаєте втрату невідновлюваної старої історії, виконайте ці команди в такому порядку: +Якщо ви хочете зберегти працездатність майбутніх зашифрованих повідомлень і погоджуєтеся втратити невідновлювану стару історію, виконайте ці команди в такому порядку: ```bash openclaw matrix verify backup reset --yes @@ -619,168 +611,119 @@ openclaw matrix verify status ### Поведінка під час запуску Коли `encryption: true`, для Matrix значення `startupVerification` за замовчуванням — `"if-unverified"`. -Під час запуску, якщо цей пристрій ще не верифіковано, Matrix надішле запит на самоверифікацію в іншому Matrix-клієнті, -пропустить дубльовані запити, якщо один уже очікує, і застосує локальний cooldown перед повторною спробою після перезапусків. +Під час запуску, якщо цей пристрій усе ще не верифікований, Matrix надішле запит на самоверифікацію в іншому клієнті Matrix, +пропустить дублікати запитів, якщо один уже очікує, і застосує локальну затримку перед повторною спробою після перезапуску. Невдалі спроби запиту за замовчуванням повторюються швидше, ніж успішне створення запиту. Установіть `startupVerification: "off"`, щоб вимкнути автоматичні запити під час запуску, або налаштуйте `startupVerificationCooldownHours`, -якщо хочете коротше або довше вікно повторної спроби. +якщо хочете коротше або довше вікно повтору. Під час запуску також автоматично виконується консервативний прохід crypto bootstrap. -Цей прохід спочатку намагається повторно використати поточні secret storage і ідентичність cross-signing та уникає скидання cross-signing, якщо ви не запускаєте явний потік відновлення bootstrap. +Цей прохід спочатку намагається повторно використати поточні secret storage і cross-signing identity і уникає скидання cross-signing, якщо ви не запускаєте явний repair flow bootstrap. Якщо під час запуску виявлено пошкоджений стан bootstrap і налаштовано `channels.matrix.password`, OpenClaw може спробувати суворіший шлях відновлення. -Якщо поточний пристрій уже підписано власником, OpenClaw зберігає цю ідентичність і не скидає її автоматично. +Якщо поточний пристрій уже підписано власником, OpenClaw збереже цю identity замість автоматичного скидання. -Оновлення з попереднього публічного плагіна Matrix: +Див. [Міграція Matrix](/uk/install/migrating-matrix) щодо повного процесу оновлення, обмежень, команд відновлення та поширених повідомлень міграції. -- OpenClaw автоматично повторно використовує той самий обліковий запис Matrix, access token і ідентичність пристрою, коли це можливо. -- Перш ніж запускати будь-які важливі зміни міграції Matrix, OpenClaw створює або повторно використовує recovery snapshot у `~/Backups/openclaw-migrations/`. -- Якщо ви використовуєте кілька облікових записів Matrix, установіть `channels.matrix.defaultAccount` перед оновленням зі старого flat-store layout, щоб OpenClaw знав, який обліковий запис має отримати цей спільний застарілий стан. -- Якщо попередній плагін локально зберігав ключ дешифрування резервної копії Matrix room-key, під час запуску або `openclaw doctor --fix` його буде автоматично імпортовано в новий потік recovery key. -- Якщо access token Matrix змінився після підготовки міграції, під час запуску тепер виконується пошук коренів сховища sibling token-hash на наявність очікуваного застарілого стану відновлення перед тим, як відмовитися від автоматичного відновлення резервної копії. -- Якщо access token Matrix зміниться пізніше для того самого облікового запису, homeserver і користувача, OpenClaw тепер віддає перевагу повторному використанню найповнішого наявного кореня сховища token-hash замість старту з порожнього каталогу стану Matrix. -- Під час наступного запуску gateway резервні room keys буде автоматично відновлено до нового crypto store. -- Якщо у старому плагіні були локальні room keys, які ніколи не резервувалися, OpenClaw чітко попередить про це. Ці ключі неможливо автоматично експортувати зі старого rust crypto store, тому частина старої зашифрованої історії може залишатися недоступною, доки її не буде відновлено вручну. -- Див. [Міграція Matrix](/uk/install/migrating-matrix) щодо повного процесу оновлення, обмежень, команд відновлення та типових повідомлень міграції. +### Повідомлення верифікації -Зашифрований runtime-стан організовано за коренями token-hash для кожного облікового запису й користувача в +Matrix публікує повідомлення про життєвий цикл верифікації безпосередньо в суворій кімнаті DM для верифікації як повідомлення `m.notice`. +До них належать: + +- повідомлення про запит верифікації +- повідомлення про готовність до верифікації (з явною вказівкою «Verify by emoji») +- повідомлення про початок і завершення верифікації +- деталі SAS (emoji і десяткові значення), коли вони доступні + +Вхідні запити на верифікацію від іншого клієнта Matrix відстежуються і автоматично приймаються OpenClaw. +Для сценаріїв самоверифікації OpenClaw також автоматично запускає SAS flow, коли стає доступною верифікація emoji, і підтверджує свій бік. +Для запитів на верифікацію від іншого користувача/пристрою Matrix OpenClaw автоматично приймає запит, а потім чекає, поки SAS flow відбудеться у звичайному режимі. +Вам усе одно потрібно порівняти emoji або десятковий SAS у своєму клієнті Matrix і підтвердити там «They match», щоб завершити верифікацію. + +OpenClaw не приймає сліпо самостійно ініційовані дубльовані flow. Під час запуску пропускається створення нового запиту, якщо запит на самоверифікацію вже очікує. + +Повідомлення протоколу/системи верифікації не пересилаються до pipeline чату агента, тому вони не створюють `NO_REPLY`. + +### Гігієна пристроїв + +Старі керовані OpenClaw пристрої Matrix можуть накопичуватися в обліковому записі й ускладнювати розуміння довіри в зашифрованих кімнатах. +Щоб переглянути їх, виконайте: + +```bash +openclaw matrix devices list +``` + +Щоб видалити застарілі керовані OpenClaw пристрої: + +```bash +openclaw matrix devices prune-stale +``` + +### Crypto store + +E2EE у Matrix використовує офіційний Rust crypto path з `matrix-js-sdk` у Node, із `fake-indexeddb` як shim для IndexedDB. Crypto state зберігається у файл snapshot (`crypto-idb-snapshot.json`) і відновлюється під час запуску. Файл snapshot є чутливим станом виконання та зберігається з обмежувальними правами доступу до файлу. + +Зашифрований стан виконання зберігається в коренях для кожного облікового запису, кожного користувача та кожного хешу токена в `~/.openclaw/matrix/accounts//__//`. Цей каталог містить sync store (`bot-storage.json`), crypto store (`crypto/`), файл recovery key (`recovery-key.json`), snapshot IndexedDB (`crypto-idb-snapshot.json`), -прив’язки тредів (`thread-bindings.json`) і стан startup verification (`startup-verification.json`), -коли ці функції використовуються. +прив’язки тредів (`thread-bindings.json`) і стан startup verification (`startup-verification.json`). Коли токен змінюється, але ідентичність облікового запису залишається тією самою, OpenClaw повторно використовує найкращий наявний -корінь для цього кортежу account/homeserver/user, щоб попередній sync state, crypto state, thread bindings -і стан startup verification залишалися доступними. - -### Модель Node crypto store - -Matrix E2EE у цьому плагіні використовує офіційний шлях Rust crypto з `matrix-js-sdk` у Node. -Цей шлях очікує persistence на основі IndexedDB, якщо ви хочете, щоб crypto state зберігався після перезапусків. - -Наразі OpenClaw забезпечує це в Node так: - -- використовує `fake-indexeddb` як shim API IndexedDB, який очікує SDK -- відновлює вміст Rust crypto IndexedDB з `crypto-idb-snapshot.json` перед `initRustCrypto` -- зберігає оновлений вміст IndexedDB назад у `crypto-idb-snapshot.json` після init і під час runtime -- серіалізує відновлення та збереження snapshot відносно `crypto-idb-snapshot.json` за допомогою advisory file lock, щоб runtime-persistence gateway та CLI-обслуговування не конфліктували за один і той самий snapshot-файл - -Це plumbing для сумісності/зберігання, а не кастомна crypto-реалізація. -Файл snapshot містить чутливий runtime-стан і зберігається з обмежувальними правами доступу. -У межах моделі безпеки OpenClaw хост gateway і локальний каталог стану OpenClaw вже входять до довіреної межі оператора, тож це переважно питання операційної надійності, а не окрема віддалена межа довіри. - -Заплановане покращення: - -- додати підтримку SecretRef для постійного ключового матеріалу Matrix, щоб recovery keys і пов’язані секрети шифрування сховища могли надходити з провайдерів секретів OpenClaw, а не лише з локальних файлів +корінь для цього кортежу account/homeserver/user, щоб попередній sync state, crypto state, прив’язки тредів +і стан startup verification залишалися видимими. ## Керування профілем -Оновіть власний профіль Matrix для вибраного облікового запису за допомогою: +Оновити self-profile Matrix для вибраного облікового запису можна так: ```bash openclaw matrix profile set --name "OpenClaw Assistant" openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png ``` -Додайте `--account `, якщо хочете явно націлити команду на іменований обліковий запис Matrix. +Додайте `--account `, якщо хочете явно націлити команду на іменований обліковий запис. -Matrix безпосередньо приймає URL аватарів `mxc://`. Якщо ви передаєте URL аватара `http://` або `https://`, OpenClaw спочатку завантажує його в Matrix і зберігає визначений URL `mxc://` назад у `channels.matrix.avatarUrl` (або у вибране перевизначення облікового запису). - -## Автоматичні сповіщення про верифікацію - -Тепер Matrix публікує сповіщення про життєвий цикл верифікації безпосередньо в суворій DM-кімнаті верифікації як повідомлення `m.notice`. -Сюди входять: - -- сповіщення про запити на верифікацію -- сповіщення про готовність до верифікації (з явною підказкою "Verify by emoji") -- сповіщення про початок і завершення верифікації -- деталі SAS (emoji і decimal), коли вони доступні - -Вхідні запити на верифікацію від іншого Matrix-клієнта відстежуються та автоматично приймаються OpenClaw. -Для потоків самоверифікації OpenClaw також автоматично запускає SAS-потік, щойно стає доступною emoji-верифікація, і підтверджує свій бік. -Для запитів на верифікацію від іншого Matrix-користувача/пристрою OpenClaw автоматично приймає запит, а потім чекає, поки SAS-потік продовжиться у звичайному режимі. -Вам усе одно потрібно порівняти emoji або decimal SAS у вашому Matrix-клієнті й підтвердити там "They match", щоб завершити верифікацію. - -OpenClaw не приймає автоматично самостійно ініційовані дубльовані потоки бездумно. Під час запуску не створюється новий запит, якщо запит на самоверифікацію вже очікує. - -Сповіщення протоколу/системи верифікації не пересилаються в конвеєр чату агента, тому вони не створюють `NO_REPLY`. - -### Гігієна пристроїв - -Старі пристрої Matrix, керовані OpenClaw, можуть накопичуватися в обліковому записі й ускладнювати розуміння довіри в зашифрованих кімнатах. -Перегляньте їх за допомогою: - -```bash -openclaw matrix devices list -``` - -Видаліть застарілі пристрої Matrix, керовані OpenClaw, за допомогою: - -```bash -openclaw matrix devices prune-stale -``` - -### Відновлення Direct Room - -Якщо стан direct message виходить із синхронізації, OpenClaw може отримати застарілі зіставлення `m.direct`, які вказують на старі solo rooms замість активного DM. Перегляньте поточне зіставлення для співрозмовника за допомогою: - -```bash -openclaw matrix direct inspect --user-id @alice:example.org -``` - -Відновіть його за допомогою: - -```bash -openclaw matrix direct repair --user-id @alice:example.org -``` - -Відновлення зберігає Matrix-специфічну логіку всередині плагіна: - -- воно віддає перевагу суворому 1:1 DM, який уже зіставлено в `m.direct` -- інакше воно переходить до будь-якого поточного приєднаного суворого 1:1 DM із цим користувачем -- якщо здорового DM не існує, воно створює нову direct room і переписує `m.direct`, щоб вказувати на неї - -Потік відновлення не видаляє старі кімнати автоматично. Він лише вибирає здоровий DM і оновлює зіставлення, щоб нові надсилання Matrix, сповіщення про верифікацію та інші потоки direct message знову націлювалися на правильну кімнату. +Matrix напряму приймає URL аватара `mxc://`. Коли ви передаєте URL аватара `http://` або `https://`, OpenClaw спочатку завантажує його в Matrix, а потім зберігає розв’язаний URL `mxc://` назад у `channels.matrix.avatarUrl` (або у перевизначення вибраного облікового запису). ## Треди -Matrix підтримує нативні Matrix threads як для автоматичних відповідей, так і для надсилань через message-tool. +Matrix підтримує нативні треди Matrix як для автоматичних відповідей, так і для надсилань через message-tool. -- `dm.sessionScope: "per-user"` (за замовчуванням) зберігає маршрутизацію Matrix DM у межах відправника, тож кілька DM-кімнат можуть використовувати одну сесію, якщо вони визначаються як той самий співрозмовник. -- `dm.sessionScope: "per-room"` ізолює кожну Matrix DM-кімнату у власний ключ сесії, водночас зберігаючи звичайні перевірки автентифікації DM і allowlist. -- Явні прив’язки Matrix conversation, як і раніше, мають пріоритет над `dm.sessionScope`, тому прив’язані кімнати й треди зберігають свою вибрану цільову сесію. -- `threadReplies: "off"` зберігає відповіді на верхньому рівні й залишає вхідні тредові повідомлення на батьківській сесії. +- `dm.sessionScope: "per-user"` (типово) зберігає маршрутизацію DM Matrix у межах відправника, тому кілька кімнат DM можуть ділити одну сесію, якщо вони розв’язуються до того самого співрозмовника. +- `dm.sessionScope: "per-room"` ізолює кожну кімнату DM Matrix у власний ключ сесії, при цьому й далі використовуються звичайні перевірки автентифікації DM і allowlist. +- Явні прив’язки розмов Matrix усе одно мають пріоритет над `dm.sessionScope`, тому прив’язані кімнати й треди зберігають вибрану цільову сесію. +- `threadReplies: "off"` зберігає відповіді на верхньому рівні й залишає вхідні потокові повідомлення в батьківській сесії. - `threadReplies: "inbound"` відповідає всередині треду лише тоді, коли вхідне повідомлення вже було в цьому треді. -- `threadReplies: "always"` зберігає відповіді в кімнаті в треді, коренем якого є повідомлення-тригер, і маршрутизує цю розмову через відповідну сесію з областю треду від першого повідомлення-тригера. -- `dm.threadReplies` перевизначає налаштування верхнього рівня лише для DM. Наприклад, ви можете ізолювати треди в кімнатах, залишивши DM пласкими. -- Вхідні тредові повідомлення включають кореневе повідомлення треду як додатковий контекст агента. -- Надсилання через message-tool тепер автоматично успадковують поточний Matrix thread, коли ціль — та сама кімната або той самий DM-користувач, якщо явно не вказано `threadId`. -- Повторне використання цілі DM-користувача в межах тієї самої сесії спрацьовує лише тоді, коли метадані поточної сесії підтверджують того самого співрозмовника DM в тому самому обліковому записі Matrix; інакше OpenClaw повертається до звичайної маршрутизації в межах користувача. -- Коли OpenClaw бачить, що Matrix DM-кімната конфліктує з іншою DM-кімнатою в межах тієї самої спільної Matrix DM-сесії, він публікує одноразове `m.notice` у цій кімнаті з аварійним варіантом `/focus`, коли ввімкнено прив’язки тредів і підказку `dm.sessionScope`. -- Runtime-прив’язки тредів підтримуються для Matrix. `/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язане до треду `/acp spawn` тепер працюють у Matrix-кімнатах і DM. -- Верхньорівневий Matrix room/DM `/focus` створює новий Matrix thread і прив’язує його до цільової сесії, коли `threadBindings.spawnSubagentSessions=true`. -- Запуск `/focus` або `/acp spawn --thread here` всередині наявного Matrix thread натомість прив’язує поточний thread. +- `threadReplies: "always"` зберігає відповіді в кімнаті в треді, коренем якого є повідомлення-тригер, і маршрутизує цю розмову через відповідну сесію в межах треду від першого повідомлення-тригера. +- `dm.threadReplies` перевизначає параметр верхнього рівня лише для DM. Наприклад, ви можете зберегти ізоляцію тредів у кімнатах, але лишити DM пласкими. +- Вхідні повідомлення в тредах включають кореневе повідомлення треду як додатковий контекст агента. +- Надсилання через message-tool автоматично успадковують поточний тред Matrix, коли ціль — та сама кімната або той самий користувацький DM-таргет, якщо не вказано явний `threadId`. +- Повторне використання цільового DM користувача в межах тієї самої сесії спрацьовує лише тоді, коли поточні метадані сесії підтверджують того самого DM-співрозмовника в тому самому обліковому записі Matrix; інакше OpenClaw повертається до звичайної маршрутизації в межах користувача. +- Коли OpenClaw бачить, що кімната DM Matrix конфліктує з іншою кімнатою DM у тій самій спільній сесії DM Matrix, він публікує в цій кімнаті одноразове `m.notice` з запасним варіантом `/focus`, коли прив’язки тредів увімкнено, а також підказкою `dm.sessionScope`. +- Прив’язки тредів під час виконання підтримуються для Matrix. `/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язаний до треду `/acp spawn` працюють у кімнатах і DM Matrix. +- `/focus` на верхньому рівні в кімнаті/DM Matrix створює новий тред Matrix і прив’язує його до цільової сесії, коли `threadBindings.spawnSubagentSessions=true`. +- Запуск `/focus` або `/acp spawn --thread here` всередині наявного треду Matrix натомість прив’язує саме цей поточний тред. -## ACP conversation bindings +## Прив’язки розмов ACP -Matrix rooms, DM і наявні Matrix threads можна перетворити на довговічні робочі простори ACP без зміни поверхні чату. +Кімнати, DM та наявні треди Matrix можна перетворювати на довготривалі робочі простори ACP без зміни поверхні чату. -Швидкий потік для оператора: +Швидкий операторський сценарій: -- Виконайте `/acp spawn codex --bind here` усередині Matrix DM, кімнати або наявного треду, який хочете й надалі використовувати. -- У верхньорівневому Matrix DM або кімнаті поточний DM/кімната залишається поверхнею чату, а майбутні повідомлення маршрутизуються до створеної ACP-сесії. -- Усередині наявного Matrix thread `--bind here` прив’язує поточний thread на місці. +- Запустіть `/acp spawn codex --bind here` усередині DM Matrix, кімнати або наявного треду, який хочете й надалі використовувати. +- На верхньому рівні в DM або кімнаті Matrix поточний DM/кімната залишається поверхнею чату, а майбутні повідомлення маршрутизуються до створеної ACP-сесії. +- Усередині наявного треду Matrix `--bind here` прив’язує саме цей поточний тред. - `/new` і `/reset` скидають ту саму прив’язану ACP-сесію на місці. - `/acp close` закриває ACP-сесію й видаляє прив’язку. -Нотатки: +Примітки: -- `--bind here` не створює дочірній Matrix thread. -- `threadBindings.spawnAcpSessions` потрібен лише для `/acp spawn --thread auto|here`, коли OpenClaw має створити або прив’язати дочірній Matrix thread. +- `--bind here` не створює дочірній тред Matrix. +- `threadBindings.spawnAcpSessions` потрібен лише для `/acp spawn --thread auto|here`, коли OpenClaw має створити або прив’язати дочірній тред Matrix. ### Конфігурація прив’язки тредів -Matrix успадковує глобальні значення за замовчуванням з `session.threadBindings`, а також підтримує перевизначення для каналу: +Matrix успадковує глобальні значення за замовчуванням з `session.threadBindings` і також підтримує перевизначення для каналу: - `threadBindings.enabled` - `threadBindings.idleHours` @@ -788,29 +731,29 @@ Matrix успадковує глобальні значення за замов - `threadBindings.spawnSubagentSessions` - `threadBindings.spawnAcpSessions` -Прапорці породження для Matrix thread-bound є opt-in: +Прапорці створення, прив’язаного до тредів Matrix, вмикаються окремо: -- Установіть `threadBindings.spawnSubagentSessions: true`, щоб дозволити верхньорівневому `/focus` створювати й прив’язувати нові Matrix threads. -- Установіть `threadBindings.spawnAcpSessions: true`, щоб дозволити `/acp spawn --thread auto|here` прив’язувати ACP-сесії до Matrix threads. +- Установіть `threadBindings.spawnSubagentSessions: true`, щоб дозволити `/focus` верхнього рівня створювати й прив’язувати нові треди Matrix. +- Установіть `threadBindings.spawnAcpSessions: true`, щоб дозволити `/acp spawn --thread auto|here` прив’язувати ACP-сесії до тредів Matrix. ## Реакції -Matrix підтримує вихідні дії з реакціями, вхідні сповіщення про реакції та вхідні реакції-підтвердження. +Matrix підтримує вихідні дії реакцій, вхідні сповіщення про реакції та вхідні реакції підтвердження. -- Інструментарій вихідних реакцій керується через `channels["matrix"].actions.reactions`. +- Інструментарій вихідних реакцій обмежується `channels["matrix"].actions.reactions`. - `react` додає реакцію до конкретної події Matrix. - `reactions` показує поточне зведення реакцій для конкретної події Matrix. -- `emoji=""` видаляє власні реакції облікового запису бота на цій події. +- `emoji=""` видаляє власні реакції облікового запису бота на цю подію. - `remove: true` видаляє лише вказану реакцію emoji від облікового запису бота. -Область реакцій-підтверджень визначається за стандартним порядком OpenClaw: +Область реакцій підтвердження визначається в такому порядку: - `channels["matrix"].accounts..ackReaction` - `channels["matrix"].ackReaction` - `messages.ackReaction` -- резервний emoji з ідентичності агента +- запасний варіант emoji ідентичності агента -Область `ackReactionScope` визначається в такому порядку: +Область дії реакцій підтвердження визначається в такому порядку: - `channels["matrix"].accounts..ackReactionScope` - `channels["matrix"].ackReactionScope` @@ -822,33 +765,32 @@ Matrix підтримує вихідні дії з реакціями, вхід - `channels["matrix"].reactionNotifications` - значення за замовчуванням: `own` -Поточна поведінка: +Поведінка: - `reactionNotifications: "own"` пересилає додані події `m.reaction`, коли вони націлені на створені ботом повідомлення Matrix. - `reactionNotifications: "off"` вимикає системні події реакцій. -- Видалення реакцій досі не синтезується в системні події, тому що Matrix показує їх як redactions, а не як окремі видалення `m.reaction`. +- Видалення реакцій не синтезуються в системні події, тому що Matrix відображає їх як редагування, а не як окремі видалення `m.reaction`. ## Контекст історії -- `channels.matrix.historyLimit` керує тим, скільки останніх повідомлень кімнати включається як `InboundHistory`, коли повідомлення Matrix у кімнаті активує агента. -- Використовується fallback до `messages.groupChat.historyLimit`. Якщо обидва значення не задані, ефективне значення за замовчуванням — `0`, тому повідомлення кімнат із вимогою згадки не буферизуються. Установіть `0`, щоб вимкнути. -- Історія кімнат Matrix — лише для кімнат. DM і далі використовують звичайну історію сесії. -- Історія кімнат Matrix — лише для очікуваних повідомлень: OpenClaw буферизує повідомлення кімнати, які ще не спричинили відповідь, а потім фіксує це вікно, коли надходить згадка чи інший тригер. -- Поточне повідомлення-тригер не включається до `InboundHistory`; воно залишається в основному вхідному тілі цього ходу. +- `channels.matrix.historyLimit` визначає, скільки останніх повідомлень кімнати включати як `InboundHistory`, коли повідомлення Matrix у кімнаті запускає агента. Запасний варіант — `messages.groupChat.historyLimit`; якщо не задано обидва, ефективне значення за замовчуванням — `0`. Установіть `0`, щоб вимкнути. +- Історія кімнати Matrix стосується лише кімнати. DM і далі використовують звичайну історію сесії. +- Історія кімнати Matrix — лише для pending: OpenClaw буферизує повідомлення кімнати, які ще не викликали відповідь, а потім знімає snapshot цього вікна, коли надходить згадка або інший тригер. +- Поточне повідомлення-тригер не включається до `InboundHistory`; воно залишається в основному вхідному тілі для цього ходу. - Повторні спроби для тієї самої події Matrix повторно використовують початковий snapshot історії замість зсуву вперед до новіших повідомлень кімнати. ## Видимість контексту -Matrix підтримує спільний елемент керування `contextVisibility` для додаткового контексту кімнати, наприклад отриманого тексту відповіді, коренів тредів і очікуваної історії. +Matrix підтримує спільний елемент керування `contextVisibility` для додаткового контексту кімнати, такого як отриманий текст відповіді, корені тредів і історія pending. - `contextVisibility: "all"` — значення за замовчуванням. Додатковий контекст зберігається як отримано. - `contextVisibility: "allowlist"` фільтрує додатковий контекст за відправниками, дозволеними активними перевірками allowlist кімнати/користувача. - `contextVisibility: "allowlist_quote"` працює як `allowlist`, але все одно зберігає одну явну цитовану відповідь. -Це налаштування впливає на видимість додаткового контексту, а не на те, чи може саме вхідне повідомлення спричинити відповідь. -Авторизація тригера, як і раніше, визначається `groupPolicy`, `groups`, `groupAllowFrom` і налаштуваннями політики DM. +Цей параметр впливає на видимість додаткового контексту, а не на те, чи може саме вхідне повідомлення запускати відповідь. +Авторизація тригера, як і раніше, походить із параметрів `groupPolicy`, `groups`, `groupAllowFrom` і DM policy. -## Приклад політики DM і кімнат +## Політика DM і кімнат ```json5 { @@ -871,56 +813,76 @@ Matrix підтримує спільний елемент керування `co } ``` -Див. [Групи](/uk/channels/groups) щодо поведінки із згадками та allowlist. +Див. [Групи](/uk/channels/groups) щодо обмеження згадками та поведінки allowlist. -Приклад pairing для Matrix DM: +Приклад pairing для DM Matrix: ```bash openclaw pairing list matrix openclaw pairing approve matrix ``` -Якщо непідтверджений користувач Matrix продовжує вам писати до схвалення, OpenClaw повторно використовує той самий очікуваний код pairing і може знову надіслати відповідь-нагадування після короткого cooldown замість створення нового коду. +Якщо непідтверджений користувач Matrix продовжує писати вам до схвалення, OpenClaw повторно використовує той самий pending pairing code і може знову надіслати нагадування після короткої затримки замість створення нового коду. -Див. [Pairing](/uk/channels/pairing) щодо спільного потоку DM pairing і структури зберігання. +Див. [Pairing](/uk/channels/pairing) щодо спільного процесу pairing для DM та структури зберігання. + +## Відновлення direct room + +Якщо стан direct-message розсинхронізується, OpenClaw може отримати застарілі зіставлення `m.direct`, які вказують на старі індивідуальні кімнати замість актуального DM. Щоб переглянути поточне зіставлення для співрозмовника, виконайте: + +```bash +openclaw matrix direct inspect --user-id @alice:example.org +``` + +Щоб виправити його: + +```bash +openclaw matrix direct repair --user-id @alice:example.org +``` + +Процес відновлення: + +- надає перевагу суворому DM 1:1, який уже зіставлено в `m.direct` +- якщо такого немає, переходить до будь-якого поточного приєднаного суворого DM 1:1 з цим користувачем +- створює нову direct room і переписує `m.direct`, якщо справного DM не існує + +Процес відновлення не видаляє старі кімнати автоматично. Він лише вибирає справний DM і оновлює зіставлення, щоб нові надсилання Matrix, повідомлення верифікації та інші direct-message сценарії знову спрямовувалися в правильну кімнату. ## Підтвердження exec -Matrix може виступати нативним клієнтом підтвердження для облікового запису Matrix. Нативні -перемикачі маршрутизації DM/каналу, як і раніше, знаходяться в конфігурації підтверджень exec: +Matrix може виступати нативним клієнтом підтверджень для облікового запису Matrix. Нативні +параметри маршрутизації DM/каналу, як і раніше, розташовані в конфігурації підтвердження exec: - `channels.matrix.execApprovals.enabled` -- `channels.matrix.execApprovals.approvers` (необов’язково; fallback до `channels.matrix.dm.allowFrom`) -- `channels.matrix.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) +- `channels.matrix.execApprovals.approvers` (необов’язково; запасний варіант — `channels.matrix.dm.allowFrom`) +- `channels.matrix.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `channels.matrix.execApprovals.agentFilter` - `channels.matrix.execApprovals.sessionFilter` -Особи, що підтверджують, мають бути Matrix user ID, наприклад `@owner:example.org`. Matrix автоматично вмикає нативні підтвердження, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного approver. Підтвердження exec спочатку використовують `execApprovals.approvers` і можуть fallback до `channels.matrix.dm.allowFrom`. Підтвердження плагіна авторизуються через `channels.matrix.dm.allowFrom`. Установіть `enabled: false`, щоб явно вимкнути Matrix як нативний клієнт підтвердження. В іншому разі запити на підтвердження fallback до інших налаштованих маршрутів підтвердження або до fallback policy для підтверджень. +Схвалювачами мають бути Matrix user ID на кшталт `@owner:example.org`. Matrix автоматично вмикає нативні підтвердження, коли `enabled` не задано або має значення `"auto"` і можна розв’язати принаймні одного схвалювача. Підтвердження exec спочатку використовують `execApprovals.approvers` і можуть повертатися до `channels.matrix.dm.allowFrom`. Підтвердження плагінів авторизуються через `channels.matrix.dm.allowFrom`. Установіть `enabled: false`, щоб явно вимкнути Matrix як нативний клієнт підтверджень. В іншому разі запити на підтвердження повертаються до інших налаштованих маршрутів підтвердження або політики запасного підтвердження. -Нативна маршрутизація Matrix тепер підтримує обидва типи підтверджень: +Нативна маршрутизація Matrix підтримує обидва типи підтверджень: -- `channels.matrix.execApprovals.*` керує нативним режимом fanout DM/каналу для запитів на підтвердження в Matrix. -- Підтвердження exec використовують набір approver-ів для exec з `execApprovals.approvers` або `channels.matrix.dm.allowFrom`. -- Підтвердження плагіна використовують allowlist Matrix DM з `channels.matrix.dm.allowFrom`. -- Скорочення через реакції Matrix та оновлення повідомлень застосовуються і до підтверджень exec, і до підтверджень плагіна. +- `channels.matrix.execApprovals.*` керує нативним режимом fanout DM/каналу для запитів підтвердження Matrix. +- Підтвердження exec використовують набір схвалювачів exec з `execApprovals.approvers` або `channels.matrix.dm.allowFrom`. +- Підтвердження плагінів використовують allowlist DM Matrix з `channels.matrix.dm.allowFrom`. +- Скорочення через реакції Matrix і оновлення повідомлень застосовуються як до підтверджень exec, так і до підтверджень плагінів. Правила доставки: -- `target: "dm"` надсилає запити на підтвердження в DM approver-ів -- `target: "channel"` надсилає запит назад до вихідної Matrix-кімнати або DM -- `target: "both"` надсилає і в DM approver-ів, і у вихідну Matrix-кімнату або DM +- `target: "dm"` надсилає запити підтвердження в DM схвалювачів +- `target: "channel"` надсилає запит назад до початкової кімнати або DM Matrix +- `target: "both"` надсилає в DM схвалювачів і в початкову кімнату або DM Matrix -Запити на підтвердження Matrix ініціалізують скорочення через реакції на основному повідомленні підтвердження: +Запити підтвердження Matrix додають скорочення через реакції до основного повідомлення підтвердження: - `✅` = дозволити один раз -- `❌` = заборонити -- `♾️` = дозволити завжди, якщо таке рішення дозволене ефективною політикою exec +- `❌` = відхилити +- `♾️` = дозволити завжди, коли таке рішення дозволяє ефективна політика exec -Особи, що підтверджують, можуть реагувати на це повідомлення або використовувати резервні slash commands: `/approve allow-once`, `/approve allow-always` або `/approve deny`. +Схвалювачі можуть реагувати на це повідомлення або скористатися запасними slash-командами: `/approve allow-once`, `/approve allow-always` або `/approve deny`. -Лише визначені approver-и можуть дозволяти або забороняти. Для підтверджень exec доставка в канал включає текст команди, тож вмикайте `channel` або `both` лише в довірених кімнатах. - -Запити на підтвердження Matrix повторно використовують спільний core approval planner. Matrix-специфічна нативна поверхня обробляє маршрутизацію кімната/DM, реакції та поведінку надсилання/оновлення/видалення повідомлень як для підтверджень exec, так і для підтверджень плагіна. +Лише розв’язані схвалювачі можуть дозволяти або відхиляти. Для підтверджень exec доставка в канал включає текст команди, тому вмикайте `channel` або `both` лише в довірених кімнатах. Перевизначення для облікового запису: @@ -928,7 +890,7 @@ Matrix може виступати нативним клієнтом підтв Пов’язана документація: [Підтвердження exec](/uk/tools/exec-approvals) -## Приклад кількох облікових записів +## Кілька облікових записів ```json5 { @@ -958,19 +920,21 @@ Matrix може виступати нативним клієнтом підтв } ``` -Значення верхнього рівня `channels.matrix` діють як значення за замовчуванням для іменованих облікових записів, якщо обліковий запис не перевизначає їх. -Ви можете обмежити успадкований запис кімнати одним обліковим записом Matrix через `groups..account` (або застарілий `rooms..account`). -Записи без `account` залишаються спільними для всіх облікових записів Matrix, а записи з `account: "default"` і далі працюють, коли обліковий запис за замовчуванням налаштований безпосередньо на верхньому рівні `channels.matrix.*`. -Часткові спільні значення автентифікації за замовчуванням самі по собі не створюють окремий неявний обліковий запис за замовчуванням. OpenClaw синтезує верхньорівневий обліковий запис `default` лише тоді, коли для цього значення за замовчуванням є актуальна автентифікація (`homeserver` плюс `accessToken` або `homeserver` плюс `userId` і `password`); іменовані облікові записи все одно можуть залишатися доступними через `homeserver` плюс `userId`, коли кешовані облікові дані пізніше задовольняють автентифікацію. -Якщо в Matrix уже є рівно один іменований обліковий запис або `defaultAccount` вказує на наявний ключ іменованого облікового запису, просування від однооблікового до багатооблікового режиму під час відновлення/налаштування зберігає цей обліковий запис замість створення нового запису `accounts.default`. У цей підвищений обліковий запис переміщуються лише ключі Matrix auth/bootstrap; спільні ключі політики доставки залишаються на верхньому рівні. -Установіть `defaultAccount`, якщо хочете, щоб OpenClaw віддавав перевагу одному іменованому обліковому запису Matrix для неявної маршрутизації, probe і CLI-операцій. -Якщо налаштовано кілька іменованих облікових записів, установіть `defaultAccount` або передавайте `--account ` для CLI-команд, що покладаються на неявний вибір облікового запису. -Передавайте `--account ` до `openclaw matrix verify ...` і `openclaw matrix devices ...`, якщо хочете перевизначити цей неявний вибір для однієї команди. +Значення верхнього рівня `channels.matrix` діють як значення за замовчуванням для іменованих облікових записів, якщо обліковий запис не задає перевизначення. +Ви можете обмежити успадковані записи кімнат одним обліковим записом Matrix через `groups..account`. +Записи без `account` залишаються спільними для всіх облікових записів Matrix, а записи з `account: "default"` і далі працюють, коли обліковий запис за замовчуванням налаштовано безпосередньо на верхньому рівні `channels.matrix.*`. +Часткові спільні значення автентифікації за замовчуванням самі собою не створюють окремий неявний обліковий запис за замовчуванням. OpenClaw синтезує верхньорівневий обліковий запис `default` лише тоді, коли цей обліковий запис за замовчуванням має актуальну автентифікацію (`homeserver` плюс `accessToken`, або `homeserver` плюс `userId` і `password`); іменовані облікові записи можуть і далі лишатися видимими з `homeserver` плюс `userId`, якщо кешовані облікові дані пізніше задовольняють вимоги автентифікації. +Якщо в Matrix уже є рівно один іменований обліковий запис або `defaultAccount` вказує на наявний ключ іменованого облікового запису, під час repair/setup-просування з одного облікового запису до кількох зберігається цей обліковий запис замість створення нового запису `accounts.default`. У цей підвищений обліковий запис переміщуються лише ключі автентифікації/bootstrap Matrix; спільні ключі політики доставки залишаються на верхньому рівні. +Установіть `defaultAccount`, якщо хочете, щоб OpenClaw віддавав перевагу одному іменованому обліковому запису Matrix для неявної маршрутизації, probing і операцій CLI. +Якщо ви налаштовуєте кілька іменованих облікових записів, задайте `defaultAccount` або передавайте `--account ` для команд CLI, які покладаються на неявний вибір облікового запису. +Передавайте `--account ` до `openclaw matrix verify ...` і `openclaw matrix devices ...`, коли хочете перевизначити цей неявний вибір для однієї команди. -## Приватні/LAN homeserver-и +Див. [Довідник із конфігурації](/uk/gateway/configuration-reference#multi-account-all-channels) щодо спільного шаблону для кількох облікових записів. -За замовчуванням OpenClaw блокує приватні/внутрішні Matrix homeserver-и для захисту від SSRF, якщо ви -явно не надасте дозвіл окремо для кожного облікового запису. +## Приватні/LAN homeserver + +За замовчуванням OpenClaw блокує приватні/внутрішні homeserver Matrix для захисту від SSRF, якщо ви +явно не ввімкнете це окремо для кожного облікового запису. Якщо ваш homeserver працює на localhost, LAN/Tailscale IP або внутрішньому імені хоста, увімкніть `network.dangerouslyAllowPrivateNetwork` для цього облікового запису Matrix: @@ -999,12 +963,12 @@ openclaw matrix account add \ --access-token syt_ops_xxx ``` -Цей opt-in дозволяє лише довірені приватні/внутрішні цілі. Публічні незашифровані homeserver-и, наприклад -`http://matrix.example.org:8008`, як і раніше, блокуються. За можливості надавайте перевагу `https://`. +Цей opt-in дозволяє лише довірені приватні/внутрішні цілі. Публічні незашифровані homeserver, такі як +`http://matrix.example.org:8008`, як і раніше, блокуються. За можливості віддавайте перевагу `https://`. ## Проксіювання трафіку Matrix -Якщо вашому розгортанню Matrix потрібен явний вихідний HTTP(S)-проксі, установіть `channels.matrix.proxy`: +Якщо вашому розгортанню Matrix потрібен явний вихідний HTTP(S)-проксі, задайте `channels.matrix.proxy`: ```json5 { @@ -1018,22 +982,22 @@ openclaw matrix account add \ } ``` -Іменовані облікові записи можуть перевизначати значення верхнього рівня через `channels.matrix.accounts..proxy`. -OpenClaw використовує те саме налаштування проксі для runtime-трафіку Matrix і probe стану облікового запису. +Іменовані облікові записи можуть перевизначати верхньорівневе значення за замовчуванням через `channels.matrix.accounts..proxy`. +OpenClaw використовує те саме значення проксі як для трафіку Matrix під час виконання, так і для probes стану облікового запису. -## Визначення цілі +## Розв’язання цілей -Matrix приймає такі форми цілей скрізь, де OpenClaw просить вас указати ціль кімнати або користувача: +Matrix приймає такі форми цілей усюди, де OpenClaw просить вас указати ціль кімнати або користувача: - Користувачі: `@user:server`, `user:@user:server` або `matrix:user:@user:server` - Кімнати: `!room:server`, `room:!room:server` або `matrix:room:!room:server` -- Alias: `#alias:server`, `channel:#alias:server` або `matrix:channel:#alias:server` +- Псевдоніми: `#alias:server`, `channel:#alias:server` або `matrix:channel:#alias:server` -Live directory lookup використовує обліковий запис Matrix, у який виконано вхід: +Live lookup каталогу використовує обліковий запис Matrix, у який виконано вхід: -- Пошук користувачів виконує запити до каталогу користувачів Matrix на цьому homeserver. -- Пошук кімнат безпосередньо приймає явні room ID та alias, а потім за потреби переходить до пошуку за назвами приєднаних кімнат для цього облікового запису. -- Пошук за назвою приєднаної кімнати є best-effort. Якщо назву кімнати не вдається визначити як ID або alias, її буде проігноровано під час runtime-визначення allowlist. +- Пошук користувачів виконує запит до каталогу користувачів Matrix на цьому homeserver. +- Пошук кімнат напряму приймає явні ID кімнат і псевдоніми, а потім за потреби переходить до пошуку за назвами приєднаних кімнат для цього облікового запису. +- Пошук за назвами приєднаних кімнат виконується за принципом best-effort. Якщо назву кімнати не вдається розв’язати до ID або псевдоніма, вона ігнорується під час виконання розв’язання allowlist. ## Довідник із конфігурації @@ -1041,64 +1005,63 @@ Live directory lookup використовує обліковий запис Mat - `name`: необов’язкова мітка для облікового запису. - `defaultAccount`: бажаний ID облікового запису, коли налаштовано кілька облікових записів Matrix. - `homeserver`: URL homeserver, наприклад `https://matrix.example.org`. -- `network.dangerouslyAllowPrivateNetwork`: дозволяє цьому обліковому запису Matrix підключатися до приватних/внутрішніх homeserver-ів. Увімкніть це, коли homeserver визначається як `localhost`, LAN/Tailscale IP або внутрішній хост, наприклад `matrix-synapse`. -- `proxy`: необов’язковий URL HTTP(S)-проксі для трафіку Matrix. Іменовані облікові записи можуть перевизначати значення верхнього рівня власним `proxy`. +- `network.dangerouslyAllowPrivateNetwork`: дозволити цьому обліковому запису Matrix підключатися до приватних/внутрішніх homeserver. Увімкніть це, коли homeserver розв’язується до `localhost`, LAN/Tailscale IP або внутрішнього хоста, такого як `matrix-synapse`. +- `proxy`: необов’язковий URL HTTP(S)-проксі для трафіку Matrix. Іменовані облікові записи можуть перевизначати верхньорівневе значення за замовчуванням власним `proxy`. - `userId`: повний Matrix user ID, наприклад `@bot:example.org`. -- `accessToken`: access token для автентифікації на основі токена. Для `channels.matrix.accessToken` і `channels.matrix.accounts..accessToken` підтримуються звичайні текстові значення та значення SecretRef у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). -- `password`: пароль для входу за паролем. Підтримуються звичайні текстові значення та значення SecretRef. +- `accessToken`: access token для автентифікації на основі токена. Для `channels.matrix.accessToken` і `channels.matrix.accounts..accessToken` у провайдерах env/file/exec підтримуються як відкриті текстові значення, так і значення SecretRef. Див. [Керування секретами](/uk/gateway/secrets). +- `password`: пароль для входу на основі пароля. Підтримуються значення у відкритому тексті та значення SecretRef. - `deviceId`: явний Matrix device ID. - `deviceName`: відображувана назва пристрою для входу за паролем. -- `avatarUrl`: збережений URL власного аватара для синхронізації профілю та оновлень `set-profile`. -- `initialSyncLimit`: ліміт подій синхронізації під час запуску. +- `avatarUrl`: збережений URL власного аватара для синхронізації профілю та оновлень `profile set`. +- `initialSyncLimit`: максимальна кількість подій, які отримуються під час початкової синхронізації при запуску. - `encryption`: увімкнути E2EE. -- `allowlistOnly`: примусово вмикати режим лише allowlist для DM і кімнат. -- `allowBots`: дозволяти повідомлення від інших налаштованих облікових записів OpenClaw Matrix (`true` або `"mentions"`). +- `allowlistOnly`: коли має значення `true`, переводить політику кімнат `open` у `allowlist` і примусово переводить усі активні політики DM, крім `disabled` (включно з `pairing` і `open`), у `allowlist`. Не впливає на політики `disabled`. +- `allowBots`: дозволити повідомлення від інших налаштованих облікових записів Matrix OpenClaw (`true` або `"mentions"`). - `groupPolicy`: `open`, `allowlist` або `disabled`. - `contextVisibility`: режим видимості додаткового контексту кімнати (`all`, `allowlist`, `allowlist_quote`). -- `groupAllowFrom`: allowlist user ID для трафіку кімнат. -- Записи `groupAllowFrom` мають бути повними Matrix user ID. Невизначені імена ігноруються під час runtime. -- `historyLimit`: максимальна кількість повідомлень кімнати для включення в контекст історії групи. Використовується fallback до `messages.groupChat.historyLimit`; якщо обидва значення не задані, ефективне значення за замовчуванням — `0`. Установіть `0`, щоб вимкнути. +- `groupAllowFrom`: allowlist user ID для трафіку кімнат. Записи мають бути повними Matrix user ID; нерозв’язані імена ігноруються під час виконання. +- `historyLimit`: максимальна кількість повідомлень кімнати, які включаються як контекст історії групи. Запасний варіант — `messages.groupChat.historyLimit`; якщо не задано обидва, ефективне значення за замовчуванням — `0`. Установіть `0`, щоб вимкнути. - `replyToMode`: `off`, `first`, `all` або `batched`. - `markdown`: необов’язкова конфігурація рендерингу Markdown для вихідного тексту Matrix. -- `streaming`: `off` (за замовчуванням), `partial`, `quiet`, `true` або `false`. `partial` і `true` вмикають оновлення чернеток із попереднім переглядом через звичайні текстові повідомлення Matrix. `quiet` використовує попередні перегляди у вигляді сповіщень без нотифікації для самохостингових налаштувань push rules. -- `blockStreaming`: `true` вмикає окремі повідомлення прогресу для завершених блоків асистента, поки активна потокова передача чернетки попереднього перегляду. +- `streaming`: `off` (типово), `"partial"`, `"quiet"`, `true` або `false`. `"partial"` і `true` вмикають оновлення чернеток у режимі preview-first зі звичайними текстовими повідомленнями Matrix. `"quiet"` використовує тихі preview-сповіщення для self-hosted налаштувань push-rule. `false` еквівалентне `"off"`. +- `blockStreaming`: `true` вмикає окремі повідомлення прогресу для завершених блоків асистента, поки активний потоковий preview чернетки. - `threadReplies`: `off`, `inbound` або `always`. -- `threadBindings`: перевизначення на рівні каналу для маршрутизації та життєвого циклу сесій, прив’язаних до тредів. -- `startupVerification`: режим автоматичного запиту на самоверифікацію під час запуску (`if-unverified`, `off`). -- `startupVerificationCooldownHours`: cooldown перед повторною спробою автоматичного запиту на верифікацію під час запуску. -- `textChunkLimit`: розмір фрагмента вихідного повідомлення. -- `chunkMode`: `length` або `newline`. -- `responsePrefix`: необов’язковий префікс повідомлення для вихідних відповідей. -- `ackReaction`: необов’язкове перевизначення ack reaction для цього каналу/облікового запису. -- `ackReactionScope`: необов’язкове перевизначення області ack reaction (`group-mentions`, `group-all`, `direct`, `all`, `none`, `off`). +- `threadBindings`: перевизначення для каналу для маршрутизації й життєвого циклу сесій, прив’язаних до тредів. +- `startupVerification`: режим автоматичного запиту самоверифікації під час запуску (`if-unverified`, `off`). +- `startupVerificationCooldownHours`: затримка перед повторною спробою автоматичних запитів верифікації під час запуску. +- `textChunkLimit`: розмір фрагмента вихідного повідомлення в символах (застосовується, коли `chunkMode` дорівнює `length`). +- `chunkMode`: `length` розбиває повідомлення за кількістю символів; `newline` розбиває за межами рядків. +- `responsePrefix`: необов’язковий рядок, який додається на початок усіх вихідних відповідей для цього каналу. +- `ackReaction`: необов’язкове перевизначення реакції підтвердження для цього каналу/облікового запису. +- `ackReactionScope`: необов’язкове перевизначення області дії реакції підтвердження (`group-mentions`, `group-all`, `direct`, `all`, `none`, `off`). - `reactionNotifications`: режим вхідних сповіщень про реакції (`own`, `off`). -- `mediaMaxMb`: обмеження розміру медіа в МБ для обробки Matrix media. Застосовується до вихідних надсилань і обробки вхідних медіа. -- `autoJoin`: політика авто-приєднання до запрошень (`always`, `allowlist`, `off`). За замовчуванням: `off`. Це застосовується до запрошень Matrix загалом, включно із запрошеннями у стилі DM, а не лише до запрошень у кімнати/групи. OpenClaw приймає це рішення в момент запрошення, ще до того, як може надійно класифікувати приєднану кімнату як DM або групу. -- `autoJoinAllowlist`: кімнати/alias, дозволені, коли `autoJoin` має значення `allowlist`. Записи alias визначаються в room ID під час обробки запрошення; OpenClaw не довіряє стану alias, який заявляє запрошена кімната. +- `mediaMaxMb`: ліміт розміру медіа в МБ для вихідних надсилань і обробки вхідних медіа. +- `autoJoin`: політика автоматичного приєднання за запрошенням (`always`, `allowlist`, `off`). Типово: `off`. Застосовується до всіх запрошень Matrix, включно із запрошеннями у стилі DM. +- `autoJoinAllowlist`: кімнати/псевдоніми, дозволені, коли `autoJoin` має значення `allowlist`. Записи псевдонімів розв’язуються до ID кімнат під час обробки запрошення; OpenClaw не довіряє стану псевдоніма, заявленому запрошеною кімнатою. - `dm`: блок політики DM (`enabled`, `policy`, `allowFrom`, `sessionScope`, `threadReplies`). -- `dm.policy`: керує доступом до DM після того, як OpenClaw приєднався до кімнати і класифікував її як DM. Це не змінює того, чи буде запрошення автоматично прийнято. -- Записи `dm.allowFrom` мають бути повними Matrix user ID, якщо ви вже не визначили їх через live directory lookup. -- `dm.sessionScope`: `per-user` (за замовчуванням) або `per-room`. Використовуйте `per-room`, якщо хочете, щоб кожна Matrix DM-кімната зберігала окремий контекст, навіть якщо співрозмовник той самий. -- `dm.threadReplies`: перевизначення політики тредів лише для DM (`off`, `inbound`, `always`). Воно перевизначає налаштування верхнього рівня `threadReplies` як для розміщення відповідей, так і для ізоляції сесій у DM. -- `execApprovals`: нативна доставка підтверджень exec для Matrix (`enabled`, `approvers`, `target`, `agentFilter`, `sessionFilter`). -- `execApprovals.approvers`: Matrix user ID, яким дозволено підтверджувати exec-запити. Необов’язково, якщо `dm.allowFrom` уже визначає approver-ів. -- `execApprovals.target`: `dm | channel | both` (за замовчуванням: `dm`). -- `accounts`: іменовані перевизначення для облікових записів. Значення верхнього рівня `channels.matrix` діють як значення за замовчуванням для цих записів. -- `groups`: карта політик для кімнат. Надавайте перевагу room ID або alias; невизначені назви кімнат ігноруються під час runtime. Ідентичність сесії/групи використовує стабільний room ID після визначення, тоді як зрозумілі людині мітки й далі походять із назв кімнат. -- `groups..account`: обмежує один успадкований запис кімнати конкретним обліковим записом Matrix у конфігураціях із кількома обліковими записами. -- `groups..allowBots`: перевизначення на рівні кімнати для відправників-ботів, налаштованих у системі (`true` або `"mentions"`). +- `dm.policy`: керує доступом до DM після того, як OpenClaw уже приєднався до кімнати й класифікував її як DM. Це не змінює того, чи буде запрошення автоматично прийняте. +- `dm.allowFrom`: записи мають бути повними Matrix user ID, якщо ви вже не розв’язали їх через live lookup каталогу. +- `dm.sessionScope`: `per-user` (типово) або `per-room`. Використовуйте `per-room`, якщо хочете, щоб кожна кімната DM Matrix зберігала окремий контекст, навіть якщо співрозмовник той самий. +- `dm.threadReplies`: перевизначення політики тредів лише для DM (`off`, `inbound`, `always`). Воно перевизначає параметр верхнього рівня `threadReplies` як для розміщення відповідей, так і для ізоляції сесії в DM. +- `execApprovals`: нативна доставка підтверджень exec через Matrix (`enabled`, `approvers`, `target`, `agentFilter`, `sessionFilter`). +- `execApprovals.approvers`: Matrix user ID, яким дозволено схвалювати exec-запити. Необов’язково, якщо `dm.allowFrom` уже визначає схвалювачів. +- `execApprovals.target`: `dm | channel | both` (типово: `dm`). +- `accounts`: іменовані перевизначення для окремих облікових записів. Значення верхнього рівня `channels.matrix` діють для них як значення за замовчуванням. +- `groups`: мапа політик для окремих кімнат. Надавайте перевагу ID кімнат або псевдонімам; нерозв’язані назви кімнат ігноруються під час виконання. Ідентичність сесії/групи використовує стабільний ID кімнати після розв’язання. +- `groups..account`: обмежити один успадкований запис кімнати конкретним обліковим записом Matrix у конфігураціях із кількома обліковими записами. +- `groups..allowBots`: перевизначення на рівні кімнати для відправників-ботів із конфігурації (`true` або `"mentions"`). - `groups..users`: allowlist відправників для конкретної кімнати. -- `groups..tools`: перевизначення allow/deny інструментів для конкретної кімнати. -- `groups..autoReply`: перевизначення вимоги згадки на рівні кімнати. `true` вимикає вимогу згадки для цієї кімнати; `false` знову примусово вмикає її. +- `groups..tools`: перевизначення allow/deny для інструментів у конкретній кімнаті. +- `groups..autoReply`: перевизначення обмеження згадками на рівні кімнати. `true` вимикає вимогу згадок для цієї кімнати; `false` знову примусово вмикає її. - `groups..skills`: необов’язковий фільтр Skills на рівні кімнати. - `groups..systemPrompt`: необов’язковий фрагмент system prompt на рівні кімнати. -- `rooms`: застарілий alias для `groups`. -- `actions`: керування інструментами для кожної дії (`messages`, `reactions`, `pins`, `profile`, `memberInfo`, `channelInfo`, `verification`). +- `rooms`: застарілий псевдонім для `groups`. +- `actions`: обмеження інструментів за типом дії (`messages`, `reactions`, `pins`, `profile`, `memberInfo`, `channelInfo`, `verification`). ## Пов’язане - [Огляд каналів](/uk/channels) — усі підтримувані канали -- [Pairing](/uk/channels/pairing) — автентифікація DM і потік pairing -- [Групи](/uk/channels/groups) — поведінка групового чату та вимога згадки +- [Pairing](/uk/channels/pairing) — автентифікація DM і процес pairing +- [Групи](/uk/channels/groups) — поведінка групового чату й обмеження згадками - [Маршрутизація каналів](/uk/channels/channel-routing) — маршрутизація сесій для повідомлень - [Безпека](/uk/gateway/security) — модель доступу та зміцнення захисту