From 5a5bb10f2bebabfd0fbb7163d70b816ca78743c6 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Fri, 24 Apr 2026 17:27:22 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 472 ++++++++++++++++++------------------ docs/uk/channels/slack.md | 339 +++++++++++++------------- docs/uk/concepts/models.md | 234 +++++++++--------- 3 files changed, 514 insertions(+), 531 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index 08f70917c..15b27194d 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -1,65 +1,65 @@ --- read_when: - Робота над функціями каналу Discord -summary: Статус підтримки бота Discord, можливості та конфігурація +summary: Статус підтримки бота Discord, можливості та налаштування title: Discord x-i18n: - generated_at: "2026-04-24T03:41:28Z" + generated_at: "2026-04-24T17:24:52Z" model: gpt-5.4 provider: openai - source_hash: ce73e0e6995702f3b2453b2e5ab4e55b02190e64fdf5805f53b4002be63140a2 + source_hash: df5d215c6a6c43e1b3f60837752f60eafc6e34c1ffd4aaceb2f60d4dd3c130be source_path: channels/discord.md workflow: 15 --- -Готово для приватних повідомлень і каналів гільдій через офіційний Gateway Discord. +Готово для приватних повідомлень і каналів серверів через офіційний Gateway Discord. - - Приватні повідомлення Discord за замовчуванням працюють у режимі підключення. + + Приватні повідомлення Discord за замовчуванням використовують режим сполучення. Нативна поведінка команд і каталог команд. - + Міжканальна діагностика та процес відновлення. ## Швидке налаштування -Вам потрібно буде створити новий застосунок із ботом, додати бота на свій сервер і підключити його до 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". - Натисніть **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** (необов’язково; потрібне лише для оновлень присутності) - + Прокрутіть угору на сторінці **Bot** і натисніть **Reset Token**. Попри назву, це генерує ваш перший токен — нічого не «скидається». - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він вам незабаром знадобиться. + Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він незабаром знадобиться. - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL-запрошення з потрібними дозволами, щоб додати бота на свій сервер. + На бічній панелі натисніть **OAuth2**. Ви згенеруєте URL-запрошення з правильними дозволами, щоб додати бота на свій сервер. Прокрутіть до **OAuth2 URL Generator** і увімкніть: @@ -77,31 +77,31 @@ x-i18n: - Attach Files - Add Reactions (необов’язково) - Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в Discord threads, зокрема у сценаріях форумів або медіаканалів, де створюється або продовжується thread, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте побачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема в процесах форумних або медіаканалів, які створюють або продовжують тред, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue** для підключення. Тепер ви маєте бачити свого бота на сервері Discord. - Повернувшись у застосунок Discord, вам потрібно увімкнути Developer Mode, щоб можна було копіювати внутрішні ID. + Повернувшись у застосунок Discord, вам потрібно увімкнути Developer Mode, щоб мати змогу копіювати внутрішні ID. 1. Натисніть **User Settings** (значок шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою миші на **значку сервера** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою миші на **своєму аватарі** → **Copy User ID** + 2. Клацніть правою кнопкою миші **значок сервера** на бічній панелі → **Copy Server ID** + 3. Клацніть правою кнопкою миші свій **аватар** → **Copy User ID** - Збережіть свій **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви передасте всі три значення до OpenClaw. + Збережіть свої **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви передасте всі три значення в OpenClaw. - Щоб підключення працювало, Discord має дозволяти вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші на **значку сервера** → **Privacy Settings** → увімкніть **Direct Messages**. + Щоб сполучення працювало, Discord має дозволяти вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші **значок сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дозволяє учасникам сервера (зокрема ботам) надсилати вам приватні повідомлення. Залишайте це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали гільдії, після підключення можна вимкнути приватні повідомлення. + Це дозволяє учасникам сервера (зокрема ботам) надсилати вам приватні повідомлення. Залиште це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали сервера, після сполучення можна вимкнути приватні повідомлення. - - Токен вашого бота Discord — це секрет (як пароль). Задайте його на машині, де запущено OpenClaw, перш ніж писати своєму агенту. + + Токен вашого бота Discord — це секрет (як пароль). Установіть його на машині, де працює OpenClaw, перш ніж надсилати повідомлення агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -115,16 +115,16 @@ openclaw gateway - + - - Напишіть своєму агенту OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому про це. Якщо Discord — ваш перший канал, скористайтеся вкладкою CLI / config. + + Напишіть своєму агенту OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому це. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / config. - > "Я вже задав токен мого бота Discord у config. Будь ласка, заверши налаштування Discord з User ID `` і Server ID ``." + > "Я вже встановив токен свого Discord-бота в config. Будь ласка, заверши налаштування Discord з User ID `` і Server ID ``." - Якщо ви надаєте перевагу файловій конфігурації, задайте: + Якщо ви віддаєте перевагу файловій конфігурації, установіть: ```json5 { @@ -141,27 +141,27 @@ openclaw gateway } ``` - Резервне значення env для облікового запису за замовчуванням: + Резервне env-значення для стандартного облікового запису: ```bash DISCORD_BOT_TOKEN=... ``` - Підтримуються текстові значення `token`. Для `channels.discord.token` також підтримуються значення SecretRef через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Підтримуються plaintext-значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - - Дочекайтеся, поки Gateway запуститься, а потім надішліть своєму боту приватне повідомлення в Discord. Він відповість кодом підключення. + + Дочекайтеся, поки Gateway запуститься, а потім напишіть боту в приватні повідомлення в Discord. У відповідь він надішле код сполучення. - - Надішліть код підключення своєму агенту в наявному каналі: + + Надішліть код сполучення своєму агенту в наявному каналі: - > "Підтвердь цей код підключення Discord: ``" + > "Схвали цей код сполучення Discord: ``" @@ -173,29 +173,29 @@ openclaw pairing approve discord - Термін дії кодів підключення спливає через 1 годину. + Термін дії кодів сполучення закінчується через 1 годину. - Тепер ви маєте мати змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення. -Визначення токена залежить від облікового запису. Значення токена в config мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` використовується для цього конкретного виклику. Це стосується дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Налаштування політики облікового запису/повторних спроб усе одно беруться з вибраного облікового запису в активному runtime snapshot. +Визначення токена враховує обліковий запис. Значення токена в config мають пріоритет над резервним env-значенням. `DISCORD_BOT_TOKEN` використовується лише для стандартного облікового запису. +Для розширених вихідних викликів (дії інструмента повідомлень/каналу) явний `token` використовується для цього конкретного виклику. Це стосується дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису/повторних спроб усе ще надходить із вибраного облікового запису в активному runtime snapshot. -## Рекомендовано: налаштуйте робочий простір гільдії +## Рекомендовано: налаштуйте робочий простір сервера -Після того як приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал матиме власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли приватні повідомлення вже працюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує окрему сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. - - Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях. + + Це дозволяє вашому агенту відповідати в будь-якому каналі вашого сервера, а не лише в приватних повідомленнях. - - > "Додай мій Server ID Discord `` до allowlist гільдій" + + > "Додай мій Server ID Discord `` до allowlist серверів" @@ -221,14 +221,14 @@ openclaw pairing approve discord - За замовчуванням ваш агент відповідає в каналах гільдії лише коли його згадують через @mention. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах сервера лише тоді, коли його згадують через @mention. Для приватного сервера вам, імовірно, потрібно, щоб він відповідав на кожне повідомлення. - - > "Дозволь моєму агенту відповідати на цьому сервері без потреби в @mention" + + > "Дозволь моєму агенту відповідати на цьому сервері без потреби в @mentioned" - Установіть `requireMention: false` у конфігурації вашої гільдії: + Установіть `requireMention: false` у конфігурації сервера: ```json5 { @@ -249,54 +249,54 @@ openclaw pairing approve discord - - За замовчуванням довготривала пам’ять (`MEMORY.md`) завантажується лише в сесіях приватних повідомлень. У каналах гільдії `MEMORY.md` не завантажується автоматично. + + За замовчуванням довготривала пам’ять (`MEMORY.md`) завантажується лише в сесіях приватних повідомлень. У каналах сервера `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` або будь-що, що відповідає вашому робочому процесу. +Тепер створіть кілька каналів на своєму сервері Discord і починайте спілкуватися. Ваш агент може бачити назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що інше, що відповідає вашому робочому процесу. ## Модель runtime - Gateway керує підключенням до Discord. -- Маршрутизація відповідей детермінована: вхідні повідомлення з Discord повертаються в Discord. -- За замовчуванням (`session.dmScope=main`) прямі чати використовують спільну основну сесію агента (`agent:main:main`). -- Канали гільдій мають ізольовані ключі сесій (`agent::discord:channel:`). -- Group DMs за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`). -- Нативні слеш-команди виконуються в ізольованих сесіях команд (`agent::discord:slash:`), водночас несучи `CommandTargetSessionKey` до сесії розмови, куди виконується маршрутизація. +- Маршрутизація відповідей детермінована: вхідні повідомлення Discord отримують відповіді назад у Discord. +- За замовчуванням (`session.dmScope=main`) прямі чати використовують спільну головну сесію агента (`agent:main:main`). +- Канали сервера мають ізольовані ключі сесій (`agent::discord:channel:`). +- Групові приватні повідомлення за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`). +- Нативні слеш-команди виконуються в ізольованих сесіях команд (`agent::discord:slash:`), водночас зберігаючи `CommandTargetSessionKey` для маршрутизованої сесії розмови. -## Канали форумів +## Форумні канали -Форуми Discord і медіаканали приймають лише дописи в threads. OpenClaw підтримує два способи їх створення: +Форумні та медіаканали Discord приймають лише публікації в тредах. OpenClaw підтримує два способи їх створення: -- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити thread. Заголовок thread використовує перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити thread безпосередньо. Не передавайте `--message-id` для каналів форумів. +- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення. +- Використайте `openclaw message thread create`, щоб створити тред безпосередньо. Не передавайте `--message-id` для форумних каналів. -Приклад: надсилання до батьківського форуму для створення thread +Приклад: надсилання до батьківського форуму для створення треду ```bash openclaw message send --channel discord --target channel: \ --message "Topic title\nBody of the post" ``` -Приклад: явне створення forum thread +Приклад: явне створення форумного треду ```bash openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте в сам thread (`channel:`). +Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте повідомлення в сам тред (`channel:`). ## Інтерактивні компоненти @@ -308,17 +308,17 @@ OpenClaw підтримує контейнери компонентів Discord - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, виборів і форм, доки не сплине їхній термін дії. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, списків вибору та форм до закінчення строку їх дії. -Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (Discord user ID, теги або `*`). Якщо це налаштовано, користувачі, які не збігаються, отримають ефемерну відмову. +Щоб обмежити, хто може натискати кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Якщо це налаштовано, користувачі, які не відповідають умові, отримають ефемерну відмову. -Слеш-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадними списками провайдера та моделі, а також кроком Submit. Якщо не задано `commands.modelsWrite=false`, `/models add` також підтримує додавання нового запису провайдера/моделі з чату, а щойно додані моделі з’являються без перезапуску Gateway. Відповідь засобу вибору є ефемерною, і лише користувач, який його викликав, може ним користуватися. +Слеш-команди `/model` і `/models` відкривають інтерактивний вибір моделі зі списками провайдера й моделі та кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь засобу вибору є ефемерною, і лише користувач, який викликав команду, може нею користуватися. Вкладення файлів: - Блоки `file` мають вказувати на посилання вкладення (`attachment://`) - Надайте вкладення через `media`/`path`/`filePath` (один файл); для кількох файлів використовуйте `media-gallery` -- Використовуйте `filename`, щоб перевизначити ім’я завантаження, коли воно має збігатися з посиланням вкладення +- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має відповідати посиланню вкладення Модальні форми: @@ -342,7 +342,7 @@ OpenClaw підтримує контейнери компонентів Discord type: "actions", buttons: [ { - label: "Підтвердити", + label: "Схвалити", style: "success", allowedUsers: ["123456789012345678"], }, @@ -365,7 +365,7 @@ OpenClaw підтримує контейнери компонентів Discord title: "Деталі", triggerLabel: "Відкрити форму", fields: [ - { type: "text", label: "Ініціатор" }, + { type: "text", label: "Запитувач" }, { type: "select", label: "Пріоритет", @@ -388,10 +388,10 @@ OpenClaw підтримує контейнери компонентів Discord - `pairing` (за замовчуванням) - `allowlist` - - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`) + - `open` (потрібно, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`) - `disabled` - Якщо політика приватних повідомлень не є open, невідомі користувачі блокуються (або отримують запит на підключення в режимі `pairing`). + Якщо політика приватних повідомлень не є open, невідомі користувачі блокуються (або отримують запит на сполучення в режимі `pairing`). Пріоритет для кількох облікових записів: @@ -399,17 +399,17 @@ OpenClaw підтримує контейнери компонентів Discord - Іменовані облікові записи успадковують `channels.discord.allowFrom`, якщо їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`. - Формат DM target для доставки: + Формат DM-цілі для доставки: - `user:` - згадка `<@id>` - Числові ID без префікса неоднозначні та відхиляються, якщо явно не вказано тип цілі user/channel. + Числові ID без префікса є неоднозначними й відхиляються, якщо явно не вказано тип цілі user/channel. - - Обробка гільдій контролюється через `channels.discord.groupPolicy`: + + Обробка серверів керується `channels.discord.groupPolicy`: - `open` - `allowlist` @@ -419,12 +419,12 @@ OpenClaw підтримує контейнери компонентів Discord Поведінка `allowlist`: - - гільдія має відповідати `channels.discord.guilds` (бажано `id`, slug також приймається) - - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли вони відповідають `users` АБО `roles` - - пряме зіставлення за іменем/тегом за замовчуванням вимкнено; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - сервер має відповідати `channels.discord.guilds` (перевага надається `id`, slug приймається) + - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли вони збігаються з `users` АБО `roles` + - пряме зіставлення за іменем/тегом вимкнене за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами - - якщо для гільдії налаштовано `channels`, канали поза списком забороняються - - якщо гільдія не має блоку `channels`, дозволяються всі канали в цій allowlist-гілдії + - якщо для сервера налаштовано `channels`, канали поза списком відхиляються + - якщо для сервера немає блока `channels`, дозволяються всі канали в цьому сервері з allowlist Приклад: @@ -450,23 +450,23 @@ OpenClaw підтримує контейнери компонентів Discord } ``` - Якщо ви лише задали `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, резервне значення runtime буде `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. + Якщо ви лише встановили `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, резервне значення runtime буде `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. - - Повідомлення гільдій за замовчуванням вимагають згадки. + + Повідомлення на сервері за замовчуванням вимагають згадки. Визначення згадки включає: - явну згадку бота - налаштовані шаблони згадки (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) - - неявну поведінку reply-to-bot у підтримуваних випадках + - неявну поведінку відповіді боту в підтримуваних випадках - `requireMention` налаштовується окремо для кожної гільдії/каналу (`channels.discord.guilds...`). + `requireMention` налаштовується для кожного сервера/каналу (`channels.discord.guilds...`). `ignoreOtherMentions` за потреби відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). - Group DMs: + Групові приватні повідомлення: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug) @@ -474,9 +474,9 @@ OpenClaw підтримує контейнери компонентів Discord -### Маршрутизація агентів за ролями +### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише на рівні гільдії. Якщо прив’язка також задає інші поля match (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників сервера Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише для сервера. Якщо прив’язка також задає інші поля match (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -502,49 +502,49 @@ OpenClaw підтримує контейнери компонентів Discord ## Нативні команди та авторизація команд -- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. +- `commands.native` за замовчуванням має значення `"auto"` і увімкнено для Discord. - Перевизначення для каналу: `channels.discord.commands.native`. - `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. - Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. - Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів, які не авторизовані; виконання все одно застосовує авторизацію OpenClaw і повертає "не авторизовано". -Див. [Слеш-команди](/uk/tools/slash-commands) для каталогу команд і поведінки. +Див. [Слеш-команди](/uk/tools/slash-commands), щоб переглянути каталог команд і поведінку. -Типові налаштування слеш-команд: +Налаштування слеш-команд за замовчуванням: - `ephemeral: true` ## Деталі функцій - - Discord підтримує теги відповідей у виводі агента: + + Discord підтримує теги відповіді у виводі агента: - `[[reply_to_current]]` - `[[reply_to:]]` - Це контролюється через `channels.discord.replyToMode`: + Керується через `channels.discord.replyToMode`: - `off` (за замовчуванням) - `first` - `all` - `batched` - Примітка: `off` вимикає неявне гілкування відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються. - `first` завжди прикріплює неявне посилання нативної відповіді до першого вихідного повідомлення Discord у межах ходу. - `batched` прикріплює неявне посилання нативної відповіді Discord лише тоді, коли + Примітка: `off` вимикає неявне впорядкування відповідей у треді. Явні теги `[[reply_to_*]]` усе одно враховуються. + `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord у межах ходу. + `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли вхідний хід був дебаунс-пакетом із кількох повідомлень. Це корисно, - коли вам потрібні нативні відповіді переважно для неоднозначних швидких чатів, а не для кожного - окремого повідомлення. + коли нативні відповіді потрібні переважно для неоднозначних чатів зі сплесками, а не для кожного + окремого ходу з одним повідомленням. - ID повідомлень додаються до контексту/історії, щоб агенти могли націлюватися на конкретні повідомлення. + ID повідомлень додаються до context/history, щоб агенти могли орієнтуватися на конкретні повідомлення. - - OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` у Discord відображається як `partial`; `streamMode` — застарілий псевдонім, який мігрується автоматично. + + OpenClaw може потоково передавати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` у Discord відображається як `partial`; `streamMode` є застарілим псевдонімом і автоматично мігрується. - Типове значення залишається `off`, оскільки редагування попереднього перегляду в Discord швидко впираються в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис. + За замовчуванням лишається `off`, тому що редагування попереднього перегляду в Discord швидко впирається в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис. ```json5 { @@ -562,16 +562,16 @@ OpenClaw підтримує контейнери компонентів Discord ``` - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk` для налаштування розміру та точок розриву, обмежених `textChunkLimit`). - - Остаточні повідомлення з медіа, помилками та явними відповідями скасовують очікувані редагування попереднього перегляду. + - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені до `textChunkLimit`). + - Підсумкові повідомлення з медіа, помилками та явними відповідями скасовують усі очікувані редагування попереднього перегляду. - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли явно ввімкнено потоковий режим `block`, OpenClaw пропускає попередній потік, щоб уникнути подвійного потокового виводу. + Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли явно ввімкнено потоковий режим `block`, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. - - Контекст історії гільдії: + + Контекст історії сервера: - `channels.discord.historyLimit` за замовчуванням `20` - резервне значення: `messages.groupChat.historyLimit` @@ -582,27 +582,27 @@ OpenClaw підтримує контейнери компонентів Discord - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` - Поведінка thread: + Поведінка тредів: - - Discord threads маршрутизуються як сесії каналів і успадковують конфігурацію батьківського каналу, якщо не перевизначено інше. - - `channels.discord.thread.inheritParent` (за замовчуванням `false`) дає новим auto-threads змогу починати з батьківського транскрипту. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструмента повідомлень можуть визначати DM target `user:`. - - `guilds..channels..requireMention: false` зберігається під час резервного активування на етапі відповіді. + - Треди Discord маршрутизуються як сесії каналів і успадковують конфігурацію батьківського каналу, якщо не перевизначено інше. + - `channels.discord.thread.inheritParent` (за замовчуванням `false`) дозволяє новим автотредам ініціалізуватися з батьківського транскрипту. Перевизначення для окремих облікових записів містяться в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть визначати DM-цілі `user:`. + - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів впроваджуються як **ненадійний** контекст. Allowlist контролюють, хто може запускати агента, але не є повноцінною межею редагування додаткового контексту. + Теми каналів додаються як **ненадійний** контекст. Allowlist визначають, хто може запускати агента, але не є повноцінною межею редагування додаткового контексту. - - Discord може прив’язати thread до цілі сесії, щоб наступні повідомлення в цьому thread і далі маршрутизувалися до тієї самої сесії (включно із сесіями субагентів). + + Discord може прив’язувати тред до цілі сесії, щоб подальші повідомлення в цьому треді й надалі маршрутизувалися до тієї самої сесії (зокрема до сесій субагентів). Команди: - - `/focus ` прив’язати поточний/новий thread до цілі субагента/сесії - - `/unfocus` прибрати поточну прив’язку thread + - `/focus ` прив’язати поточний/новий тред до цілі субагента/сесії + - `/unfocus` видалити поточну прив’язку треду - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокусу через неактивність для прив’язок із фокусом - - `/session max-age ` переглянути/оновити жорсткий максимальний вік для прив’язок із фокусом + - `/session idle ` переглянути/оновити автоматичне зняття фокусу через неактивність для сфокусованих прив’язок + - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок Конфігурація: @@ -621,7 +621,7 @@ OpenClaw підтримує контейнери компонентів Discord enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // opt-in + spawnSubagentSessions: false, // увімкнення за бажанням }, }, }, @@ -632,16 +632,16 @@ OpenClaw підтримує контейнери компонентів Discord - `session.threadBindings.*` задає глобальні значення за замовчуванням. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати threads для `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати threads для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). - - Якщо прив’язки thread вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки thread недоступні. + - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати треди для `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати треди для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). + - Якщо прив’язки тредів вимкнено для облікового запису, `/focus` та пов’язані операції прив’язки тредів недоступні. - Див. [Субагенти](/uk/tools/subagents), [ACP Agents](/uk/tools/acp-agents) і [Довідник з конфігурації](/uk/gateway/configuration-reference). + Див. [Субагенти](/uk/tools/subagents), [ACP Agents](/uk/tools/acp-agents) і [Configuration Reference](/uk/gateway/configuration-reference). - Для стабільних ACP-робочих просторів "always-on" налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord. + Для стабільних ACP-робочих просторів «always-on» налаштуйте типізовані ACP-прив’язки верхнього рівня, націлені на розмови Discord. Шлях конфігурації: @@ -697,47 +697,47 @@ OpenClaw підтримує контейнери компонентів Discord Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або thread на місці й зберігає майбутні повідомлення в тій самій ACP-сесії. Повідомлення thread успадковують прив’язку батьківського каналу. - - У прив’язаному каналі або thread команди `/new` і `/reset` скидають ту саму ACP-сесію на місці. Тимчасові прив’язки thread можуть перевизначати визначення цілі, поки вони активні. - - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній thread через `--thread auto|here`. + - `/acp spawn codex --bind here` прив’язує поточний канал або тред на місці й зберігає майбутні повідомлення в тій самій ACP-сесії. Повідомлення в треді успадковують прив’язку батьківського каналу. + - У прив’язаному каналі або треді `/new` і `/reset` скидають ту саму ACP-сесію на місці. Тимчасові прив’язки тредів можуть перевизначати визначення цілі, поки вони активні. + - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній тред через `--thread auto|here`. - Див. [ACP Agents](/uk/tools/acp-agents) для деталей поведінки прив’язок. + Див. [ACP Agents](/uk/tools/acp-agents), щоб ознайомитися з деталями поведінки прив’язок. - Режим сповіщень про реакції для кожної гільдії: + Режим сповіщень про реакції для кожного сервера: - `off` - `own` (за замовчуванням) - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події та додаються до маршрутизованої сесії Discord. + Події реакцій перетворюються на системні події й додаються до маршрутизованої Discord-сесії. - `ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. + `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок визначення: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервне значення емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: - - Discord приймає unicode emoji або назви власних emoji. + - Discord приймає Unicode-емодзі або назви користувацьких емодзі. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - Ініційовані з каналу записи в config увімкнені за замовчуванням. + Записи в config, ініційовані з каналу, увімкнені за замовчуванням. - Це впливає на сценарії `/config set|unset` (коли функції команд увімкнені). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). Вимкнення: @@ -753,8 +753,8 @@ OpenClaw підтримує контейнери компонентів Discord - - Маршрутизуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ID застосунку + визначення allowlist) через HTTP(S) proxy за допомогою `channels.discord.proxy`. + + Маршрутизуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ID застосунку + визначення allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -804,13 +804,13 @@ OpenClaw підтримує контейнери компонентів Discord - allowlist можуть використовувати `pk:` - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошук використовує ID початкового повідомлення й обмежується часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо тільки не `allowBots=true` + - пошук використовує ID оригінального повідомлення й обмежується часовим вікном + - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо тільки `allowBots=true` - - Оновлення присутності застосовуються, коли ви задаєте статус або поле активності, або коли вмикаєте auto presence. + + Оновлення статусу присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичний статус присутності. Приклад лише зі статусом: @@ -824,20 +824,20 @@ OpenClaw підтримує контейнери компонентів Discord } ``` - Приклад активності (custom status — тип активності за замовчуванням): + Приклад активності (користувацький статус — тип активності за замовчуванням): ```json5 { channels: { discord: { - activity: "Час зосередженої роботи", + activity: "Час фокусування", activityType: 4, }, }, } ``` - Приклад streaming: + Приклад трансляції: ```json5 { @@ -857,10 +857,10 @@ OpenClaw підтримує контейнери компонентів Discord - 1: Streaming (потрібен `activityUrl`) - 2: Listening - 3: Watching - - 4: Custom (використовує текст активності як стан статусу; emoji необов’язковий) + - 4: Custom (використовує текст активності як стан статусу; емодзі необов’язкове) - 5: Competing - Приклад auto presence (сигнал стану runtime): + Приклад автоматичного статусу присутності (сигнал стану runtime): ```json5 { @@ -877,7 +877,7 @@ OpenClaw підтримує контейнери компонентів Discord } ``` - Auto presence відображає доступність runtime у статус Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту: + Автоматичний статус присутності зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -885,26 +885,26 @@ OpenClaw підтримує контейнери компонентів Discord - - Discord підтримує обробку підтверджень за допомогою кнопок у DM і може за потреби публікувати запити на підтвердження у вихідному каналі. + + Discord підтримує обробку погоджень за допомогою кнопок у приватних повідомленнях і за бажанням може публікувати запити на погодження в каналі походження. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (необов’язково; за можливості використовує резервне значення `commands.ownerAllowFrom`) + - `channels.discord.execApprovals.approvers` (необов’язково; за можливості використовується резервне значення `commands.ownerAllowFrom`) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec approvals, коли `enabled` не задано або має значення `"auto"` і можна визначити щонайменше одного approving-користувача — або з `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 як нативний клієнт погодження. - Коли `target` має значення `channel` або `both`, запит на підтвердження видно в каналі. Лише визначені approvers можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тому доставку в канал слід вмикати лише в довірених каналах. Якщо ID каналу неможливо визначити з ключа сесії, OpenClaw повертається до доставки через DM. + Коли `target` має значення `channel` або `both`, запит на погодження видно в каналі. Лише визначені погоджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на погодження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw використовує резервну доставку через DM. - Discord також відображає спільні кнопки підтвердження, які використовуються іншими чат-каналами. Нативний адаптер Discord головним чином додає DM-маршрутизацію approver-користувачів і fanout у канали. - Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw + Discord також відображає спільні кнопки погодження, які використовуються іншими чат-каналами. Нативний адаптер Discord головним чином додає маршрутизацію DM для погоджувачів і fanout у канали. + Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, - що чат-підтвердження недоступні або ручне підтвердження — єдиний шлях. + що погодження через чат недоступні або ручне погодження — єдиний шлях. - Авторизація Gateway і визначення підтвердження дотримуються спільного контракту клієнта Gateway (`plugin:` ID визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). Термін дії підтверджень за замовчуванням спливає через 30 хвилин. + Авторизація Gateway і визначення погодження відповідають спільному клієнтському контракту Gateway (`plugin:` ID визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). За замовчуванням термін дії погоджень спливає через 30 хвилин. Див. [Exec approvals](/uk/tools/exec-approvals). @@ -913,35 +913,35 @@ OpenClaw підтримує контейнери компонентів Discord ## Інструменти та обмеження дій -Дії повідомлень Discord включають надсилання повідомлень, адміністрування каналів, модерацію, присутність і дії з метаданими. +Дії з повідомленнями Discord включають обмін повідомленнями, адміністрування каналів, модерацію, статус присутності та дії з метаданими. Основні приклади: -- повідомлення: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` +- обмін повідомленнями: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` - реакції: `react`, `reactions`, `emojiList` - модерація: `timeout`, `kick`, `ban` -- присутність: `setPresence` +- статус присутності: `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 | вимкнено | -## UI компонентів v2 +## Інтерфейс Components v2 -OpenClaw використовує компоненти Discord v2 для exec approvals і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для власного UI (розширено; вимагає побудови payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендуються. +OpenClaw використовує Discord components v2 для exec-погоджень і маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для користувацького інтерфейсу (розширено; потребує побудови payload компонентів через інструмент Discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендуються. -- `channels.discord.ui.components.accentColor` задає accent color, що використовується контейнерами компонентів Discord (hex). -- Задавайте для окремого облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли присутні компоненти v2. +- `channels.discord.ui.components.accentColor` задає акцентний колір, який використовується контейнерами компонентів Discord (hex). +- Для окремого облікового запису задається через `channels.discord.accounts..ui.components.accentColor`. +- `embeds` ігноруються, коли присутні components v2. Приклад: @@ -961,7 +961,7 @@ OpenClaw використовує компоненти Discord v2 для exec ap ## Голос -Discord має дві окремі голосові поверхні: **голосові канали** реального часу (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду waveform). Gateway підтримує обидві. +У Discord є дві окремі голосові поверхні: голосові канали realtime (**voice channels**) (безперервні розмови) і вкладення голосових повідомлень (**voice message attachments**) (формат із попереднім переглядом waveform). Gateway підтримує обидва варіанти. ### Голосові канали @@ -969,11 +969,11 @@ Discord має дві окремі голосові поверхні: **голо - Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). - Налаштуйте `channels.discord.voice`. -- Боту потрібні дозволи Connect + Speak у цільовому голосовому каналі. +- Бот потребує дозволів Connect + Speak у цільовому голосовому каналі. -Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує агента облікового запису за замовчуванням і дотримується тих самих правил allowlist та group policy, що й інші команди Discord. +Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує стандартного агента облікового запису й дотримується тих самих правил allowlist і group policy, що й інші команди Discord. -Приклад auto-join: +Приклад автоматичного підключення: ```json5 { @@ -1002,20 +1002,20 @@ Discord має дві окремі голосові поверхні: **голо Примітки: - `voice.tts` перевизначає `messages.tts` лише для голосового відтворення. -- Ходи транскрипції голосу визначають статус власника з `allowFrom` Discord (або `dm.allowFrom`); мовці, які не є власниками, не можуть використовувати інструменти лише для власника (наприклад, `gateway` і `cron`). -- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути його. -- `voice.daveEncryption` і `voice.decryptionFailureTolerance` напряму передаються до параметрів приєднання `@discordjs/voice`. -- Значення за замовчуванням `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо вони не задані. -- OpenClaw також відстежує збої дешифрування під час отримання і автоматично відновлюється, виходячи та повторно приєднуючись до голосового каналу після повторних збоїв у короткому часовому вікні. -- Якщо журнали отримання постійно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, це може бути upstream-помилка отримання `@discordjs/voice`, описана в [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- Для ходів транскрипції голосу статус власника визначається з Discord `allowFrom` (або `dm.allowFrom`); користувачі без статусу власника не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`). +- Голос увімкнено за замовчуванням; установіть `channels.discord.voice.enabled=false`, щоб вимкнути його. +- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів підключення `@discordjs/voice`. +- Значення за замовчуванням `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. +- OpenClaw також відстежує помилки дешифрування під час прийому й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись після повторних помилок у короткому часовому вікні. +- Якщо журнали прийому неодноразово показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, це може бути помилка прийому upstream `@discordjs/voice`, описана в [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ### Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд waveform і вимагають аудіо у форматі OGG/Opus. OpenClaw генерує waveform автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway для аналізу й конвертації. +Голосові повідомлення Discord показують попередній перегляд waveform і вимагають аудіо OGG/Opus. OpenClaw генерує waveform автоматично, але потребує `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) @@ -1024,19 +1024,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Усунення проблем - + - увімкніть Message Content Intent - - увімкніть Server Members Intent, якщо ви залежите від визначення користувача/учасника - - перезапустіть gateway після зміни intents + - увімкніть Server Members Intent, якщо ви покладаєтеся на визначення користувача/учасника + - перезапустіть Gateway після зміни intents - + - перевірте `groupPolicy` - - перевірте allowlist гільдії в `channels.discord.guilds` - - якщо існує мапа `channels` гільдії, дозволені лише канали зі списку + - перевірте allowlist серверів у `channels.discord.guilds` + - якщо існує мапа `channels` сервера, дозволяються лише канали зі списку - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1049,16 +1049,16 @@ openclaw logs --follow - + Поширені причини: - - `groupPolicy="allowlist"` без відповідного allowlist гільдії/каналу - - `requireMention` налаштовано не в тому місці (має бути в `channels.discord.guilds` або в записі каналу) - - відправника заблоковано allowlist `users` гільдії/каналу + - `groupPolicy="allowlist"` без відповідного allowlist сервера/каналу + - `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або в записі каналу) + - відправника заблоковано allowlist `users` сервера/каналу - + Типові журнали: @@ -1075,9 +1075,9 @@ openclaw logs --follow - один обліковий запис: `channels.discord.inboundWorker.runTimeoutMs` - кілька облікових записів: `channels.discord.accounts..inboundWorker.runTimeoutMs` - - за замовчуванням: `1800000` (30 хвилин); задайте `0`, щоб вимкнути + - за замовчуванням: `1800000` (30 хвилин); установіть `0`, щоб вимкнути - Рекомендоване базове значення: + Рекомендоване базове налаштування: ```json5 { @@ -1098,23 +1098,23 @@ openclaw logs --follow } ``` - Використовуйте `eventQueue.listenerTimeout` для повільного налаштування listener і `inboundWorker.runTimeoutMs` - лише якщо вам потрібен окремий запобіжник для поставлених у чергу ходів агента. + Використовуйте `eventQueue.listenerTimeout` для повільного налаштування listener, а `inboundWorker.runTimeoutMs` + лише якщо вам потрібен окремий запобіжник для агентських ходів у черзі. - Перевірки дозволів у `channels status --probe` працюють лише для числових ID каналів. + Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте ключі slug, зіставлення runtime все одно може працювати, але probe не зможе повністю перевірити дозволи. + Якщо ви використовуєте ключі slug, зіставлення в runtime все одно може працювати, але probe не може повністю перевірити дозволи. - + - - DM вимкнено: `channels.discord.dm.enabled=false` - - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - у режимі `pairing` очікується підтвердження підключення + - приватні повідомлення вимкнено: `channels.discord.dm.enabled=false` + - політику приватних повідомлень вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) + - очікується схвалення сполучення в режимі `pairing` @@ -1122,59 +1122,59 @@ openclaw logs --follow За замовчуванням повідомлення, створені ботами, ігноруються. Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки. - Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Надавайте перевагу `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` - - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте з [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - якщо помилки тривають після автоматичного повторного підключення, зберіть журнали й порівняйте з [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) -## Довідник з конфігурації +## Довідник конфігурації -Основний довідник: [Довідник з конфігурації - Discord](/uk/gateway/config-channels#discord). +Основний довідник: [Configuration reference - Discord](/uk/gateway/config-channels#discord). -- запуск/авторизація: `enabled`, `token`, `accounts.*`, `allowBots` +- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` - команди: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` - черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` -- inbound worker: `inboundWorker.runTimeoutMs` -- відповіді/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- вхідний worker: `inboundWorker.runTimeoutMs` +- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` - медіа/повторні спроби: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry` - дії: `actions.*` -- присутність: `activity`, `status`, `activityType`, `activityUrl` +- статус присутності: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` -- функції: `threadBindings`, верхньорівневі `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` +- функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` ## Безпека та експлуатація -- Розглядайте токени ботів як секрети (`DISCORD_BOT_TOKEN` бажано використовувати в керованих середовищах). -- Надавайте Discord лише мінімально необхідні дозволи. -- Якщо стан розгортання/стан команд застарілий, перезапустіть gateway і повторно перевірте через `openclaw channels status --probe`. +- Розглядайте токени ботів як секрети (у контрольованих середовищах бажано використовувати `DISCORD_BOT_TOKEN`). +- Надавайте дозволи Discord за принципом найменших привілеїв. +- Якщо розгортання/стан команд застарів, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`. ## Пов’язане - - Підключіть користувача Discord до gateway. + + Сполучіть користувача Discord із Gateway. - Поведінка групових чатів і allowlist. + Поведінка групового чату та allowlist. Маршрутизуйте вхідні повідомлення до агентів. @@ -1182,8 +1182,8 @@ openclaw logs --follow Модель загроз і посилення захисту. - - Зіставляйте гільдії та канали з агентами. + + Зіставляйте сервери та канали з агентами. Поведінка нативних команд. diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 795fce5e4..72d7eaa82 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-запитів) + - Налаштування Slack або налагодження режиму socket/HTTP Slack +summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Request URLs) title: Slack x-i18n: - generated_at: "2026-04-24T03:41:27Z" + generated_at: "2026-04-24T17:24:52Z" model: gpt-5.4 provider: openai - source_hash: 906a4fcf00a51f4a9b8410f982abe1f068687b5aa9847a4894f489e57fa9e4dd + source_hash: 830fe844f1f278062de3c186f2b7865684962c10dfb2740a42bf7b47e342b534 source_path: channels/slack.md workflow: 15 --- -Готово до використання в продакшені для особистих повідомлень і каналів через інтеграції застосунку Slack. Режимом за замовчуванням є Socket Mode; URL-адреси HTTP-запитів також підтримуються. +Готово до продакшену для особистих повідомлень і каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються. Особисті повідомлення Slack за замовчуванням працюють у режимі сполучення. - + Нативна поведінка команд і каталог команд. - - Міжканальна діагностика та сценарії відновлення. + + Міжканальна діагностика та інструкції з відновлення. @@ -34,10 +34,10 @@ x-i18n: У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - виберіть **from a manifest** і оберіть робочий простір для вашого застосунку - вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче та продовжуйте створення - згенеруйте **App-Level Token** (`xapp-...`) з `connections:write` - - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) @@ -55,7 +55,7 @@ x-i18n: } ``` - Резервний варіант через змінні середовища (лише для облікового запису за замовчуванням): + Резервний варіант через env (лише для облікового запису за замовчуванням): ```bash SLACK_APP_TOKEN=xapp-... @@ -75,15 +75,15 @@ openclaw gateway - + У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - виберіть **from a manifest** і оберіть робочий простір для вашого застосунку - вставте [приклад маніфесту](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням - збережіть **Signing Secret** для перевірки запитів - - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) @@ -106,7 +106,7 @@ openclaw gateway Використовуйте унікальні шляхи webhook для багатьох облікових записів HTTP - Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. + Призначте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. @@ -125,7 +125,7 @@ openclaw gateway ## Контрольний список маніфесту та scope -Базовий маніфест застосунку Slack однаковий для Socket Mode і URL-адрес HTTP-запитів. Відрізняється лише блок `settings` (і `url` у слеш-команді). +Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` для slash-команди). Базовий маніфест (Socket Mode за замовчуванням): @@ -199,7 +199,7 @@ openclaw gateway } ``` -Для **режиму URL-адрес HTTP-запитів** замініть `settings` на HTTP-варіант і додайте `url` до кожної слеш-команди. Потрібна публічна URL-адреса: +Для **режиму HTTP Request URLs** замініть `settings` на HTTP-варіант і додайте `url` до кожної slash-команди. Потрібна публічна URL-адреса: ```json { @@ -229,19 +229,19 @@ openclaw gateway } ``` -### Додаткові параметри маніфесту +### Додаткові налаштування маніфесту -Показують різні можливості, що розширюють наведені вище значення за замовчуванням. +Покривають різні функції, що розширюють наведені вище типові значення. - + - Кілька [нативних слеш-команд](#commands-and-slash-behavior) можна використовувати замість однієї налаштованої команди з певними нюансами: + Можна використовувати кілька [нативних slash-команд](#commands-and-slash-behavior) замість однієї налаштованої команди з певними нюансами: - Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована. - - Одночасно можна зробити доступними не більше 25 слеш-команд. + - Одночасно можна зробити доступними не більше 25 slash-команд. - Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list): + Замініть наявний розділ `features.slash_commands` на підмножину [доступних команд](/uk/tools/slash-commands#command-list): @@ -308,8 +308,8 @@ openclaw gateway }, { "command": "/models", - "description": "List providers/models or add a model", - "usage_hint": "[provider] [page] [limit=|size=|all] | add " + "description": "List providers/models", + "usage_hint": "[provider] [page] [limit=|size=|all]" }, { "command": "/help", @@ -360,8 +360,8 @@ openclaw gateway ``` - - Використовуйте той самий список `slash_commands`, що й вище для Socket Mode, і додайте `"url": "https://gateway-host.example.com/slack/events"` до кожного запису. Приклад: + + Використовуйте той самий список `slash_commands`, що й для Socket Mode вище, і додайте `"url": "https://gateway-host.example.com/slack/events"` до кожного запису. Приклад: ```json "slash_commands": [ @@ -385,12 +385,12 @@ openclaw gateway - Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власне ім’я користувача та піктограму) замість типової ідентичності застосунку Slack. + Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні ім’я користувача та значок) замість типової ідентичності застосунку Slack. - Якщо ви використовуєте піктограму-емодзі, Slack очікує синтаксис `:emoji_name:`. + Якщо ви використовуєте emoji-значок, Slack очікує синтаксис `:emoji_name:`. - - Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope для читання є: + + Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -398,70 +398,70 @@ openclaw gateway - `reactions:read` - `pins:read` - `emoji:read` - - `search:read` (якщо ви залежите від читання пошуку Slack) + - `search:read` (якщо ви покладаєтеся на читання пошуку Slack) ## Модель токенів -- Для Socket Mode потрібні `botToken` + `appToken`. -- Для HTTP mode потрібні `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті +- `botToken` + `appToken` потрібні для Socket Mode. +- Для режиму HTTP потрібні `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні рядки або об’єкти SecretRef. -- Токени в конфігурації мають пріоритет над резервними значеннями зі змінних середовища. -- Резервний варіант через змінні середовища `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до облікового запису за замовчуванням. -- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного варіанту через змінні середовища) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`). +- Токени в конфігурації мають пріоритет над резервним варіантом через env. +- Резервний варіант через env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до облікового запису за замовчуванням. +- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного варіанту через env) і за замовчуванням працює в режимі лише для читання (`userTokenReadOnly: true`). Поведінка знімка стану: -- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` +- Інспекція облікового запису Slack відстежує поля `*Source` і `*Status` для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`). -- Стан може бути `available`, `configured_unavailable` або `missing`. +- Статус може бути `available`, `configured_unavailable` або `missing`. - `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше неявне джерело секрету, але поточна команда/шлях виконання - не змогли визначити фактичне значення. -- У HTTP mode включається `signingSecretStatus`; у Socket Mode + або інше не inline-джерело секрету, але поточний шлях команди/виконання + не зміг визначити фактичне значення. +- У режимі HTTP включається `signingSecretStatus`; у Socket Mode потрібною парою є `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогу за наявності налаштування може надаватися перевага токену користувача. Для запису перевага зберігається за bot token; записи через токен користувача дозволені лише коли `userTokenReadOnly: false` і bot token недоступний. +Для дій/читання каталогу перевага може надаватися user token, якщо його налаштовано. Для запису перевага залишається за bot token; запис через user token дозволяється лише коли `userTokenReadOnly: false` і bot token недоступний. ## Дії та обмеження -Діями Slack керує `channels.slack.actions.*`. +Дії Slack керуються через `channels.slack.actions.*`. -Доступні групи дій у поточному наборі інструментів Slack: +Доступні групи дій у поточному інструментарії Slack: -| Група | Типово | -| ---------- | ------- | -| messages | увімкнено | -| reactions | увімкнено | -| pins | увімкнено | -| memberInfo | увімкнено | -| emojiList | увімкнено | +| Група | За замовчуванням | +| ---------- | ---------------- | +| messages | увімкнено | +| reactions | увімкнено | +| pins | увімкнено | +| memberInfo | увімкнено | +| emojiList | увімкнено | -Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. +Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` та `emoji-list`. ## Керування доступом і маршрутизація - - `channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` керує доступом до особистих повідомлень (застаріле: `channels.slack.dm.policy`): - - `pairing` (типово) + - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) - `disabled` - Прапорці DM: + Прапорці особистих повідомлень: - - `dm.enabled` (типово true) + - `dm.enabled` (за замовчуванням true) - `channels.slack.allowFrom` (рекомендовано) - `dm.allowFrom` (застаріле) - - `dm.groupEnabled` (групові DM типово false) - - `dm.groupChannels` (необов’язковий allowlist для MPIM) + - `dm.groupEnabled` (групові особисті повідомлення за замовчуванням false) + - `dm.groupChannels` (необов’язковий allowlist MPIM) Пріоритет для багатьох облікових записів: @@ -469,7 +469,7 @@ openclaw gateway - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. - Сполучення в DM використовує `openclaw pairing approve slack `. + Сполучення в особистих повідомленнях використовує `openclaw pairing approve slack `. @@ -482,26 +482,26 @@ openclaw gateway Allowlist каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів. - Примітка щодо runtime: якщо `channels.slack` повністю відсутній (налаштування лише через env), runtime використовує резервне значення `groupPolicy="allowlist"` і записує попередження в лог (навіть якщо задано `channels.defaults.groupPolicy`). + Примітка щодо runtime: якщо `channels.slack` повністю відсутній (налаштування лише через env), runtime використовує резервне значення `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`). - Визначення імен/ID: + Визначення імені/ID: - - записи allowlist каналів і записи allowlist DM визначаються під час запуску, якщо доступ токена це дозволяє - - записи назв каналів, які не вдалося визначити, зберігаються як налаштовані, але типово ігноруються під час маршрутизації - - вхідна авторизація й маршрутизація каналів типово працюють за принципом ID-first; пряме зіставлення username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи allowlist каналів і allowlist особистих повідомлень визначаються під час запуску, коли доступ токена це дозволяє + - записи з іменами каналів, які не вдалося визначити, зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації + - вхідна авторизація та маршрутизація каналів за замовчуванням працюють за ID; пряме зіставлення імен користувачів/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - Повідомлення в каналах типово обмежуються згадками. + Повідомлення в каналах за замовчуванням обмежуються згадками. Джерела згадок: - явна згадка застосунку (`<@botId>`) - шаблони регулярних виразів для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) - - неявна поведінка reply-to-bot у треді (вимикається, коли `thread.requireExplicitMention` має значення `true`) + - неявна поведінка відповіді в треді на бота (вимикається, якщо `thread.requireExplicitMention` має значення `true`) - Керування для кожного каналу (`channels.slack.channels.`; імена — лише через визначення під час запуску або `dangerouslyAllowNameMatching`): + Керування на рівні каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - `users` (allowlist) @@ -509,45 +509,45 @@ openclaw gateway - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` - (застарілі ключі без префікса, як і раніше, зіставляються лише з `id:`) + - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` + (застарілі ключі без префікса все ще зіставляються лише з `id:`) -## Треди, сесії та теги відповіді +## Треди, сесії та теги відповідей -- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. -- Із типовим `session.dmScope=main` DM у Slack згортаються до головної сесії агента. +- Особисті повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. +- Із типовим `session.dmScope=main` особисті повідомлення 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.historyScope` — `thread`; для `thread.inheritParent` — `false`. +- `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.replyToMode`: `off|first|all|batched` (за замовчуванням `off`) +- `channels.slack.replyToModeByChatType`: для `direct|group|channel` +- застарілий резервний варіант для прямих чатів: `channels.slack.dm.replyToMode` -Підтримуються ручні теги відповіді: +Підтримуються ручні теги відповідей: - `[[reply_to_current]]` - `[[reply_to:]]` -Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"` — у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді залишаються видимими вбудовано. +Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"` — у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді лишаються видимими вбудовано. ## Реакції підтвердження -`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. +`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок визначення: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") +- резервне emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: @@ -556,24 +556,24 @@ openclaw gateway ## Потокове передавання тексту -`channels.slack.streaming` керує поведінкою попереднього перегляду наживо: +`channels.slack.streaming` керує поведінкою попереднього перегляду в реальному часі: -- `off`: вимкнути потоковий попередній перегляд наживо. -- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом. -- `block`: додавати оновлення попереднього перегляду частинами. +- `off`: вимкнути потоковий попередній перегляд у реальному часі. +- `partial` (за замовчуванням): замінювати текст попереднього перегляду останнім частковим виводом. +- `block`: додавати оновлення попереднього перегляду фрагментами. - `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст. -- `streaming.preview.toolProgress`: коли активний чернетковий попередній перегляд, спрямовувати оновлення інструментів/прогресу до того самого редагованого повідомлення попереднього перегляду (типово: `true`). Установіть `false`, щоб залишити окремі повідомлення інструментів/прогресу. +- `streaming.preview.toolProgress`: коли активний чорновий попередній перегляд, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (за замовчуванням: `true`). Встановіть `false`, щоб зберегти окремі повідомлення інструментів/прогресу. -`channels.slack.streaming.nativeTransport` керує нативним потоковим передаванням тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (типово: `true`). +`channels.slack.streaming.nativeTransport` керує нативним потоковим передаванням тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (за замовчуванням: `true`). -- Для нативного потокового передавання тексту та появи стану треду асистента Slack має бути доступний тред відповіді. Вибір треду все одно відбувається за `replyToMode`. -- Кореневі повідомлення в каналах і групових чатах все ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне. -- DM верхнього рівня в Slack типово залишаються поза тредами, тому не показують попередній перегляд у стилі треду; використовуйте відповіді в тредах або `typingReaction`, якщо хочете видимий прогрес там. -- Медіа та нетекстові payload повертаються до звичайної доставки. -- Фінальні медіа/помилки скасовують відкладені редагування попереднього перегляду; придатні текстові/block фінали скидаються лише тоді, коли можуть відредагувати попередній перегляд на місці. -- Якщо потокове передавання переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload. +- Щоб з’явилося нативне потокове передавання тексту та статус треду Slack assistant, має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується `replyToMode`. +- Кореневі повідомлення каналів і групових чатів усе ще можуть використовувати звичайний чорновий попередній перегляд, коли нативне потокове передавання недоступне. +- Особисті повідомлення Slack верхнього рівня за замовчуванням лишаються поза тредами, тому не показують попередній перегляд у стилі треду; використовуйте відповіді в треді або `typingReaction`, якщо хочете видимий прогрес там. +- Медіа та нетекстові корисні навантаження використовують резервну звичайну доставку. +- Фінальні повідомлення з медіа/помилками скасовують відкладені редагування попереднього перегляду; придатні фінальні текстові/блокові повідомлення скидаються лише тоді, коли можуть відредагувати попередній перегляд на місці. +- Якщо потокове передавання зривається посеред відповіді, OpenClaw переходить на звичайну доставку для решти корисних навантажень. -Використовуйте чернетковий попередній перегляд замість нативного потокового передавання тексту Slack: +Використовуйте чорновий попередній перегляд замість нативного потокового передавання тексту Slack: ```json5 { @@ -592,11 +592,11 @@ openclaw gateway - `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`. - булеве `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. -- застаріле `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`. +- застарілий `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`. -## Резервна реакція друку +## Резервна реакція набору тексту -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це особливо корисно поза відповідями в тредах, які використовують типовий індикатор стану "is typing...". Порядок визначення: @@ -606,39 +606,39 @@ openclaw gateway Примітки: - Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). -- Реакція є best-effort, і після завершення відповіді або шляху помилки автоматично виконується спроба очищення. +- Реакція виконується за можливості, а очищення автоматично намагається виконатися після завершення відповіді або шляху помилки. ## Медіа, розбиття на частини та доставка - Вкладення файлів Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та це дозволяють обмеження розміру. + Вкладення файлів Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру. - Типове обмеження розміру для вхідних даних у runtime становить `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`. + Обмеження розміру вхідних даних у runtime за замовчуванням становить `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`. - - текстові частини використовують `channels.slack.textChunkLimit` (типово 4000) + - текстові частини використовують `channels.slack.textChunkLimit` (за замовчуванням 4000) - `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`) - - обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує типові значення MIME-kind з медіапайплайна + - обмеження вихідних медіа використовує `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання каналами використовує типові значення MIME-kind з медіа-конвеєра - Рекомендовані явні цілі: + Бажані явні цілі: - - `user:` для DM + - `user:` для особистих повідомлень - `channel:` для каналів - DM у Slack відкриваються через API розмов Slack під час надсилання до цілей користувача. + Особисті повідомлення Slack відкриваються через API розмов Slack під час надсилання до цілей користувача. -## Команди та поведінка слеш-команд +## Команди та поведінка slash-команд -Слеш-команди з’являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команди: +Slash-команди з’являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команди: - `enabled: false` - `name: "openclaw"` @@ -649,7 +649,7 @@ openclaw gateway /openclaw /help ``` -Нативні команди потребують [додаткових параметрів маніфесту](#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. @@ -657,24 +657,24 @@ openclaw gateway /help ``` -Нативні меню аргументів використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед надсиланням вибраного значення параметра: +Нативні меню аргументів використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед відправленням вибраного значення параметра: -- до 5 параметрів: блоки кнопок -- 6-100 параметрів: статичне меню вибору -- понад 100 параметрів: зовнішній вибір з асинхронною фільтрацією параметрів, якщо доступні обробники параметрів interactivity -- перевищення обмежень Slack: закодовані значення параметрів повертаються до кнопок +- до 5 варіантів: блоки кнопок +- 6-100 варіантів: статичне меню вибору +- понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники параметрів interactivity +- перевищено обмеження Slack: закодовані значення варіантів повертаються до кнопок ```txt /think ``` -Сесії слеш-команд використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно маршрутизують виконання команд до цільової сесії розмови за допомогою `CommandTargetSessionKey`. +Сесії slash-команд використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно маршрутизують виконання команд до цільової сесії розмови за допомогою `CommandTargetSessionKey`. ## Інтерактивні відповіді -Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але ця можливість типово вимкнена. +Slack може відтворювати інтерактивні елементи відповіді, створені агентом, але цю функцію за замовчуванням вимкнено. -Увімкнути глобально: +Увімкніть її глобально: ```json5 { @@ -688,7 +688,7 @@ Slack може відображати інтерактивні елементи } ``` -Або увімкнути лише для одного облікового запису Slack: +Або увімкніть її лише для одного облікового запису Slack: ```json5 { @@ -706,44 +706,43 @@ Slack може відображати інтерактивні елементи } ``` -Коли це ввімкнено, агенти можуть створювати директиви відповіді лише для Slack: +Коли функцію ввімкнено, агенти можуть генерувати директиви відповідей лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Ці директиви компілюються в Slack Block Kit і спрямовують кліки або вибір назад через наявний шлях подій взаємодії Slack. +Ці директиви компілюються в Slack Block Kit і маршрутизують натискання або вибори назад через наявний шлях подій взаємодії Slack. Примітки: -- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. -- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до вихідної текстової відповіді замість надсилання невалідного payload блоків. +- Це специфічний для Slack інтерфейс. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. +- Значення інтерактивних зворотних викликів — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом. +- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw використовує резервну оригінальну текстову відповідь замість надсилання недійсного payload blocks. -## Підтвердження exec у Slack +## Погодження exec у Slack -Slack може діяти як нативний клієнт підтвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. +Slack може працювати як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість резервного переходу до Web UI або термінала. -- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналів. -- Підтвердження Plugin також можуть визначатися через ту саму нативну поверхню кнопок Slack, коли запит уже надходить у Slack і тип id підтвердження має вигляд `plugin:`. -- Авторизація тих, хто підтверджує, як і раніше, примусово застосовується: лише користувачі, визначені як ті, хто підтверджує, можуть схвалювати або відхиляти запити через Slack. +- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації до особистих повідомлень/каналів. +- Погодження Plugin також можуть визначатися через ту саму Slack-native поверхню кнопок, коли запит уже потрапляє в Slack і тип id погодження — `plugin:`. +- Авторизація затверджувача все одно примусово виконується: лише користувачі, визначені як затверджувачі, можуть підтверджувати або відхиляти запити через Slack. -Це використовує ту саму спільну поверхню кнопок підтвердження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові. -Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw -має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що -підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом. +Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в розмові. +Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw +має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, що погодження в чаті недоступні або ручне погодження — єдиний шлях. Шлях конфігурації: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервне значення `commands.ownerAllowFrom`) -- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) +- `channels.slack.execApprovals.approvers` (необов’язково; використовує резервне значення з `commands.ownerAllowFrom`, коли це можливо) +- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) - `agentFilter`, `sessionFilter` -Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один -approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтвердження. -Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли approver-и визначаються. +Slack автоматично вмикає нативні погодження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один +затверджувач. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження. +Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли визначаються затверджувачі. -Типова поведінка без явної конфігурації підтверджень exec для Slack: +Типова поведінка без явної конфігурації погоджень exec для Slack: ```json5 { @@ -753,8 +752,8 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approver-ів, додати фільтри або -вибрати доставку в чат-джерело: +Явна Slack-native конфігурація потрібна лише тоді, коли ви хочете перевизначити затверджувачів, додати фільтри або +вибрати доставку в чат походження: ```json5 { @@ -770,42 +769,42 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на підтвердження exec також мають -маршрутизуватися до інших чатів або явних цілей поза поточним каналом. Спільне переспрямування `approvals.plugin` також -налаштовується окремо; нативні кнопки Slack усе ще можуть обробляти підтвердження Plugin, коли такі запити вже надходять +Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на погодження exec також мають +маршрутизуватися до інших чатів або явно визначених позасмугових цілей. Спільне переспрямування `approvals.plugin` також +налаштовується окремо; Slack-native кнопки все одно можуть визначати погодження Plugin, коли ці запити вже надходять у Slack. -`/approve` у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. [Підтвердження exec](/uk/tools/exec-approvals) для повної моделі переспрямування підтверджень. +`/approve` у тому самому чаті також працює в каналах і особистих повідомленнях Slack, які вже підтримують команди. Див. [Погодження exec](/uk/tools/exec-approvals) для повної моделі переспрямування погоджень. ## Події та операційна поведінка -- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями. +- Редагування/видалення повідомлень і широкомовні повідомлення тредів зіставляються із системними подіями. - Події додавання/видалення реакцій зіставляються із системними подіями. - Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями. -- `channel_id_changed` може мігрувати ключі конфігурації каналів, коли ввімкнено `configWrites`. -- Метадані topic/purpose каналу вважаються недовіреним контекстом і можуть бути вставлені в контекст маршрутизації. -- Ініціатор треду та початкове заповнення контексту історії треду фільтруються за налаштованими allowlist відправників, коли це застосовно. -- Дії блоків і взаємодії з модальними вікнами створюють структуровані системні події `Slack interaction: ...` з розширеними полями payload: - - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` - - події модальних вікон `view_submission` і `view_closed` з маршрутизованими метаданими каналів і введенням форми +- `channel_id_changed` може переносити ключі конфігурації каналу, коли ввімкнено `configWrites`. +- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути впроваджені в контекст маршрутизації. +- Автор треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, коли це застосовно. +- Дії блоків і взаємодії з модальними вікнами генерують структуровані системні події `Slack interaction: ...` із розширеними полями payload: + - дії блоків: вибрані значення, мітки, значення вибору та метадані `workflow_*` + - події модальних вікон `view_submission` і `view_closed` із маршрутизованими метаданими каналу та введенням форми ## Довідник конфігурації Основний довідник: [Довідник конфігурації - Slack](/uk/gateway/config-channels#slack). - + - mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` -- доступ DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` -- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; тримайте вимкненим, якщо немає потреби) +- доступ до особистих повідомлень: `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` +- операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` -## Усунення несправностей +## Усунення проблем @@ -814,7 +813,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут - `groupPolicy` - allowlist каналів (`channels.slack.channels`) - `requireMention` - - allowlist `users` для кожного каналу + - allowlist `users` на рівні каналу Корисні команди: @@ -826,12 +825,12 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - підтвердження pairing / записи allowlist + - погодження сполучення / записи allowlist ```bash openclaw pairing list slack @@ -845,7 +844,7 @@ openclaw pairing list slack Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або `appTokenStatus: "configured_unavailable"`, обліковий запис Slack налаштовано, але поточний runtime не зміг визначити значення, - що надається через SecretRef. + що підтримується SecretRef. @@ -854,20 +853,20 @@ openclaw pairing list slack - signing secret - шлях webhook - - URL-адреси запитів Slack (Events + Interactivity + Slash Commands) + - Slack Request URLs (Events + Interactivity + Slash Commands) - унікальний `webhookPath` для кожного HTTP-облікового запису Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках облікового запису, HTTP-обліковий запис налаштовано, але поточний runtime не зміг - визначити signing secret, що надається через SecretRef. + визначити signing secret, що підтримується SecretRef. - Переконайтеся, що ви мали на увазі: + Перевірте, який саме режим ви мали на увазі: - - режим нативних команд (`channels.slack.commands.native: true`) з відповідними слеш-командами, зареєстрованими в Slack - - або режим однієї слеш-команди (`channels.slack.slashCommand.enabled: true`) + - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack + - або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`) Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. @@ -881,7 +880,7 @@ openclaw pairing list slack Зв’яжіть користувача Slack із Gateway. - Поведінка каналів і групових DM. + Поведінка каналів і групових особистих повідомлень. Маршрутизуйте вхідні повідомлення до агентів. @@ -892,7 +891,7 @@ openclaw pairing list slack Структура конфігурації та пріоритетність. - + Каталог команд і поведінка. diff --git a/docs/uk/concepts/models.md b/docs/uk/concepts/models.md index 42865af9b..b8c7f88d6 100644 --- a/docs/uk/concepts/models.md +++ b/docs/uk/concepts/models.md @@ -1,21 +1,20 @@ --- read_when: - - Додавання або зміна CLI моделей (models list/set/scan/aliases/fallbacks) - - Зміна поведінки fallbacks моделі або UX вибору - - Оновлення probes сканування моделей (tools/images) -summary: 'CLI моделей: list, set, aliases, fallbacks, scan, status' + - Додавання або змінення CLI моделей (`models list/set/scan/aliases/fallbacks`) + - Зміна поведінки резервних варіантів моделі або UX вибору + - Оновлення перевірок сканування моделей (інструменти/зображення) +summary: 'CLI моделей: список, встановлення, псевдоніми, резервні варіанти, сканування, стан' title: CLI моделей x-i18n: - generated_at: "2026-04-24T03:44:01Z" + generated_at: "2026-04-24T17:24:56Z" model: gpt-5.4 provider: openai - source_hash: 12f784984c87b33e645ec296f7f93ec3acc2a91efa3b63d3a912a6b09b90e048 + source_hash: 5c036097a5093f0ce304fd08b7ae22ccf5102eb6f511a9a2018a8d4712e43648 source_path: concepts/models.md workflow: 15 --- -Див. [/concepts/model-failover](/uk/concepts/model-failover) щодо ротації профілів авторизації, -cooldowns і того, як це взаємодіє з fallbacks. +Див. [/concepts/model-failover](/uk/concepts/model-failover) щодо ротації профілів автентифікації, періодів охолодження та того, як це взаємодіє з резервними варіантами. Короткий огляд провайдерів + приклади: [/concepts/model-providers](/uk/concepts/model-providers). ## Як працює вибір моделі @@ -23,84 +22,83 @@ cooldowns і того, як це взаємодіє з fallbacks. OpenClaw вибирає моделі в такому порядку: 1. **Основна** модель (`agents.defaults.model.primary` або `agents.defaults.model`). -2. **Fallbacks** у `agents.defaults.model.fallbacks` (у порядку). -3. **Provider auth failover** відбувається всередині провайдера перед переходом до - наступної моделі. +2. **Резервні варіанти** у `agents.defaults.model.fallbacks` (по порядку). +3. **Резервне перемикання автентифікації провайдера** відбувається всередині провайдера перед переходом до наступної моделі. Пов’язане: -- `agents.defaults.models` — це allowlist/каталог моделей, які може використовувати OpenClaw (разом з aliases). -- `agents.defaults.imageModel` використовується **лише тоді, коли** основна модель не може приймати зображення. -- `agents.defaults.pdfModel` використовується інструментом `pdf`. Якщо його не задано, інструмент - переходить до `agents.defaults.imageModel`, а потім до визначеної моделі сесії/за замовчуванням. -- `agents.defaults.imageGenerationModel` використовується спільною можливістю генерації зображень. Якщо його не задано, `image_generate` усе одно може визначити значення за замовчуванням провайдера з авторизацією. Спочатку він пробує поточного провайдера за замовчуванням, а потім решту зареєстрованих провайдерів генерації зображень у порядку provider-id. Якщо ви задаєте конкретний provider/model, також налаштуйте авторизацію/API key цього провайдера. -- `agents.defaults.musicGenerationModel` використовується спільною можливістю генерації музики. Якщо його не задано, `music_generate` усе одно може визначити значення за замовчуванням провайдера з авторизацією. Спочатку він пробує поточного провайдера за замовчуванням, а потім решту зареєстрованих провайдерів генерації музики у порядку provider-id. Якщо ви задаєте конкретний provider/model, також налаштуйте авторизацію/API key цього провайдера. -- `agents.defaults.videoGenerationModel` використовується спільною можливістю генерації відео. Якщо його не задано, `video_generate` усе одно може визначити значення за замовчуванням провайдера з авторизацією. Спочатку він пробує поточного провайдера за замовчуванням, а потім решту зареєстрованих провайдерів генерації відео у порядку provider-id. Якщо ви задаєте конкретний provider/model, також налаштуйте авторизацію/API key цього провайдера. -- Значення за замовчуванням для окремого агента можуть перевизначати `agents.defaults.model` через `agents.list[].model` разом із bindings (див. [/concepts/multi-agent](/uk/concepts/multi-agent)). +- `agents.defaults.models` — це allowlist/каталог моделей, які OpenClaw може використовувати (плюс псевдоніми). +- `agents.defaults.imageModel` використовується **лише тоді**, коли основна модель не може приймати зображення. +- `agents.defaults.pdfModel` використовується інструментом `pdf`. Якщо його не вказано, інструмент + переходить до `agents.defaults.imageModel`, а потім до визначеної моделі сеансу/типової моделі. +- `agents.defaults.imageGenerationModel` використовується спільною можливістю генерації зображень. Якщо його не вказано, `image_generate` усе одно може визначити типове значення провайдера з підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку provider-id. Якщо ви задаєте конкретний провайдер/модель, також налаштуйте автентифікацію/API key цього провайдера. +- `agents.defaults.musicGenerationModel` використовується спільною можливістю генерації музики. Якщо його не вказано, `music_generate` усе одно може визначити типове значення провайдера з підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики у порядку provider-id. Якщо ви задаєте конкретний провайдер/модель, також налаштуйте автентифікацію/API key цього провайдера. +- `agents.defaults.videoGenerationModel` використовується спільною можливістю генерації відео. Якщо його не вказано, `video_generate` усе одно може визначити типове значення провайдера з підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео у порядку provider-id. Якщо ви задаєте конкретний провайдер/модель, також налаштуйте автентифікацію/API key цього провайдера. +- Типові значення для окремих агентів можуть перевизначати `agents.defaults.model` через `agents.list[].model` разом із прив’язками (див. [/concepts/multi-agent](/uk/concepts/multi-agent)). -## Швидка політика моделей +## Коротка політика вибору моделі -- Установіть як основну найсильнішу модель останнього покоління, доступну вам. -- Використовуйте fallbacks для завдань, чутливих до вартості/затримки, і менш критичних чатів. -- Для агентів з увімкненими інструментами або недовірених входів уникайте старіших/слабших рівнів моделей. +- Встановіть як основну найсильнішу модель останнього покоління, яка вам доступна. +- Використовуйте резервні варіанти для завдань, чутливих до вартості/затримки, і для менш критичного чату. +- Для агентів з увімкненими інструментами або недовірених вхідних даних уникайте старіших/слабших рівнів моделей. ## Онбординг (рекомендовано) -Якщо ви не хочете вручну редагувати config, запустіть онбординг: +Якщо ви не хочете редагувати конфігурацію вручну, запустіть онбординг: ```bash openclaw onboard ``` -Він може налаштувати модель + авторизацію для поширених провайдерів, включно з **OpenAI Code (Codex) -subscription** (OAuth) і **Anthropic** (API key або Claude CLI). +Він може налаштувати модель + автентифікацію для поширених провайдерів, зокрема **OpenAI Code (Codex) +subscription** (OAuth) та **Anthropic** (API key або Claude CLI). -## Ключі config (огляд) +## Ключі конфігурації (огляд) - `agents.defaults.model.primary` і `agents.defaults.model.fallbacks` - `agents.defaults.imageModel.primary` і `agents.defaults.imageModel.fallbacks` - `agents.defaults.pdfModel.primary` і `agents.defaults.pdfModel.fallbacks` - `agents.defaults.imageGenerationModel.primary` і `agents.defaults.imageGenerationModel.fallbacks` - `agents.defaults.videoGenerationModel.primary` і `agents.defaults.videoGenerationModel.fallbacks` -- `agents.defaults.models` (allowlist + aliases + параметри провайдера) -- `models.providers` (власні провайдери, записані в `models.json`) +- `agents.defaults.models` (allowlist + псевдоніми + параметри провайдера) +- `models.providers` (користувацькі провайдери, записані в `models.json`) -Посилання на моделі нормалізуються до нижнього регістру. Aliases провайдерів, як-от `z.ai/*`, нормалізуються +Посилання на моделі нормалізуються до нижнього регістру. Псевдоніми провайдерів, як-от `z.ai/*`, нормалізуються до `zai/*`. -Приклади конфігурації провайдерів (включно з OpenCode) наведено в +Приклади конфігурації провайдерів (зокрема OpenCode) наведені в [/providers/opencode](/uk/providers/opencode). ### Безпечне редагування allowlist -Використовуйте адитивні записи під час ручного оновлення `agents.defaults.models`: +Під час ручного оновлення `agents.defaults.models` використовуйте додавальні записи: ```bash openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --merge ``` -`openclaw config set` захищає мапи моделей/провайдерів від випадкового перезапису. Звичайне +`openclaw config set` захищає мапи моделей/провайдерів від випадкового перезапису. Просте присвоєння об’єкта для `agents.defaults.models`, `models.providers` або -`models.providers..models` відхиляється, якщо воно видалить наявні -записи. Використовуйте `--merge` для адитивних змін; використовуйте `--replace` лише тоді, коли -надане значення має стати повним цільовим значенням. +`models.providers..models` відхиляється, якщо воно призведе до видалення наявних +записів. Для додавальних змін використовуйте `--merge`; `--replace` використовуйте лише тоді, коли +передане значення має стати повним цільовим значенням. -Інтерактивне налаштування провайдера і `openclaw configure --section model` також об’єднують -вибір у межах провайдера з наявним allowlist, тож додавання Codex, -Ollama або іншого провайдера не видаляє незв’язані записи моделей. +Інтерактивне налаштування провайдера та `openclaw configure --section model` також об’єднують +вибрані значення в межах провайдера з наявним allowlist, тож додавання Codex, +Ollama або іншого провайдера не видаляє не пов’язані записи моделей. -## «Model is not allowed» (і чому відповіді зупиняються) +## "Model is not allowed" (і чому відповіді зупиняються) -Якщо задано `agents.defaults.models`, воно стає **allowlist** для `/model` і для -перевизначень сесії. Коли користувач вибирає модель, якої немає в цьому allowlist, +Якщо задано `agents.defaults.models`, він стає **allowlist** для `/model` і для +перевизначень сеансу. Коли користувач вибирає модель, якої немає в цьому allowlist, OpenClaw повертає: ``` Model "provider/model" is not allowed. Use /model to list available models. ``` -Це відбувається **до** генерації звичайної відповіді, тому повідомлення може виглядати -так, ніби «відповіді не було». Виправлення: +Це відбувається **до** генерації звичайної відповіді, тому повідомлення може створювати +враження, ніби система «не відповіла». Виправити це можна так: - Додати модель до `agents.defaults.models`, або - Очистити allowlist (видалити `agents.defaults.models`), або @@ -122,9 +120,9 @@ Model "provider/model" is not allowed. Use /model to list available models. ## Перемикання моделей у чаті (`/model`) -Ви можете перемикати моделі для поточної сесії без перезапуску: +Ви можете перемикати моделі для поточного сеансу без перезапуску: -```text +``` /model /model list /model 3 @@ -134,36 +132,26 @@ Model "provider/model" is not allowed. Use /model to list available models. Примітки: -- `/model` (і `/model list`) — це компактний нумерований вибір (сімейство моделей + доступні провайдери). -- У Discord `/model` і `/models` відкривають інтерактивний вибір із випадними списками провайдера й моделі та кроком Submit. -- `/models add` доступна за замовчуванням і може бути вимкнена через `commands.modelsWrite=false`. -- Якщо увімкнено, `/models add ` — найшвидший шлях; просто `/models add` запускає керований потік спочатку з вибором провайдера, де це підтримується. -- Після `/models add` нова модель стає доступною в `/models` і `/model` без перезапуску gateway. -- `/model <#>` вибирає з цього засобу вибору. -- `/model` негайно зберігає новий вибір сесії. -- Якщо агент неактивний, наступний запуск одразу використовує нову модель. -- Якщо запуск уже активний, OpenClaw позначає перемикання під час роботи як очікуване й перезапускає з новою моделлю лише в чистій точці повторної спроби. -- Якщо активність інструмента або виведення відповіді вже почалися, очікуване перемикання може залишатися в черзі до наступної можливості повторної спроби або наступного ходу користувача. -- `/model status` — це докладний вигляд (кандидати авторизації та, коли налаштовано, `baseUrl` endpoint провайдера + режим `api`). -- Посилання на моделі розбираються за першим `/`. Використовуйте `provider/model`, коли вводите `/model `. -- Якщо сам ID моделі містить `/` (у стилі OpenRouter), ви маєте вказати префікс провайдера (приклад: `/model openrouter/moonshotai/kimi-k2`). -- Якщо ви не вказали провайдера, OpenClaw визначає введення в такому порядку: - 1. збіг alias - 2. унікальний збіг налаштованого провайдера для точного model id без префікса - 3. застарілий резервний перехід до налаштованого провайдера за замовчуванням - Якщо цей провайдер більше не надає налаштовану модель за замовчуванням, OpenClaw +- `/model` (і `/model list`) — це компактний нумерований вибірник (сімейство моделей + доступні провайдери). +- У Discord `/model` і `/models` відкривають інтерактивний вибірник із випадними списками провайдера та моделі, а також кроком Submit. +- `/models add` застарів і тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. +- `/model <#>` вибирає зі списку цього вибірника. +- `/model` негайно зберігає новий вибір сеансу. +- Якщо агент неактивний, наступний запуск одразу використає нову модель. +- Якщо запуск уже активний, OpenClaw позначає перемикання в реальному часі як очікуване та перезапускається з новою моделлю лише в чистій точці повторної спроби. +- Якщо активність інструмента або виведення відповіді вже почалися, очікуване перемикання може залишатися в черзі до пізнішої можливості повторної спроби або до наступного ходу користувача. +- `/model status` — це докладне подання (кандидати автентифікації та, якщо налаштовано, `baseUrl` кінцевої точки провайдера + режим `api`). +- Посилання на модель розбираються за **першим** `/`. Під час введення `/model ` використовуйте `provider/model`. +- Якщо сам ID моделі містить `/` (у стилі OpenRouter), ви маєте включити префікс провайдера (приклад: `/model openrouter/moonshotai/kimi-k2`). +- Якщо ви пропускаєте провайдера, OpenClaw визначає введення в такому порядку: + 1. збіг псевдоніма + 2. унікальний збіг налаштованого провайдера для цього точного ID моделі без префікса + 3. застарілий резервний перехід до налаштованого типового провайдера + Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw натомість переходить до першого налаштованого провайдера/моделі, щоб уникнути - показу застарілого значення за замовчуванням від видаленого провайдера. + показу застарілого типового значення від видаленого провайдера. -Повна поведінка/конфігурація команд: [Слеш-команди](/uk/tools/slash-commands). - -Приклади: - -```text -/models add -/models add ollama glm-5.1:cloud -/models add lmstudio qwen/qwen3.5-9b -``` +Повна поведінка/конфігурація команди: [Слеш-команди](/uk/tools/slash-commands). ## Команди CLI @@ -192,40 +180,36 @@ openclaw models image-fallbacks clear ### `models list` -За замовчуванням показує налаштовані моделі. Корисні прапорці: +Типово показує налаштовані моделі. Корисні прапорці: - `--all`: повний каталог - `--local`: лише локальні провайдери -- `--provider `: фільтр за id провайдера, наприклад `moonshot`; display - labels з інтерактивних засобів вибору не приймаються +- `--provider `: фільтр за id провайдера, наприклад `moonshot`; мітки відображення з інтерактивних вибірників не приймаються - `--plain`: одна модель на рядок - `--json`: машинозчитуваний вивід -`--all` включає вбудовані статичні рядки каталогу, що належать провайдеру, ще до налаштування авторизації, -тому подання лише для виявлення можуть показувати моделі, недоступні, доки +`--all` включає рядки статичного каталогу вбудованих провайдерів ще до налаштування автентифікації, тож у режимах лише для виявлення можуть показуватися моделі, недоступні доти, доки ви не додасте відповідні облікові дані провайдера. ### `models status` -Показує визначену основну модель, fallbacks, image model та огляд -авторизації налаштованих провайдерів. Також показує статус завершення строку дії OAuth для профілів, знайдених -у сховищі авторизації (за замовчуванням попереджає за 24 години). `--plain` виводить лише +Показує визначену основну модель, резервні варіанти, модель зображень і огляд +автентифікації налаштованих провайдерів. Також відображає стан завершення строку OAuth для профілів, знайдених +у сховищі автентифікації (типово попереджає за 24 год). `--plain` виводить лише визначену основну модель. -Статус OAuth показується завжди (і включається у вивід `--json`). Якщо налаштований +Стан OAuth показується завжди (і включається у вивід `--json`). Якщо налаштований провайдер не має облікових даних, `models status` виводить розділ **Missing auth**. -JSON містить `auth.oauth` (вікно попередження + профілі) і `auth.providers` -(ефективна авторизація для кожного провайдера, включно з обліковими даними з env). `auth.oauth` -охоплює лише стан профілів сховища авторизації; провайдери лише з env там не з’являються. -Використовуйте `--check` для автоматизації (код виходу `1` для відсутніх/прострочених, `2` для тих, що скоро завершаться). -Використовуйте `--probe` для живих перевірок авторизації; рядки probe можуть походити з профілів авторизації, облікових даних env +JSON включає `auth.oauth` (вікно попередження + профілі) і `auth.providers` +(ефективна автентифікація для кожного провайдера, включно з обліковими даними з env). `auth.oauth` +стосується лише стану профілів у сховищі автентифікації; провайдери лише з env там не відображаються. +Використовуйте `--check` для автоматизації (код виходу `1`, коли бракує або прострочено, `2`, коли скоро спливає). +Використовуйте `--probe` для живих перевірок автентифікації; рядки probe можуть надходити з профілів автентифікації, облікових даних env або `models.json`. -Якщо явний `auth.order.` пропускає збережений профіль, -probe повідомляє `excluded_by_auth_order` замість спроби його використати. Якщо авторизація існує, але для цього провайдера не вдається визначити модель, придатну для probe, probe повідомляє -`status: no_model`. +Якщо явний `auth.order.` пропускає збережений профіль, probe повідомляє +`excluded_by_auth_order` замість спроби використати його. Якщо автентифікація існує, але для цього провайдера не вдається визначити модель, придатну для probe, probe повідомляє `status: no_model`. -Вибір авторизації залежить від провайдера/облікового запису. Для завжди активних хостів gateway API -keys зазвичай є найпередбачуванішими; також підтримуються повторне використання Claude CLI та наявні -OAuth/token профілі Anthropic. +Вибір автентифікації залежить від провайдера/облікового запису. Для хостів Gateway, що працюють постійно, API +keys зазвичай є найпередбачуванішими; також підтримуються повторне використання Claude CLI та наявні профілі OAuth/token Anthropic. Приклад (Claude CLI): @@ -237,61 +221,61 @@ openclaw models status ## Сканування (безкоштовні моделі OpenRouter) `openclaw models scan` перевіряє **каталог безкоштовних моделей** OpenRouter і може -за потреби виконувати probe моделей на підтримку tools і зображень. +за бажанням виконувати probe моделей на підтримку інструментів і зображень. -Ключові прапорці: +Основні прапорці: -- `--no-probe`: пропустити живі probes (лише метадані) -- `--min-params `: мінімальний розмір параметрів (мільярди) +- `--no-probe`: пропустити живі probe (лише метадані) +- `--min-params `: мінімальний розмір параметрів (у мільярдах) - `--max-age-days `: пропустити старіші моделі - `--provider `: фільтр за префіксом провайдера -- `--max-candidates `: розмір списку fallback -- `--set-default`: установити `agents.defaults.model.primary` на перший вибір -- `--set-image`: установити `agents.defaults.imageModel.primary` на перший вибір для зображень +- `--max-candidates `: розмір списку резервних варіантів +- `--set-default`: встановити `agents.defaults.model.primary` на перший вибір +- `--set-image`: встановити `agents.defaults.imageModel.primary` на перший вибір зображень -Probing потребує API key OpenRouter (із профілів авторизації або +Для probe потрібен API key OpenRouter (із профілів автентифікації або `OPENROUTER_API_KEY`). Без ключа використовуйте `--no-probe`, щоб лише перелічити кандидатів. Результати сканування ранжуються за: 1. Підтримкою зображень -2. Затримкою tools +2. Затримкою інструментів 3. Розміром контексту 4. Кількістю параметрів Вхідні дані -- список OpenRouter `/models` (фільтр `:free`) -- потрібен API key OpenRouter із профілів авторизації або `OPENROUTER_API_KEY` (див. [/environment](/uk/help/environment)) -- необов’язкові фільтри: `--max-age-days`, `--min-params`, `--provider`, `--max-candidates` -- керування probe: `--timeout`, `--concurrency` +- Список OpenRouter `/models` (фільтр `:free`) +- Потрібен API key OpenRouter із профілів автентифікації або `OPENROUTER_API_KEY` (див. [/environment](/uk/help/environment)) +- Необов’язкові фільтри: `--max-age-days`, `--min-params`, `--provider`, `--max-candidates` +- Елементи керування probe: `--timeout`, `--concurrency` -Під час запуску в TTY ви можете інтерактивно вибирати fallbacks. У неінтерактивному -режимі передайте `--yes`, щоб прийняти значення за замовчуванням. +Під час запуску в TTY ви можете інтерактивно вибрати резервні варіанти. У неінтерактивному +режимі передайте `--yes`, щоб прийняти типові значення. ## Реєстр моделей (`models.json`) -Власні провайдери в `models.providers` записуються в `models.json` у каталозі -агента (за замовчуванням `~/.openclaw/agents//agent/models.json`). Цей файл -за замовчуванням об’єднується, якщо тільки `models.mode` не встановлено в `replace`. +Користувацькі провайдери в `models.providers` записуються до `models.json` у +каталозі агента (типово `~/.openclaw/agents//agent/models.json`). Цей файл +типово об’єднується, якщо тільки `models.mode` не встановлено в `replace`. -Пріоритет режиму merge для однакових ID провайдерів: +Пріоритет режиму merge для відповідних ID провайдерів: -- Непорожній `baseUrl`, уже наявний в `models.json` агента, має пріоритет. +- Непорожній `baseUrl`, уже наявний у `models.json` агента, має пріоритет. - Непорожній `apiKey` у `models.json` агента має пріоритет лише тоді, коли цей провайдер не керується через SecretRef у поточному контексті config/auth-profile. -- Значення `apiKey` провайдера, керовані SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження визначених секретів. -- Значення заголовків провайдера, керовані SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs). -- Порожні або відсутні `apiKey`/`baseUrl` агента використовують резервні значення з config `models.providers`. +- Значення `apiKey` провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для посилань env, `secretref-managed` для посилань file/exec) замість збереження розгорнутих секретів. +- Значення заголовків провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для посилань env, `secretref-managed` для посилань file/exec). +- Порожні або відсутні `apiKey`/`baseUrl` агента переходять до config `models.providers`. - Інші поля провайдера оновлюються з config і нормалізованих даних каталогу. -Збереження маркерів є авторитетним щодо джерела: OpenClaw записує маркери з активного знімка config джерела (до визначення), а не з визначених секретних значень runtime. -Це застосовується щоразу, коли OpenClaw повторно генерує `models.json`, включно зі шляхами, ініційованими командами, як-от `openclaw agent`. +Збереження маркерів визначається джерелом: OpenClaw записує маркери з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних значень секретів під час виконання. +Це застосовується щоразу, коли OpenClaw повторно генерує `models.json`, зокрема в шляхах, керованих командами, як-от `openclaw agent`. ## Пов’язане -- [Model Providers](/uk/concepts/model-providers) — маршрутизація провайдерів і авторизація -- [Model Failover](/uk/concepts/model-failover) — ланцюжки fallback -- [Image Generation](/uk/tools/image-generation) — конфігурація моделі зображень -- [Music Generation](/uk/tools/music-generation) — конфігурація моделі генерації музики -- [Video Generation](/uk/tools/video-generation) — конфігурація моделі генерації відео -- [Configuration Reference](/uk/gateway/config-agents#agent-defaults) — ключі config моделей +- [Провайдери моделей](/uk/concepts/model-providers) — маршрутизація провайдерів і автентифікація +- [Резервне перемикання моделей](/uk/concepts/model-failover) — ланцюжки резервних варіантів +- [Генерація зображень](/uk/tools/image-generation) — конфігурація моделі зображень +- [Генерація музики](/uk/tools/music-generation) — конфігурація моделі музики +- [Генерація відео](/uk/tools/video-generation) — конфігурація моделі відео +- [Довідник із конфігурації](/uk/gateway/config-agents#agent-defaults) — ключі конфігурації моделі