diff --git a/docs/uk/channels/groups.md b/docs/uk/channels/groups.md index 26b10a086..7b0de2824 100644 --- a/docs/uk/channels/groups.md +++ b/docs/uk/channels/groups.md @@ -1,38 +1,38 @@ --- read_when: - - Зміна поведінки групового чату або керування доступом за згадками + - Зміна поведінки групового чату або обмеження за згадками sidebarTitle: Groups -summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo) +summary: Поведінка групового чату на різних платформах (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo) title: Групи x-i18n: - generated_at: "2026-04-28T17:28:10Z" + generated_at: "2026-04-29T10:10:31Z" model: gpt-5.5 provider: openai - source_hash: edda98307223651fe3e6eb545839eb4e9d98d416c7a7c505a2610aa1f9162ee1 + source_hash: 1f0766149bc208a934c6a07ea409d7ceadc6c5f52f7dab7d3f50d6fc9c383f13 source_path: channels/groups.md workflow: 16 --- -OpenClaw однаково обробляє групові чати на всіх поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo. +OpenClaw обробляє групові чати однаково на всіх поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo. ## Вступ для початківців (2 хвилини) -OpenClaw "живе" у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає. Якщо **ви** перебуваєте в групі, OpenClaw може бачити цю групу й відповідати там. +OpenClaw "живе" у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає. Якщо **ви** є в групі, OpenClaw може бачити цю групу й відповідати в ній. -Типова поведінка: +Поведінка за замовчуванням: - Групи обмежені (`groupPolicy: "allowlist"`). -- Для відповідей потрібна згадка, якщо ви явно не вимкнули обмеження за згадками. -- Звичайні фінальні відповіді в групах/каналах типово приватні. Видимий вивід у кімнату використовує інструмент `message`. +- Відповіді потребують згадки, якщо ви явно не вимкнули шлюзування за згадкою. +- Звичайні фінальні відповіді в групах/каналах за замовчуванням приватні. Видимий вивід у кімнату використовує інструмент `message`. -Пояснення: відправники зі списку дозволених можуть запускати OpenClaw, згадуючи його. +Інакше кажучи: відправники зі списку дозволених можуть запускати OpenClaw, згадуючи його. **Коротко** -- **Доступ до DM** контролюється через `*.allowFrom`. -- **Доступ до груп** контролюється через `*.groupPolicy` + списки дозволених (`*.groups`, `*.groupAllowFrom`). -- **Запуск відповіді** контролюється обмеженням за згадками (`requireMention`, `/activation`). +- **Доступ у DM** контролюється `*.allowFrom`. +- **Доступ у групах** контролюється `*.groupPolicy` + списками дозволених (`*.groups`, `*.groupAllowFrom`). +- **Запуск відповіді** контролюється шлюзуванням за згадкою (`requireMention`, `/activation`). @@ -47,12 +47,14 @@ otherwise -> reply ## Видимі відповіді -Для групових/канальних кімнат OpenClaw типово використовує `messages.groupChat.visibleReplies: "message_tool"`. -Це означає, що агент усе одно обробляє хід і може оновлювати пам’ять/стан сесії, але його звичайна фінальна відповідь не публікується автоматично назад у кімнату. Щоб говорити видимо, агент використовує `message(action=send)`. +Для групових/канальних кімнат OpenClaw за замовчуванням використовує `messages.groupChat.visibleReplies: "message_tool"`. +Це означає, що агент все одно обробляє хід і може оновлювати памʼять/стан сеансу, але його звичайна фінальна відповідь не публікується автоматично назад у кімнату. Щоб говорити видимо, агент використовує `message(action=send)`. -Це замінює старий шаблон примушування моделі відповідати `NO_REPLY` для більшості ходів у режимі спостереження. У режимі лише інструментів відсутність видимої дії просто означає, що інструмент message не викликається. +Для прямих чатів і будь-якого іншого початкового ходу використовуйте `messages.visibleReplies: "message_tool"`, щоб застосувати таку саму поведінку видимої відповіді лише через інструмент глобально. `messages.groupChat.visibleReplies` залишається більш специфічним перевизначенням для групових/канальних кімнат. -Індикатори набору тексту все ще надсилаються, поки агент працює в режимі лише інструментів. Типовий режим набору тексту для груп оновлено з "message" до "instant" для цих ходів, оскільки звичайного тексту повідомлення асистента може так і не бути до того, як агент вирішить, чи викликати інструмент message. Явна конфігурація режиму набору тексту все ще має пріоритет. +Це замінює старий шаблон, коли модель примушували відповідати `NO_REPLY` для більшості ходів у режимі спостереження. У режимі лише через інструмент нічого не показати видимо просто означає не викликати інструмент повідомлень. + +Індикатори набору тексту все ще надсилаються, поки агент працює в режимі лише через інструмент. Стандартний режим набору в групі для цих ходів підвищено з "message" до "instant", бо звичайного тексту повідомлення асистента може взагалі не бути до того, як агент вирішить, чи викликати інструмент повідомлень. Явна конфігурація режиму набору все одно має пріоритет. Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат: @@ -66,50 +68,60 @@ otherwise -> reply } ``` -Нативні слеш-команди (Discord, Telegram та інші поверхні з підтримкою нативних команд) обходять `visibleReplies: "message_tool"` і завжди відповідають видимо, щоб нативний для каналу інтерфейс команд отримував очікувану відповідь. Це стосується лише перевірених нативних командних ходів; набрані текстом команди `/...` і звичайні чат-повідомлення все ще дотримуються налаштованого типового значення для груп. +Щоб вимагати, щоб видимий вивід для кожного початкового чату проходив через інструмент повідомлень: + +```json5 +{ + messages: { + visibleReplies: "message_tool", + }, +} +``` + +Нативні slash-команди (Discord, Telegram та інші поверхні з підтримкою нативних команд) обходять `visibleReplies: "message_tool"` і завжди відповідають видимо, щоб нативний для каналу командний UI отримав очікувану відповідь. Це стосується лише перевірених нативних командних ходів; команди `/...`, набрані як текст, і звичайні ходи чату все ще дотримуються налаштованого групового стандарту. ## Видимість контексту та списки дозволених -У безпеці груп задіяно два різні елементи керування: +У безпеці груп задіяні два різні засоби контролю: -- **Авторизація запуску**: хто може запускати агента (`groupPolicy`, `groups`, `groupAllowFrom`, списки дозволених для конкретних каналів). -- **Видимість контексту**: який додатковий контекст вводиться в модель (текст відповіді, цитати, історія потоку, переслані метадані). +- **Авторизація запуску**: хто може запускати агента (`groupPolicy`, `groups`, `groupAllowFrom`, списки дозволених для конкретного каналу). +- **Видимість контексту**: який додатковий контекст вводиться в модель (текст відповіді, цитати, історія треду, переслані метадані). -Типово OpenClaw надає пріоритет звичайній поведінці чату й здебільшого зберігає контекст у тому вигляді, у якому його отримано. Це означає, що списки дозволених переважно визначають, хто може запускати дії, а не є універсальною межею редагування для кожного цитованого чи історичного фрагмента. +За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й здебільшого зберігає контекст таким, яким його отримано. Це означає, що списки дозволених насамперед визначають, хто може запускати дії, а не є універсальною межею редагування для кожної процитованої або історичної вставки. - - Деякі канали вже застосовують фільтрацію за відправником для додаткового контексту в окремих шляхах (наприклад, початкове наповнення потоків Slack, пошук відповідей/потоків Matrix). - - Інші канали все ще передають контекст цитат/відповідей/пересилань у тому вигляді, у якому його отримано. + - Деякі канали вже застосовують фільтрацію за відправником для додаткового контексту в окремих шляхах (наприклад, початкове наповнення тредів Slack, пошуки відповідей/тредів Matrix). + - Інші канали все ще передають контекст цитати/відповіді/пересилання таким, яким його отримано. - - `contextVisibility: "all"` (типово) зберігає поточну поведінку отримання без змін. + - `contextVisibility: "all"` (за замовчуванням) зберігає поточну поведінку "як отримано". - `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників зі списку дозволених. - `contextVisibility: "allowlist_quote"` — це `allowlist` плюс один явний виняток для цитати/відповіді. - Поки цю модель посилення безпеки не впроваджено послідовно в усіх каналах, очікуйте відмінностей залежно від поверхні. + Доки цю модель посилення безпеки не буде послідовно реалізовано в усіх каналах, очікуйте відмінностей залежно від поверхні. -![Потік групових повідомлень](/images/groups-flow.svg) +![Потік групового повідомлення](/images/groups-flow.svg) Якщо ви хочете... -| Мета | Що налаштувати | +| Мета | Що встановити | | -------------------------------------------- | ---------------------------------------------------------- | | Дозволити всі групи, але відповідати лише на @згадки | `groups: { "*": { requireMention: true } }` | | Вимкнути всі групові відповіді | `groupPolicy: "disabled"` | -| Лише конкретні групи | `groups: { "": { ... } }` (без ключа `"*"` ) | +| Лише конкретні групи | `groups: { "": { ... } }` (без ключа `"*"`) | | Лише ви можете запускати в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` | -## Ключі сесій +## Ключі сеансів -- Групові сесії використовують ключі сесій `agent:::group:` (кімнати/канали використовують `agent:::channel:`). -- Теми форумів Telegram додають `:topic:` до ідентифікатора групи, щоб кожна тема мала власну сесію. -- Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо налаштовано). -- Heartbeat пропускаються для групових сесій. +- Групові сеанси використовують ключі сеансів `agent:::group:` (кімнати/канали використовують `agent:::channel:`). +- Теми форуму Telegram додають `:topic:` до id групи, щоб кожна тема мала власний сеанс. +- Прямі чати використовують основний сеанс (або окремий для кожного відправника, якщо налаштовано). +- Heartbeat-и пропускаються для групових сеансів. @@ -117,15 +129,15 @@ otherwise -> reply Так — це добре працює, якщо ваш "особистий" трафік — це **DM**, а ваш "публічний" трафік — це **групи**. -Чому: у режимі одного агента DM зазвичай потрапляють до **основного** ключа сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесій (`agent:main::group:`). Якщо ви ввімкнете ізоляцію з `mode: "non-main"`, ці групові сесії працюватимуть у налаштованому бекенді пісочниці, тоді як ваша основна DM-сесія залишиться на хості. Docker є типовим бекендом, якщо ви не виберете інший. +Чому: у режимі одного агента DM зазвичай потрапляють в **основний** ключ сеансу (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сеансів (`agent:main::group:`). Якщо ви вмикаєте ізоляцію з `mode: "non-main"`, ці групові сеанси запускаються в налаштованому бекенді пісочниці, а ваш основний DM-сеанс залишається на хості. Docker є стандартним бекендом, якщо ви не виберете інший. -Це дає вам один "мозок" агента (спільний робочий простір + пам’ять), але дві моделі виконання: +Це дає вам один "мозок" агента (спільний робочий простір + памʼять), але дві позиції виконання: - **DM**: повні інструменти (хост) - **Групи**: пісочниця + обмежені інструменти -Якщо вам потрібні справді окремі робочі простори/персони ("особисте" і "публічне" ніколи не мають змішуватися), використайте другого агента + прив’язки. Див. [Маршрутизація кількох агентів](/uk/concepts/multi-agent). +Якщо вам потрібні справді окремі робочі простори/персони ("особисте" й "публічне" ніколи не мають змішуватися), використовуйте другого агента + привʼязки. Див. [Маршрутизація кількох агентів](/uk/concepts/multi-agent). @@ -153,8 +165,8 @@ otherwise -> reply } ``` - - Хочете, щоб "групи могли бачити лише теку X" замість "без доступу до хоста"? Залиште `workspaceAccess: "none"` і змонтуйте в пісочницю лише шляхи зі списку дозволених: + + Хочете "групи можуть бачити лише папку X" замість "без доступу до хоста"? Залиште `workspaceAccess: "none"` і змонтуйте в пісочницю лише шляхи зі списку дозволених: ```json5 { @@ -179,20 +191,20 @@ otherwise -> reply -Пов’язане: +Повʼязане: -- Ключі конфігурації та типові значення: [Конфігурація Gateway](/uk/gateway/config-agents#agentsdefaultssandbox) -- Налагодження причин блокування інструмента: [Пісочниця, політика інструментів і підвищені права](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) -- Подробиці монтування прив’язок: [Ізоляція в пісочниці](/uk/gateway/sandboxing#custom-bind-mounts) +- Ключі конфігурації та стандартні значення: [Конфігурація Gateway](/uk/gateway/config-agents#agentsdefaultssandbox) +- Налагодження, чому інструмент заблоковано: [Пісочниця проти політики інструментів проти підвищених прав](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) +- Докладно про bind mount: [Ізоляція в пісочниці](/uk/gateway/sandboxing#custom-bind-mounts) ## Мітки відображення -- Мітки UI використовують `displayName`, якщо він доступний, у форматі `:`. +- Мітки UI використовують `displayName`, коли він доступний, у форматі `:`. - `#room` зарезервовано для кімнат/каналів; групові чати використовують `g-` (нижній регістр, пробіли -> `-`, зберігати `#@+._-`). ## Політика груп -Керуйте тим, як групові/кімнатні повідомлення обробляються для кожного каналу: +Керуйте тим, як обробляються повідомлення груп/кімнат для кожного каналу: ```json5 { @@ -241,22 +253,22 @@ otherwise -> reply | Політика | Поведінка | | ------------- | ------------------------------------------------------------ | -| `"open"` | Групи обходять списки дозволених; обмеження за згадками все ще застосовується. | -| `"disabled"` | Повністю блокувати всі групові повідомлення. | -| `"allowlist"` | Дозволяти лише групи/кімнати, що відповідають налаштованому списку дозволених. | +| `"open"` | Групи обходять списки дозволених; шлюзування за згадкою все ще застосовується. | +| `"disabled"` | Повністю блокує всі групові повідомлення. | +| `"allowlist"` | Дозволяє лише групи/кімнати, що відповідають налаштованому списку дозволених. | - - - `groupPolicy` окремий від обмеження за згадками (яке вимагає @згадки). + + - `groupPolicy` відокремлено від шлюзування за згадкою (яке вимагає @згадок). - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`). - - Схвалення прив’язування DM (записи сховища `*-allowFrom`) застосовуються лише до доступу DM; авторизація відправника в групі залишається явно прив’язаною до групових списків дозволених. + - Підтвердження сполучення DM (записи сховища `*-allowFrom`) застосовуються лише до доступу DM; авторизація відправника в групі залишається явною для групових списків дозволених. - Discord: список дозволених використовує `channels.discord.guilds..channels`. - Slack: список дозволених використовує `channels.slack.channels`. - - Matrix: список дозволених використовує `channels.matrix.groups`. Надавайте перевагу ідентифікаторам кімнат або псевдонімам; пошук за назвою приєднаної кімнати виконується за принципом найкращого зусилля, а нерозв’язані назви ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; списки дозволених `users` для окремих кімнат також підтримуються. + - Matrix: список дозволених використовує `channels.matrix.groups`. Віддавайте перевагу id кімнат або псевдонімам; пошук імен приєднаних кімнат виконується з найкращою спробою, а нерозпізнані імена ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; списки дозволених `users` для кожної кімнати також підтримуються. - Групові DM контролюються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`). - - Список дозволених Telegram може збігатися з ідентифікаторами користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменами користувачів (`"@alice"` чи `"alice"`); префікси нечутливі до регістру. - - Типове значення — `groupPolicy: "allowlist"`; якщо ваш груповий список дозволених порожній, групові повідомлення блокуються. - - Безпека під час виконання: коли блок провайдера повністю відсутній (`channels.` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`. + - Список дозволених Telegram може зіставляти id користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або імена користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру. + - За замовчуванням використовується `groupPolicy: "allowlist"`; якщо ваш груповий список дозволених порожній, групові повідомлення блокуються. + - Безпека під час виконання: коли блок провайдера повністю відсутній (`channels.` відсутній), політика груп повертається до fail-closed режиму (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`. @@ -270,16 +282,16 @@ otherwise -> reply Групові списки дозволених (`*.groups`, `*.groupAllowFrom`, список дозволених для конкретного каналу). - - Обмеження за згадками (`requireMention`, `/activation`). + + Шлюзування за згадкою (`requireMention`, `/activation`). -## Обмеження за згадками (типово) +## Шлюзування за згадкою (за замовчуванням) -Групові повідомлення потребують згадки, якщо це не перевизначено для окремої групи. Типові значення зберігаються для кожної підсистеми в `*.groups."*"`. +Групові повідомлення потребують згадки, якщо це не перевизначено для конкретної групи. Стандартні значення живуть для кожної підсистеми в `*.groups."*"`. -Відповідь на повідомлення бота вважається неявною згадкою, коли канал підтримує метадані відповіді. Цитування повідомлення бота також може вважатися неявною згадкою в каналах, які надають метадані цитати. Поточні вбудовані випадки включають Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. +Відповідь на повідомлення бота зараховується як неявна згадка, коли канал підтримує метадані відповіді. Цитування повідомлення бота також може зараховуватися як неявна згадка в каналах, які надають метадані цитат. Поточні вбудовані випадки включають Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. ```json5 { @@ -318,27 +330,27 @@ otherwise -> reply ``` - - - `mentionPatterns` — безпечні regex-шаблони без урахування регістру; недійсні шаблони та небезпечні форми вкладеного повторення ігноруються. + + - `mentionPatterns` — безпечні regex-шаблони без урахування регістру; недійсні шаблони та небезпечні форми з вкладеним повторенням ігноруються. - Поверхні, які надають явні згадки, усе одно проходять; шаблони є резервним варіантом. - Перевизначення для окремого агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів спільно використовують групу). - - Шлюз згадок застосовується лише тоді, коли виявлення згадок можливе (налаштовано нативні згадки або `mentionPatterns`). - - Контекст підказки групового чату передає вирішену інструкцію тихої відповіді на кожному кроці; файли робочого простору не повинні дублювати механіку `NO_REPLY`. - - Групи, де дозволені тихі відповіді, трактують чисто порожні або лише міркувальні ходи моделі як тихі, еквівалентні `NO_REPLY`. Прямі чати й надалі трактують порожні відповіді як невдалий хід агента. - - Типові значення Discord містяться в `channels.discord.guilds."*"` (можна перевизначити для окремої гільдії/каналу). - - Контекст історії групи обгортається однаково для всіх каналів і є **лише відкладеним** (повідомлення, пропущені через шлюз згадок); використовуйте `messages.groupChat.historyLimit` для глобального типового значення та `channels..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Установіть `0`, щоб вимкнути. + - Обмеження за згадкою застосовується лише тоді, коли виявлення згадки можливе (налаштовано нативні згадки або `mentionPatterns`). + - Контекст запиту групового чату передає визначену інструкцію тихої відповіді на кожному ході; файли робочого простору не повинні дублювати механіку `NO_REPLY`. + - Групи, де дозволені тихі відповіді, вважають чисті порожні або лише reasoning ходи моделі тихими, еквівалентними `NO_REPLY`. Прямі чати все одно вважають порожні відповіді невдалим ходом агента. + - Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для окремої гільдії/каналу). + - Контекст історії групи обгортається однаково для всіх каналів і є **лише pending-only** (повідомлення, пропущені через обмеження за згадкою); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Установіть `0`, щоб вимкнути. ## Обмеження інструментів групи/каналу (необов’язково) -Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині певної групи/кімнати/каналу**. +Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині конкретної групи/кімнати/каналу**. - `tools`: дозволити/заборонити інструменти для всієї групи. -- `toolsBySender`: перевизначення для окремих відправників у групі. Використовуйте явні префікси ключів: `id:`, `e164:`, `username:`, `name:` і шаблон `"*"`. Застарілі ключі без префікса все ще приймаються та зіставляються лише як `id:`. +- `toolsBySender`: перевизначення для окремого відправника в межах групи. Використовуйте явні префікси ключів: `id:`, `e164:`, `username:`, `name:` і wildcard `"*"`. Застарілі ключі без префікса все ще приймаються й зіставляються лише як `id:`. -Порядок вирішення (найточніше має перевагу): +Порядок визначення (найконкретніший перемагає): @@ -348,10 +360,10 @@ otherwise -> reply `tools` групи/каналу. - Збіг типового (`"*"`) `toolsBySender`. + Збіг `toolsBySender` за замовчуванням (`"*"`). - Типові (`"*"`) `tools`. + `tools` за замовчуванням (`"*"`). @@ -376,18 +388,18 @@ otherwise -> reply ``` -Обмеження інструментів групи/каналу застосовуються на додачу до глобальної політики інструментів або політики інструментів агента (заборона все одно має перевагу). Деякі канали використовують інше вкладення для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`). +Обмеження інструментів групи/каналу застосовуються на додачу до глобальної політики інструментів/політики інструментів агента (заборона все одно перемагає). Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`). -## Списки дозволених груп +## Allowlist груп -Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як список дозволених груп. Використовуйте `"*"`, щоб дозволити всі групи й водночас задати типову поведінку згадок. +Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як allowlist груп. Використовуйте `"*"`, щоб дозволити всі групи, водночас задавши типову поведінку згадок. -Поширена плутанина: схвалення сполучення DM — це не те саме, що авторизація групи. Для каналів, які підтримують сполучення DM, сховище сполучень відкриває лише DM. Групові команди все одно потребують явної авторизації відправника групи з конфігураційних списків дозволених, як-от `groupAllowFrom`, або задокументованого резервного налаштування для цього каналу. +Поширена плутанина: схвалення сполучення DM — це не те саме, що авторизація групи. Для каналів, які підтримують сполучення DM, сховище сполучень розблоковує лише DM. Групові команди все одно потребують явної авторизації відправника групи з allowlist конфігурації, як-от `groupAllowFrom`, або задокументованого резервного варіанта конфігурації для цього каналу. -Поширені наміри (скопіюйте/вставте): +Поширені наміри (скопіювати/вставити): @@ -448,37 +460,37 @@ otherwise -> reply ## Поля контексту -Вхідні корисні навантаження групи встановлюють: +Вхідні payload групи задають: - `ChatType=group` - `GroupSubject` (якщо відомо) - `GroupMembers` (якщо відомо) -- `WasMentioned` (результат шлюзу згадок) -- Теми форумів Telegram також включають `MessageThreadId` і `IsForum`. +- `WasMentioned` (результат обмеження за згадкою) +- Теми форуму Telegram також включають `MessageThreadId` і `IsForum`. Примітки для окремих каналів: -- BlueBubbles може за бажанням збагачувати безіменних учасників груп macOS з локальної бази контактів перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і запускається лише після проходження звичайного шлюзу групи. +- BlueBubbles може необов’язково збагачувати безіменних учасників групи macOS з локальної бази даних Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і запускається лише після проходження звичайного обмеження групи. -Системна підказка агента включає вступ для групи на першому кроці нової групової сесії. Вона нагадує моделі відповідати як людина, уникати Markdown-таблиць, мінімізувати порожні рядки та дотримуватися звичайних відступів чату, а також не вводити буквальні послідовності `\n`. Імена груп і мітки учасників, отримані з каналу, відображаються як огороджені ненадійні метадані, а не як вбудовані системні інструкції. +Системний prompt агента включає вступ про групу на першому ході нової групової сесії. Він нагадує моделі відповідати як людина, уникати Markdown-таблиць, мінімізувати порожні рядки й дотримуватися звичайних інтервалів чату, а також не вводити буквальні послідовності `\n`. Назви груп і мітки учасників, отримані з каналу, відображаються як fenced недовірені метадані, а не як inline системні інструкції. ## Особливості iMessage -- Надавайте перевагу `chat_id:` під час маршрутизації або додавання до списку дозволених. -- Список чатів: `imsg chats --limit 20`. +- Надавайте перевагу `chat_id:` під час маршрутизації або додавання до allowlist. +- Перелік чатів: `imsg chats --limit 20`. - Відповіді групи завжди повертаються до того самого `chat_id`. -## Системні підказки WhatsApp +## Системні prompts WhatsApp -Див. [WhatsApp](/uk/channels/whatsapp#system-prompts) для канонічних правил системних підказок WhatsApp, включно з вирішенням групових і прямих підказок, поведінкою шаблону та семантикою перевизначення облікового запису. +Див. [WhatsApp](/uk/channels/whatsapp#system-prompts) щодо канонічних правил системного prompt WhatsApp, включно з визначенням group і direct prompt, поведінкою wildcard і семантикою перевизначень облікового запису. ## Особливості WhatsApp -Див. [Групові повідомлення](/uk/channels/group-messages) для поведінки лише WhatsApp (вставлення історії, деталі обробки згадок). +Див. [Повідомлення груп](/uk/channels/group-messages) щодо поведінки лише для WhatsApp (вставлення історії, деталі обробки згадок). ## Пов’язане - [Групи трансляції](/uk/channels/broadcast-groups) - [Маршрутизація каналів](/uk/channels/channel-routing) -- [Групові повідомлення](/uk/channels/group-messages) +- [Повідомлення груп](/uk/channels/group-messages) - [Сполучення](/uk/channels/pairing) diff --git a/docs/uk/gateway/config-channels.md b/docs/uk/gateway/config-channels.md index 37fb021d9..54d0ea6a7 100644 --- a/docs/uk/gateway/config-channels.md +++ b/docs/uk/gateway/config-channels.md @@ -1,25 +1,22 @@ --- read_when: - - Налаштування Plugin каналу (автентифікація, контроль доступу, кілька облікових записів) - - Усунення несправностей із ключами конфігурації для кожного каналу - - Аудит політики DM, політики груп або обмеження за згадками + - Налаштування Plugin для каналу (автентифікація, контроль доступу, кілька облікових записів) + - Усунення неполадок із ключами конфігурації для окремих каналів + - Аудит політики приватних повідомлень, політики груп або керування доступом за згадками summary: 'Конфігурація каналів: контроль доступу, сполучення, ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо' title: Конфігурація — канали x-i18n: - generated_at: "2026-04-29T05:39:05Z" + generated_at: "2026-04-29T10:10:45Z" model: gpt-5.5 provider: openai - source_hash: 27393684cef61ab3599f9793cc9e691239a5bb5852ad638b3c2dd20de76ee9fa + source_hash: e16ab50020711aac8e06cd234739ac7b566420cf7ce8621c0aca12c22484f07f source_path: gateway/config-channels.md workflow: 16 --- -Ключі конфігурації для окремих каналів у `channels.*`. Охоплює доступ до DM і груп, -налаштування кількох облікових записів, обмеження за згадками та ключі для окремих каналів Slack, Discord, -Telegram, WhatsApp, Matrix, iMessage й інших вбудованих Plugin каналів. +Ключі конфігурації окремих каналів у `channels.*`. Охоплює доступ до DM і груп, налаштування кількох облікових записів, mention gating і ключі окремих каналів для Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших вбудованих Plugin каналів. -Для агентів, інструментів, runtime Gateway та інших ключів верхнього рівня див. -[Довідник конфігурації](/uk/gateway/configuration-reference). +Для агентів, інструментів, середовища виконання Gateway та інших ключів верхнього рівня див. [Довідник конфігурації](/uk/gateway/configuration-reference). ## Канали @@ -36,21 +33,21 @@ Telegram, WhatsApp, Matrix, iMessage й інших вбудованих Plugin | `open` | Дозволити всі вхідні DM (потребує `allowFrom: ["*"]`) | | `disabled` | Ігнорувати всі вхідні DM | -| Групова політика | Поведінка | -| --------------------- | ----------------------------------------------------- | -| `allowlist` (типово) | Лише групи, що відповідають налаштованому списку дозволених | -| `open` | Обійти списки дозволених груп (обмеження за згадками все ще застосовується) | -| `disabled` | Блокувати всі повідомлення груп/кімнат | +| Групова політика | Поведінка | +| ---------------------- | ----------------------------------------------------- | +| `allowlist` (типово) | Лише групи, що відповідають налаштованому списку дозволених | +| `open` | Обійти групові списки дозволених (mention-gating все одно застосовується) | +| `disabled` | Блокувати всі повідомлення груп/кімнат | `channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` провайдера не встановлено. Коди сполучення спливають через 1 годину. Очікувані запити на сполучення DM обмежені **3 на канал**. -Якщо блок провайдера повністю відсутній (`channels.` відсутній), групова політика runtime повертається до `allowlist` (закрито в разі помилки) із попередженням під час запуску. +Якщо блок провайдера повністю відсутній (`channels.` відсутній), групова політика під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. ### Перевизначення моделі каналу -Використовуйте `channels.modelByChannel`, щоб закріпити певні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналів застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`). +Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналу застосовується, коли сесія ще не має перевизначення моделі (наприклад, встановленого через `/model`). ```json5 { @@ -73,7 +70,7 @@ Telegram, WhatsApp, Matrix, iMessage й інших вбудованих Plugin ### Типові значення каналів і Heartbeat -Використовуйте `channels.defaults` для спільної групової політики та поведінки Heartbeat між провайдерами: +Використовуйте `channels.defaults` для спільної поведінки групової політики та Heartbeat між провайдерами: ```json5 { @@ -92,14 +89,14 @@ Telegram, WhatsApp, Matrix, iMessage й інших вбудованих Plugin ``` - `channels.defaults.groupPolicy`: резервна групова політика, коли `groupPolicy` на рівні провайдера не встановлено. -- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь цитований/тредовий/історичний контекст), `allowlist` (включати контекст лише від дозволених відправників), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels..contextVisibility`. +- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь цитований контекст/контекст гілки/історії), `allowlist` (включати лише контекст від відправників зі списку дозволених), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels..contextVisibility`. - `channels.defaults.heartbeat.showOk`: включати справні статуси каналів у вивід Heartbeat. -- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід Heartbeat. -- `channels.defaults.heartbeat.useIndicator`: рендерити компактний вивід Heartbeat у стилі індикатора. +- `channels.defaults.heartbeat.showAlerts`: включати погіршені/помилкові статуси у вивід Heartbeat. +- `channels.defaults.heartbeat.useIndicator`: відображати компактний вивід Heartbeat у стилі індикатора. ### WhatsApp -WhatsApp працює через вебканал Gateway (Baileys Web). Він запускається автоматично, коли існує пов’язаний сеанс. +WhatsApp працює через вебканал Gateway (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія. ```json5 { @@ -139,7 +136,7 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він } ``` - + ```json5 { @@ -157,10 +154,10 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він } ``` -- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше перший налаштований ID облікового запису (у відсортованому порядку). -- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли він збігається з налаштованим ID облікового запису. -- Застарілий auth dir Baileys для одного облікового запису мігрується `openclaw doctor` у `whatsapp/default`. -- Перевизначення для окремих облікових записів: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Вихідні команди типово використовують обліковий запис `default`, якщо він існує; інакше перший налаштований ID облікового запису (відсортований). +- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли він відповідає налаштованому ID облікового запису. +- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`. +- Перевизначення для окремого облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -220,9 +217,9 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він ``` - Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символьні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервом для типового облікового запису. -- `apiRoot` — це лише корінь Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy root, а не `https://api.telegram.org/bot`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot`. -- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ID облікового запису. -- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явне типове значення (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли воно відсутнє або недійсне. +- `apiRoot` є лише коренем Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy корінь, а не `https://api.telegram.org/bot`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot`. +- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли він відповідає налаштованому ID облікового запису. +- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явний типовий (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли він відсутній або недійсний. - `configWrites: false` блокує ініційовані Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`). - Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings). - Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах). @@ -328,37 +325,37 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він } ``` -- Токен: `channels.discord.token`, із `DISCORD_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням. -- Прямі вихідні виклики, що надають явний Discord `token`, використовують цей токен для виклику; параметри повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime. -- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим id облікового запису. -- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; прості числові ID відхиляються. -- Slug-и guild записуються малими літерами із заміною пробілів на `-`; ключі каналів використовують назву зі slug (без `#`). Віддавайте перевагу ID guild. -- Повідомлення, створені ботом, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). +- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервом для облікового запису за замовчуванням. +- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; параметри повторних спроб/політик облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime. +- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ID облікового запису. +- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; голі числові ID відхиляються. +- Слаги guild пишуться нижнім регістром із заміною пробілів на `-`; ключі каналів використовують назву зі слагом (без `#`). Віддавайте перевагу ID guild. +- Повідомлення, створені ботами, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). - `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here). -- `maxLinesPerMessage` (типово 17) розділяє високі повідомлення, навіть якщо вони коротші за 2000 символів. -- `channels.discord.threadBindings` керує маршрутизацією Discord, прив’язаною до thread: - - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, а також прив’язана доставка/маршрутизація) - - `idleHours`: перевизначення Discord для автоматичного auto-unfocus після неактивності в годинах (`0` вимикає) +- `maxLinesPerMessage` (за замовчуванням 17) розбиває високі повідомлення, навіть якщо вони менші за 2000 символів. +- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до потоків Discord: + - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до потоків (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язана доставка/маршрутизація) + - `idleHours`: перевизначення Discord для автоматичного inactivity auto-unfocus у годинах (`0` вимикає) - `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає) - - `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язки thread через `sessions_spawn({ thread: true })` -- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для каналів і thread-ів (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). + - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив’язки потоку `sessions_spawn({ thread: true })` +- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для каналів і потоків (використовуйте ID каналу/потоку в `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів Discord components v2. -- `channels.discord.voice` вмикає розмови у голосових каналах Discord і необов’язкове auto-join + перевизначення LLM + TTS. -- `channels.discord.voice.model` необов’язково перевизначає модель LLM, що використовується для відповідей у голосовому каналі Discord. -- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (`true` і `24` за замовчуванням). -- OpenClaw додатково намагається відновити приймання голосу, залишаючи голосову сесію та повторно приєднуючись до неї після повторних помилок дешифрування. -- `channels.discord.streaming` є канонічним ключем режиму потоку. Застарілі значення `streamMode` і булеві значення `streaming` мігруються автоматично. -- `channels.discord.autoPresence` зіставляє доступність runtime із presence бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. -- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає змінюване зіставлення name/tag (режим сумісності break-glass). -- `channels.discord.execApprovals`: нативна для Discord доставка схвалень exec і авторизація approver-ів. - - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі схвалення exec активуються, коли approver-ів можна визначити з `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec-запити. Якщо пропущено, використовується резервне значення `commands.ownerAllowFrom`. - - `agentFilter`: необов’язковий allowlist ID agent-ів. Пропустіть, щоб пересилати схвалення для всіх agent-ів. - - `sessionFilter`: необов’язкові патерни ключів сесій (підрядок або regex). - - `target`: куди надсилати запити на схвалення. `"dm"` (типово) надсилає в DM approver-ів, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли target містить `"channel"`, кнопки можуть використовувати лише визначені approver-и. +- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові перевизначення auto-join + LLM + TTS. +- `channels.discord.voice.model` необов’язково перевизначає модель LLM, що використовується для відповідей у голосових каналах Discord. +- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (за замовчуванням `true` і `24`). +- OpenClaw додатково намагається відновити приймання голосу, виходячи з голосової сесії та повторно приєднуючись після повторних помилок дешифрування. +- `channels.discord.streaming` є канонічним ключем режиму stream. Застарілі значення `streamMode` і булеві `streaming` автоматично мігруються. +- `channels.discord.autoPresence` зіставляє доступність runtime з присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. +- `channels.discord.dangerouslyAllowNameMatching` знову вмикає змінне зіставлення імен/тегів (режим сумісності break-glass). +- `channels.discord.execApprovals`: нативна для Discord доставка схвалень exec і авторизація схвалювачів. + - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо пропущено, використовується `commands.ownerAllowFrom`. + - `agentFilter`: необов’язковий allowlist ID агентів. Пропустіть, щоб пересилати схвалення для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex). + - `target`: куди надсилати запити схвалення. `"dm"` (за замовчуванням) надсилає в DM схвалювачам, `"channel"` надсилає у вихідний канал, `"both"` надсилає в обидва. Коли ціль містить `"channel"`, кнопки можуть використовувати лише визначені схвалювачі. - `cleanupAfterResolve`: коли `true`, видаляє DM зі схваленнями після схвалення, відхилення або timeout. -**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень). +**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, за замовчуванням), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень). ### Google Chat @@ -389,11 +386,11 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він } ``` -- JSON сервісного облікового запису: inline (`serviceAccount`) або файловий (`serviceAccountFile`). +- JSON сервісного облікового запису: inline (`serviceAccount`) або на основі файлу (`serviceAccountFile`). - SecretRef сервісного облікового запису також підтримується (`serviceAccountRef`). -- Резервні змінні env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- Резерви env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Використовуйте `spaces/` або `users/` для цілей доставки. -- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає змінюване зіставлення email principal (режим сумісності break-glass). +- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає змінне зіставлення email principal (режим сумісності break-glass). ### Slack @@ -465,44 +462,44 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він } ``` -- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервне значення env для облікового запису за замовчуванням). -- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для кожного облікового запису). -- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API Bolt receiver. Використовуйте це лише під час дослідження timeout ping/pong або поведінки застарілого websocket. +- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резерву env облікового запису за замовчуванням). +- **HTTP mode** потребує `botToken` плюс `signingSecret` (на root або для кожного облікового запису). +- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте його лише під час розслідування timeout ping/pong або поведінки застарілого websocket. - `botToken`, `appToken`, `signingSecret` і `userToken` приймають plaintext рядки або об’єкти SecretRef. -- Знімки облікових записів Slack надають поля джерела/статусу для кожних облікових даних, як-от +- Знімки облікових записів Slack показують поля джерела/статусу для кожного credential, такі як `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode — `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис - налаштовано через SecretRef, але поточний шлях command/runtime не зміг + налаштований через SecretRef, але поточний шлях команди/runtime не зміг визначити значення секрету. - `configWrites: false` блокує записи конфігурації, ініційовані Slack. -- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим id облікового запису. -- `channels.slack.streaming.mode` є канонічним ключем режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним streaming transport Slack. Застарілі значення `streamMode`, булеві значення `streaming` і `nativeStreaming` мігруються автоматично. +- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ID облікового запису. +- `channels.slack.streaming.mode` є канонічним ключем режиму stream Slack. `channels.slack.streaming.nativeTransport` керує нативним streaming-транспортом Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` автоматично мігруються. - Використовуйте `user:` (DM) або `channel:` для цілей доставки. -**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (з `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (з `reactionAllowlist`). -**Ізоляція thread-сесій:** `thread.historyScope` є окремим для кожного thread (типово) або спільним для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу до нових thread-ів. +**Ізоляція сесій потоків:** `thread.historyScope` є окремою для кожного потоку (за замовчуванням) або спільною для каналу. `thread.inheritParent` копіює transcript батьківського каналу до нових потоків. -- Нативний streaming Slack разом зі Slack assistant-style статусом thread "is typing..." потребують цілі reply thread. DM верхнього рівня за замовчуванням залишаються поза thread, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі thread. -- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: нативна для Slack доставка схвалень exec і авторизація approver-ів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). +- Нативний streaming Slack разом зі Slack assistant-style статусом потоку "is typing..." потребують цільового потоку відповіді. DM верхнього рівня за замовчуванням залишаються поза потоком, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі потоку. +- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals`: нативна для Slack доставка схвалень exec і авторизація схвалювачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). -| Група дій | Типово | Примітки | -| --------- | ------ | --------------------- | -| reactions | увімкнено | Реагувати + перелічувати реакції | -| messages | увімкнено | Читати/надсилати/редагувати/видаляти | -| pins | увімкнено | Закріпити/відкріпити/перелічити | -| memberInfo | увімкнено | Інформація про учасника | -| emojiList | увімкнено | Список власних emoji | +| Група дій | За замовчуванням | Примітки | +| ------------ | ---------------- | ------------------------------ | +| reactions | увімкнено | React + список реакцій | +| messages | увімкнено | Читати/надсилати/редагувати/видаляти | +| pins | увімкнено | Закріпити/відкріпити/список | +| memberInfo | увімкнено | Інформація про учасника | +| emojiList | увімкнено | Список власних емодзі | ### Mattermost -Mattermost постачається як bundled Plugin у поточних релізах OpenClaw. Старіші або -custom builds можуть установити поточний пакет npm за допомогою -`openclaw plugins install @openclaw/mattermost`; якщо npm повідомляє, що пакет, -яким володіє OpenClaw, позначено як deprecated, використовуйте bundled Plugin або локальний checkout -до публікації новішого пакета npm. +Mattermost постачається як bundled plugin у поточних релізах OpenClaw. Старіші або +custom builds можуть встановити поточний npm package за допомогою +`openclaw plugins install @openclaw/mattermost`; якщо npm повідомляє, що +пакет, який належить OpenClaw, deprecated, використовуйте bundled plugin або локальний checkout, +доки не буде опубліковано новіший npm package. ```json5 { @@ -532,23 +529,23 @@ custom builds можуть установити поточний пакет npm } ``` -Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера). +Режими чату: `oncall` (відповідати на @-згадку, за замовчуванням), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з trigger prefix). Коли нативні команди Mattermost увімкнено: -- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою. -- `commands.callbackUrl` має вказувати на endpoint OpenClaw gateway і бути доступним із сервера Mattermost. -- Нативні slash callbacks автентифікуються за допомогою токенів для кожної команди, повернених +- `commands.callbackPath` має бути path (наприклад `/api/channels/mattermost/command`), а не повним URL. +- `commands.callbackUrl` має вказувати на endpoint OpenClaw Gateway і бути доступним із сервера Mattermost. +- Нативні slash callback автентифікуються за допомогою токенів кожної команди, повернутих Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або жодні - команди не активовано, OpenClaw відхиляє callbacks з + команди не активовано, OpenClaw відхиляє callback з `Unauthorized: invalid command token.` -- Для приватних/tailnet/internal callback hosts Mattermost може вимагати, щоб +- Для приватних/tailnet/internal callback-хостів Mattermost може вимагати, щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain. Використовуйте значення host/domain, а не повні URL. - `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Mattermost. - `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах. -- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для кожного каналу (`"*"` для значення за замовчуванням). -- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим id облікового запису. +- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для кожного каналу (`"*"` для default). +- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ID облікового запису. ### Signal @@ -572,12 +569,12 @@ custom builds можуть установити поточний пакет npm **Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (з `reactionAllowlist`). - `channels.signal.account`: прив’язати запуск каналу до конкретної ідентичності облікового запису Signal. -- `channels.signal.configWrites`: дозволити або заборонити зміни конфігурації, ініційовані Signal. -- Необов’язковий `channels.signal.defaultAccount` перевизначає типовий вибір облікового запису, коли він відповідає налаштованому ідентифікатору облікового запису. +- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Signal. +- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ідентифікатором облікового запису. ### BlueBubbles -BlueBubbles — рекомендований шлях для iMessage (із підтримкою Plugin, налаштовується в `channels.bluebubbles`). +BlueBubbles — рекомендований шлях iMessage (на базі Plugin, налаштовується в `channels.bluebubbles`). ```json5 { @@ -593,8 +590,8 @@ BlueBubbles — рекомендований шлях для iMessage (із пі ``` - Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає типовий вибір облікового запису, коли він відповідає налаштованому ідентифікатору облікового запису. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до сталих сеансів ACP. Використовуйте дескриптор BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [агенти ACP](/uk/tools/acp-agents#channel-specific-settings). +- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ідентифікатором облікового запису. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сеансів ACP. Використовуйте дескриптор BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings). - Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles). ### iMessage @@ -623,17 +620,17 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а } ``` -- Необов’язковий `channels.imessage.defaultAccount` перевизначає типовий вибір облікового запису, коли він відповідає налаштованому ідентифікатору облікового запису. +- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ідентифікатором облікового запису. -- Потрібен Full Disk Access до бази даних Messages. -- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб отримати список чатів. +- Потребує Full Disk Access до БД Messages. +- Віддавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів. - `cliPath` може вказувати на SSH-обгортку; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. -- `attachmentRoots` і `remoteAttachmentRoots` обмежують вхідні шляхи вкладень (типово: `/Users/*/Library/Messages/Attachments`). -- SCP використовує сувору перевірку ключа хоста, тож переконайтеся, що ключ хоста ретранслятора вже існує в `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: дозволити або заборонити зміни конфігурації, ініційовані iMessage. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до сталих сеансів ACP. Використовуйте нормалізований дескриптор або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [агенти ACP](/uk/tools/acp-agents#channel-specific-settings). +- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`). +- SCP використовує сувору перевірку ключа хоста, тож переконайтеся, що ключ хоста ретранслятора вже є в `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані iMessage. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних сеансів ACP. Використовуйте нормалізований дескриптор або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -644,7 +641,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix має підтримку Plugin і налаштовується в `channels.matrix`. +Matrix працює на базі Plugin і налаштовується в `channels.matrix`. ```json5 { @@ -675,24 +672,24 @@ Matrix має підтримку Plugin і налаштовується в `chan ``` - Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`. -- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його за допомогою `channels.matrix.accounts..proxy`. -- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і ця мережева згода є незалежними елементами керування. +- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити це за допомогою `channels.matrix.accounts..proxy`. +- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver. `proxy` і ця мережева згода є незалежними засобами керування. - `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у конфігураціях із кількома обліковими записами. - `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати й нові запрошення у стилі DM ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`. -- `channels.matrix.execApprovals`: нативна для Matrix доставка підтверджень exec і авторизація затверджувачів. - - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі підтвердження exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено затверджувати запити exec. - - `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів. - - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або регулярний вираз). - - `target`: куди надсилати запити на підтвердження. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`. +- `channels.matrix.execApprovals`: нативна для Matrix доставка схвалень exec і авторизація схвалювачів. + - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено схвалювати запити exec. + - `agentFilter`: необов’язковий список дозволених ідентифікаторів агентів. Опустіть, щоб пересилати схвалення для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex). + - `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`. - Перевизначення для окремого облікового запису: `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` керує тим, як DM у Matrix групуються в сеанси: `per-user` (типово) спільно використовує сеанс за маршрутизованим співрозмовником, тоді як `per-room` ізолює кожну DM-кімнату. +- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сеанси: `per-user` (типово) спільно використовує сеанс за маршрутизованим співрозмовником, тоді як `per-room` ізолює кожну DM-кімнату. - Перевірки стану Matrix і живі пошуки в каталозі використовують ту саму політику проксі, що й трафік під час виконання. - Повну конфігурацію Matrix, правила таргетингу й приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). ### Microsoft Teams -Microsoft Teams має підтримку Plugin і налаштовується в `channels.msteams`. +Microsoft Teams працює на базі Plugin і налаштовується в `channels.msteams`. ```json5 { @@ -708,11 +705,11 @@ Microsoft Teams має підтримку Plugin і налаштовується ``` - Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`. -- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для окремих команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams). +- Повну конфігурацію Teams (облікові дані, Webhook, політика DM/груп, перевизначення для окремих команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams). ### IRC -IRC має підтримку Plugin і налаштовується в `channels.irc`. +IRC працює на базі Plugin і налаштовується в `channels.irc`. ```json5 { @@ -734,12 +731,12 @@ IRC має підтримку Plugin і налаштовується в `channel ``` - Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- Необов’язковий `channels.irc.defaultAccount` перевизначає типовий вибір облікового запису, коли він відповідає налаштованому ідентифікатору облікового запису. -- Повну конфігурацію каналу IRC (хост/порт/TLS/канали/allowlist-и/шлюзування згадок) задокументовано в [IRC](/uk/channels/irc). +- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ідентифікатором облікового запису. +- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc). ### Кілька облікових записів (усі канали) -Запускайте кілька облікових записів для кожного каналу (кожен зі своїм `accountId`): +Запускайте кілька облікових записів на канал (кожен зі своїм `accountId`): ```json5 { @@ -761,33 +758,34 @@ IRC має підтримку Plugin і налаштовується в `channel ``` - `default` використовується, коли `accountId` опущено (CLI + маршрутизація). -- Токени середовища застосовуються лише до **типового** облікового запису. +- Env-токени застосовуються лише до **типового** облікового запису. - Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису. -- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента. -- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або під час онбордингу каналу), поки конфігурація каналу верхнього рівня все ще має один обліковий запис, OpenClaw спочатку переносить значення верхнього рівня для одного облікового запису, що належать до облікового запису, у мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. -- Наявні прив’язки лише до каналу (без `accountId`) продовжують відповідати типовому обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими. -- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису, що належать до облікового запису, у підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. +- Використовуйте `bindings[].match.accountId`, щоб спрямовувати кожен обліковий запис до іншого агента. +- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або onboarding каналу), залишаючись на однообліковій конфігурації каналу верхнього рівня, OpenClaw спочатку переносить однооблікові значення верхнього рівня, прив’язані до облікового запису, у мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. +- Наявні прив’язки лише каналу (без `accountId`) і далі збігаються з типовим обліковим записом; прив’язки з областю облікового запису залишаються необов’язковими. +- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи однооблікові значення верхнього рівня, прив’язані до облікового запису, у просунутий обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. ### Інші канали Plugin -Багато каналів Plugin налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). +Багато каналів Plugin налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). Дивіться повний індекс каналів: [Канали](/uk/channels). -### Шлюзування згадок у груповому чаті +### Фільтрація згадок у групових чатах -Групові повідомлення типово **вимагають згадки** (згадка в метаданих або безпечні шаблони регулярних виразів). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. +Для групових повідомлень типово **потрібна згадка** (згадка в метаданих або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. -Видимі відповіді керуються окремо. Групові/канальні кімнати типово мають `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw усе ще обробляє turn, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Установлюйте `"automatic"` лише тоді, коли хочете застарілу поведінку, за якої звичайні відповіді надсилаються назад у кімнату. +Видимі відповіді керуються окремо. Для групових/канальних кімнат типовим є `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw все одно обробляє хід, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Задавайте `"automatic"` лише тоді, коли вам потрібна застаріла поведінка, за якої звичайні відповіді публікуються назад у кімнату. Щоб застосувати таку саму поведінку видимих відповідей лише через інструмент і до прямих чатів, задайте `messages.visibleReplies: "message_tool"`. **Типи згадок:** - **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. -- **Текстові шаблони**: безпечні шаблони регулярних виразів у `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони й небезпечні вкладені повторення ігноруються. -- Шлюзування згадок застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). +- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони й небезпечні вкладені повторення ігноруються. +- Фільтрація згадок застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). ```json5 { messages: { + visibleReplies: "automatic", // global default for direct/source chats groupChat: { historyLimit: 50, visibleReplies: "message_tool", // default; use "automatic" for legacy final replies @@ -799,11 +797,11 @@ IRC має підтримку Plugin і налаштовується в `channel } ``` -`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його за допомогою `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути. +`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його за допомогою `channels..historyLimit` (або для окремого облікового запису). Задайте `0`, щоб вимкнути. -`messages.groupChat.visibleReplies` є глобальним для turn-ів із групових/канальних джерел; allowlist-и каналів і шлюзування згадок усе ще вирішують, чи обробляти turn. +`messages.visibleReplies` — це глобальне типове значення для source-turn; `messages.groupChat.visibleReplies` перевизначає його для групових/канальних source-turn. Списки дозволів каналів і фільтрація згадок усе одно визначають, чи буде оброблено хід. -#### Обмеження історії DM +#### Ліміти історії DM ```json5 { @@ -818,7 +816,7 @@ IRC має підтримку Plugin і налаштовується в `channel } ``` -Вирішення: перевизначення для окремого DM → типове значення провайдера → без обмеження (усе зберігається). +Порядок визначення: перевизначення для окремого DM → типове значення провайдера → без ліміту (усе зберігається). Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. @@ -874,32 +872,32 @@ IRC має підтримку Plugin і налаштовується в `channel -- Цей блок налаштовує поверхні команд. Поточний вбудований + комплектний каталог команд див. у [Slash-команди](/uk/tools/slash-commands). -- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналам/плагінам, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів/плагінів, а також у [Slash-команди](/uk/tools/slash-commands). +- Цей блок налаштовує поверхні команд. Поточний вбудований і комплектний каталог команд див. у [Slash Commands](/uk/tools/slash-commands). +- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналам/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів/Plugin, а також у [Slash Commands](/uk/tools/slash-commands). - Текстові команди мають бути **окремими** повідомленнями з початковим `/`. - `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим. -- `nativeSkills: "auto"` вмикає нативні команди навичок для Discord/Telegram, залишає Slack вимкненим. -- Перевизначення для каналу: `channels.discord.commands.native` (логічне значення або `"auto"`). `false` очищає раніше зареєстровані команди. -- Перевизначте реєстрацію нативних команд навичок для каналу за допомогою `channels..commands.nativeSkills`. -- `channels.telegram.customCommands` додає додаткові записи меню бота Telegram. +- `nativeSkills: "auto"` вмикає нативні команди Skills для Discord/Telegram, залишає Slack вимкненим. +- Перевизначення для окремого каналу: `channels.discord.commands.native` (логічне значення або `"auto"`). `false` очищає раніше зареєстровані команди. +- Перевизначайте реєстрацію нативних Skills для окремого каналу за допомогою `channels..commands.nativeSkills`. +- `channels.telegram.customCommands` додає додаткові пункти меню бота Telegram. - `bash: true` вмикає `! ` для оболонки хоста. Потрібні `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`. -- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів Gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; доступний лише для читання `/config show` залишається доступним для звичайних операторських клієнтів з областю запису. +- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів Gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; `/config show` лише для читання залишається доступним звичайним клієнтам оператора з областю запису. - `mcp: true` вмикає `/mcp` для конфігурації MCP-сервера, керованого OpenClaw, у `mcp.servers`. -- `plugins: true` вмикає `/plugins` для виявлення Plugin, установлення та керування ввімкненням/вимкненням. -- `channels..configWrites` обмежує зміни конфігурації для каналу (за замовчуванням: true). -- Для багатооблікових каналів `channels..accounts..configWrites` також обмежує записи, спрямовані на цей обліковий запис (наприклад, `/allowlist --config --account ` або `/config set channels..accounts....`). +- `plugins: true` вмикає `/plugins` для виявлення, встановлення й керування ввімкненням/вимкненням Plugin. +- `channels..configWrites` обмежує мутації конфігурації для окремого каналу (за замовчуванням: true). +- Для багаторахункових каналів `channels..accounts..configWrites` також обмежує записи, що націлені на цей обліковий запис (наприклад, `/allowlist --config --account ` або `/config set channels..accounts....`). - `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. За замовчуванням: `true`. -- `ownerAllowFrom` — це явний список дозволів власника для команд/інструментів лише для власника. Він окремий від `allowFrom`. -- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному промпті. Установіть `ownerDisplaySecret`, щоб керувати хешуванням. -- `allowFrom` задається для кожного провайдера. Якщо встановлено, це **єдине** джерело авторизації (списки дозволів/спарювання каналу та `useAccessGroups` ігноруються). -- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено. +- `ownerAllowFrom` — це явний список дозволених власників для команд/інструментів лише для власника. Він окремий від `allowFrom`. +- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному промпті. Задайте `ownerDisplaySecret`, щоб керувати хешуванням. +- `allowFrom` задається для кожного провайдера. Якщо встановлено, це **єдине** джерело авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються). +- `useAccessGroups: false` дає командам змогу обходити політики груп доступу, коли `allowFrom` не задано. - Мапа документації команд: - - вбудований + комплектний каталог: [Slash-команди](/uk/tools/slash-commands) - - поверхні команд, специфічні для каналів: [Канали](/uk/channels) + - вбудований і комплектний каталог: [Slash Commands](/uk/tools/slash-commands) + - поверхні команд для окремих каналів: [Channels](/uk/channels) - команди QQ Bot: [QQ Bot](/uk/channels/qqbot) - - команди спарювання: [Спарювання](/uk/channels/pairing) + - команди сполучення: [Pairing](/uk/channels/pairing) - команда картки LINE: [LINE](/uk/channels/line) - - Dreaming пам’яті: [Dreaming](/uk/concepts/dreaming) + - dreaming пам’яті: [Dreaming](/uk/concepts/dreaming) diff --git a/docs/uk/gateway/configuration-examples.md b/docs/uk/gateway/configuration-examples.md index 3248c5d06..9098dd202 100644 --- a/docs/uk/gateway/configuration-examples.md +++ b/docs/uk/gateway/configuration-examples.md @@ -1,20 +1,20 @@ --- read_when: - - Як налаштувати OpenClaw + - Як навчитися налаштовувати OpenClaw - Пошук прикладів конфігурації - Перше налаштування OpenClaw -summary: Приклади конфігурації, що відповідають схемі, для типових налаштувань OpenClaw +summary: Приклади конфігурації, що точно відповідають схемі, для поширених варіантів налаштування OpenClaw title: Приклади конфігурації x-i18n: - generated_at: "2026-04-28T11:10:47Z" + generated_at: "2026-04-29T10:10:40Z" model: gpt-5.5 provider: openai - source_hash: 77596ca08e296761edcda5b920e766a773a963b94147c0e163853834806fda6a + source_hash: c7de2f711305a4d06f2b31efeafdf72f083e0437155850b549e770ea90f43faa source_path: gateway/configuration-examples.md workflow: 16 --- -Приклади нижче узгоджено з поточною схемою конфігурації. Вичерпну довідку та примітки до окремих полів див. у [Конфігурації](/uk/gateway/configuration). +Наведені нижче приклади узгоджені з поточною схемою конфігурації. Повну довідку та примітки до кожного поля див. у [Конфігурації](/uk/gateway/configuration). ## Швидкий старт @@ -27,9 +27,9 @@ x-i18n: } ``` -Збережіть у `~/.openclaw/openclaw.json`, і ви зможете надсилати боту DM з цього номера. +Збережіть у `~/.openclaw/openclaw.json`, і ви зможете писати боту в приватні повідомлення з цього номера. -### Рекомендований початковий варіант +### Рекомендована початкова конфігурація ```json5 { @@ -49,6 +49,7 @@ x-i18n: }, }, messages: { + visibleReplies: "automatic", groupChat: { visibleReplies: "message_tool", // default; use "automatic" for legacy room replies }, @@ -58,7 +59,7 @@ x-i18n: ## Розгорнутий приклад (основні параметри) -> JSON5 дає змогу використовувати коментарі та кінцеві коми. Звичайний JSON також працює. +> JSON5 дає змогу використовувати коментарі та завершальні коми. Звичайний JSON також працює. ```json5 { @@ -108,6 +109,7 @@ x-i18n: // Message formatting messages: { messagePrefix: "[openclaw]", + visibleReplies: "automatic", responsePrefix: ">", ackReaction: "👀", ackReactionScope: "group-mentions", @@ -469,7 +471,7 @@ x-i18n: ## Поширені шаблони -### Спільна базова конфігурація skills з одним перевизначенням +### Спільна базова конфігурація Skills з одним перевизначенням ```json5 { @@ -488,7 +490,7 @@ x-i18n: - `agents.defaults.skills` є спільною базовою конфігурацією. - `agents.list[].skills` замінює цю базову конфігурацію для одного агента. -- Використовуйте `skills: []`, коли агент не має бачити жодних Skills. +- Використовуйте `skills: []`, коли агент не має бачити жодних skills. ### Налаштування для кількох платформ @@ -511,11 +513,11 @@ x-i18n: } ``` -### Автоматичне схвалення довіреної мережі вузлів +### Автоматичне схвалення довіреної мережі Node Залишайте сполучення пристроїв ручним, якщо ви не контролюєте мережевий шлях. Для виділеної -лабораторії або підмережі tailnet ви можете ввімкнути автоматичне схвалення пристрою вузла -під час першого підключення з точними CIDR або IP-адресами: +лабораторії або підмережі tailnet можна ввімкнути автоматичне схвалення пристрою Node +під час першого підключення за точними CIDR або IP: ```json5 { @@ -535,7 +537,7 @@ x-i18n: ### Захищений режим DM (спільна скринька / багатокористувацькі DM) -Якщо більше ніж одна людина може надсилати DM вашому боту (кілька записів у `allowFrom`, схвалення сполучення для кількох людей або `dmPolicy: "open"`), увімкніть **захищений режим DM**, щоб DM від різних відправників за замовчуванням не спільно використовували один контекст: +Якщо більше ніж одна людина може надсилати DM вашому боту (кілька записів у `allowFrom`, схвалення сполучення для кількох людей або `dmPolicy: "open"`), увімкніть **захищений режим DM**, щоб DM від різних відправників за замовчуванням не використовували один спільний контекст: ```json5 { @@ -559,10 +561,10 @@ x-i18n: } ``` -Для Discord/Slack/Google Chat/Microsoft Teams/Mattermost/IRC авторизація відправника за замовчуванням спершу використовує ID. -Вмикайте пряме змінне зіставлення за іменем/електронною поштою/ніком через `dangerouslyAllowNameMatching: true` для кожного каналу лише якщо ви явно приймаєте цей ризик. +Для Discord/Slack/Google Chat/Microsoft Teams/Mattermost/IRC авторизація відправника за замовчуванням насамперед базується на ID. +Вмикайте пряме зіставлення за змінними іменем/email/ніком через `dangerouslyAllowNameMatching: true` для кожного каналу лише тоді, коли ви явно приймаєте цей ризик. -### API-ключ Anthropic + резервний MiniMax +### Ключ Anthropic API + резерв MiniMax ```json5 { @@ -655,10 +657,10 @@ x-i18n: ## Поради -- Якщо ви встановлюєте `dmPolicy: "open"`, відповідний список `allowFrom` має містити `"*"`. -- ID провайдерів відрізняються (номери телефонів, ID користувачів, ID каналів). Звіртеся з документацією провайдера, щоб підтвердити формат. +- Якщо ви задаєте `dmPolicy: "open"`, відповідний список `allowFrom` має містити `"*"`. +- ID провайдерів відрізняються (номери телефонів, ID користувачів, ID каналів). Зверніться до документації провайдера, щоб підтвердити формат. - Необов’язкові розділи, які можна додати пізніше: `web`, `browser`, `ui`, `discovery`, `canvasHost`, `talk`, `signal`, `imessage`. -- Див. [Провайдери](/uk/providers) і [Усунення несправностей](/uk/gateway/troubleshooting) для докладніших нотаток щодо налаштування. +- Див. [Провайдери](/uk/providers) і [Усунення несправностей](/uk/gateway/troubleshooting), щоб отримати докладніші примітки з налаштування. ## Пов’язане diff --git a/docs/uk/gateway/configuration.md b/docs/uk/gateway/configuration.md index c32aef693..46b747582 100644 --- a/docs/uk/gateway/configuration.md +++ b/docs/uk/gateway/configuration.md @@ -1,43 +1,43 @@ --- read_when: - - Налаштування OpenClaw уперше + - Перше налаштування OpenClaw - Пошук поширених шаблонів конфігурації - Перехід до конкретних розділів конфігурації summary: 'Огляд конфігурації: поширені завдання, швидке налаштування та посилання на повний довідник' title: Конфігурація x-i18n: - generated_at: "2026-04-28T22:58:32Z" + generated_at: "2026-04-29T10:10:36Z" model: gpt-5.5 provider: openai - source_hash: b425a43ea6e40b8380d3a295dc9b190e5dbce7a6d044df786133bfadf3b07c0d + source_hash: 92eaad06dff8ec777adc881edbabc45048a376078d2814f2d3f7e7035abb2e8d source_path: gateway/configuration.md workflow: 16 --- -OpenClaw читає необов’язковий конфіг **JSON5** з `~/.openclaw/openclaw.json`. -Активний шлях конфігу має бути звичайним файлом. Макети `openclaw.json` -із symlink не підтримуються для записів, якими володіє OpenClaw; атомарний запис може замінити -шлях замість збереження symlink. Якщо ви зберігаєте конфіг поза -типовою директорією стану, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл. +OpenClaw зчитує необов’язкову конфігурацію **JSON5** з `~/.openclaw/openclaw.json`. +Активний шлях конфігурації має бути звичайним файлом. Макети з `openclaw.json` +як символьним посиланням не підтримуються для записів, якими керує OpenClaw; атомарний запис може замінити +шлях замість збереження символьного посилання. Якщо ви зберігаєте конфігурацію поза +каталогом стану за замовчуванням, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл. -Якщо файл відсутній, OpenClaw використовує безпечні типові значення. Поширені причини додати конфіг: +Якщо файл відсутній, OpenClaw використовує безпечні значення за замовчуванням. Поширені причини додати конфігурацію: -- Підключити канали й керувати тим, хто може писати боту -- Налаштувати моделі, інструменти, sandboxing або автоматизацію (cron, hooks) -- Налаштувати сесії, медіа, мережу або UI +- Під’єднати канали та керувати тим, хто може писати боту +- Налаштувати моделі, інструменти, sandboxing або автоматизацію (Cron, хуки) +- Налаштувати сеанси, медіа, мережу або UI Дивіться [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів. Агенти й автоматизація мають використовувати `config.schema.lookup` для точних -документів на рівні полів перед редагуванням конфігу. Використовуйте цю сторінку для орієнтованих на задачі вказівок і +документів на рівні полів перед редагуванням конфігурації. Використовуйте цю сторінку для завдань, орієнтованих на виконання, і [довідник з конфігурації](/uk/gateway/configuration-reference) для ширшої -карти полів і типових значень. +мапи полів і значень за замовчуванням. -**Уперше налаштовуєте конфігурацію?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [приклади конфігурації](/uk/gateway/configuration-examples) з готовими конфігами для копіювання. +**Вперше працюєте з конфігурацією?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [прикладів конфігурації](/uk/gateway/configuration-examples) з готовими конфігураціями для копіювання. -## Мінімальний конфіг +## Мінімальна конфігурація ```json5 // ~/.openclaw/openclaw.json @@ -47,72 +47,72 @@ OpenClaw читає необов’язковий конфіг + ```bash openclaw onboard # full onboarding flow openclaw configure # config wizard ``` - + ```bash openclaw config get agents.defaults.workspace openclaw config set agents.defaults.heartbeat.every "2h" openclaw config unset plugins.entries.brave.config.webSearch.apiKey ``` - - Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і скористайтеся вкладкою **Config**. - Control UI відтворює форму з живої схеми конфігу, включно з метаданими документації - `title` / `description` для полів, а також схемами plugin і каналів, коли вони - доступні, з редактором **Raw JSON** як запасним виходом. Для деталізованих + + Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і скористайтеся вкладкою **Конфігурація**. + UI керування відображає форму з живої схеми конфігурації, включно з метаданими документації + `title` / `description` для полів, а також схемами Plugin і каналів, коли + вони доступні, з редактором **сирого JSON** як запасним варіантом. Для деталізованих UI та інших інструментів Gateway також надає `config.schema.lookup`, щоб - отримати один вузол схеми в межах шляху та підсумки безпосередніх дочірніх елементів. + отримати один вузол схеми в межах шляху разом зі зведеннями безпосередніх дочірніх елементів. - - Редагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway стежить за файлом і застосовує зміни автоматично (див. [гаряче перезавантаження](#config-hot-reload)). + + Редагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway стежить за файлом і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)). -## Сувора валідація +## Сувора перевірка -OpenClaw приймає лише конфігурації, які повністю відповідають схемі. Невідомі ключі, неправильні типи або недійсні значення змушують Gateway **відмовитися запускатися**. Єдиний виняток на кореневому рівні — `$schema` (рядок), щоб редактори могли приєднувати метадані JSON Schema. +OpenClaw приймає лише конфігурації, які повністю відповідають схемі. Невідомі ключі, неправильні типи або недопустимі значення змушують Gateway **відмовитися від запуску**. Єдиний виняток на кореневому рівні — `$schema` (рядок), щоб редактори могли додавати метадані JSON Schema. -`openclaw config schema` друкує канонічну JSON Schema, яку використовують Control UI -і валідація. `config.schema.lookup` отримує один вузол у межах шляху та -підсумки дочірніх елементів для інструментів деталізації. Метадані документації полів `title`/`description` -проходять крізь вкладені об’єкти, wildcard (`*`), елементи масиву (`[]`) і гілки `anyOf`/ -`oneOf`/`allOf`. Схеми runtime plugin і каналів об’єднуються, коли завантажено -реєстр маніфестів. +`openclaw config schema` друкує канонічну JSON Schema, яку використовує UI керування +і перевірка. `config.schema.lookup` отримує один вузол у межах шляху разом зі +зведеннями дочірніх елементів для інструментів деталізації. Метадані документації полів `title`/`description` +передаються через вкладені об’єкти, wildcard (`*`), елементи масиву (`[]`) і гілки `anyOf`/ +`oneOf`/`allOf`. Схеми Plugin і каналів часу виконання об’єднуються, коли +завантажено реєстр manifest. -Коли валідація завершується помилкою: +Коли перевірка не проходить: - Gateway не завантажується - Працюють лише діагностичні команди (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`) - Запустіть `openclaw doctor`, щоб побачити точні проблеми - Запустіть `openclaw doctor --fix` (або `--yes`), щоб застосувати виправлення -Gateway зберігає довірену останню справну копію після кожного успішного запуску. -Якщо `openclaw.json` пізніше не проходить валідацію (або втрачає `gateway.mode`, різко -зменшується чи має випадково доданий рядок логу на початку), OpenClaw зберігає пошкоджений файл -як `.clobbered.*`, відновлює останню справну копію та записує причину відновлення -в лог. Наступний хід агента також отримує попередження системної події, щоб головний -агент не перезаписав відновлений конфіг наосліп. Підвищення до останньої справної копії +Gateway зберігає довірену останню робочу копію після кожного успішного запуску. +Якщо `openclaw.json` пізніше не проходить перевірку (або втрачає `gateway.mode`, різко +зменшується чи має випадково доданий на початку рядок журналу), OpenClaw зберігає пошкоджений файл +як `.clobbered.*`, відновлює останню робочу копію та записує причину відновлення +в журнал. Наступний хід агента також отримує попередження системної події, щоб головний +агент не переписав відновлену конфігурацію наосліп. Просування до останньої робочої копії пропускається, коли кандидат містить відредаговані заповнювачі секретів, як-от `***`. -Коли кожна проблема валідації обмежена `plugins.entries....`, OpenClaw -не виконує відновлення всього файлу. Він залишає поточний конфіг активним і -показує локальну помилку plugin, щоб невідповідність схеми plugin або версії хоста +Коли кожна проблема перевірки обмежена `plugins.entries....`, OpenClaw +не виконує відновлення всього файлу. Він залишає поточну конфігурацію активною та +показує локальну помилку Plugin, щоб невідповідність схеми Plugin або версії хоста не могла відкотити непов’язані налаштування користувача. -## Поширені задачі +## Поширені завдання - - Кожен канал має власний розділ конфігу під `channels.`. Дивіться спеціальну сторінку каналу для кроків налаштування: + + Кожен канал має власний розділ конфігурації в `channels.`. Дивіться спеціальну сторінку каналу для кроків налаштування: - [WhatsApp](/uk/channels/whatsapp) — `channels.whatsapp` - [Telegram](/uk/channels/telegram) — `channels.telegram` @@ -142,7 +142,7 @@ Gateway зберігає довірену останню справну копі - + Встановіть основну модель і необов’язкові резервні варіанти: ```json5 @@ -162,35 +162,36 @@ Gateway зберігає довірену останню справну копі } ``` - - `agents.defaults.models` визначає каталог моделей і діє як allowlist для `/model`. - - Використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додати записи allowlist без видалення наявних моделей. Звичайні заміни, які видалили б записи, відхиляються, якщо ви не передасте `--replace`. + - `agents.defaults.models` визначає каталог моделей і слугує allowlist для `/model`. + - Використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додати записи allowlist без видалення наявних моделей. Звичайні заміни, які видалили б записи, відхиляються, якщо не передати `--replace`. - Посилання на моделі використовують формат `provider/model` (наприклад, `anthropic/claude-opus-4-6`). - - `agents.defaults.imageMaxDimensionPx` керує зменшенням зображень transcript/tool (типово `1200`); нижчі значення зазвичай зменшують використання vision-token у запусках із великою кількістю знімків екрана. - - Дивіться [CLI моделей](/uk/concepts/models) для перемикання моделей у чаті та [відмовостійкість моделей](/uk/concepts/model-failover) для ротації auth і поведінки резервних варіантів. - - Для власних/self-hosted провайдерів дивіться [власні провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику. + - `agents.defaults.imageMaxDimensionPx` керує зменшенням масштабу зображень у транскрипті/інструментах (типово `1200`); нижчі значення зазвичай зменшують використання vision-токенів у запусках із великою кількістю знімків екрана. + - Див. [CLI моделей](/uk/concepts/models) для перемикання моделей у чаті та [Відмовостійке перемикання моделей](/uk/concepts/model-failover) для ротації автентифікації й поведінки резервного переходу. + - Для користувацьких/самостійно розміщених провайдерів див. [Користувацькі провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику. - + Доступ до DM керується для кожного каналу через `dmPolicy`: - - `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для схвалення - - `"allowlist"`: лише відправники в `allowFrom` (або у сховищі paired allow) - - `"open"`: дозволити всі вхідні DM (потребує `allowFrom: ["*"]`) + - `"pairing"` (типово): невідомі відправники отримують одноразовий код сполучення для схвалення + - `"allowlist"`: лише відправники в `allowFrom` (або в сховищі дозволених сполучених відправників) + - `"open"`: дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) - `"disabled"`: ігнорувати всі DM Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для каналу. - Дивіться [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному каналу. + Див. [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному каналу. - - Групові повідомлення типово **вимагають згадки**. Налаштуйте шаблони тригерів для кожного агента й залишайте видимі відповіді в кімнаті на типовому шляху message-tool, якщо ви навмисно не хочете legacy автоматичних фінальних відповідей: + + Групові повідомлення типово **вимагають згадки**. Налаштуйте шаблони запуску для кожного агента й залишайте видимі відповіді в кімнаті на типовому шляху message-tool, якщо навмисно не хочете використовувати застарілі автоматичні фінальні відповіді: ```json5 { messages: { + visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere groupChat: { visibleReplies: "message_tool", // default; use "automatic" for legacy room replies }, @@ -215,13 +216,13 @@ Gateway зберігає довірену останню справну копі - **Згадки в метаданих**: нативні @-згадки (WhatsApp tap-to-mention, Telegram @bot тощо) - **Текстові шаблони**: безпечні regex-шаблони в `mentionPatterns` - - **Видимі відповіді**: `message_tool` залишає звичайні фінальні відповіді приватними; агент має викликати `message(action=send)`, щоб опублікувати видимо в групі/каналі. - - Дивіться [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для режимів видимих відповідей, перевизначень на рівні каналу та режиму self-chat. + - **Видимі відповіді**: `messages.visibleReplies` може глобально вимагати надсилання через message-tool; `messages.groupChat.visibleReplies` перевизначає це для груп/каналів. + - Див. [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для режимів видимих відповідей, перевизначень для кожного каналу та режиму self-chat. - - Використовуйте `agents.defaults.skills` для спільної бази, а потім перевизначайте конкретних + + Використовуйте `agents.defaults.skills` як спільну базову конфігурацію, а потім перевизначайте конкретних агентів через `agents.list[].skills`: ```json5 @@ -239,15 +240,15 @@ Gateway зберігає довірену останню справну копі } ``` - - Пропустіть `agents.defaults.skills`, щоб Skills типово були без обмежень. - - Пропустіть `agents.list[].skills`, щоб успадкувати типові значення. - - Встановіть `agents.list[].skills: []`, щоб не мати Skills. - - Дивіться [Skills](/uk/tools/skills), [конфіг Skills](/uk/tools/skills-config) і - [довідник з конфігурації](/uk/gateway/config-agents#agents-defaults-skills). + - Не вказуйте `agents.defaults.skills`, щоб Skills типово були без обмежень. + - Не вказуйте `agents.list[].skills`, щоб успадковувати типові значення. + - Задайте `agents.list[].skills: []`, щоб вимкнути Skills. + - Див. [Skills](/uk/tools/skills), [Конфігурація Skills](/uk/tools/skills-config) і + [Довідник конфігурації](/uk/gateway/config-agents#agents-defaults-skills). - + Керуйте тим, наскільки агресивно Gateway перезапускає канали, що виглядають застарілими: ```json5 @@ -270,16 +271,16 @@ Gateway зберігає довірену останню справну копі } ``` - - Встановіть `gateway.channelHealthCheckMinutes: 0`, щоб вимкнути перезапуски health-monitor глобально. + - Задайте `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски монітора стану. - `channelStaleEventThresholdMinutes` має бути більшим або дорівнювати інтервалу перевірки. - - Використовуйте `channels..healthMonitor.enabled` або `channels..accounts..healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного каналу чи облікового запису без вимкнення глобального монітора. - - Дивіться [перевірки здоров’я](/uk/gateway/health) для операційного налагодження та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів. + - Використовуйте `channels..healthMonitor.enabled` або `channels..accounts..healthMonitor.enabled`, щоб вимкнути автоматичні перезапуски для одного каналу чи облікового запису, не вимикаючи глобальний монітор. + - Див. [Перевірки стану](/uk/gateway/health) для операційного налагодження та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів. - - Дайте локальним клієнтам більше часу для завершення pre-auth WebSocket handshake на - завантажених або малопотужних хостах: + + Дайте локальним клієнтам більше часу для завершення WebSocket-рукостискання до автентифікації на + навантажених або малопотужних хостах: ```json5 { @@ -289,14 +290,14 @@ Gateway зберігає довірену останню справну копі } ``` - - Типове значення — `15000` мілісекунд. - - `OPENCLAW_HANDSHAKE_TIMEOUT_MS` досі має пріоритет для одноразових перевизначень сервісу або shell. - - Спочатку краще виправити зависання запуску/event-loop; цей регулятор призначений для хостів, які справні, але повільні під час warmup. + - Типове значення: `15000` мілісекунд. + - `OPENCLAW_HANDSHAKE_TIMEOUT_MS` і надалі має пріоритет для одноразових перевизначень сервісу або оболонки. + - Спершу краще виправити зависання запуску/циклу подій; цей параметр призначений для хостів, які справні, але повільні під час прогрівання. - - Сесії керують безперервністю й ізоляцією розмов: + + Сесії керують безперервністю та ізоляцією розмов: ```json5 { @@ -317,14 +318,14 @@ Gateway зберігає довірену останню справну копі ``` - `dmScope`: `main` (спільний) | `per-peer` | `per-channel-peer` | `per-account-channel-peer` - - `threadBindings`: глобальні типові значення для маршрутизації сеансів, прив’язаних до потоків (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`). - - Див. [Керування сеансами](/uk/concepts/session) для областей дії, посилань ідентичності та політики надсилання. + - `threadBindings`: глобальні значення за замовчуванням для маршрутизації сеансів, прив’язаних до треду (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`). + - Див. [Керування сеансами](/uk/concepts/session) щодо областей дії, зв’язків ідентичності та політики надсилання. - Див. [повний довідник](/uk/gateway/config-agents#session) для всіх полів. - - Запускайте сеанси агентів в ізольованих середовищах sandbox: + + Запускайте сеанси агентів в ізольованих середовищах виконання sandbox: ```json5 { @@ -345,10 +346,10 @@ Gateway зберігає довірену останню справну копі - + Push через relay налаштовується в `openclaw.json`. - Установіть це в конфігурації gateway: + Задайте це в конфігурації Gateway: ```json5 { @@ -374,35 +375,35 @@ Gateway зберігає довірену останню справну копі Що це робить: - - Дає змогу gateway надсилати `push.test`, сигнали пробудження та пробудження для повторного підключення через зовнішній relay. - - Використовує дозвіл на надсилання з областю дії реєстрації, пересланий спареним застосунком iOS. Gateway не потребує relay-токена для всього розгортання. - - Прив’язує кожну relay-реєстрацію до ідентичності gateway, з якою спарено застосунок iOS, щоб інший gateway не міг повторно використати збережену реєстрацію. - - Залишає локальні/ручні збірки iOS на прямих APNs. Надсилання через relay застосовується лише до офіційних поширюваних збірок, зареєстрованих через relay. - - Має збігатися з базовою URL relay, вбудованою в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання доходив до одного й того самого розгортання relay. + - Дозволяє Gateway надсилати `push.test`, сигнали пробудження та пробудження для повторного підключення через зовнішній relay. + - Використовує grant на надсилання з областю дії реєстрації, переданий спареним застосунком iOS. Gateway не потребує relay-токена для всього розгортання. + - Прив’язує кожну реєстрацію через relay до ідентичності Gateway, з якою спарився застосунок iOS, тому інший Gateway не може повторно використати збережену реєстрацію. + - Залишає локальні/ручні збірки iOS на прямих APNs. Надсилання через relay застосовується лише до офіційних розповсюджуваних збірок, зареєстрованих через relay. + - Має збігатися з базовою URL-адресою relay, вбудованою в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay. - Наскрізний потік: + Наскрізний процес: - 1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тією самою базовою URL relay. - 2. Налаштуйте `gateway.push.apns.relay.baseUrl` на gateway. - 3. Спаруйте застосунок iOS із gateway і дайте підключитися сеансам вузла та оператора. - 4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest і квитанції застосунку, а потім публікує relay-підтримуване навантаження `push.apns.register` до спареного gateway. - 5. Gateway зберігає relay-дескриптор і дозвіл на надсилання, а потім використовує їх для `push.test`, сигналів пробудження та пробуджень для повторного підключення. + 1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тією самою базовою URL-адресою relay. + 2. Налаштуйте `gateway.push.apns.relay.baseUrl` на Gateway. + 3. Спарте застосунок iOS із Gateway і дозвольте підключитися сеансам node та оператора. + 4. Застосунок iOS отримує ідентичність Gateway, реєструється в relay за допомогою App Attest і квитанції застосунку, а потім публікує payload `push.apns.register` через relay до спареного Gateway. + 5. Gateway зберігає relay handle і grant на надсилання, а потім використовує їх для `push.test`, сигналів пробудження та пробуджень для повторного підключення. Операційні примітки: - - Якщо перемикаєте застосунок iOS на інший gateway, повторно підключіть застосунок, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього gateway. - - Якщо випускаєте нову збірку iOS, що вказує на інше розгортання relay, застосунок оновлює свою кешовану relay-реєстрацію замість повторного використання старого джерела relay. + - Якщо ви перемикаєте застосунок iOS на інший Gateway, повторно підключіть застосунок, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього Gateway. + - Якщо ви випускаєте нову збірку iOS, що вказує на інше розгортання relay, застосунок оновлює свою кешовану relay-реєстрацію замість повторного використання старого джерела relay. Примітка щодо сумісності: - - `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` досі працюють як тимчасові перевизначення через env. - - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається лише для розробки на loopback як аварійний обхід; не зберігайте HTTP URL relay у конфігурації. + - `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення env. + - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається аварійним шляхом розробки лише для loopback; не зберігайте HTTP URL-адреси relay у конфігурації. - Див. [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного потоку та [Потік автентифікації й довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay. + Див. [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного процесу та [Автентифікація й потік довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay. - + ```json5 { agents: { @@ -416,14 +417,14 @@ Gateway зберігає довірену останню справну копі } ``` - - `every`: рядок тривалості (`30m`, `2h`). Установіть `0m`, щоб вимкнути. + - `every`: рядок тривалості (`30m`, `2h`). Задайте `0m`, щоб вимкнути. - `target`: `last` | `none` | `` (наприклад `discord`, `matrix`, `telegram` або `whatsapp`) - - `directPolicy`: `allow` (типово) або `block` для цілей Heartbeat у стилі DM + - `directPolicy`: `allow` (за замовчуванням) або `block` для цілей Heartbeat у стилі DM - Див. [Heartbeat](/uk/gateway/heartbeat) для повного посібника. - + ```json5 { cron: { @@ -438,13 +439,13 @@ Gateway зберігає довірену останню справну копі } ``` - - `sessionRetention`: видаляти завершені ізольовані сеанси запусків із `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути). - - `runLog`: обрізати `cron/runs/.jsonl` за розміром і збереженими рядками. - - Див. [Завдання Cron](/uk/automation/cron-jobs) для огляду функції та прикладів CLI. + - `sessionRetention`: видаляти завершені ізольовані сеанси запусків із `sessions.json` (за замовчуванням `24h`; задайте `false`, щоб вимкнути). + - `runLog`: обрізати `cron/runs/.jsonl` за розміром і кількістю збережених рядків. + - Див. [Завдання Cron](/uk/automation/cron-jobs) для огляду функцій і прикладів CLI. - + Увімкніть HTTP Webhook endpoints на Gateway: ```json5 @@ -469,19 +470,19 @@ Gateway зберігає довірену останню справну копі ``` Примітка щодо безпеки: - - Сприймайте весь вміст payload hook/webhook як недовірені вхідні дані. + - Розглядайте весь вміст payload hook/webhook як недовірений ввід. - Використовуйте окремий `hooks.token`; не використовуйте повторно спільний токен Gateway. - - Автентифікація hook працює лише через заголовок (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються. - - `hooks.path` не може бути `/`; тримайте вхід webhook на окремому підшляху, наприклад `/hooks`. + - Автентифікація hook працює лише через заголовок (`Authorization: Bearer ...` або `x-openclaw-token`); токени в query string відхиляються. + - `hooks.path` не може бути `/`; тримайте webhook ingress на виділеному підшляху, наприклад `/hooks`. - Тримайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте чітко обмежене налагодження. - - Якщо вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сеансів, вибрані викликачем. - - Для агентів, керованих hook, надавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише повідомлення плюс sandboxing, де це можливо). + - Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сеансів, вибрані викликачем. + - Для агентів, керованих hook, віддавайте перевагу потужним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс sandboxing, де можливо). - Див. [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів mapping і інтеграції Gmail. + Див. [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів мапінгу та інтеграції Gmail. - + Запускайте кілька ізольованих агентів з окремими робочими просторами та сеансами: ```json5 @@ -499,11 +500,11 @@ Gateway зберігає довірену останню справну копі } ``` - Див. [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) для правил прив’язки та профілів доступу для кожного агента. + Див. [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) щодо правил прив’язки та профілів доступу для окремих агентів. - + Використовуйте `$include`, щоб організувати великі конфігурації: ```json5 @@ -518,50 +519,50 @@ Gateway зберігає довірену останню справну копі ``` - **Один файл**: замінює об’єкт, що його містить - - **Масив файлів**: глибоко об’єднується за порядком (пізніший має пріоритет) - - **Сусідні ключі**: об’єднуються після include (перевизначають включені значення) + - **Масив файлів**: глибоко зливається за порядком (пізніший має пріоритет) + - **Сусідні ключі**: зливаються після include (перевизначають включені значення) - **Вкладені include**: підтримуються до 10 рівнів углиб - - **Відносні шляхи**: розв’язуються відносно файлу, який виконує include + - **Відносні шляхи**: розв’язуються відносно файлу, що включає - **Записи, керовані OpenClaw**: коли запис змінює лише один розділ верхнього рівня, підкріплений include одного файлу, наприклад `plugins: { $include: "./plugins.json5" }`, OpenClaw оновлює цей включений файл і залишає `openclaw.json` без змін - - **Непідтримуваний наскрізний запис**: include в корені, масиви include та include - із сусідніми перевизначеннями завершуються закритою помилкою для записів, керованих OpenClaw, замість - вирівнювання конфігурації - - **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу та циклічних include + - **Непідтримуваний наскрізний запис**: кореневі include, масиви include та include + із сусідніми перевизначеннями закриваються з помилкою для записів, керованих OpenClaw, замість + сплющення конфігурації + - **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок розбору та циклічних include ## Гаряче перезавантаження конфігурації -Gateway відстежує `~/.openclaw/openclaw.json` і застосовує зміни автоматично — для більшості налаштувань ручний перезапуск не потрібен. +Gateway стежить за `~/.openclaw/openclaw.json` і автоматично застосовує зміни — ручний перезапуск для більшості налаштувань не потрібен. Прямі редагування файлу вважаються недовіреними, доки не пройдуть валідацію. Watcher чекає, -поки вщухнуть тимчасові записи/перейменування редактора, читає фінальний файл і відхиляє -некоректні зовнішні редагування, відновлюючи останню відому справну конфігурацію. Записи конфігурації, керовані OpenClaw, -використовують той самий schema gate перед записом; руйнівні перезаписи, як-от -видалення `gateway.mode` або зменшення файлу більш ніж наполовину, відхиляються -і зберігаються як `.rejected.*` для перевірки. +доки вщухнуть тимчасові записи/перейменування редактора, читає фінальний файл і відхиляє +недійсні зовнішні редагування, відновлюючи останню відому справну конфігурацію. Записи конфігурації, +керовані OpenClaw, використовують той самий schema gate перед записом; руйнівні перезаписи, +як-от видалення `gateway.mode` або зменшення файлу більш ніж наполовину, відхиляються +та зберігаються як `.rejected.*` для перевірки. -Помилки локальної валідації Plugin є винятком: якщо всі проблеми розташовані під +Збої локальної валідації Plugin є винятком: якщо всі проблеми містяться в `plugins.entries....`, перезавантаження зберігає поточну конфігурацію та повідомляє про проблему Plugin замість відновлення `.last-good`. -Якщо бачите `Config auto-restored from last-known-good` або -`config reload restored last-known-good config` у логах, перевірте відповідний -файл `.clobbered.*` поруч із `openclaw.json`, виправте відхилений payload, а потім запустіть +Якщо в журналах ви бачите `Config auto-restored from last-known-good` або +`config reload restored last-known-good config`, перевірте відповідний файл +`.clobbered.*` поруч із `openclaw.json`, виправте відхилений payload, а потім запустіть `openclaw config validate`. Див. [Усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config) -для контрольного списку відновлення. +для checklist відновлення. ### Режими перезавантаження -| Режим | Поведінка | -| ---------------------- | --------------------------------------------------------------------------------------- | -| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускає для критичних. | -| **`hot`** | Гаряче застосовує лише безпечні зміни. Логує попередження, коли потрібен перезапуск — ви виконуєте його. | -| **`restart`** | Перезапускає Gateway за будь-якої зміни конфігурації, безпечної чи ні. | -| **`off`** | Вимикає відстеження файлу. Зміни набувають чинності під час наступного ручного перезапуску. | +| Режим | Поведінка | +| ---------------------- | ------------------------------------------------------------------------------------------ | +| **`hybrid`** (за замовчуванням) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускає для критичних. | +| **`hot`** | Гаряче застосовує лише безпечні зміни. Записує попередження, коли потрібен перезапуск — ви виконуєте його самі. | +| **`restart`** | Перезапускає Gateway за будь-якої зміни конфігурації, безпечної чи ні. | +| **`off`** | Вимикає спостереження за файлами. Зміни набувають чинності під час наступного ручного перезапуску. | ```json5 { @@ -571,20 +572,20 @@ Gateway відстежує `~/.openclaw/openclaw.json` і застосовує } ``` -### Що застосовується гаряче, а що потребує перезапуску +### Що гаряче застосовується, а що потребує перезапуску -Більшість полів застосовуються гаряче без простою. У режимі `hybrid` зміни, які потребують перезапуску, обробляються автоматично. +Більшість полів гаряче застосовуються без простою. У режимі `hybrid` зміни, що потребують перезапуску, обробляються автоматично. -| Категорія | Поля | Потрібен перезапуск? | -| ------------------ | ----------------------------------------------------------------- | -------------------- | -| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані та plugin-канали | Ні | -| Агент і моделі | `agent`, `agents`, `models`, `routing` | Ні | -| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні | -| Сеанси й повідомлення | `session`, `messages` | Ні | -| Інструменти й медіа | `tools`, `browser`, `skills`, `mcp`, `audio`, `talk` | Ні | -| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні | -| Сервер Gateway | `gateway.*` (порт, bind, auth, Tailscale, TLS, HTTP) | **Так** | -| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** | +| Категорія | Поля | Потрібен перезапуск? | +| ------------------- | ----------------------------------------------------------------- | -------------------- | +| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані та plugin-канали | Ні | +| Агент і моделі | `agent`, `agents`, `models`, `routing` | Ні | +| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні | +| Сеанси й повідомлення | `session`, `messages` | Ні | +| Інструменти й медіа | `tools`, `browser`, `skills`, `mcp`, `audio`, `talk` | Ні | +| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні | +| Сервер Gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** | +| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** | `gateway.reload` і `gateway.remote` є винятками — їх зміна **не** запускає перезапуск. @@ -592,29 +593,40 @@ Gateway відстежує `~/.openclaw/openclaw.json` і застосовує ### Планування перезавантаження -Коли ви редагуєте вихідний файл, на який є посилання через `$include`, OpenClaw планує перезавантаження на основі авторського макета джерела, а не сплощеного подання в пам’яті. -Це робить рішення гарячого перезавантаження (гаряче застосування чи перезапуск) передбачуваними, навіть коли один розділ верхнього рівня міститься у власному включеному файлі, наприклад -`plugins: { $include: "./plugins.json5" }`. Планування перезавантаження завершується без змін, якщо макет джерела неоднозначний. +Коли ви редагуєте вихідний файл, на який є посилання через `$include`, OpenClaw планує +перезавантаження за структурою, заданою у вихідному файлі, а не за пласким поданням у пам’яті. +Це зберігає передбачуваність рішень гарячого перезавантаження (гаряче застосування чи перезапуск), навіть коли +один розділ верхнього рівня міститься у власному підключеному файлі, наприклад +`plugins: { $include: "./plugins.json5" }`. Планування перезавантаження завершується безпечним збоєм, якщо +структура джерела неоднозначна. -## Config RPC (програмні оновлення) +## RPC конфігурації (програмні оновлення) -Для інструментів, які записують конфігурацію через API Gateway, надавайте перевагу такому потоку: +Для інструментів, які записують конфігурацію через API Gateway, надавайте перевагу такому процесу: -- `config.schema.lookup`, щоб переглянути одне піддерево (поверхневий вузол схеми + зведення дочірніх елементів) +- `config.schema.lookup`, щоб перевірити одне піддерево (поверхневий вузол схеми + зведення + дочірніх елементів) - `config.get`, щоб отримати поточний знімок разом із `hash` -- `config.patch` для часткових оновлень (JSON merge patch: об’єкти об’єднуються, `null` видаляє, масиви замінюються) -- `config.apply` лише коли ви маєте намір замінити всю конфігурацію +- `config.patch` для часткових оновлень (JSON merge patch: об’єкти об’єднуються, `null` + видаляє, масиви замінюються) +- `config.apply` лише тоді, коли ви маєте намір замінити всю конфігурацію - `update.run` для явного самооновлення з перезапуском -- `update.status`, щоб переглянути останній маркер перезапуску після оновлення та перевірити запущену версію після перезапуску +- `update.status`, щоб перевірити останній sentinel перезапуску оновлення та підтвердити запущену версію після перезапуску -Агенти мають розглядати `config.schema.lookup` як першу зупинку для точних документів і обмежень на рівні полів. Використовуйте [Довідник із конфігурації](/uk/gateway/configuration-reference), коли потрібна ширша мапа конфігурації, стандартні значення або посилання на спеціальні довідники підсистем. +Агенти мають вважати `config.schema.lookup` першою зупинкою для точних +документів і обмежень на рівні полів. Використовуйте [Довідник конфігурації](/uk/gateway/configuration-reference), +коли потрібні ширша мапа конфігурації, типові значення або посилання на окремі +довідники підсистем. -Записи площини керування (`config.apply`, `config.patch`, `update.run`) мають обмеження частоти: 3 запити за 60 секунд на `deviceId+clientIp`. Запити на перезапуск об’єднуються, після чого застосовується 30-секундна пауза між циклами перезапуску. -`update.status` доступний лише для читання, але має адміністративну область дії, оскільки маркер перезапуску може містити зведення кроків оновлення та хвости виводу команд. +Записи до площини керування (`config.apply`, `config.patch`, `update.run`) +обмежені частотою до 3 запитів за 60 секунд на `deviceId+clientIp`. Запити на перезапуск +об’єднуються, а потім примусово застосовується 30-секундне очікування між циклами перезапуску. +`update.status` доступний лише для читання, але обмежений адміністративною областю, оскільки sentinel перезапуску може +містити зведення кроків оновлення та кінцеві фрагменти виводу команд. -Приклад часткового патча: +Приклад часткового patch: ```bash openclaw gateway call config.get --params '{}' # capture payload.hash @@ -624,7 +636,9 @@ openclaw gateway call config.patch --params '{ }' ``` -І `config.apply`, і `config.patch` приймають `raw`, `baseHash`, `sessionKey`, `note` та `restartDelayMs`. `baseHash` обов’язковий для обох методів, коли конфігурація вже існує. +І `config.apply`, і `config.patch` приймають `raw`, `baseHash`, `sessionKey`, +`note` і `restartDelayMs`. `baseHash` обов’язковий для обох методів, коли +конфігурація вже існує. ## Змінні середовища @@ -644,8 +658,8 @@ OpenClaw читає змінні середовища з батьківсько } ``` - - Якщо ввімкнено й очікувані ключі не задані, OpenClaw запускає вашу login shell та імпортує лише відсутні ключі: + + Якщо ввімкнено і очікувані ключі не задані, OpenClaw запускає вашу оболонку входу та імпортує лише відсутні ключі: ```json5 { @@ -658,7 +672,7 @@ OpenClaw читає змінні середовища з батьківсько Еквівалент змінної середовища: `OPENCLAW_LOAD_SHELL_ENV=1` - + Посилайтеся на змінні середовища в будь-якому рядковому значенні конфігурації за допомогою `${VAR_NAME}`: ```json5 @@ -670,15 +684,15 @@ OpenClaw читає змінні середовища з батьківсько Правила: -- Збігаються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*` +- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*` - Відсутні або порожні змінні спричиняють помилку під час завантаження -- Екрануйте як `$${VAR}` для буквального виводу +- Екрануйте за допомогою `$${VAR}` для буквального виводу - Працює всередині файлів `$include` - Вбудована підстановка: `"${BASE}/v1"` → `"https://api.example.com/v1"` - + Для полів, які підтримують об’єкти SecretRef, можна використовувати: ```json5 @@ -711,22 +725,22 @@ OpenClaw читає змінні середовища з батьківсько } ``` -Докладні відомості про SecretRef (зокрема `secrets.providers` для `env`/`file`/`exec`) наведено в [Керуванні секретами](/uk/gateway/secrets). -Підтримувані шляхи облікових даних перелічено в [Поверхні облікових даних SecretRef](/uk/reference/secretref-credential-surface). +Подробиці SecretRef (зокрема `secrets.providers` для `env`/`file`/`exec`) наведено в [Керуванні секретами](/uk/gateway/secrets). +Підтримувані шляхи облікових даних перелічені в [Поверхні облікових даних SecretRef](/uk/reference/secretref-credential-surface). -Повний пріоритет і джерела див. у [Середовище](/uk/help/environment). +Див. [Середовище](/uk/help/environment), щоб дізнатися про повний порядок пріоритету та джерела. ## Повний довідник -Повний довідник за всіма полями див. у **[Довіднику з конфігурації](/uk/gateway/configuration-reference)**. +Повний довідник по кожному полю див. у **[Довіднику конфігурації](/uk/gateway/configuration-reference)**. --- -_Пов’язано: [Приклади конфігурації](/uk/gateway/configuration-examples) · [Довідник із конфігурації](/uk/gateway/configuration-reference) · [Doctor](/uk/gateway/doctor)_ +_Пов’язано: [Приклади конфігурації](/uk/gateway/configuration-examples) · [Довідник конфігурації](/uk/gateway/configuration-reference) · [Doctor](/uk/gateway/doctor)_ -## Пов’язано +## Пов’язане -- [Довідник із конфігурації](/uk/gateway/configuration-reference) +- [Довідник конфігурації](/uk/gateway/configuration-reference) - [Приклади конфігурації](/uk/gateway/configuration-examples) - [Runbook Gateway](/uk/gateway)