From fc0ab82a254c4232a3758352c8b0c70515455f8b Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 29 Apr 2026 21:07:57 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 477 +++++++++++++++++----------------- docs/uk/channels/slack.md | 495 +++++++++++++++++++----------------- docs/uk/cli/config.md | 199 +++++++++------ docs/uk/install/exe-dev.md | 139 +++++++--- 4 files changed, 728 insertions(+), 582 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index 4843f501b..e2af4a51c 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -1,22 +1,22 @@ --- read_when: - Робота над функціями каналу Discord -summary: Стан підтримки бота Discord, можливості та конфігурація +summary: Стан підтримки бота Discord, можливості та налаштування title: Discord x-i18n: - generated_at: "2026-04-29T15:39:19Z" + generated_at: "2026-04-29T21:05:30Z" model: gpt-5.5 provider: openai - source_hash: a1d3dc0962b6140a727ea8e08f01227e18d2feffa7ce50c3614fb7aa4dd9d044 + source_hash: 2d374742a097682f33529f93709978f21b63a94cd4da803ff78ff8dfcb1f9b81 source_path: channels/discord.md workflow: 16 --- -Готово для DM і каналів гільдій через офіційний Discord gateway. +Готово для особистих повідомлень і каналів гільдій через офіційний Discord gateway. - Discord DM за замовчуванням працюють у режимі сполучення. + Особисті повідомлення Discord за замовчуванням працюють у режимі сполучення. Нативна поведінка команд і каталог команд. @@ -28,22 +28,22 @@ x-i18n: ## Швидке налаштування -Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і сполучити його з OpenClaw. Рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спочатку створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). +Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і сполучити його з OpenClaw. Рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спершу створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). - Перейдіть на [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть його приблизно "OpenClaw". + Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть його, наприклад, "OpenClaw". - Натисніть **Bot** на бічній панелі. Установіть **Username** на ім’я, яким ви називаєте свого агента OpenClaw. + Натисніть **Bot** на бічній панелі. Установіть **Username** на будь-яку назву, якою ви називаєте свого агента OpenClaw. - Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і увімкніть: + Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і ввімкніть: - **Message Content Intent** (обов’язково) - **Server Members Intent** (рекомендовано; обов’язково для allowlist ролей і зіставлення імен з ID) - - **Presence Intent** (необов’язково; потрібен лише для оновлень присутності) + - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) @@ -51,17 +51,17 @@ x-i18n: Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. - Попри назву, це створює ваш перший токен — нічого не "скидається." + Попри назву, це створює ваш перший токен — нічого насправді не "скидається". - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться. + Скопіюйте токен і збережіть його. Це ваш **Bot Token**, і він незабаром знадобиться. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на сервер. - Прокрутіть униз до **OAuth2 URL Generator** і увімкніть: + Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть: - `bot` - `applications.commands` @@ -77,42 +77,51 @@ x-i18n: - Attach Files - Add Reactions (необов’язково) - Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у workflows форумних або медіаканалів, які створюють або продовжують гілку, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднатися. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема у сценаріях форумів або медіаканалів, які створюють чи продовжують тред, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord. - - Повернувшись у застосунок Discord, потрібно увімкнути Developer Mode, щоб мати змогу копіювати внутрішні ID. + + Повернувшись у застосунок Discord, потрібно ввімкнути режим розробника, щоб копіювати внутрішні ID. - 1. Натисніть **User Settings** (значок шестерні поруч з аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою миші **піктограму сервера** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою миші **власний аватар** → **Copy User ID** + 1. Натисніть **User Settings** (іконка шестерні поруч з аватаром) → **Advanced** → увімкніть **Developer Mode** + 2. Клацніть правою кнопкою **іконку сервера** на бічній панелі → **Copy Server ID** + 3. Клацніть правою кнопкою **власний аватар** → **Copy User ID** - Збережіть свої **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три до OpenClaw. + Збережіть **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви надішлете всі три значення до OpenClaw. - - Щоб сполучення працювало, Discord має дозволити вашому боту надсилати вам DM. Клацніть правою кнопкою миші **піктограму сервера** → **Privacy Settings** → увімкніть **Direct Messages**. + + Щоб сполучення працювало, Discord має дозволяти боту надсилати вам особисті повідомлення. Клацніть правою кнопкою **іконку сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дозволяє учасникам сервера (включно з ботами) надсилати вам DM. Залиште це увімкненим, якщо хочете використовувати Discord DM з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути DM після сполучення. + Це дозволяє учасникам сервера (зокрема ботам) надсилати вам особисті повідомлення. Залиште це ввімкненим, якщо хочете використовувати особисті повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, можете вимкнути особисті повідомлення після сполучення. - - Токен вашого Discord бота є секретом (як пароль). Установіть його на машині, де запущено OpenClaw, перш ніж писати своєму агенту. + + Токен бота Discord є секретом (як пароль). Задайте його на машині, де працює OpenClaw, перш ніж писати агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" -openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN --dry-run -openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN -openclaw config set channels.discord.enabled true --strict-json +cat > discord.patch.json5 <<'JSON5' +{ + channels: { + discord: { + enabled: true, + token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }, + }, + }, +} +JSON5 +openclaw config patch --file ./discord.patch.json5 --dry-run +openclaw config patch --file ./discord.patch.json5 openclaw gateway ``` - Якщо OpenClaw уже запущено як фонову службу, перезапустіть його через Mac-застосунок OpenClaw або зупинивши й повторно запустивши процес `openclaw gateway run`. - Для встановлень керованої служби виконайте `openclaw gateway install` з оболонки, де присутня `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб служба могла розв’язати env SecretRef після перезапуску. + Якщо OpenClaw уже працює як фонова служба, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й заново запустивши процес `openclaw gateway run`. + Для встановлень як керованої служби запустіть `openclaw gateway install` з оболонки, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб служба могла розв’язати env SecretRef після перезапуску. @@ -120,12 +129,12 @@ openclaw gateway - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord — ваш перший канал, натомість скористайтеся вкладкою CLI / config. + Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord є вашим першим каналом, натомість використайте вкладку CLI / конфігурації. - > "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``." + > "Я вже задав токен бота Discord у конфігурації. Завершіть налаштування Discord з User ID `` і Server ID ``." - - Якщо ви віддаєте перевагу файловій конфігурації, установіть: + + Якщо ви віддаєте перевагу файловій конфігурації, задайте: ```json5 { @@ -142,27 +151,27 @@ openclaw gateway } ``` - Env fallback для типового облікового запису: + Env fallback для облікового запису за замовчуванням: ```bash DISCORD_BOT_TOKEN=... ``` - Підтримуються plaintext значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Значення `token` у відкритому тексті підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - - Зачекайте, доки gateway запуститься, а потім надішліть DM своєму боту в Discord. Він відповість кодом сполучення. + + Дочекайтеся, поки gateway буде запущено, а потім напишіть своєму боту в Discord в особисті повідомлення. Він відповість кодом сполучення. - Надішліть код сполучення своєму агенту у вашому наявному каналі: + Надішліть код сполучення своєму агенту в наявному каналі: - > "Approve this Discord pairing code: ``" + > "Схвали цей код сполучення Discord: ``" @@ -176,28 +185,28 @@ openclaw pairing approve discord Коди сполучення спливають через 1 годину. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення. -Розв’язання токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для типового облікового запису. -Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один gateway monitor для цього токена. Токен із конфігурації має пріоритет над типовим env fallback; інакше перший увімкнений обліковий запис перемагає, а дубльований обліковий запис повідомляється як вимкнений. -Для розширених вихідних викликів (інструмент повідомлень/дії з каналами) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій send і read/probe-style (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному runtime snapshot. +Розв’язання токенів враховує обліковий запис. Значення токена з конфігурації мають пріоритет над env fallback. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. +Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один gateway monitor для цього токена. Токен із конфігурації має пріоритет над default env fallback; інакше перший увімкнений обліковий запис перемагає, а дубльований обліковий запис повідомляється як вимкнений. +Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання та дій стилю читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному знімку runtime. ## Рекомендовано: налаштуйте робочий простір гільдії -Коли DM запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Після того як особисті повідомлення запрацюють, можна налаштувати сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - - Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в DM. + + Це дозволяє вашому агенту відповідати в будь-якому каналі на сервері, а не лише в особистих повідомленнях. - > "Add my Discord Server ID `` to the guild allowlist" + > "Додай мій Discord Server ID `` до allowlist гільдій" @@ -223,16 +232,16 @@ openclaw pairing approve discord - За замовчуванням ваш агент відповідає в каналах гільдії лише коли його @mentioned. Для приватного сервера, ймовірно, ви хочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах гільдії лише коли його згадали через @mention. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення. - У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно явно надсилати за допомогою інструмента `message`, щоб агент за замовчуванням міг лишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може за замовчуванням лишатися пасивним і публікувати лише тоді, коли вирішить, що відповідь у канал корисна. - > "Allow my agent to respond on this server without having to be @mentioned" + > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @mentioned" - Установіть `requireMention: false` у конфігурації гільдії: + Задайте `requireMention: false` у конфігурації гільдії: ```json5 { @@ -248,7 +257,7 @@ openclaw pairing approve discord } ``` - Щоб відновити legacy автоматичні фінальні відповіді для групових/канальних кімнат, установіть `messages.groupChat.visibleReplies: "automatic"`. + Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, задайте `messages.groupChat.visibleReplies: "automatic"`. @@ -256,64 +265,64 @@ openclaw pairing approve discord - За замовчуванням довготривала пам’ять (MEMORY.md) завантажується лише в DM-сесіях. Канали гільдії не завантажують MEMORY.md автоматично. + За замовчуванням довготривала пам’ять (MEMORY.md) завантажується лише в сесіях особистих повідомлень. Канали гільдії не завантажують MEMORY.md автоматично. - > "When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from MEMORY.md." + > "Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо потрібен довготривалий контекст із MEMORY.md." - Якщо вам потрібен спільний контекст у кожному каналі, розмістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони ін’єктуються для кожної сесії). Зберігайте довготривалі нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. + Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони вставляються в кожну сесію). Зберігайте довготривалі нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. -Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкуватися. Ваш агент може бачити назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що пасує вашому workflow. +Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкуватися. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому робочому процесу. -## Runtime model +## Модель runtime - Gateway володіє підключенням Discord. -- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються в Discord. -- Метадані гільдії/каналу Discord додаються до model prompt як недовірений - контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей envelope - назад, OpenClaw прибирає скопійовані метадані з вихідних відповідей і з - майбутнього replay context. -- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головну сесію агента (`agent:main:main`). -- Канали гільдії є ізольованими ключами сесій (`agent::discord:channel:`). -- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). -- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас усе ще передаючи `CommandTargetSessionKey` до маршрутизованої розмовної сесії. -- Текстова доставка оголошень cron/heartbeat у Discord використовує фінальну - видиму асистенту відповідь один раз. Media і payload структурованих компонентів залишаються - багатоповідомленнєвими, коли агент емісує кілька доставних payload. +- Маршрутизація відповідей є детермінованою: вхідні відповіді Discord повертаються в Discord. +- Метадані гільдії/каналу Discord додаються до prompt моделі як недовірений + контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт + назад, OpenClaw видаляє скопійовані метадані з вихідних відповідей і з + майбутнього контексту повторного відтворення. +- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`). +- Канали гільдій є ізольованими ключами сесій (`agent::discord:channel:`). +- Групові особисті повідомлення за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`). +- Нативні slash-команди запускаються в ізольованих командних сесіях (`agent::discord:slash:`), водночас усе ще передаючи `CommandTargetSessionKey` до маршрутизованої сесії розмови. +- Доставка текстових оголошень cron/heartbeat до Discord використовує фінальну + видиму асистенту відповідь один раз. Медіа та структуровані component payloads залишаються + багатоповідомленнєвими, коли агент випускає кілька deliverable payloads. ## Форумні канали -Форумні та медіаканали Discord приймають лише дописи в гілках. OpenClaw підтримує два способи їх створення: +Форумні та медіаканали Discord приймають лише публікації в тредах. OpenClaw підтримує два способи їх створення: -- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити гілку. Назва гілки використовує перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити гілку напряму. Не передавайте `--message-id` для форумних каналів. +- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Назва треду використовує перший непорожній рядок вашого повідомлення. +- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для форумних каналів. -Приклад: надіслати до батьківського форуму, щоб створити гілку +Приклад: надішліть до батьківського форуму, щоб створити тред ```bash openclaw message send --channel discord --target channel: \ --message "Topic title\nBody of the post" ``` -Приклад: явно створити форумну гілку +Приклад: явно створіть форумний тред ```bash openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самої гілки (`channel:`). +Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого треду (`channel:`). ## Інтерактивні компоненти -OpenClaw підтримує контейнери Discord components v2 для повідомлень агентів. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення й дотримуються наявних налаштувань Discord `replyToMode`. +OpenClaw підтримує контейнери components v2 Discord для повідомлень агентів. Використовуйте інструмент повідомлень із корисним навантаженням `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. Підтримувані блоки: @@ -321,13 +330,13 @@ OpenClaw підтримує контейнери Discord components v2 для п - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти є одноразовими. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, вибори й форми кілька разів до завершення строку їх дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів, доки вони не завершать термін дії. -Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` для цієї кнопки (ідентифікатори користувачів Discord, теги або `*`). Коли це налаштовано, користувачі, які не збігаються, отримують ефемерну відмову. +Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` для цієї кнопки (ідентифікатори користувачів Discord, теги або `*`). Коли це налаштовано, невідповідні користувачі отримують ефемерну відмову. -Слеш-команди `/model` і `/models` відкривають інтерактивний вибірник моделі з розкривними списками постачальника, моделі та сумісного середовища виконання, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибірника є ефемерною, і використовувати її може лише користувач, який її викликав. +Слеш-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного середовища виконання, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і користуватися нею може лише користувач, який її викликав. -Файлові вкладення: +Вкладення файлів: - Блоки `file` мають указувати на посилання вкладення (`attachment://`) - Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів @@ -335,7 +344,7 @@ OpenClaw підтримує контейнери Discord components v2 для п Модальні форми: -- Додайте `components.modal` із щонайбільше 5 полями +- Додайте `components.modal` із до 5 полями - Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw автоматично додає кнопку запуску @@ -393,7 +402,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` -## Контроль доступу й маршрутизація +## Керування доступом і маршрутизація @@ -401,10 +410,10 @@ OpenClaw підтримує контейнери Discord components v2 для п - `pairing` (за замовчуванням) - `allowlist` - - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`) + - `open` (вимагає, щоб `channels.discord.allowFrom` містив `"*"`) - `disabled` - Якщо політика DM не є відкритою, невідомі користувачі блокуються (або отримують запит на спарювання в режимі `pairing`). + Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують виконати спарювання в режимі `pairing`). Пріоритет для кількох облікових записів: @@ -420,27 +429,27 @@ OpenClaw підтримує контейнери Discord components v2 для п - `user:` - згадка `<@id>` - Голі числові ідентифікатори зазвичай розв’язуються як ідентифікатори каналів, коли активне типове значення каналу, але ідентифікатори, перелічені в ефективному DM `allowFrom` облікового запису, для сумісності трактуються як цілі користувацьких DM. + Прості числові ідентифікатори зазвичай розпізнаються як ідентифікатори каналів, коли активне значення каналу за замовчуванням, але ідентифікатори, перелічені в ефективному списку дозволів DM `allowFrom` облікового запису, розглядаються як цілі користувацьких DM для сумісності. - Обробка гільдій керується `channels.discord.groupPolicy`: + Обробкою гільдій керує `channels.discord.groupPolicy`: - `open` - `allowlist` - `disabled` - Безпечна базова лінія, коли існує `channels.discord`, це `allowlist`. + Безпечна базова конфігурація, коли існує `channels.discord`, це `allowlist`. Поведінка `allowlist`: - - гільдія має збігатися з `channels.discord.guilds` (переважно `id`, slug приймається) - - необов’язкові списки дозволів відправників: `users` (рекомендовано стабільні ідентифікатори) і `roles` (лише ідентифікатори ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles` - - пряме зіставлення імен/тегів вимкнене за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - гільдія має відповідати `channels.discord.guilds` (бажано `id`, приймається slug) + - необов’язкові списки дозволів відправників: `users` (рекомендовано стабільні ідентифікатори) і `roles` (лише ідентифікатори ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони відповідають `users` АБО `roles` + - прямий збіг імені/тега вимкнено за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як режим сумісності на крайній випадок - імена/теги підтримуються для `users`, але ідентифікатори безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів - - якщо для гільдії налаштовано `channels`, канали, яких немає в списку, відхиляються - - якщо гільдія не має блока `channels`, дозволені всі канали в цій дозволеній гільдії + - якщо для гільдії налаштовано `channels`, канали не зі списку забороняються + - якщо гільдія не має блока `channels`, усі канали в цій дозволеній гільдії дозволені Приклад: @@ -466,14 +475,14 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Якщо ви лише встановите `DISCORD_BOT_TOKEN` і не створите блок `channels.discord`, резервне значення середовища виконання буде `groupPolicy="allowlist"` (з попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. + Якщо ви встановили лише `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, резервна поведінка середовища виконання — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` — `open`. - Повідомлення гільдії за замовчуванням пропускаються через перевірку згадки. + Повідомлення гільдії за замовчуванням проходять через перевірку згадки. - Виявлення згадки охоплює: + Виявлення згадок охоплює: - явну згадку бота - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) @@ -485,14 +494,14 @@ OpenClaw підтримує контейнери Discord components v2 для п Групові DM: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - - необов’язковий список дозволів через `dm.groupChannels` (ідентифікатори каналів або slug) + - необов’язковий список дозволів через `dm.groupChannels` (ідентифікатори каналів або slugs) ### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ідентифікатором ролі. Прив’язки на основі ролей приймають лише ідентифікатори ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише для гільдії. Якщо прив’язка також задає інші поля зіставлення (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдій Discord до різних агентів за ідентифікатором ролі. Прив’язки на основі ролей приймають лише ідентифікатори ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише гільдії. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -516,21 +525,21 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` -## Нативні команди й авторизація команд +## Нативні команди та авторизація команд -- `commands.native` за замовчуванням має значення `"auto"` і ввімкнене для Discord. -- Перевизначення для окремого каналу: `channels.discord.commands.native`. +- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. +- Перевизначення для каналу: `channels.discord.commands.native`. - `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. - Авторизація нативних команд використовує ті самі списки дозволів/політики Discord, що й звичайна обробка повідомлень. -- Команди можуть усе ще відображатися в UI Discord для користувачів, які не авторизовані; виконання все одно примусово застосовує авторизацію OpenClaw і повертає "not authorized". +- Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів без авторизації; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized". Див. [Слеш-команди](/uk/tools/slash-commands) для каталогу команд і поведінки. -Типові налаштування слеш-команд: +Налаштування слеш-команд за замовчуванням: - `ephemeral: true` -## Відомості про функції +## Докладно про функції @@ -546,21 +555,21 @@ OpenClaw підтримує контейнери Discord components v2 для п - `all` - `batched` - Примітка: `off` вимикає неявну прив’язку відповідей до ланцюжка. Явні теги `[[reply_to_*]]` усе ще враховуються. - `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord для цього ходу. - `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли - вхідний хід був дебаунсованою партією з кількох повідомлень. Це корисно, - коли нативні відповіді потрібні переважно для неоднозначних стрімких чатів, а не для кожного + Примітка: `off` вимикає неявне гілкування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються. + `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord для ходу. + `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли + вхідний хід був debounce-пакетом із кількох повідомлень. Це корисно, + коли потрібні нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного ходу з одним повідомленням. - Ідентифікатори повідомлень відображаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + Ідентифікатори повідомлень показуються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. - OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` відображається на `partial` у Discord; `streamMode` є застарілим alias і мігрується автоматично. + OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` зіставляється з `partial` у Discord; `streamMode` є застарілим псевдонімом і мігрується автоматично. - Типове значення залишається `off`, оскільки редагування попереднього перегляду Discord швидко досягають rate limits, коли кілька ботів або Gateway спільно використовують обліковий запис. + За замовчуванням лишається `off`, бо редагування попереднього перегляду Discord швидко впираються в ліміти частоти, коли кілька ботів або Gateway використовують один обліковий запис. ```json5 { @@ -578,11 +587,11 @@ OpenClaw підтримує контейнери Discord components v2 для п ``` - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Медіа, помилки й фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду. - - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи повторно використовують оновлення інструментів/прогресу повідомлення попереднього перегляду. + - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). + - Медіа, помилки та фінальні відповіді з явною відповіддю скасовують очікувані редагування попереднього перегляду. + - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; медіа-відповіді повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнене, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. + Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. @@ -598,27 +607,27 @@ OpenClaw підтримує контейнери Discord components v2 для п - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` - Поведінка ланцюжків: + Поведінка гілок: - - Ланцюжки Discord маршрутизуються як сесії каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - - Сесії ланцюжків успадковують вибір `/model` рівня сесії батьківського каналу як резервне значення лише моделі; локальні для ланцюжка вибори `/model` усе ще мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнене. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автоматичних ланцюжків засівання з батьківського транскрипту. Перевизначення для окремого облікового запису розташовані в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструмента повідомлень можуть розв’язувати цілі DM `user:`. + - Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. + - Сеанси гілок успадковують вибір `/model` рівня сеансу батьківського каналу як резерв лише для моделі; локальні вибори `/model` гілки все ще мають пріоритет, а історія батьківської транскрипції не копіюється, якщо не ввімкнено успадкування транскрипції. + - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових автогілок заповнення з батьківської транскрипції. Перевизначення для облікових записів розташовані в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть розпізнавати цілі DM `user:`. - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів впроваджуються як **ненадійний** контекст. Списки дозволів контролюють, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів додаються як **ненадійний** контекст. Списки дозволів обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. - Discord може прив’язати ланцюжок до цілі сесії, щоб подальші повідомлення в цьому ланцюжку й далі маршрутизувалися до тієї самої сесії (включно із сесіями субагентів). + Discord може прив’язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці продовжували маршрутизуватися до того самого сеансу (зокрема сеансів підагентів). Команди: - - `/focus ` прив’язати поточний/новий ланцюжок до цілі субагента/сесії - - `/unfocus` видалити прив’язку поточного ланцюжка + - `/focus ` прив’язати поточну/нову гілку до цілі підагента/сеансу + - `/unfocus` видалити прив’язку поточної гілки - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок + - `/session idle ` переглянути/оновити автоматичне скасування фокуса за неактивністю для сфокусованих прив’язок - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок Конфігурація: @@ -649,16 +658,16 @@ OpenClaw підтримує контейнери Discord components v2 для п - `session.threadBindings.*` задає глобальні типові значення. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). - - Якщо прив’язки гілок вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні. + - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). + - Якщо прив’язки потоків вимкнені для облікового запису, `/focus` і пов’язані операції прив’язки потоків недоступні. - Див. [Субагенти](/uk/tools/subagents), [агенти ACP](/uk/tools/acp-agents) і [довідник конфігурації](/uk/gateway/configuration-reference). + Див. [Субагенти](/uk/tools/subagents), [ACP Agents](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference). - Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що спрямовані на розмови Discord. + Для стабільних "always-on" робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що спрямовують на розмови Discord. Шлях конфігурації: @@ -714,11 +723,11 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й залишає майбутні повідомлення в тій самій сесії ACP. Повідомлення гілки успадковують прив’язку батьківського каналу. - - У прив’язаному каналі або гілці `/new` і `/reset` скидають ту саму сесію ACP на місці. Тимчасові прив’язки гілок можуть перевизначати визначення цілі, доки активні. - - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірню гілку через `--thread auto|here`. + - `/acp spawn codex --bind here` прив’язує поточний канал або потік на місці й зберігає майбутні повідомлення в тому самому сеансі ACP. Повідомлення потоку успадковують прив’язку батьківського каналу. + - У прив’язаному каналі або потоці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки потоків можуть перевизначати визначення цілі, поки активні. + - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній потік через `--thread auto|here`. - Див. [агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці про поведінку прив’язок. + Див. [ACP Agents](/uk/tools/acp-agents) для деталей поведінки прив’язок. @@ -730,23 +739,23 @@ OpenClaw підтримує контейнери Discord components v2 для п - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події та прикріплюються до маршрутизованої сесії Discord. + Події реакцій перетворюються на системні події та прикріплюються до маршрутизованого сеансу Discord. - `ackReaction` надсилає емодзі підтвердження, доки OpenClaw обробляє вхідне повідомлення. + `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок визначення: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - запасний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: - - Discord приймає емодзі Unicode або назви користувацьких емодзі. + - Discord приймає unicode-емодзі або назви власних емодзі. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. @@ -754,7 +763,7 @@ OpenClaw підтримує контейнери Discord components v2 для п Записи конфігурації, ініційовані каналом, увімкнені типово. - Це впливає на потоки `/config set|unset` (коли функції команд увімкнено). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). Вимкнення: @@ -770,8 +779,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Спрямовуйте трафік Discord gateway WebSocket і стартові REST-запити (ID застосунку + визначення allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. + + Маршрутизуйте Gateway WebSocket-трафік Discord і стартові REST-пошуки (ID застосунку + визначення allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -819,10 +828,10 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - allowlists можуть використовувати `pk:` - - відображувані імена учасників зіставляються за name/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ID початкового повідомлення й обмежені часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не задано + - allowlist можуть використовувати `pk:` + - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном + - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не встановлено @@ -841,7 +850,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Приклад активності (користувацький статус є типовим типом активності): + Приклад активності (власний статус є типовим типом активності): ```json5 { @@ -854,7 +863,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Приклад стримінгу: + Приклад трансляції: ```json5 { @@ -868,13 +877,13 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Карта типів активності: + Мапа типів активності: - 0: Грає - - 1: Стримить (потребує `activityUrl`) + - 1: Транслює (потрібен `activityUrl`) - 2: Слухає - 3: Дивиться - - 4: Користувацька (використовує текст активності як стан статусу; емодзі необов’язковий) + - 4: Власний (використовує текст активності як стан статусу; емодзі необов’язковий) - 5: Змагається Приклад автоматичної присутності (сигнал стану runtime): @@ -898,39 +907,39 @@ OpenClaw підтримує контейнери Discord components v2 для п - `autoPresence.healthyText` - `autoPresence.degradedText` - - `autoPresence.exhaustedText` (підтримує заповнювач `{reason}`) + - `autoPresence.exhaustedText` (підтримує placeholder `{reason}`) - Discord підтримує обробку схвалень на основі кнопок у приватних повідомленнях і може необов’язково публікувати запити на схвалення в початковому каналі. + Discord підтримує обробку схвалень на основі кнопок у DM і може необов’язково публікувати запити на схвалення в початковому каналі. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) + - `channels.discord.execApprovals.approvers` (необов’язково; за можливості використовує fallback до `commands.ownerAllowFrom`) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec-схвалення, коли `enabled` не задано або має значення `"auto"`, і можна визначити принаймні одного approver: або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить exec approvers з канального `allowFrom`, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Задайте `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень. + Discord автоматично вмикає нативні exec-схвалення, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного схвалювача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить exec-схвалювачів із канального `allowFrom`, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Встановіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт схвалень. - Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спершу він пробує Discord DM, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, OpenClaw повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. + Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, використовується fallback до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. - Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені approvers можуть використовувати кнопки; інші користувачі отримують ephemeral відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw повертається до доставки через DM. + Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сеансу, OpenClaw використовує fallback до доставки в DM. - Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord здебільшого додає маршрутизацію approver через DM і розсилання в канал. - Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw - має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, що - чат-схвалення недоступні або ручне схвалення є єдиним шляхом. - Якщо runtime нативних схвалень Discord неактивний, OpenClaw залишає - локальний детермінований запит `/approve ` видимим. Якщо - runtime активний, але нативну картку неможливо доставити до жодної цілі, - OpenClaw надсилає запасне сповіщення в той самий чат із точною командою `/approve` + Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали. + Коли ці кнопки присутні, вони є основним UX для схвалення; OpenClaw + має додавати ручну команду `/approve` лише тоді, коли результат інструмента каже, + що чат-схвалення недоступні або ручне схвалення є єдиним шляхом. + Якщо нативний runtime схвалень Discord не активний, OpenClaw залишає + видимим локальний детермінований запит `/approve `. Якщо + runtime активний, але нативну картку неможливо доставити жодній цілі, + OpenClaw надсилає fallback-сповіщення в той самий чат із точною командою `/approve` з очікуваного схвалення. - Автентифікація Gateway і визначення схвалень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Типово схвалення спливають через 30 хвилин. + Gateway-автентифікація та визначення схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` ID визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Схвалення типово спливають через 30 хвилин. - Див. [Exec-схвалення](/uk/tools/exec-approvals). + Див. [Exec approvals](/uk/tools/exec-approvals). @@ -946,26 +955,26 @@ OpenClaw підтримує контейнери Discord components v2 для п - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати зображення обкладинки запланованої події. +Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб встановити обкладинку запланованої події. -Шлюзи дій розташовані в `channels.discord.actions.*`. +Шлюзи дій містяться в `channels.discord.actions.*`. Типова поведінка шлюзів: -| Група дій | Типово | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | -| roles | вимкнено | -| moderation | вимкнено | -| presence | вимкнено | +| Група дій | Типово | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | +| roles | вимкнено | +| moderation | вимкнено | +| presence | вимкнено | -## Інтерфейс компонентів v2 +## UI Components v2 -OpenClaw використовує компоненти Discord v2 для exec-схвалень і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширений режим; потребує побудови payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує Discord components v2 для exec-схвалень і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для власного UI (розширено; потребує створення component payload через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex). -- Задайте для облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли присутні компоненти v2. +- Задайте для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`. +- `embeds` ігноруються, коли присутні components v2. Приклад: @@ -985,7 +994,7 @@ OpenClaw використовує компоненти Discord v2 для exec-с ## Голос -Discord має дві окремі голосові поверхні: голосові канали реального часу **voice channels** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвилі). Gateway підтримує обидві. +Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидві. ### Голосові канали @@ -993,12 +1002,12 @@ Discord має дві окремі голосові поверхні: голос 1. Увімкніть Message Content Intent у Discord Developer Portal. 2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів. -3. Запросіть бота зі scopes `bot` і `applications.commands`. -4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. +3. Запросіть бота зі scope `bot` і `applications.commands`. +4. Надайте дозволи Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. 5. Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). 6. Налаштуйте `channels.discord.voice`. -Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує стандартного агента облікового запису й дотримується тих самих правил списків дозволених і групових політик, що й інші команди Discord. +Використовуйте `/vc join|leave|status`, щоб керувати сеансами. Команда використовує стандартного агента облікового запису та дотримується тих самих правил списків дозволених і групової політики, що й інші команди Discord. ```bash /vc join channel: @@ -1035,34 +1044,34 @@ Discord має дві окремі голосові поверхні: голос Примітки: -- `voice.tts` перевизначає `messages.tts` лише для відтворення голосу. -- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосовому каналі Discord. Не задавайте його, щоб успадкувати модель маршрутизованого агента. -- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію. -- Ходи голосового транскрипту визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`). -- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання й Gateway intent `GuildVoiceStates`. -- `channels.discord.intents.voiceStates` може явно перевизначати підписку на intent стану голосу. Не задавайте його, щоб intent відповідав `voice.enabled`. +- `voice.tts` перевизначає `messages.tts` лише для голосового відтворення. +- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосовому каналі Discord. Залиште це неналаштованим, щоб успадкувати модель маршрутизованого агента. +- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрибування. +- Репліки голосової транскрипції отримують статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). +- Голос увімкнено за замовчуванням; установіть `channels.discord.voice.enabled=false`, щоб вимкнути голосове середовище виконання та Gateway intent `GuildVoiceStates`. +- `channels.discord.intents.voiceStates` може явно перевизначати підписку на intent голосового стану. Залиште це неналаштованим, щоб intent слідував за `voice.enabled`. - `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів приєднання `@discordjs/voice`. -- Стандартні значення `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. -- OpenClaw також відстежує збої розшифрування прийому й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись до нього після повторюваних збоїв за короткий проміжок часу. -- Якщо журнали прийому після оновлення повторно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить виправлення upstream padding з PR discord.js #11449, яке закрило issue discord.js #11419. +- Стандартні значення `@discordjs/voice`: `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не налаштовано. +- OpenClaw також відстежує помилки розшифрування прийому та автоматично відновлюється, виходячи з голосового каналу й повторно приєднуючись до нього після повторюваних помилок у короткому проміжку часу. +- Якщо після оновлення в журналах прийому повторно з’являється `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінія `@discordjs/voice` містить upstream-виправлення padding з discord.js PR #11449, яке закрило issue discord.js #11419. Конвеєр голосового каналу: -- Захоплення Discord PCM перетворюється на тимчасовий WAV-файл. +- PCM-захоплення Discord перетворюється на тимчасовий WAV-файл. - `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`. -- Транскрипт надсилається через звичайний вхідний шлях і маршрутизацію Discord. -- `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу. -- `voice.tts` об’єднується поверх `messages.tts`; отриманий звук відтворюється в каналі, до якого виконано приєднання. +- Транскрипція надсилається через звичайний вхідний потік і маршрутизацію Discord. +- `voice.model`, якщо налаштовано, перевизначає лише LLM відповіді для цієї репліки голосового каналу. +- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється в каналі, до якого виконано приєднання. -Облікові дані визначаються окремо для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. +Облікові дані визначаються для кожного компонента окремо: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. ### Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд хвильової форми й потребують аудіо OGG/Opus. OpenClaw автоматично генерує хвильову форму, але потребує `ffmpeg` і `ffprobe` на хості gateway для аналізу та перетворення. +Голосові повідомлення Discord показують попередній перегляд хвильової форми та потребують аудіо OGG/Opus. OpenClaw генерує хвильову форму автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway для перевірки й конвертації. - Надайте **локальний шлях до файлу** (URL-адреси відхиляються). - Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). -- Приймається будь-який аудіоформат; OpenClaw перетворює його на OGG/Opus за потреби. +- Приймається будь-який аудіоформат; OpenClaw за потреби конвертує його в OGG/Opus. ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) @@ -1074,7 +1083,7 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a - увімкніть Message Content Intent - - увімкніть Server Members Intent, коли ви покладаєтеся на визначення користувачів/учасників + - увімкніть Server Members Intent, коли ви залежите від визначення користувачів/учасників - перезапустіть gateway після зміни intents @@ -1099,9 +1108,9 @@ openclaw logs --follow Поширені причини: - - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналу - - `requireMention` налаштовано не там, де треба (має бути під `channels.discord.guilds` або в записі каналу) - - відправника заблоковано списком дозволених `users` для guild/каналу + - `groupPolicy="allowlist"` без відповідного списку дозволених guild/channel + - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або в записі каналу) + - відправника заблоковано списком дозволених `users` guild/channel @@ -1116,9 +1125,9 @@ openclaw logs --follow - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` - - це керує лише роботою слухача Discord gateway, а не тривалістю ходу агента + - це керує лише роботою listener Discord gateway, а не тривалістю репліки агента - Discord не застосовує до поставлених у чергу ходів агента тайм-аут, що належить каналу. Слухачі повідомлень негайно передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу. + Discord не застосовує timeout, що належить каналу, до поставлених у чергу реплік агента. Message listeners передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сеансу, доки життєвий цикл session/tool/runtime не завершить або не перерве роботу. ```json5 { @@ -1139,49 +1148,49 @@ openclaw logs --follow - OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартної URL-адреси gateway Discord і обмежуються за частотою в журналах. + OpenClaw отримує metadata Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартної URL-адреси gateway Discord і обмежуються за частотою в журналах. - Параметри тайм-ауту метаданих: + Параметри timeout для metadata: - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` - - запасний варіант env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` - - за замовчуванням: `30000` (30 секунд), максимум: `120000` + - fallback env, коли config не налаштовано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` + - стандартно: `30000` (30 секунд), максимум: `120000` Перевірки дозволів `channels status --probe` працюють лише для числових ідентифікаторів каналів. - Якщо ви використовуєте slug-ключі, зіставлення під час виконання все одно може працювати, але probe не може повністю перевірити дозволи. + Якщо ви використовуєте slug-ключі, зіставлення під час виконання все ще може працювати, але probe не може повністю перевірити дозволи. - DM вимкнено: `channels.discord.dm.enabled=false` - - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікування схвалення створення пари в режимі `pairing` + - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (legacy: `channels.discord.dm.policy`) + - очікується схвалення pairing у режимі `pairing` За замовчуванням повідомлення, створені ботами, ігноруються. - Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволених, щоб уникнути циклічної поведінки. - Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволених, щоб уникнути циклічної поведінки. + Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. - - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення прийому голосу Discord - - підтвердьте `channels.discord.voice.daveEncryption=true` (за замовчуванням) - - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (стандартне значення upstream) і налаштовуйте лише за потреби - - стежте за журналами на наявність: + - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була присутня логіка відновлення прийому голосу Discord + - підтвердьте `channels.discord.voice.daveEncryption=true` (стандартно) + - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (upstream-стандарт) і налаштовуйте лише за потреби + - стежте в журналах за: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте їх з історією upstream DAVE receive у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) + - якщо помилки тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте з upstream-історією прийому DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) @@ -1192,33 +1201,33 @@ openclaw logs --follow -- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots` +- запуск/auth: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` - команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` -- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` -- метадані gateway: `gatewayInfoTimeoutMs` +- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` +- metadata gateway: `gatewayInfoTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry` +- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- streaming: `streaming` (legacy alias: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, стандартно `100MB`), `retry` - дії: `actions.*` - присутність: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` -- функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` +- функції: `threadBindings`, top-level `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` ## Безпека та експлуатація -- Розглядайте токени ботів як секрети (`DISCORD_BOT_TOKEN` бажано використовувати в контрольованих середовищах). -- Надавайте Discord дозволи за принципом найменших привілеїв. -- Якщо розгортання/стан команд застаріли, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`. +- Розглядайте токени ботів як секрети (`DISCORD_BOT_TOKEN` бажано в керованих середовищах). +- Надавайте мінімально необхідні дозволи Discord. +- Якщо deploy/state команд застарів, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`. ## Пов’язане - Створіть пару між користувачем Discord і gateway. + Зв’яжіть користувача Discord із gateway. Груповий чат і поведінка списку дозволених. @@ -1230,7 +1239,7 @@ openclaw logs --follow Модель загроз і посилення захисту. - Зіставляйте guilds і канали з агентами. + Зіставляйте guild і канали з агентами. Поведінка нативних команд. diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index ea9118613..48b427552 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,28 +1,28 @@ --- read_when: - Налаштування Slack або налагодження сокетного/HTTP-режиму Slack -summary: Налаштування Slack і поведінка під час виконання (Socket Mode + URL-адреси HTTP-запитів) +summary: Налаштування Slack і поведінка під час виконання (режим сокетів + URL-адреси HTTP-запитів) title: Slack x-i18n: - generated_at: "2026-04-29T15:39:26Z" + generated_at: "2026-04-29T21:05:37Z" model: gpt-5.5 provider: openai - source_hash: e888211dc4729da87c2f2d269dca691aec280b5f09ceb3416f5ea16d7930cdd3 + source_hash: f4a991fccb938c133303624c8151bd15094cd4254ee9c9bd71649f1430aaa57c source_path: channels/slack.md workflow: 16 --- -Готове до production-використання для DM і каналів через інтеграції Slack app. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються. +Готовий до production для DM і каналів через інтеграції Slack app. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються. - Slack DM за замовчуванням використовують режим pairing. + DM у Slack за замовчуванням використовують режим сполучення. Нативна поведінка команд і каталог команд. - Кросканальна діагностика та playbook-и відновлення. + Міжканальна діагностика та інструкції з відновлення. @@ -34,29 +34,37 @@ x-i18n: У налаштуваннях Slack app натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть workspace для вашого app - - вставте [приклад manifest](#manifest-and-scope-checklist) нижче й продовжте створення - - згенеруйте **App-Level Token** (`xapp-...`) із `connections:write` - - установіть app і скопіюйте показаний **Bot Token** (`xoxb-...`) + - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче й продовжте створення + - згенеруйте **App-Level Token** (`xapp-...`) з `connections:write` + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) -```json5 + Рекомендоване налаштування SecretRef: + +```bash +export SLACK_APP_TOKEN=xapp-... +export SLACK_BOT_TOKEN=xoxb-... +cat > slack.socket.patch.json5 <<'JSON5' { channels: { slack: { enabled: true, mode: "socket", - appToken: "xapp-...", - botToken: "xoxb-...", + appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" }, + botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, }, }, } +JSON5 +openclaw config patch --file ./slack.socket.patch.json5 --dry-run +openclaw config patch --file ./slack.socket.patch.json5 ``` - Env fallback (лише для облікового запису за замовчуванням): + Резервний варіант через env (лише обліковий запис за замовчуванням): ```bash SLACK_APP_TOKEN=xapp-... @@ -81,33 +89,41 @@ openclaw gateway У налаштуваннях Slack app натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть workspace для вашого app - - вставте [приклад manifest](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням + - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - вставте [приклад маніфесту](#manifest-and-scope-checklist) і оновіть URL перед створенням - збережіть **Signing Secret** для перевірки запитів - - установіть app і скопіюйте показаний **Bot Token** (`xoxb-...`) + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) -```json5 + Рекомендоване налаштування SecretRef: + +```bash +export SLACK_BOT_TOKEN=xoxb-... +export SLACK_SIGNING_SECRET=... +cat > slack.http.patch.json5 <<'JSON5' { channels: { slack: { enabled: true, mode: "http", - botToken: "xoxb-...", - signingSecret: "your-signing-secret", + botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, + signingSecret: { source: "env", provider: "default", id: "SLACK_SIGNING_SECRET" }, webhookPath: "/slack/events", }, }, } +JSON5 +openclaw config patch --file ./slack.http.patch.json5 --dry-run +openclaw config patch --file ./slack.http.patch.json5 ``` - Використовуйте унікальні шляхи Webhook для HTTP із кількома обліковими записами + Використовуйте унікальні шляхи webhook для HTTP з кількома обліковими записами - Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували. + Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. @@ -126,7 +142,7 @@ openclaw gateway ## Налаштування транспорту Socket Mode -OpenClaw за замовчуванням встановлює тайм-аут pong клієнта Slack SDK на 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування під конкретний workspace або host: +OpenClaw за замовчуванням встановлює для клієнта Slack SDK тайм-аут pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування під конкретний робочий простір або хост: ```json5 { @@ -143,13 +159,13 @@ OpenClaw за замовчуванням встановлює тайм-аут po } ``` -Використовуйте це лише для workspace-ів Socket Mode, які журналюють тайм-аути websocket pong/server-ping Slack або працюють на host-ах із відомим starvation event loop. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — це очікування server pings від Slack. Повідомлення та події app залишаються станом застосунку, а не сигналами життєздатності транспорту. +Використовуйте це лише для робочих просторів Socket Mode, де в журналах є тайм-аути Slack websocket pong/server-ping, або для хостів із відомим голодуванням event loop. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — очікування server ping від Slack. Повідомлення й події застосунку залишаються станом застосунку, а не сигналами життєздатності транспорту. -## Контрольний список manifest і scope +## Контрольний список маніфесту та scope -Базовий manifest Slack app однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` для slash command). +Базовий маніфест Slack app однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` для slash command). -Базовий manifest (Socket Mode за замовчуванням): +Базовий маніфест (Socket Mode за замовчуванням): ```json { @@ -221,7 +237,7 @@ OpenClaw за замовчуванням встановлює тайм-аут po } ``` -Для режиму **HTTP Request URLs** замініть `settings` варіантом HTTP і додайте `url` до кожної slash command. Потрібна публічна URL-адреса: +Для режиму **HTTP Request URLs** замініть `settings` на HTTP-варіант і додайте `url` до кожної slash command. Потрібен публічний URL: ```json { @@ -251,19 +267,19 @@ OpenClaw за замовчуванням встановлює тайм-аут po } ``` -### Додаткові налаштування manifest +### Додаткові налаштування маніфесту -Увімкніть інші функції, що розширюють наведені вище стандартні значення. +Увімкніть інші функції, що розширюють наведені вище типові налаштування. - Замість однієї налаштованої команди можна використовувати кілька [нативних slash commands](#commands-and-slash-behavior) з нюансами: + Можна використовувати кілька [нативних slash commands](#commands-and-slash-behavior) замість однієї налаштованої команди з певними нюансами: - Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована. - Одночасно можна зробити доступними не більше ніж 25 slash commands. - Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list): + Замініть наявний розділ `features.slash_commands` на підмножину [доступних команд](/uk/tools/slash-commands#command-list): @@ -407,9 +423,9 @@ OpenClaw за замовчуванням встановлює тайм-аут po - Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (користувацьке ім’я та піктограму) замість стандартної ідентичності Slack app. + Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача й іконку), а не типову ідентичність Slack app. - Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`. + Якщо ви використовуєте іконку emoji, Slack очікує синтаксис `:emoji_name:`. @@ -421,34 +437,34 @@ OpenClaw за замовчуванням встановлює тайм-аут po - `reactions:read` - `pins:read` - `emoji:read` - - `search:read` (якщо ви залежите від читання пошуку Slack) + - `search:read` (якщо ви залежите від читання через пошук Slack) ## Модель токенів -- `botToken` + `appToken` потрібні для Socket Mode. -- Режим HTTP потребує `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті - рядки або об’єкти SecretRef. -- Токени з config перевизначають env fallback. -- Env fallback `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до облікового запису за замовчуванням. -- `userToken` (`xoxp-...`) задається лише в config (без env fallback) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`). +- `botToken` + `appToken` є обов’язковими для Socket Mode. +- HTTP-режим потребує `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають рядки відкритого тексту + або об’єкти SecretRef. +- Токени конфігурації перевизначають резервне значення з env. +- Резервне значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до стандартного облікового запису. +- `userToken` (`xoxp-...`) налаштовується лише в конфігурації (без резервного значення env) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`). -Поведінка status snapshot: +Поведінка знімка стану: - Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`). -- Статус має значення `available`, `configured_unavailable` або `missing`. +- Стан: `available`, `configured_unavailable` або `missing`. - `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше неінлайнове джерело секретів, але поточна команда/шлях виконання - не змогли отримати фактичне значення. -- У режимі HTTP додається `signingSecretStatus`; у Socket Mode + або інше не inline-джерело секретів, але поточний шлях команди/середовища виконання + не зміг отримати фактичне значення. +- У HTTP-режимі включено `signingSecretStatus`; у Socket Mode обов’язкова пара — `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогу можна надавати перевагу токену користувача, якщо його налаштовано. Для записів токен бота залишається пріоритетним; записи з токеном користувача дозволені лише тоді, коли `userTokenReadOnly: false` і токен бота недоступний. +Для дій/читання каталогу може надаватися перевага токену користувача, якщо його налаштовано. Для записів перевага й надалі надається токену бота; записи з токеном користувача дозволені лише коли `userTokenReadOnly: false` і токен бота недоступний. ## Дії та шлюзи @@ -465,15 +481,15 @@ OpenClaw за замовчуванням встановлює тайм-аут po | memberInfo | увімкнено | | emojiList | увімкнено | -Поточні дії повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ID файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файла для інших типів файлів. +Поточні дії повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ідентифікатори файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файлу для інших типів файлів. -## Керування доступом і маршрутизація +## Контроль доступу й маршрутизація `channels.slack.dmPolicy` керує доступом до DM. `channels.slack.allowFrom` є канонічним списком дозволених DM. - - `pairing` (типово) + - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`) - `disabled` @@ -486,15 +502,15 @@ OpenClaw за замовчуванням встановлює тайм-аут po - `dm.groupEnabled` (групові DM типово false) - `dm.groupChannels` (необов’язковий список дозволених MPIM) - Пріоритетність для кількох облікових записів: + Пріоритет для кількох облікових записів: - `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - Іменовані облікові записи успадковують `channels.slack.allowFrom`, коли їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. - Застарілі `channels.slack.dm.policy` і `channels.slack.dm.allowFrom` усе ще читаються для сумісності. `openclaw doctor --fix` мігрує їх у `dmPolicy` і `allowFrom`, коли це можна зробити без зміни доступу. + Застарілі `channels.slack.dm.policy` і `channels.slack.dm.allowFrom` досі читаються для сумісності. `openclaw doctor --fix` мігрує їх у `dmPolicy` і `allowFrom`, коли це можна зробити без зміни доступу. - Зв’язування в DM використовує `openclaw pairing approve slack `. + Pairing у DM використовує `openclaw pairing approve slack `. @@ -505,28 +521,28 @@ OpenClaw за замовчуванням встановлює тайм-аут po - `allowlist` - `disabled` - Список дозволених каналів міститься в `channels.slack.channels` і має використовувати стабільні ID каналів. + Список дозволених каналів розміщується в `channels.slack.channels` і має використовувати стабільні ідентифікатори каналів. - Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), виконання повертається до `groupPolicy="allowlist"` і записує попередження (навіть якщо `channels.defaults.groupPolicy` задано). + Примітка щодо середовища виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), середовище виконання повертається до `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо `channels.defaults.groupPolicy` задано). - Розв’язання імен/ID: + Розпізнавання імен/ідентифікаторів: - - записи списку дозволених каналів і записи списку дозволених DM розв’язуються під час запуску, коли доступ токена це дозволяє - - нерозв’язані записи з іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації - - вхідна авторизація та маршрутизація каналів типово спершу використовують ID; пряме зіставлення імен користувачів/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи списку дозволених каналів і списку дозволених DM розпізнаються під час запуску, коли доступ токена це дозволяє + - нерозпізнані записи назв каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації + - вхідна авторизація й маршрутизація каналів типово орієнтуються насамперед на ідентифікатор; пряме зіставлення за іменем користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - Повідомлення каналів типово обмежуються згадками. + Повідомлення каналів типово проходять через шлюз згадок. Джерела згадок: - явна згадка застосунку (`<@botId>`) - - regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`) - - неявна поведінка відповіді в гілці боту (вимкнено, коли `thread.requireExplicitMention` має значення `true`) + - regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) + - неявна поведінка треду відповіді боту (вимкнено, коли `thread.requireExplicitMention` має значення `true`) - Налаштування для кожного каналу (`channels.slack.channels.`; імена лише через розв’язання під час запуску або `dangerouslyAllowNameMatching`): + Керування для окремих каналів (`channels.slack.channels.`; імена лише через розпізнавання під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - `users` (список дозволених) @@ -540,21 +556,21 @@ OpenClaw за замовчуванням встановлює тайм-аут po -## Гілки, сесії та теги відповідей +## Треди, сеанси й теги відповідей - DM маршрутизуються як `direct`; канали як `channel`; MPIM як `group`. -- З типовим `session.dmScope=main` DM Slack згортаються в основну сесію агента. -- Сесії каналів: `agent::slack:channel:`. -- Відповіді в гілках можуть створювати суфікси сесій гілок (`:thread:`), коли це застосовно. +- З типовим `session.dmScope=main` DM Slack згортаються до основного сеансу агента. +- Сеанси каналів: `agent::slack:channel:`. +- Відповіді в треді можуть створювати суфікси сеансів треду (`:thread:`), коли це застосовно. - Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`. -- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень гілки отримується під час запуску нової сесії гілки (типово `20`; задайте `0`, щоб вимкнути). -- `channels.slack.thread.requireExplicitMention` (типово `false`): коли `true`, пригнічує неявні згадки в гілках, щоб бот відповідав лише на явні згадки `@bot` усередині гілок, навіть якщо бот уже брав участь у гілці. Без цього відповіді в гілці, де брав участь бот, обходять шлюз `requireMention`. +- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень треду отримується під час запуску нового сеансу треду (типово `20`; задайте `0`, щоб вимкнути). +- `channels.slack.thread.requireExplicitMention` (типово `false`): коли `true`, пригнічує неявні згадки в треді, щоб бот відповідав лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять шлюз `requireMention`. -Налаштування гілок відповідей: +Керування відповідями в тредах: - `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`) - `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel` -- застарілий резервний варіант для прямих чатів: `channels.slack.dm.replyToMode` +- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode` Підтримуються ручні теги відповідей: @@ -562,19 +578,19 @@ OpenClaw за замовчуванням встановлює тайм-аут po - `[[reply_to:]]` -`replyToMode="off"` вимикає **всі** гілки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Гілки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими в рядку. +`replyToMode="off"` вимикає **всі** відповіді в тредах у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги досі враховуються в режимі `"off"`. Треди Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими inline. ## Реакції підтвердження -`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. +`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок розв’язання: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") +- резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: @@ -583,22 +599,22 @@ OpenClaw за замовчуванням встановлює тайм-аут po ## Потокове передавання тексту -`channels.slack.streaming` керує поведінкою live-попереднього перегляду: +`channels.slack.streaming` керує поведінкою живого попереднього перегляду: -- `off`: вимкнути потокове передавання live-попереднього перегляду. +- `off`: вимкнути потокове передавання живого попереднього перегляду. - `partial` (типово): замінювати текст попереднього перегляду найновішим частковим виводом. - `block`: додавати фрагментовані оновлення попереднього перегляду. -- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати фінальний текст. -- `streaming.preview.toolProgress`: коли активний чернетковий попередній перегляд, маршрутизувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Задайте `false`, щоб зберігати окремі повідомлення інструментів/прогресу. +- `progress`: показувати текст стану прогресу під час генерації, потім надіслати фінальний текст. +- `streaming.preview.toolProgress`: коли чернетковий попередній перегляд активний, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Задайте `false`, щоб зберігати окремі повідомлення інструментів/прогресу. `channels.slack.streaming.nativeTransport` керує нативним потоковим передаванням тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (типово: `true`). -- Щоб з’явилися нативне потокове передавання тексту та статус гілки помічника Slack, має бути доступна гілка відповіді. Вибір гілки все ще відповідає `replyToMode`. +- Для появи нативного потокового передавання тексту й стану треду асистента Slack має бути доступний тред відповіді. Вибір треду й надалі дотримується `replyToMode`. - Корені каналів і групових чатів усе ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне. -- DM Slack верхнього рівня типово залишаються поза гілкою, тому вони не показують попередній перегляд у стилі гілки; використовуйте відповіді в гілках або `typingReaction`, якщо хочете бачити прогрес там. -- Медіа та нетекстові payload-и повертаються до звичайної доставки. -- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні фінальні тексти/блоки скидаються лише тоді, коли можуть відредагувати попередній перегляд на місці. -- Якщо потокове передавання завершується помилкою посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload-ів. +- DM Slack верхнього рівня типово лишаються поза тредом, тому вони не показують попередній перегляд у стилі треду; використовуйте відповіді в тредах або `typingReaction`, якщо хочете бачити прогрес там. +- Медіа й нетекстові payloads повертаються до звичайної доставки. +- Фінали медіа/помилок скасовують очікувані редагування попереднього перегляду; відповідні текстові/блокові фінали скидаються лише тоді, коли можуть редагувати попередній перегляд на місці. +- Якщо потокове передавання переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payloads. Використовуйте чернетковий попередній перегляд замість нативного потокового передавання тексту Slack: @@ -617,13 +633,13 @@ OpenClaw за замовчуванням встановлює тайм-аут po Застарілі ключі: -- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується в `channels.slack.streaming.mode`. -- boolean `channels.slack.streaming` автоматично мігрується в `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. -- застарілий `channels.slack.nativeStreaming` автоматично мігрується в `channels.slack.streaming.nativeTransport`. +- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`. +- boolean `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. +- застарілий `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`. ## Резервна реакція набору тексту -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в гілках, які використовують типовий індикатор статусу "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це найкорисніше поза відповідями в тредах, які використовують типовий індикатор стану "is typing...". Порядок розв’язання: @@ -633,25 +649,25 @@ OpenClaw за замовчуванням встановлює тайм-аут po Примітки: - Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). -- Реакція виконується за принципом best-effort, а очищення виконується автоматично після завершення відповіді або шляху помилки. +- Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху помилки. -## Медіа, фрагментація та доставка +## Медіа, фрагментація й доставка - Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й ліміти розміру це дозволяють. Заповнювачі файлів містять `fileId` Slack, щоб агенти могли отримати оригінальний файл за допомогою `download-file`. + Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запиту з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й обмеження розміру це дозволяють. Заповнювачі файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл за допомогою `download-file`. - Завантаження використовують обмежені тайм-аути простою та загальні тайм-аути. Якщо отримання файла Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файла. + Завантаження використовують обмежені тайм-аути простою й загального часу. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу. - Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. + Типове обмеження розміру вхідних даних у середовищі виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. - текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000) - - `channels.slack.chunkMode="newline"` вмикає розбиття з пріоритетом абзаців - - надсилання файлів використовує API завантаження Slack і може включати відповіді в гілках (`thread_ts`) - - ліміт вихідних медіа відповідає `channels.slack.mediaMaxMb`, коли його налаштовано; інакше надсилання каналом використовує типові значення MIME-kind з медіаконвеєра + - `channels.slack.chunkMode="newline"` вмикає розділення з пріоритетом абзаців + - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`) + - обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, коли налаштовано; інакше надсилання в канал використовує типові значення MIME-kind з медіаконвеєра @@ -661,14 +677,14 @@ OpenClaw за замовчуванням встановлює тайм-аут po - `user:` для DM - `channel:` для каналів - DM Slack відкриваються через API розмов Slack під час надсилання до цілей користувачів. + DM Slack відкриваються через API розмов Slack під час надсилання до цілей користувача. -## Команди та поведінка slash +## Команди й поведінка slash -Slash-команди з’являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команди: +Slash-команди з’являються в Slack як одна налаштована команда або кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові значення команд: - `enabled: false` - `name: "openclaw"` @@ -679,30 +695,30 @@ Slash-команди з’являються в Slack або як одна на /openclaw /help ``` -Нативні команди потребують [додаткових налаштувань manifest](#additional-manifest-settings) у вашому застосунку Slack і натомість вмикаються через `channels.slack.commands.native: true` або `commands.native: true` у глобальних конфігураціях. +Нативні команди потребують [додаткових налаштувань маніфесту](#additional-manifest-settings) у вашому застосунку Slack і натомість вмикаються через `channels.slack.commands.native: true` або `commands.native: true` у глобальних конфігураціях. -- Нативний автоматичний режим команд **вимкнено** для Slack, тому `commands.native: "auto"` не вмикає нативні команди Slack. +- Нативний авторежим команд для Slack **вимкнено**, тому `commands.native: "auto"` не вмикає нативні команди Slack. ```txt /help ``` -Нативні меню аргументів використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед передаванням вибраного значення опції: +Меню аргументів нативних команд використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед передаванням вибраного значення опції: - до 5 опцій: блоки кнопок - 6-100 опцій: статичне меню вибору - понад 100 опцій: зовнішній вибір з асинхронною фільтрацією опцій, коли доступні обробники опцій інтерактивності -- перевищені ліміти Slack: закодовані значення опцій повертаються до кнопок +- перевищені обмеження Slack: закодовані значення опцій повертаються до кнопок ```txt /think ``` -Slash-сесії використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно маршрутизують виконання команд до сесії цільової розмови за допомогою `CommandTargetSessionKey`. +Slash-сеанси використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно маршрутизують виконання команд до цільового сеансу розмови за допомогою `CommandTargetSessionKey`. ## Інтерактивні відповіді -Slack може рендерити інтерактивні елементи керування відповідями, створені агентом, але цю функцію типово вимкнено. +Slack може рендерити інтерактивні елементи керування відповідями, створеними агентом, але ця функція типово вимкнена. Увімкніть її глобально: @@ -718,7 +734,7 @@ Slack може рендерити інтерактивні елементи ке } ``` -Або увімкніть її лише для одного облікового запису Slack: +Або ввімкніть це лише для одного облікового запису Slack: ```json5 { @@ -736,44 +752,44 @@ Slack може рендерити інтерактивні елементи ке } ``` -Коли ввімкнено, агенти можуть видавати директиви відповідей лише для Slack: +Коли ввімкнено, агенти можуть надсилати директиви відповідей лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -These directives compile into Slack Block Kit and route clicks or selections back through the existing Slack interaction event path. +Ці директиви компілюються у Slack Block Kit і маршрутизують натискання або вибір назад через наявний шлях подій взаємодії Slack. -Notes: +Примітки: -- This is Slack-specific UI. Other channels do not translate Slack Block Kit directives into their own button systems. -- The interactive callback values are OpenClaw-generated opaque tokens, not raw agent-authored values. -- If generated interactive blocks would exceed Slack Block Kit limits, OpenClaw falls back to the original text reply instead of sending an invalid blocks payload. +- Це інтерфейс, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок. +- Значення інтерактивних callback є непрозорими токенами, згенерованими OpenClaw, а не сирими значеннями, створеними агентом. +- Якщо згенеровані інтерактивні блоки перевищили б обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload блоків. -## Exec approvals in Slack +## Підтвердження exec у Slack -Slack can act as a native approval client with interactive buttons and interactions, instead of falling back to the Web UI or terminal. +Slack може діяти як нативний клієнт підтверджень з інтерактивними кнопками та взаємодіями, замість повернення до вебінтерфейсу або термінала. -- Exec approvals use `channels.slack.execApprovals.*` for native DM/channel routing. -- Plugin approvals can still resolve through the same Slack-native button surface when the request already lands in Slack and the approval id kind is `plugin:`. -- Approver authorization is still enforced: only users identified as approvers can approve or deny requests through Slack. +- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналу. +- Підтвердження Plugin можуть і надалі оброблятися через ту саму нативну для Slack поверхню кнопок, коли запит уже потрапляє в Slack і тип ідентифікатора підтвердження є `plugin:`. +- Авторизація затверджувачів і надалі застосовується: лише користувачі, визначені як затверджувачі, можуть підтверджувати або відхиляти запити через Slack. -This uses the same shared approval button surface as other channels. When `interactivity` is enabled in your Slack app settings, approval prompts render as Block Kit buttons directly in the conversation. -When those buttons are present, they are the primary approval UX; OpenClaw -should only include a manual `/approve` command when the tool result says chat -approvals are unavailable or manual approval is the only path. +Тут використовується та сама спільна поверхня кнопок підтвердження, що й в інших каналах. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити підтвердження відображаються як кнопки Block Kit безпосередньо в розмові. +Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw +має додавати ручну команду `/approve` лише тоді, коли результат інструмента каже, що підтвердження +в чаті недоступні або ручне підтвердження є єдиним шляхом. -Config path: +Шлях конфігурації: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (optional; falls back to `commands.ownerAllowFrom` when possible) -- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`) +- `channels.slack.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) +- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter` -Slack auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one -approver resolves. Set `enabled: false` to disable Slack as a native approval client explicitly. -Set `enabled: true` to force native approvals on when approvers resolve. +Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"` і принаймні один +затверджувач визначається. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтверджень. +Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли затверджувачі визначаються. -Default behavior with no explicit Slack exec approval config: +Типова поведінка без явної конфігурації підтверджень exec для Slack: ```json5 { @@ -783,8 +799,8 @@ Default behavior with no explicit Slack exec approval config: } ``` -Explicit Slack-native config is only needed when you want to override approvers, add filters, or -opt into origin-chat delivery: +Явна нативна для Slack конфігурація потрібна лише тоді, коли ви хочете перевизначити затверджувачів, додати фільтри або +ввімкнути доставку до початкового чату: ```json5 { @@ -800,54 +816,54 @@ opt into origin-chat delivery: } ``` -Shared `approvals.exec` forwarding is separate. Use it only when exec approval prompts must also -route to other chats or explicit out-of-band targets. Shared `approvals.plugin` forwarding is also -separate; Slack-native buttons can still resolve plugin approvals when those requests already land -in Slack. +Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити підтвердження exec також мають +маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також є +окремим; нативні для Slack кнопки все одно можуть обробляти підтвердження Plugin, коли ці запити вже потрапляють +у Slack. -Same-chat `/approve` also works in Slack channels and DMs that already support commands. See [Exec approvals](/uk/tools/exec-approvals) for the full approval forwarding model. +`/approve` у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. [Підтвердження exec](/uk/tools/exec-approvals), щоб переглянути повну модель переспрямування підтверджень. -## Events and operational behavior +## Події та операційна поведінка -- Message edits/deletes are mapped into system events. -- Thread broadcasts ("Also send to channel" thread replies) are processed as normal user messages. -- Reaction add/remove events are mapped into system events. -- Member join/leave, channel created/renamed, and pin add/remove events are mapped into system events. -- `channel_id_changed` can migrate channel config keys when `configWrites` is enabled. -- Channel topic/purpose metadata is treated as untrusted context and can be injected into routing context. -- Thread starter and initial thread-history context seeding are filtered by configured sender allowlists when applicable. -- Block actions and modal interactions emit structured `Slack interaction: ...` system events with rich payload fields: - - block actions: selected values, labels, picker values, and `workflow_*` metadata - - modal `view_submission` and `view_closed` events with routed channel metadata and form inputs +- Редагування/видалення повідомлень зіставляються із системними подіями. +- Трансляції потоків (відповіді в потоці з параметром "Also send to channel") обробляються як звичайні повідомлення користувача. +- Події додавання/видалення реакцій зіставляються із системними подіями. +- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень зіставляються із системними подіями. +- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли `configWrites` увімкнено. +- Метадані теми/призначення каналу вважаються ненадійним контекстом і можуть бути додані до контексту маршрутизації. +- Початкове повідомлення потоку та початкове наповнення контексту історії потоку фільтруються за налаштованими allowlist відправників, коли це застосовно. +- Дії блоків і взаємодії з модальними вікнами створюють структуровані системні події `Slack interaction: ...` з багатими полями payload: + - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` + - події модальних вікон `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми -## Configuration reference +## Довідник конфігурації -Primary reference: [Configuration reference - Slack](/uk/gateway/config-channels#slack). +Основний довідник: [Довідник конфігурації - Slack](/uk/gateway/config-channels#slack). - + -- mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` -- DM access: `dm.enabled`, `dmPolicy`, `allowFrom` (legacy: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` -- compatibility toggle: `dangerouslyAllowNameMatching` (break-glass; keep off unless needed) -- channel access: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` -- threading/history: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- delivery: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress` -- ops/features: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` +- режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` +- доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` +- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний режим; тримайте вимкненим, якщо не потрібно) +- доступ до каналу: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` +- потоки/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress` +- операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` -## Troubleshooting +## Усунення несправностей - - Check, in order: + + Перевірте по черзі: - `groupPolicy` - - channel allowlist (`channels.slack.channels`) + - allowlist каналів (`channels.slack.channels`) - `requireMention` - - per-channel `users` allowlist + - allowlist `users` для окремого каналу - Useful commands: + Корисні команди: ```bash openclaw channels status --probe @@ -857,15 +873,15 @@ openclaw doctor - - Check: + + Перевірте: - `channels.slack.dm.enabled` - - `channels.slack.dmPolicy` (or legacy `channels.slack.dm.policy`) - - pairing approvals / allowlist entries - - Slack Assistant DM events: verbose logs mentioning `drop message_changed` - usually mean Slack sent an edited Assistant-thread event without a - recoverable human sender in message metadata + - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) + - підтвердження сполучення / записи allowlist + - події DM Slack Assistant: докладні журнали із згадкою `drop message_changed` + зазвичай означають, що Slack надіслав подію відредагованого потоку Assistant без + відновлюваного людського відправника в метаданих повідомлення ```bash openclaw pairing list slack @@ -873,125 +889,124 @@ openclaw pairing list slack - - Validate bot + app tokens and Socket Mode enablement in Slack app settings. + + Перевірте токени бота й застосунку, а також увімкнення Socket Mode у налаштуваннях застосунку Slack. - If `openclaw channels status --probe --json` shows `botTokenStatus` or - `appTokenStatus: "configured_unavailable"`, the Slack account is - configured but the current runtime could not resolve the SecretRef-backed - value. + Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або + `appTokenStatus: "configured_unavailable"`, обліковий запис Slack + налаштовано, але поточне середовище виконання не змогло визначити значення, підкріплене SecretRef. - - Validate: + + Перевірте: - - signing secret - - webhook path - - Slack Request URLs (Events + Interactivity + Slash Commands) - - unique `webhookPath` per HTTP account + - секрет підпису + - шлях Webhook + - URL запитів Slack (Events + Interactivity + Slash Commands) + - унікальний `webhookPath` для кожного HTTP-облікового запису - If `signingSecretStatus: "configured_unavailable"` appears in account - snapshots, the HTTP account is configured but the current runtime could not - resolve the SecretRef-backed signing secret. + Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках + облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло + визначити секрет підпису, підкріплений SecretRef. - - Verify whether you intended: + + Перевірте, що саме ви мали намір використовувати: - - native command mode (`channels.slack.commands.native: true`) with matching slash commands registered in Slack - - or single slash command mode (`channels.slack.slashCommand.enabled: true`) + - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack + - або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`) - Also check `commands.useAccessGroups` and channel/user allowlists. + Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. -## Attachment vision reference +## Довідка щодо vision для вкладень -Slack can attach downloaded media to the agent turn when Slack file downloads succeed and size limits permit. Image files can be passed through the media understanding path or directly to a vision-capable reply model; other files are retained as downloadable file context rather than treated as image input. +Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішні й обмеження розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як контекст завантажуваного файлу, а не обробляються як вхідне зображення. -### Supported media types +### Підтримувані типи медіа -| Media type | Source | Current behavior | Notes | -| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| JPEG / PNG / GIF / WebP images | Slack file URL | Downloaded and attached to the turn for vision-capable handling | Per-file cap: `channels.slack.mediaMaxMb` (default 20 MB) | -| PDF files | Slack file URL | Downloaded and exposed as file context for tools such as `download-file` or `pdf` | Slack inbound does not convert PDFs into image-vision input automatically | -| Other files | Slack file URL | Downloaded when possible and exposed as file context | Binary files are not treated as image input | -| Thread replies | Thread starter files | Root-message files can be hydrated as context when the reply has no direct media | File-only starters use an attachment placeholder | -| Multi-image messages | Multiple Slack files | Each file is evaluated independently | Slack processing is capped at eight files per message | +| Тип медіа | Джерело | Поточна поведінка | Примітки | +| ------------------------------ | ------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються та прикріплюються до ходу для обробки з підтримкою vision | Обмеження на файл: `channels.slack.mediaMaxMb` (типово 20 MB) | +| Файли PDF | URL файлу Slack | Завантажуються та надаються як файловий контекст для інструментів, як-от `download-file` або `pdf` | Вхідні дані Slack не перетворюють PDF автоматично на вхідні дані image-vision | +| Інші файли | URL файлу Slack | Завантажуються, коли можливо, і надаються як файловий контекст | Бінарні файли не обробляються як вхідні зображення | +| Відповіді в потоці | Файли початкового повідомлення потоку | Файли кореневого повідомлення можуть бути завантажені як контекст, коли відповідь не має прямих медіа | Початкові повідомлення лише з файлами використовують placeholder вкладення | +| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення | -### Inbound pipeline +### Вхідний конвеєр -When a Slack message with file attachments arrives: +Коли надходить повідомлення Slack із файловими вкладеннями: -1. OpenClaw downloads the file from Slack's private URL using the bot token (`xoxb-...`). -2. The file is written to the media store on success. -3. Downloaded media paths and content types are added to the inbound context. -4. Image-capable model/tool paths can use image attachments from that context. -5. Non-image files remain available as file metadata or media references for tools that can handle them. +1. OpenClaw завантажує файл із приватного URL Slack за допомогою токена бота (`xoxb-...`). +2. У разі успіху файл записується до сховища медіа. +3. Шляхи завантажених медіа та типи вмісту додаються до вхідного контексту. +4. Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту. +5. Файли, що не є зображеннями, залишаються доступними як файлові метадані або посилання на медіа для інструментів, які можуть їх обробляти. -### Thread-root attachment inheritance +### Успадкування вкладень кореня потоку -When a message arrives in a thread (has a `thread_ts` parent): +Коли повідомлення надходить у потоці (має батьківський `thread_ts`): -- If the reply itself has no direct media and the included root message has files, Slack can hydrate the root files as thread-starter context. -- Direct reply attachments take precedence over root-message attachments. -- A root message that has only files and no text is represented with an attachment placeholder so the fallback can still include its files. +- Якщо сама відповідь не має прямих медіа, а включене кореневе повідомлення має файли, Slack може завантажити кореневі файли як контекст початкового повідомлення потоку. +- Прямі вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення. +- Кореневе повідомлення, яке має лише файли й не має тексту, представляється placeholder вкладення, щоб fallback усе одно міг включити його файли. -### Multi-attachment handling +### Обробка кількох вкладень -When a single Slack message contains multiple file attachments: +Коли одне повідомлення Slack містить кілька файлових вкладень: -- Each attachment is processed independently through the media pipeline. -- Downloaded media references are aggregated into the message context. -- Processing order follows Slack's file order in the event payload. -- A failure in one attachment's download does not block others. +- Кожне вкладення обробляється незалежно через конвеєр медіа. +- Посилання на завантажені медіа агрегуються в контекст повідомлення. +- Порядок обробки відповідає порядку файлів Slack у payload події. +- Помилка завантаження одного вкладення не блокує інші. -### Size, download, and model limits +### Обмеження розміру, завантаження та моделі -- **Size cap**: Default 20 MB per file. Configurable via `channels.slack.mediaMaxMb`. -- **Download failures**: Files that Slack cannot serve, expired URLs, inaccessible files, oversize files, and Slack auth/login HTML responses are skipped instead of being reported as unsupported formats. -- **Vision model**: Image analysis uses the active reply model when it supports vision, or the image model configured at `agents.defaults.imageModel`. +- **Обмеження розміру**: типово 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`. +- **Помилки завантаження**: файли, які Slack не може надати, прострочені URL, недоступні файли, завеликі файли та HTML-відповіді автентифікації/входу Slack пропускаються замість повідомлення про непідтримувані формати. +- **Модель vision**: аналіз зображень використовує активну модель відповіді, коли вона підтримує vision, або модель зображень, налаштовану в `agents.defaults.imageModel`. -### Known limits +### Відомі обмеження -| Сценарій | Поточна поведінка | Обхідний шлях | -| ------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| Прострочена URL-адреса файлу Slack | Файл пропущено; помилка не відображається | Повторно завантажте файл у Slack | -| Модель зору не налаштовано | Вкладення із зображеннями зберігаються як посилання на медіа, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використайте модель відповіді з підтримкою зору | -| Дуже великі зображення (> 20 МБ за замовчуванням) | Пропускаються відповідно до обмеження розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє | -| Переслані/поширені вкладення | Текст і медіа зображень/файлів, розміщені у Slack, обробляються за принципом найкращих зусиль | Повторно поділіться безпосередньо в треді OpenClaw | -| Вкладення PDF | Зберігаються як файловий/медійний контекст, не спрямовуються автоматично через зір для зображень | Використайте `download-file` для метаданих файлу або інструмент `pdf` для аналізу PDF | +| Сценарій | Поточна поведінка | Обхідний шлях | +| ------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| Прострочена URL-адреса файлу Slack | Файл пропущено; помилка не показується | Повторно завантажте файл у Slack | +| Модель зору не налаштована | Вкладення зображень зберігаються як медіапосилання, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використайте модель відповіді з підтримкою зору | +| Дуже великі зображення (> 20 MB за замовчуванням) | Пропускаються відповідно до обмеження розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє | +| Переслані/поширені вкладення | Текст і медіа зображень/файлів, розміщених у Slack, обробляються з найкращими зусиллями | Поділіться ними напряму в гілці OpenClaw | +| PDF-вкладення | Зберігаються як файловий/медійний контекст, не спрямовуються автоматично через зоровий аналіз зображень | Використайте `download-file` для метаданих файлу або інструмент `pdf` для аналізу PDF | ### Пов’язана документація - [Конвеєр розуміння медіа](/uk/nodes/media-understanding) - [Інструмент PDF](/uk/tools/pdf) -- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення зору для вкладень Slack +- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення зорового аналізу вкладень Slack - Регресійні тести: [#51353](https://github.com/openclaw/openclaw/issues/51353) -- Перевірка наживо: [#51354](https://github.com/openclaw/openclaw/issues/51354) +- Жива перевірка: [#51354](https://github.com/openclaw/openclaw/issues/51354) ## Пов’язане - - Сполучіть користувача Slack із Gateway. + + З’єднайте користувача Slack із Gateway. - + Поведінка каналів і групових приватних повідомлень. - - Спрямовуйте вхідні повідомлення агентам. + + Маршрутизуйте вхідні повідомлення до агентів. - + Модель загроз і посилення захисту. - - Структура конфігурації та пріоритетність. + + Структура конфігурації та пріоритети. - + Каталог команд і поведінка. diff --git a/docs/uk/cli/config.md b/docs/uk/cli/config.md index aafb6707f..0538c76de 100644 --- a/docs/uk/cli/config.md +++ b/docs/uk/cli/config.md @@ -2,23 +2,23 @@ read_when: - Ви хочете читати або редагувати конфігурацію неінтерактивно sidebarTitle: Config -summary: Довідник CLI для `openclaw config` (get/set/unset/file/schema/validate) +summary: Довідка CLI для `openclaw config` (get/set/patch/unset/file/schema/validate) title: Конфігурація x-i18n: - generated_at: "2026-04-28T11:06:26Z" + generated_at: "2026-04-29T21:05:31Z" model: gpt-5.5 provider: openai - source_hash: 3e90f979a102a6c54f8458f8a2c7f36bec5b1e82ea4bdd30e9c3a4b1d903cf11 + source_hash: f1f55c4b932d469cb9112d9f55b66f0ff88dbe066250651df7a0a753060a223d source_path: cli/config.md workflow: 16 --- -Помічники конфігурації для неінтерактивних змін у `openclaw.json`: отримання/задання/скасування/файл/схема/перевірка значень за шляхом і виведення активного файла конфігурації. Запустіть без підкоманди, щоб відкрити майстер налаштування (так само, як `openclaw configure`). +Помічники конфігурації для неінтерактивних правок в `openclaw.json`: отримуйте/встановлюйте/застосовуйте patch/скидайте/виводьте файл/схему/перевіряйте значення за шляхом і друкуйте активний файл конфігурації. Запустіть без підкоманди, щоб відкрити майстер налаштування (те саме, що `openclaw configure`). -## Кореневі параметри +## Кореневі опції - Повторюваний фільтр розділу керованого налаштування, коли ви запускаєте `openclaw config` без підкоманди. + Повторюваний фільтр розділів керованого налаштування, коли ви запускаєте `openclaw config` без підкоманди. Підтримувані керовані розділи: `workspace`, `model`, `web`, `gateway`, `daemon`, `channels`, `plugins`, `skills`, `health`. @@ -38,6 +38,7 @@ openclaw config set agents.list[0].tools.exec.node "node-id-or-name" openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --merge openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN openclaw config set secrets.providers.vaultfile --provider-source file --provider-path /etc/openclaw/secrets.json --provider-mode json +openclaw config patch --file ./openclaw.patch.json5 --dry-run openclaw config unset plugins.entries.brave.config.webSearch.apiKey openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN --dry-run openclaw config validate @@ -46,20 +47,20 @@ openclaw config validate --json ### `config schema` -Виводить згенеровану схему JSON для `openclaw.json` у stdout як JSON. +Друкує згенеровану схему JSON для `openclaw.json` у stdout як JSON. - - - Поточна коренева схема конфігурації, а також кореневе рядкове поле `$schema` для інструментів редактора. + + - Поточну кореневу схему конфігурації, а також кореневе рядкове поле `$schema` для інструментів редактора. - Метадані документації полів `title` і `description`, які використовує Control UI. - - Вкладені об’єкти, вузли з wildcard (`*`) і елементи масивів (`[]`) успадковують ті самі метадані `title` / `description`, коли існує відповідна документація полів. - - Гілки `anyOf` / `oneOf` / `allOf` також успадковують ті самі метадані документації, коли існує відповідна документація полів. - - Метадані схем живих Plugin + каналів у режимі найкращої спроби, коли runtime-маніфести можна завантажити. - - Чиста резервна схема навіть тоді, коли поточна конфігурація недійсна. + - Вкладені об’єкти, wildcard-вузли (`*`) і вузли елементів масиву (`[]`) успадковують ті самі метадані `title` / `description`, коли існує відповідна документація поля. + - Гілки `anyOf` / `oneOf` / `allOf` також успадковують ті самі метадані документації, коли існує відповідна документація поля. + - Best-effort метадані схеми живих plugin + каналів, коли можна завантажити маніфести середовища виконання. + - Чисту резервну схему навіть тоді, коли поточна конфігурація недійсна. - - `config.schema.lookup` повертає один нормалізований шлях конфігурації з поверхневим вузлом схеми (`title`, `description`, `type`, `enum`, `const`, поширені межі), відповідними метаданими підказок UI та зведеннями безпосередніх дочірніх елементів. Використовуйте це для деталізації за шляхом у Control UI або власних клієнтах. + + `config.schema.lookup` повертає один нормалізований шлях конфігурації з неглибоким вузлом схеми (`title`, `description`, `type`, `enum`, `const`, типові межі), відповідними метаданими UI-підказки й короткими описами безпосередніх дочірніх елементів. Використовуйте це для деталізації за шляхом у Control UI або власних клієнтах. @@ -67,7 +68,7 @@ openclaw config validate --json openclaw config schema ``` -Передайте це у файл, коли хочете перевірити або провалідувати схему іншими інструментами: +Спрямуйте вивід у файл, коли потрібно переглянути або перевірити його іншими інструментами: ```bash openclaw config schema > openclaw.schema.json @@ -82,7 +83,7 @@ openclaw config get agents.defaults.workspace openclaw config get agents.list[0].id ``` -Використовуйте індекс списку агентів, щоб звернутися до конкретного агента: +Використовуйте індекс списку агентів, щоб націлитися на конкретного агента: ```bash openclaw config get agents.list @@ -91,7 +92,7 @@ openclaw config set agents.list[1].tools.exec.node "node-id-or-name" ## Значення -Значення за можливості розбираються як JSON5; інакше вони вважаються рядками. Використовуйте `--strict-json`, щоб вимагати розбору JSON5. `--json` залишається підтримуваним як застарілий псевдонім. +Значення розбираються як JSON5, коли це можливо; інакше вони обробляються як рядки. Використовуйте `--strict-json`, щоб вимагати розбору JSON5. `--json` залишається підтримуваним як застарілий alias. ```bash openclaw config set agents.defaults.heartbeat.every "0m" @@ -99,13 +100,13 @@ openclaw config set gateway.port 19001 --strict-json openclaw config set channels.whatsapp.groups '["*"]' --strict-json ``` -`config get --json` виводить сире значення як JSON замість тексту, відформатованого для термінала. +`config get --json` друкує необроблене значення як JSON замість тексту, відформатованого для термінала. -Присвоєння об’єкта типово замінює цільовий шлях. Захищені шляхи мап/списків, які зазвичай містять додані користувачем записи, як-от `agents.defaults.models`, `models.providers`, `models.providers..models`, `plugins.entries` і `auth.profiles`, відхиляють заміни, які видалили б наявні записи, якщо ви не передасте `--replace`. +Присвоєння об’єкта за замовчуванням замінює цільовий шлях. Захищені шляхи map/list, які зазвичай містять додані користувачем записи, як-от `agents.defaults.models`, `models.providers`, `models.providers..models`, `plugins.entries` і `auth.profiles`, відмовляються від замін, які вилучили б наявні записи, якщо ви не передасте `--replace`. -Використовуйте `--merge`, коли додаєте записи до таких мап: +Використовуйте `--merge`, коли додаєте записи до таких map: ```bash openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --merge @@ -119,12 +120,12 @@ openclaw config set models.providers.ollama.models '[{"id":"llama3.2","name":"Ll `openclaw config set` підтримує чотири стилі присвоєння: - + ```bash openclaw config set ``` - + ```bash openclaw config set channels.discord.token \ --ref-provider default \ @@ -132,8 +133,8 @@ openclaw config set models.providers.ollama.models '[{"id":"llama3.2","name":"Ll --ref-id DISCORD_BOT_TOKEN ``` - - Режим конструктора провайдера працює лише зі шляхами `secrets.providers.`: + + Режим побудовника provider націлюється лише на шляхи `secrets.providers.`: ```bash openclaw config set secrets.providers.vault \ @@ -145,7 +146,7 @@ openclaw config set models.providers.ollama.models '[{"id":"llama3.2","name":"Ll ``` - + ```bash openclaw config set --batch-json '[ { @@ -167,12 +168,68 @@ openclaw config set models.providers.ollama.models '[{"id":"llama3.2","name":"Ll -Присвоєння SecretRef відхиляються на непідтримуваних runtime-змінних поверхнях (наприклад, `hooks.token`, `commands.ownerDisplaySecret`, токени webhook для прив’язки потоків Discord і JSON облікових даних WhatsApp). Див. [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface). +Присвоєння SecretRef відхиляються на непідтримуваних runtime-mutable поверхнях (наприклад `hooks.token`, `commands.ownerDisplaySecret`, токени Webhook прив’язки потоків Discord і JSON облікових даних WhatsApp). Див. [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface). -Пакетний розбір завжди використовує пакетне навантаження (`--batch-json`/`--batch-file`) як джерело істини. `--strict-json` / `--json` не змінюють поведінку пакетного розбору. +Пакетний розбір завжди використовує пакетне payload (`--batch-json`/`--batch-file`) як джерело істини. `--strict-json` / `--json` не змінюють поведінку пакетного розбору. -Режим шляху/значення JSON залишається підтримуваним як для SecretRefs, так і для провайдерів: +## `config patch` + +Використовуйте `config patch`, коли хочете вставити або передати через pipe patch у формі конфігурації замість запуску багатьох команд `config set` на основі шляхів. Вхідні дані — це об’єкт JSON5. Об’єкти рекурсивно об’єднуються, масиви й скалярні значення замінюють цільове значення, а `null` видаляє цільовий шлях. + +```bash +openclaw config patch --file ./openclaw.patch.json5 --dry-run +openclaw config patch --file ./openclaw.patch.json5 +``` + +Також можна передати patch через stdin, що корисно для скриптів віддаленого налаштування: + +```bash +ssh openclaw-host 'openclaw config patch --stdin --dry-run' < ./openclaw.patch.json5 +ssh openclaw-host 'openclaw config patch --stdin' < ./openclaw.patch.json5 +``` + +Приклад patch: + +```json5 +{ + channels: { + slack: { + enabled: true, + mode: "socket", + botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, + appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" }, + groupPolicy: "open", + requireMention: false, + }, + discord: { + enabled: true, + token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }, + dmPolicy: "disabled", + dm: { enabled: false }, + groupPolicy: "allowlist", + }, + }, + agents: { + defaults: { + model: { primary: "openai/gpt-5.5" }, + models: { + "openai/gpt-5.5": { params: { fastMode: true } }, + }, + }, + }, +} +``` + +Використовуйте `--replace-path `, коли один об’єкт або масив має стати точно наданим значенням замість рекурсивного застосування patch: + +```bash +openclaw config patch --file ./discord.patch.json5 --replace-path 'channels.discord.guilds["123"].channels' +``` + +`--dry-run` запускає перевірки схеми та розв’язуваності SecretRef без запису. Exec-backed SecretRefs за замовчуванням пропускаються під час dry-run; додайте `--allow-exec`, коли ви навмисно хочете, щоб dry-run виконував команди provider. + +Режим шляху/значення JSON залишається підтримуваним як для SecretRefs, так і для providers: ```bash openclaw config set channels.discord.token \ @@ -184,12 +241,12 @@ openclaw config set secrets.providers.vaultfile \ --strict-json ``` -## Прапорці конструктора провайдера +## Прапорці побудовника provider -Цілі конструктора провайдера мають використовувати `secrets.providers.` як шлях. +Цілі побудовника provider мають використовувати `secrets.providers.` як шлях. - + - `--provider-source ` - `--provider-timeout-ms ` (`file`, `exec`) @@ -220,7 +277,7 @@ openclaw config set secrets.providers.vaultfile \ -Приклад посиленого exec-провайдера: +Приклад захищеного exec provider: ```bash openclaw config set secrets.providers.vault \ @@ -234,9 +291,9 @@ openclaw config set secrets.providers.vault \ --provider-timeout-ms 5000 ``` -## Пробний запуск +## Dry run -Використовуйте `--dry-run`, щоб перевірити зміни без запису в `openclaw.json`. +Використовуйте `--dry-run`, щоб перевірити зміни без запису `openclaw.json`. ```bash openclaw config set channels.discord.token \ @@ -261,31 +318,31 @@ openclaw config set channels.discord.token \ ``` - - - Режим конструктора: виконує перевірки розв’язності SecretRef для змінених посилань/провайдерів. - - Режим JSON (`--strict-json`, `--json` або пакетний режим): виконує перевірку схеми, а також перевірки розв’язності SecretRef. - - Перевірка політик також виконується для відомих непідтримуваних цільових поверхонь SecretRef. - - Перевірки політик оцінюють повну конфігурацію після зміни, тож записи батьківських об’єктів (наприклад, встановлення `hooks` як об’єкта) не можуть обійти перевірку непідтримуваних поверхонь. - - Перевірки exec SecretRef типово пропускаються під час пробного запуску, щоб уникнути побічних ефектів команд. - - Використовуйте `--allow-exec` з `--dry-run`, щоб явно ввімкнути перевірки exec SecretRef (це може виконати команди провайдера). - - `--allow-exec` працює лише з пробним запуском і дає помилку, якщо використовується без `--dry-run`. + + - Режим побудовника: запускає перевірки розв’язуваності SecretRef для змінених refs/providers. + - Режим JSON (`--strict-json`, `--json` або пакетний режим): запускає перевірку схеми та перевірки розв’язуваності SecretRef. + - Перевірка політики також виконується для відомих непідтримуваних цільових поверхонь SecretRef. + - Перевірки політики оцінюють повну конфігурацію після зміни, тому записи батьківських об’єктів (наприклад встановлення `hooks` як об’єкта) не можуть обійти перевірку непідтримуваних поверхонь. + - Перевірки exec SecretRef за замовчуванням пропускаються під час dry-run, щоб уникнути побічних ефектів команд. + - Використовуйте `--allow-exec` з `--dry-run`, щоб явно ввімкнути перевірки exec SecretRef (це може виконати команди provider). + - `--allow-exec` призначений лише для dry-run і завершується помилкою, якщо використаний без `--dry-run`. - - `--dry-run --json` виводить машинозчитуваний звіт: + + `--dry-run --json` друкує машинозчитуваний звіт: - - `ok`: чи пройшов пробний запуск + - `ok`: чи пройшов dry-run - `operations`: кількість оцінених присвоєнь - - `checks`: чи виконувалися перевірки схеми/розв’язності - - `checks.resolvabilityComplete`: чи перевірки розв’язності виконалися до завершення (false, коли exec-посилання пропущено) - - `refsChecked`: кількість посилань, фактично розв’язаних під час пробного запуску - - `skippedExecRefs`: кількість exec-посилань, пропущених через те, що `--allow-exec` не встановлено - - `errors`: структуровані помилки схеми/розв’язності, коли `ok=false` + - `checks`: чи виконувалися перевірки схеми/розв’язуваності + - `checks.resolvabilityComplete`: чи перевірки розв’язуваності виконалися до завершення (false, коли exec refs пропущені) + - `refsChecked`: кількість refs, фактично розв’язаних під час dry-run + - `skippedExecRefs`: кількість exec refs, пропущених через те, що `--allow-exec` не було встановлено + - `errors`: структуровані помилки схеми/розв’язуваності, коли `ok=false` -### Форма виводу JSON +### Форма JSON-виводу ```json5 { @@ -311,7 +368,7 @@ openclaw config set channels.discord.token \ ``` - + ```json { "ok": true, @@ -328,7 +385,7 @@ openclaw config set channels.discord.token \ } ``` - + ```json { "ok": false, @@ -356,10 +413,10 @@ openclaw config set channels.discord.token \ - - `config schema validation failed`: форма конфігурації після зміни недійсна; виправте шлях/значення або форму об’єкта provider/ref. - - `Config policy validation failed: unsupported SecretRef usage`: поверніть ці облікові дані до відкритого тексту/рядкового вводу й використовуйте SecretRefs лише на підтримуваних поверхнях. - - `SecretRef assignment(s) could not be resolved`: зазначений provider/ref наразі неможливо розв’язати (відсутня змінна середовища, недійсний вказівник на файл, помилка exec-провайдера або невідповідність provider/source). - - `Dry run note: skipped exec SecretRef resolvability check(s)`: dry-run пропустив exec-посилання; перезапустіть із `--allow-exec`, якщо вам потрібна перевірка розв’язуваності exec. + - `config schema validation failed`: форма вашої конфігурації після зміни недійсна; виправте шлях/значення або форму об’єкта provider/ref. + - `Config policy validation failed: unsupported SecretRef usage`: перемістіть ці облікові дані назад до введення відкритим текстом/рядком і використовуйте SecretRefs лише на підтримуваних поверхнях. + - `SecretRef assignment(s) could not be resolved`: указаний provider/ref наразі неможливо розв’язати (відсутня змінна середовища, недійсний вказівник на файл, помилка exec-провайдера або невідповідність provider/source). + - `Dry run note: skipped exec SecretRef resolvability check(s)`: dry-run пропустив exec-посилання; повторіть запуск із `--allow-exec`, якщо вам потрібна перевірка розв’язності exec. - Для пакетного режиму виправте записи з помилками й повторно запустіть `--dry-run` перед записом. @@ -367,13 +424,13 @@ openclaw config set channels.discord.token \ ## Безпека запису -`openclaw config set` та інші засоби запису конфігурації, що належать OpenClaw, перевіряють повну конфігурацію після зміни перед збереженням її на диск. Якщо нове корисне навантаження не проходить перевірку схеми або схоже на руйнівне перезаписування, активна конфігурація залишається без змін, а відхилене корисне навантаження зберігається поруч як `openclaw.json.rejected.*`. +`openclaw config set` та інші засоби запису конфігурації, що належать OpenClaw, перевіряють повну конфігурацію після зміни перед її збереженням на диск. Якщо нове навантаження не проходить перевірку схеми або схоже на руйнівне перезаписування, активна конфігурація лишається без змін, а відхилене навантаження зберігається поруч як `openclaw.json.rejected.*`. -Шлях активної конфігурації має бути звичайним файлом. Макети `openclaw.json` із символічними посиланнями не підтримуються для запису; натомість використовуйте `OPENCLAW_CONFIG_PATH`, щоб указати безпосередньо на справжній файл. +Активний шлях конфігурації має бути звичайним файлом. Макети з `openclaw.json` як символьним посиланням не підтримуються для запису; натомість використовуйте `OPENCLAW_CONFIG_PATH`, щоб указати безпосередньо на справжній файл. -Для невеликих змін віддавайте перевагу записам через CLI: +Для невеликих змін надавайте перевагу записам через CLI: ```bash openclaw config set gateway.reload.mode hybrid --dry-run @@ -381,7 +438,7 @@ openclaw config set gateway.reload.mode hybrid openclaw config validate ``` -Якщо запис відхилено, перевірте збережене корисне навантаження й виправте повну форму конфігурації: +Якщо запис відхилено, перевірте збережене навантаження й виправте повну форму конфігурації: ```bash CONFIG="$(openclaw config file)" @@ -389,13 +446,13 @@ ls -lt "$CONFIG".rejected.* 2>/dev/null | head openclaw config validate ``` -Прямі записи через редактор усе ще дозволені, але запущений Gateway вважає їх ненадійними, доки вони не пройдуть перевірку. Недійсні прямі зміни можуть бути відновлені з останньої відомої справної резервної копії під час запуску або гарячого перезавантаження. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config). +Прямі зміни через редактор усе ще дозволені, але запущений Gateway вважає їх ненадійними, доки вони не пройдуть перевірку. Недійсні прямі зміни можна відновити з останньої справної резервної копії під час запуску або гарячого перезавантаження. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config). -Відновлення всього файла призначене для глобально пошкодженої конфігурації, наприклад помилок розбору, помилок схеми на кореневому рівні, помилок застарілої міграції або змішаних помилок Plugin і кореня. Якщо перевірка не проходить лише під `plugins.entries....`, OpenClaw залишає активний `openclaw.json` на місці й повідомляє про локальну проблему Plugin замість відновлення `.last-good`. Це запобігає тому, щоб зміни схеми Plugin або розбіжність `minHostVersion` відкотили непов’язані користувацькі налаштування, як-от моделі, провайдери, профілі автентифікації, канали, експозиція Gateway, інструменти, пам’ять, браузер або конфігурація cron. +Відновлення всього файла призначене для глобально пошкодженої конфігурації, як-от помилки розбору, помилки схеми на кореневому рівні, помилки міграції застарілої конфігурації або змішані помилки Plugin і кореня. Якщо перевірка не проходить лише під `plugins.entries....`, OpenClaw залишає активний `openclaw.json` на місці й повідомляє про локальну для Plugin проблему замість відновлення `.last-good`. Це запобігає відкату непов’язаних налаштувань користувача, таких як моделі, провайдери, профілі автентифікації, канали, експозиція gateway, інструменти, пам’ять, браузер або конфігурація cron, через зміни схеми Plugin чи розбіжність `minHostVersion`. ## Підкоманди -- `config file`: вивести шлях активного файла конфігурації (розв’язаний із `OPENCLAW_CONFIG_PATH` або типового розташування). Шлях має вказувати на звичайний файл, а не на символічне посилання. +- `config file`: вивести шлях до активного файла конфігурації (розв’язаний із `OPENCLAW_CONFIG_PATH` або типового розташування). Шлях має вказувати на звичайний файл, а не на символьне посилання. Перезапустіть gateway після змін. @@ -408,10 +465,10 @@ openclaw config validate openclaw config validate --json ``` -Після успішного проходження `openclaw config validate` ви можете скористатися локальним TUI, щоб вбудований агент порівняв активну конфігурацію з документацією, поки ви перевіряєте кожну зміну з того самого термінала: +Після успішного проходження `openclaw config validate` можна використати локальний TUI, щоб вбудований агент порівняв активну конфігурацію з документацією, поки ви перевіряєте кожну зміну з того самого термінала: -Якщо перевірка вже завершується помилкою, почніть з `openclaw configure` або `openclaw doctor --fix`. `openclaw chat` не обходить захист від недійсної конфігурації. +Якщо перевірка вже завершується помилкою, почніть із `openclaw configure` або `openclaw doctor --fix`. `openclaw chat` не обходить захист від недійсної конфігурації. ```bash @@ -427,7 +484,7 @@ openclaw chat !openclaw doctor ``` -Типовий цикл відновлення: +Типовий цикл виправлення: @@ -436,11 +493,11 @@ openclaw chat Застосуйте цільові зміни за допомогою `openclaw config set` або `openclaw configure`. - + Повторно запускайте `openclaw config validate` після кожної зміни. - - Якщо перевірка проходить успішно, але середовище виконання досі несправне, запустіть `openclaw doctor` або `openclaw doctor --fix`, щоб отримати допомогу з міграцією та відновленням. + + Якщо перевірка проходить, але середовище виконання все ще несправне, запустіть `openclaw doctor` або `openclaw doctor --fix`, щоб отримати допомогу з міграцією та виправленням. diff --git a/docs/uk/install/exe-dev.md b/docs/uk/install/exe-dev.md index 6da9b904a..693735ac5 100644 --- a/docs/uk/install/exe-dev.md +++ b/docs/uk/install/exe-dev.md @@ -1,39 +1,39 @@ --- read_when: - - Вам потрібен недорогий постійно увімкнений Linux-хост для Gateway - - Вам потрібен віддалений доступ до Control UI без запуску власного VPS -summary: Запуск Gateway OpenClaw на exe.dev (VM + HTTPS-проксі) для віддаленого доступу + - Вам потрібен недорогий Linux-хост для Gateway, який завжди ввімкнений + - Вам потрібен віддалений доступ до інтерфейсу керування без запуску власного VPS +summary: Запустіть OpenClaw Gateway на exe.dev (VM + HTTPS-проксі) для віддаленого доступу title: exe.dev x-i18n: - generated_at: "2026-04-27T07:08:18Z" - model: gpt-5.4 + generated_at: "2026-04-29T21:05:44Z" + model: gpt-5.5 provider: openai - source_hash: 98bc90ff26ce1773bd0e05f975fcc3427039e90ce50eca21bb2e8232f7ac730f + source_hash: b571f9b29bb2cca0f311db4188c922b2f70ee91cb48b233cf9922e57a7f05340 source_path: install/exe-dev.md - workflow: 15 + workflow: 16 --- -Мета: Gateway OpenClaw, запущений на VM exe.dev, доступний із вашого ноутбука за адресою: `https://.exe.xyz` +Мета: OpenClaw Gateway працює на VM exe.dev і доступний з вашого ноутбука через: `https://.exe.xyz` -Ця сторінка передбачає використання типового образу **exeuntu** від exe.dev. Якщо ви вибрали інший дистрибутив, підберіть відповідні пакети самостійно. +Ця сторінка передбачає стандартний образ **exeuntu** від exe.dev. Якщо ви вибрали інший дистрибутив, зіставте пакети відповідно. ## Швидкий шлях для початківців 1. [https://exe.new/openclaw](https://exe.new/openclaw) -2. Заповніть ваш ключ або токен автентифікації за потреби -3. Натисніть "Agent" поруч із вашою VM і дочекайтеся, поки Shelley завершить налаштування -4. Відкрийте `https://.exe.xyz/` і пройдіть автентифікацію за допомогою налаштованого спільного секрету (у цьому посібнику типово використовується автентифікація за токеном, але автентифікація за паролем теж працює, якщо ви перемкнете `gateway.auth.mode`) -5. Підтвердіть усі незавершені запити на прив’язку пристроїв за допомогою `openclaw devices approve ` +2. За потреби введіть свій ключ/токен автентифікації +3. Натисніть "Агент" поруч із вашою VM і дочекайтеся, поки Shelley завершить підготовку +4. Відкрийте `https://.exe.xyz/` і автентифікуйтеся за допомогою налаштованого спільного секрету (цей посібник за замовчуванням використовує автентифікацію токеном, але автентифікація паролем також працює, якщо перемкнути `gateway.auth.mode`) +5. Підтвердьте всі очікувані запити на сполучення пристроїв за допомогою `openclaw devices approve ` -## Що вам знадобиться +## Що потрібно -- обліковий запис exe.dev -- доступ `ssh exe.dev` до віртуальних машин [exe.dev](https://exe.dev) (необов’язково) +- Обліковий запис exe.dev +- Доступ `ssh exe.dev` до віртуальних машин [exe.dev](https://exe.dev) (необов'язково) -## Автоматизоване встановлення за допомогою Shelley +## Автоматизоване встановлення із Shelley -Shelley, агент [exe.dev](https://exe.dev), може миттєво встановити OpenClaw за нашим -запитом. Використаний запит наведено нижче: +Shelley, агент [exe.dev](https://exe.dev), може миттєво встановити OpenClaw за допомогою нашого +промпта. Використаний промпт наведено нижче: ``` Set up OpenClaw (https://docs.openclaw.ai/install) on this VM. Use the non-interactive and accept-risk flags for openclaw onboarding. Add the supplied auth or token as needed. Configure nginx to forward from the default port 18789 to the root location on the default enabled site config, making sure to enable Websocket support. Pairing is done by "openclaw devices list" and "openclaw devices approve ". Make sure the dashboard shows that OpenClaw's health is OK. exe.dev handles forwarding from port 8000 to port 80/443 and HTTPS for us, so the final "reachable" should be .exe.xyz, without port specification. @@ -43,7 +43,7 @@ Set up OpenClaw (https://docs.openclaw.ai/install) on this VM. Use the non-inter ## 1) Створіть VM -На вашому пристрої: +З вашого пристрою: ```bash ssh exe.dev new @@ -56,7 +56,7 @@ ssh .exe.xyz ``` -Зробіть цю VM **stateful**. OpenClaw зберігає `openclaw.json`, `auth-profiles.json` для кожного агента, сесії та стан каналів/провайдерів у `~/.openclaw/`, а також робочий простір у `~/.openclaw/workspace/`. +Залишайте цю VM **stateful**. OpenClaw зберігає `openclaw.json`, `auth-profiles.json` для кожного агента, сесії та стан каналів/провайдерів у `~/.openclaw/`, а робочу область у `~/.openclaw/workspace/`. ## 2) Встановіть передумови (на VM) @@ -68,7 +68,7 @@ sudo apt-get install -y git curl jq ca-certificates openssl ## 3) Встановіть OpenClaw -Запустіть скрипт встановлення OpenClaw: +Запустіть інсталяційний скрипт OpenClaw: ```bash curl -fsSL https://openclaw.ai/install.sh | bash @@ -76,7 +76,7 @@ curl -fsSL https://openclaw.ai/install.sh | bash ## 4) Налаштуйте nginx для проксіювання OpenClaw на порт 8000 -Відредагуйте `/etc/nginx/sites-enabled/default`, додавши +Відредагуйте `/etc/nginx/sites-enabled/default` так: ``` server { @@ -108,23 +108,88 @@ server { } ``` -Перезаписуйте заголовки forwarding замість збереження ланцюжків, наданих клієнтом. -OpenClaw довіряє метаданим forwarded IP лише від явно налаштованих проксі, -а ланцюжки `X-Forwarded-For` у стилі append вважаються ризиком для безпеки. +Перезаписуйте заголовки пересилання замість збереження ланцюжків, наданих клієнтом. +OpenClaw довіряє метаданим пересланої IP-адреси лише від явно налаштованих проксі, +а ланцюжки `X-Forwarded-For` у стилі додавання вважаються ризиком посилення захисту. -## 5) Отримайте доступ до OpenClaw і надайте дозволи +## 5) Отримайте доступ до OpenClaw і надайте привілеї -Відкрийте `https://.exe.xyz/` (див. вивід Control UI з onboarding). Якщо з’явиться запит на автентифікацію, вставте -налаштований спільний секрет із VM. У цьому посібнику використовується автентифікація за токеном, тож отримайте `gateway.auth.token` -командою `openclaw config get gateway.auth.token` (або згенеруйте його за допомогою `openclaw doctor --generate-gateway-token`). -Якщо ви змінили Gateway на автентифікацію за паролем, використовуйте `gateway.auth.password` / `OPENCLAW_GATEWAY_PASSWORD`. -Підтверджуйте пристрої командами `openclaw devices list` і `openclaw devices approve `. Якщо сумніваєтеся, використовуйте Shelley у вашому браузері! +Відкрийте `https://.exe.xyz/` (див. вивід Control UI під час онбордингу). Якщо з'явиться запит на автентифікацію, вставте +налаштований спільний секрет із VM. Цей посібник використовує автентифікацію токеном, тому отримайте `gateway.auth.token` +за допомогою `openclaw config get gateway.auth.token` (або згенеруйте його за допомогою `openclaw doctor --generate-gateway-token`). +Якщо ви змінили Gateway на автентифікацію паролем, натомість використовуйте `gateway.auth.password` / `OPENCLAW_GATEWAY_PASSWORD`. +Підтверджуйте пристрої за допомогою `openclaw devices list` і `openclaw devices approve `. Якщо сумніваєтеся, скористайтеся Shelley у браузері! + +## Налаштування віддалених каналів + +Для віддалених хостів віддавайте перевагу одному виклику `config patch` замість багатьох SSH-викликів `config set`. Зберігайте реальні токени в середовищі VM або `~/.openclaw/.env`, а в `openclaw.json` розміщуйте лише SecretRefs. + +На VM зробіть так, щоб середовище сервісу містило потрібні йому секрети: + +```bash +cat >> ~/.openclaw/.env <<'EOF' +SLACK_BOT_TOKEN=xoxb-... +SLACK_APP_TOKEN=xapp-... +DISCORD_BOT_TOKEN=... +OPENAI_API_KEY=sk-... +EOF +``` + +На локальній машині створіть файл патча та передайте його у VM через pipe: + +```json5 +// openclaw.remote.patch.json5 +{ + secrets: { + providers: { + default: { source: "env" }, + }, + }, + channels: { + slack: { + enabled: true, + mode: "socket", + botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, + appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" }, + groupPolicy: "open", + requireMention: false, + }, + discord: { + enabled: true, + token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }, + dmPolicy: "disabled", + dm: { enabled: false }, + groupPolicy: "allowlist", + }, + }, + agents: { + defaults: { + model: { primary: "openai/gpt-5.5" }, + models: { + "openai/gpt-5.5": { params: { fastMode: true } }, + }, + }, + }, +} +``` + +```bash +ssh .exe.xyz 'openclaw config patch --stdin --dry-run' < ./openclaw.remote.patch.json5 +ssh .exe.xyz 'openclaw config patch --stdin' < ./openclaw.remote.patch.json5 +ssh .exe.xyz 'openclaw gateway restart && openclaw health' +``` + +Використовуйте `--replace-path`, коли вкладений allowlist має стати точно значенням патча, наприклад під час заміни allowlist каналу Discord: + +```bash +ssh .exe.xyz 'openclaw config patch --stdin --replace-path "channels.discord.guilds[\"123\"].channels"' < ./discord.patch.json5 +``` ## Віддалений доступ -Віддалений доступ забезпечується автентифікацією [exe.dev](https://exe.dev). За -замовчуванням HTTP-трафік із порту 8000 переспрямовується на `https://.exe.xyz` -з автентифікацією за email. +Віддалений доступ обробляється автентифікацією [exe.dev](https://exe.dev). За +замовчуванням HTTP-трафік із порту 8000 пересилається до `https://.exe.xyz` +з автентифікацією через email. ## Оновлення @@ -137,7 +202,7 @@ openclaw health Посібник: [Оновлення](/uk/install/updating) -## Пов’язане +## Пов'язане -- [Віддалений Gateway](/uk/gateway/remote) +- [Віддалений gateway](/uk/gateway/remote) - [Огляд встановлення](/uk/install)