From e48dd0d46ff5ef138c08ae200dcb37f62c23d34d Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Fri, 1 May 2026 23:02:13 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 625 ++++++++++++++++++++---------------- docs/uk/channels/pairing.md | 140 ++++---- 2 files changed, 433 insertions(+), 332 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index 99372d493..ee50dd902 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -1,64 +1,64 @@ --- read_when: - Робота над функціями каналу Discord -summary: Стан підтримки, можливості та конфігурація бота Discord +summary: Стан підтримки бота Discord, можливості та конфігурація title: Discord x-i18n: - generated_at: "2026-05-01T11:53:18Z" + generated_at: "2026-05-01T22:59:34Z" model: gpt-5.5 provider: openai - source_hash: d0b37006f5efaa36223f0b7faa2557f5d3f6cc1805625b39bc2dbc9430eaea95 + source_hash: 6bd33cbe350f4cee90e63334797675d29d2d62efdce9a3eecc29666e04d9dedb source_path: channels/discord.md workflow: 16 --- -Готово для особистих повідомлень і серверних каналів через офіційний Discord Gateway. +Готово для приватних повідомлень і каналів гільдій через офіційний Discord Gateway. - Особисті повідомлення 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". + + Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть його, наприклад, "OpenClaw". - Натисніть **Bot** на бічній панелі. Установіть **Username** на назву, якою ви називаєте свого агента OpenClaw. + Натисніть **Bot** на бічній панелі. Установіть **Username** так, як ви називаєте свого агента OpenClaw. - + Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і ввімкніть: - **Message Content Intent** (обов’язково) - - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID) + - **Server Members Intent** (рекомендовано; обов’язково для списків дозволених ролей і зіставлення імен з ID) - **Presence Intent** (необов’язково; потрібно лише для оновлень присутності) - Прокрутіть угору на сторінці **Bot** і натисніть **Reset Token**. + Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. - Попри назву, це створює ваш перший токен — нічого не "скидається". + Попри назву, це створює ваш перший токен — нічого насправді не "скидається". - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він невдовзі знадобиться. + Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він знадобиться вам незабаром. - + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на свій сервер. Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть: @@ -68,40 +68,40 @@ x-i18n: Нижче з’явиться розділ **Bot Permissions**. Увімкніть щонайменше: - **General Permissions** - - View Channels - **Text Permissions** - - Send Messages - - Read Message History - - Embed Links - - Attach Files - - Add Reactions (необов’язково) + **Загальні дозволи** + - Перегляд каналів + **Текстові дозволи** + - Надсилання повідомлень + - Читання історії повідомлень + - Вбудовування посилань + - Прикріплення файлів + - Додавання реакцій (необов’язково) - Це базовий набір для звичайних текстових каналів. Якщо плануєте писати в гілках Discord, зокрема в робочих процесах форумних або медіаканалів, які створюють чи продовжують гілку, також увімкніть **Send Messages in Threads**. - Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднати. Тепер ви маєте бачити свого бота на сервері Discord. + Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема в робочих процесах форумів або медіаканалів, які створюють чи продовжують тред, також увімкніть **Send Messages in Threads**. + Скопіюйте згенерований URL унизу, вставте його у браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord. - - Повернувшись у програму Discord, потрібно ввімкнути режим розробника, щоб копіювати внутрішні ID. + + У застосунку Discord потрібно ввімкнути Developer Mode, щоб копіювати внутрішні ID. - 1. Натисніть **User Settings** (значок шестерні поруч з аватаром) → **Advanced** → увімкніть **Developer Mode** - 2. Клацніть правою кнопкою миші **значок сервера** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою миші **власний аватар** → **Copy User ID** + 1. Натисніть **User Settings** (іконка шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode** + 2. Натисніть правою кнопкою миші **іконку сервера** на бічній панелі → **Copy Server ID** + 3. Натисніть правою кнопкою миші **власний аватар** → **Copy User ID** - Збережіть **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три до OpenClaw. + Збережіть свої **Server ID** і **User ID** поруч із Bot Token — на наступному кроці ви надішлете всі три значення в OpenClaw. - - Щоб сполучення працювало, Discord має дозволяти вашому боту надсилати вам особисті повідомлення. Клацніть правою кнопкою миші **значок сервера** → **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" @@ -120,22 +120,22 @@ openclaw config patch --file ./discord.patch.json5 openclaw gateway ``` - Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через програму OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`. - Для встановлень керованого сервісу запустіть `openclaw gateway install` з оболонки, де доступний `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску. - Якщо ваш хост заблокований або обмежений за частотою через стартовий пошук програми Discord, задайте ID програми/клієнта Discord з Developer Portal, щоб під час запуску можна було пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кількох ботів Discord. + Якщо OpenClaw уже працює як фонова служба, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й повторно запустивши процес `openclaw gateway run`. + Для встановлень керованої служби запустіть `openclaw gateway install` з оболонки, де присутній `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб служба могла розв’язати env SecretRef після перезапуску. + Якщо ваш хост заблокований або обмежений Discord під час стартового пошуку застосунку, задайте ID застосунку/клієнта Discord з Developer Portal, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord. - - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, натомість скористайтеся вкладкою CLI / конфігурація. + + Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / config. - > "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``." + > "Я вже задав токен свого Discord-бота в конфігурації. Заверши налаштування Discord з User ID `` і Server ID ``." - - Якщо віддаєте перевагу файловій конфігурації, установіть: + + Якщо ви віддаєте перевагу файловій конфігурації, задайте: ```json5 { @@ -152,15 +152,15 @@ openclaw gateway } ``` - Резервний env для облікового запису за замовчуванням: + Env-резерв для облікового запису за замовчуванням: ```bash DISCORD_BOT_TOKEN=... ``` - Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Підтримуються відкриті значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). + Для скриптового або віддаленого налаштування запишіть той самий блок JSON5 за допомогою `openclaw config patch --file ./discord.patch.json5 --dry-run`, а потім повторно запустіть без `--dry-run`. Значення `token` у відкритому тексті підтримуються. Значення SecretRef також підтримуються для `channels.discord.token` через провайдери env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - Для кількох ботів Discord зберігайте токен і ID програми кожного бота в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли кожен обліковий запис має використовувати той самий ID програми. + Для кількох Discord-ботів зберігайте токен кожного бота та ID застосунку в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли кожен обліковий запис має використовувати той самий ID застосунку. ```json5 { @@ -187,14 +187,14 @@ DISCORD_BOT_TOKEN=... - - Дочекайтеся, доки Gateway запрацює, а потім надішліть боту особисте повідомлення в Discord. Він відповість кодом сполучення. + + Дочекайтеся запуску Gateway, а потім напишіть боту приватне повідомлення в Discord. Він відповість кодом сполучення. - - Надішліть код сполучення своєму агенту в наявному каналі: + + Надішліть код сполучення своєму агенту у вашому наявному каналі: - > "Approve this Discord pairing code: ``" + > "Схвали цей код сполучення Discord: ``" @@ -206,30 +206,30 @@ openclaw pairing approve discord - Коди сполучення спливають через 1 годину. + Коди сполучення діють 1 годину. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення. -Розв’язання токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. -Якщо два ввімкнені облікові записи Discord розв’язуються до того самого токена бота, OpenClaw запускає лише один монітор Gateway для цього токена. Токен із конфігурації має пріоритет над резервним env за замовчуванням; інакше перший увімкнений обліковий запис перемагає, а дубльований обліковий запис позначається як вимкнений. -Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` на рівні виклику використовується саме для цього виклику. Це застосовується до дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному знімку runtime. +Розв’язання токенів враховує обліковий запис. Значення токена з конфігурації мають пріоритет над env-резервом. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. +Якщо два ввімкнені облікові записи Discord розв’язуються до того самого токена бота, OpenClaw запускає лише один монітор Gateway для цього токена. Токен із конфігурації має пріоритет над env-резервом за замовчуванням; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис повідомляється як вимкнений. +Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання та дій читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе ще беруться з вибраного облікового запису в активному runtime-знімку. -## Рекомендовано: налаштуйте серверний робочий простір +## Рекомендовано: налаштуйте робочий простір гільдії -Коли особисті повідомлення запрацюють, можна налаштувати сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви й ваш бот. - - Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях. + + Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях. - - > "Add my Discord Server ID `` to the guild allowlist" + + > "Додай мій Discord Server ID `` до списку дозволених гільдій" @@ -255,16 +255,16 @@ openclaw pairing approve discord - За замовчуванням ваш агент відповідає в серверних каналах лише тоді, коли його згадують через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах гільдії лише тоді, коли його згадали через @mention. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення. - У серверних каналах звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно через інструмент `message`, тож агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. + У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тому агент може за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна. - - > "Allow my agent to respond on this server without having to be @mentioned" + + > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути згаданим через @mention" - Установіть `requireMention: false` у конфігурації сервера: + Задайте `requireMention: false` у конфігурації гільдії: ```json5 { @@ -280,68 +280,68 @@ openclaw pairing approve discord } ``` - Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат, установіть `messages.groupChat.visibleReplies: "automatic"`. + Щоб відновити застарілі автоматичні фінальні відповіді для групових чатів/кімнат каналів, задайте `messages.groupChat.visibleReplies: "automatic"`. - - За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях особистих повідомлень. Серверні канали не завантажують MEMORY.md автоматично. + + За замовчуванням довгострокова пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. Канали гільдії не завантажують MEMORY.md автоматично. - - > "When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from MEMORY.md." + + > "Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо тобі потрібен довгостроковий контекст із MEMORY.md." - Якщо вам потрібен спільний контекст у кожному каналі, помістіть сталі інструкції в `AGENTS.md` або `USER.md` (вони додаються до кожної сесії). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. + Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони впроваджуються в кожну сесію). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. -Тепер створіть кілька каналів на своєму сервері Discord і починайте спілкуватися. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож можна налаштувати `#coding`, `#home`, `#research` або будь-що, що підходить вашому робочому процесу. +Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкуватися. Ваш агент може бачити назву каналу, а кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що пасує вашому робочому процесу. -## Модель runtime +## Runtime-модель -- Gateway володіє підключенням Discord. -- Маршрутизація відповідей є детермінованою: вхідні відповіді Discord повертаються до Discord. -- Метадані Discord guild/channel додаються до підказки моделі як недовірений - контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт +- Gateway керує підключенням до Discord. +- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord. +- Метадані гільдії/каналу Discord додаються до підказки моделі як ненадійний + контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цю обгортку назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з - майбутнього контексту відтворення. + майбутнього контексту повторного відтворення. - За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`). -- Канали guild ізольовані ключами сесій (`agent::discord:channel:`). +- Канали гільдій мають ізольовані ключі сесій (`agent::discord:channel:`). - Групові DM за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`). -- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас передаючи `CommandTargetSessionKey` до маршрутизованої сесії розмови. -- Доставлення текстових оголошень cron/heartbeat до Discord використовує фінальну +- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас все ще передаючи `CommandTargetSessionKey` до маршрутизованої сесії розмови. +- Доставка текстових оголошень cron/heartbeat у Discord використовує остаточну видиму асистенту відповідь один раз. Медіа та структуровані payload компонентів залишаються - багатоповідомленнєвими, коли агент видає кілька payload, придатних для доставлення. + багатоповідомними, коли агент видає кілька доставних payload. ## Форумні канали -Форумні та медіаканали 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" ``` -Приклад: явно створити форумний thread +Приклад: створіть форумний тред явно ```bash openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого thread (`channel:`). +Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого треду (`channel:`). ## Інтерактивні компоненти @@ -353,17 +353,17 @@ OpenClaw підтримує контейнери компонентів Discord - Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів, доки вони не спливуть. +За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, виборів і форм до завершення їхнього строку дії. -Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли налаштовано, користувачі без відповідності отримують ефемерну відмову. +Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` на цій кнопці (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують тимчасову відмову. -Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з розкривними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла і тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору є ефемерною, і використовувати її може лише користувач, який її викликав. +Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору тимчасова, і користуватися нею може лише користувач, який її викликав. Вкладення файлів: -- Блоки `file` мають указувати на посилання вкладення (`attachment://`) +- Блоки `file` мають вказувати на посилання вкладення (`attachment://`) - Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів -- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має відповідати посиланню вкладення +- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення Модальні форми: @@ -433,7 +433,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - `pairing` (за замовчуванням) - `allowlist` - - `open` (вимагає, щоб `channels.discord.allowFrom` містив `"*"`) + - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`) - `disabled` Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на pairing у режимі `pairing`). @@ -445,34 +445,109 @@ Slash-команди `/model` і `/models` відкривають інтерак - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застарілий `dm.allowFrom` не задані. - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`. - Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` досі читаються для сумісності. `openclaw doctor --fix` мігрує їх до `dmPolicy` і `allowFrom`, коли може зробити це без зміни доступу. + Застарілі `channels.discord.dm.policy` і `channels.discord.dm.allowFrom` усе ще зчитуються для сумісності. `openclaw doctor --fix` мігрує їх до `dmPolicy` і `allowFrom`, коли це можна зробити без зміни доступу. - Формат цілі DM для доставлення: + Формат цілі DM для доставки: - `user:` - згадка `<@id>` - Голі числові ID зазвичай розв’язуються як ID каналів, коли активне стандартне значення каналу, але ID, перелічені в ефективному DM `allowFrom` облікового запису, трактуються як цілі DM користувача для сумісності. + Голі числові ID зазвичай розв’язуються як ID каналів, коли активний типовий канал, але ID, зазначені в ефективному DM `allowFrom` облікового запису, розглядаються як цілі user DM для сумісності. - - Обробкою guild керує `channels.discord.groupPolicy`: + + DM Discord можуть використовувати динамічні записи `accessGroup:` у `channels.discord.allowFrom`. + + Імена груп доступу спільні для каналів повідомлень. Використовуйте `type: "message.senders"` для статичної групи, учасники якої виражені у звичайному синтаксисі `allowFrom` кожного каналу, або `type: "discord.channelAudience"`, коли поточна аудиторія `ViewChannel` каналу Discord має динамічно визначати членство. + +```json5 +{ + accessGroups: { + operators: { + type: "message.senders", + members: { + "*": ["global-owner-id"], + discord: ["discord:123456789012345678"], + telegram: ["987654321"], + }, + }, + }, + channels: { + discord: { + dmPolicy: "allowlist", + allowFrom: ["accessGroup:operators"], + }, + }, +} +``` + + Текстовий канал Discord не має окремого списку учасників. `type: "discord.channelAudience"` моделює членство так: відправник DM є учасником налаштованої гільдії та наразі має ефективний дозвіл `ViewChannel` на налаштованому каналі після застосування ролей і перевизначень каналу. + + Приклад: дозвольте будь-кому, хто бачить `#maintainers`, надсилати DM боту, залишаючи DM закритими для всіх інших. + +```json5 +{ + accessGroups: { + maintainers: { + type: "discord.channelAudience", + guildId: "1456350064065904867", + channelId: "1456744319972282449", + membership: "canViewChannel", + }, + }, + channels: { + discord: { + dmPolicy: "allowlist", + allowFrom: ["accessGroup:maintainers"], + }, + }, +} +``` + + Ви можете змішувати динамічні й статичні записи: + +```json5 +{ + accessGroups: { + maintainers: { + type: "discord.channelAudience", + guildId: "1456350064065904867", + channelId: "1456744319972282449", + }, + }, + channels: { + discord: { + dmPolicy: "allowlist", + allowFrom: ["accessGroup:maintainers", "discord:123456789012345678"], + }, + }, +} +``` + + Пошуки закривають доступ у разі помилки. Якщо Discord повертає `Missing Access`, пошук учасника завершується помилкою або канал належить іншій гільдії, відправник DM вважається неавторизованим. + + Увімкніть **Server Members Intent** у Discord Developer Portal для бота, коли використовуєте групи доступу на основі аудиторії каналу. DM не містять стану учасника гільдії, тому OpenClaw розв’язує учасника через Discord REST під час авторизації. + + + + + Обробкою гільдій керує `channels.discord.groupPolicy`: - `open` - `allowlist` - `disabled` - Безпечний базовий рівень, коли існує `channels.discord`, це `allowlist`. + Безпечний базовий рівень, коли існує `channels.discord`, — `allowlist`. Поведінка `allowlist`: - - guild має відповідати `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` попереджає, коли використовуються записи імен/тегів - - якщо guild має налаштовані `channels`, канали поза списком заборонені - - якщо guild не має блока `channels`, дозволені всі канали в цьому allowlisted guild + - якщо гільдія має налаштовані `channels`, канали поза списком заборонені + - якщо гільдія не має блока `channels`, дозволені всі канали в цій allowlisted гільдії Приклад: @@ -498,21 +573,21 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Якщо ви задаєте лише `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`. + Якщо ви лише встановили `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`. - Повідомлення guild за замовчуванням обмежені згадками. + Повідомлення гільдії за замовчуванням обмежені згадками. - Виявлення згадок охоплює: + Виявлення згадок включає: - явну згадку бота - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`) - неявну поведінку відповіді боту в підтримуваних випадках - `requireMention` налаштовується для кожного guild/channel (`channels.discord.guilds...`). - `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here). + `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`). + `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (за винятком @everyone/@here). Групові DM: @@ -522,9 +597,9 @@ Slash-команди `/model` і `/models` відкривають інтерак -### Маршрутизація агента на основі ролей +### Маршрутизація агентів на основі ролей -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників Discord guild до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише для guild. Якщо прив’язка також задає інші поля зіставлення (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише за гільдією. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -551,14 +626,14 @@ Slash-команди `/model` і `/models` відкривають інтерак ## Нативні команди та авторизація команд - `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord. -- Перевизначення для каналу: `channels.discord.commands.native`. +- Перевизначення для окремого каналу: `channels.discord.commands.native`. - `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. - Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. -- Команди все ще можуть бути видимими в UI Discord для користувачів без авторизації; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized". +- Команди все ще можуть бути видимі в UI Discord для користувачів, які не авторизовані; виконання все одно застосовує авторизацію OpenClaw і повертає "не авторизовано". -Див. [Slash-команди](/uk/tools/slash-commands), щоб переглянути каталог команд і поведінку. +Див. [Slash-команди](/uk/tools/slash-commands) щодо каталогу команд і поведінки. -Стандартні налаштування slash-команд: +Типові налаштування slash-команд: - `ephemeral: true` @@ -571,28 +646,28 @@ Slash-команди `/model` і `/models` відкривають інтерак - `[[reply_to_current]]` - `[[reply_to:]]` - Керується `channels.discord.replyToMode`: + Керується через `channels.discord.replyToMode`: - `off` (за замовчуванням) - `first` - `all` - `batched` - Примітка: `off` вимикає неявне створення reply thread. Явні теги `[[reply_to_*]]` усе ще враховуються. - `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord для ходу. - `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли - вхідний хід був дебаунсованим пакетом із кількох повідомлень. Це корисно, - коли вам потрібні нативні відповіді переважно для неоднозначних швидких серій чатів, а не для кожного + Примітка: `off` вимикає неявне створення гілок відповідей. Явні теги `[[reply_to_*]]` все одно враховуються. + `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord за хід. + `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли + вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно, + коли нативні відповіді потрібні переважно для неоднозначних швидких чатів, а не для кожного ходу з одним повідомленням. - ID повідомлень показуються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + Ідентифікатори повідомлень надаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. - - OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його, коли надходить текст. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` відображається на `partial` у Discord; `streamMode` є застарілим псевдонімом і мігрується автоматично. + + OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` у Discord відображається як `partial`; `streamMode` є застарілим псевдонімом і автоматично мігрується. - За замовчуванням залишається `off`, оскільки редагування попереднього перегляду Discord швидко впираються в ліміти частоти, коли кілька ботів або Gateway спільно використовують обліковий запис. + Стандартне значення лишається `off`, бо редагування попереднього перегляду в Discord швидко впираються в ліміти частоти, коли кілька ботів або gateways спільно використовують один обліковий запис. ```json5 { @@ -609,48 +684,48 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - - `partial` редагує одне повідомлення попереднього перегляду, коли надходять токени. - - `block` випускає chunks розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`). - - Медіа, помилки та фінальні відповіді з явним reply скасовують очікувані редагування попереднього перегляду. + - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. + - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розбиття, обмежені `textChunkLimit`). + - Медіа, помилки та фінальні відповіді з явною відповіддю скасовують очікувані редагування попереднього перегляду. - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду. - Трансляція попереднього перегляду підтримує лише текст; медіавідповіді повертаються до звичайного доставлення. Коли потокове передавання `block` явно ввімкнене, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. + Потоковий попередній перегляд підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнене, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання. - - Контекст історії guild: + + Контекст історії гільдії: - стандартне значення `channels.discord.historyLimit` — `20` - - fallback: `messages.groupChat.historyLimit` + - запасний варіант: `messages.groupChat.historyLimit` - `0` вимикає - Керування історією DM: + Елементи керування історією DM: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` - Поведінка потоків: + Поведінка гілок: - - Потоки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. - - Сеанси потоків успадковують вибір `/model` на рівні сеансу батьківського каналу як резервний варіант лише для моделі; локальні для потоку вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо не ввімкнено успадкування транскрипту. - - `channels.discord.thread.inheritParent` (типово `false`) вмикає для нових автоматичних потоків початкове наповнення з батьківського транскрипту. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`. - - Реакції інструментів повідомлень можуть розпізнавати цілі DM `user:`. + - Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено. + - Сеанси гілок успадковують вибір `/model` рівня сеансу з батьківського каналу як резерв лише для моделі; локальні для гілки вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо не ввімкнене успадкування транскрипту. + - `channels.discord.thread.inheritParent` (за замовчуванням `false`) дозволяє новим автоматичним гілкам ініціалізуватися з батьківського транскрипту. Перевизначення для окремих облікових записів містяться в `channels.discord.accounts..thread.inheritParent`. + - Реакції інструмента повідомлень можуть розв’язувати цілі DM `user:`. - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді. - Теми каналів додаються як **ненадійний** контекст. Списки дозволів обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. + Теми каналів інжектуються як **ненадійний** контекст. Списки дозволених користувачів обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту. - - Discord може прив’язати потік до цілі сеансу, щоб наступні повідомлення в цьому потоці й далі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів). + + Discord може прив’язати гілку до цілі сеансу, щоб наступні повідомлення в цій гілці й надалі маршрутизувалися до того самого сеансу (зокрема сеансів субагентів). Команди: - - `/focus ` прив’язати поточний/новий потік до цілі субагента/сеансу - - `/unfocus` видалити прив’язку поточного потоку - - `/agents` показати активні виконання та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок + - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сеансу + - `/unfocus` видалити прив’язку поточної гілки + - `/agents` показати активні запуски та стан прив’язки + - `/session idle ` переглянути/оновити автоматичне скасування фокуса через неактивність для сфокусованих прив’язок - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок Конфігурація: @@ -679,18 +754,18 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `session.threadBindings.*` задає глобальні типові значення. + - `session.threadBindings.*` задає глобальні стандартні значення. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). - - Якщо прив’язки потоків вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки потоків недоступні. + - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). + - Якщо прив’язки гілок вимкнені для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні. Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference). - Для стабільних робочих просторів ACP «завжди ввімкнено» налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord. + Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord. Шлях конфігурації: @@ -746,11 +821,11 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або потік на місці та зберігає майбутні повідомлення в тому самому сеансі ACP. Повідомлення потоку успадковують прив’язку батьківського каналу. - - У прив’язаному каналі або потоці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки потоків можуть перевизначати розв’язання цілі, поки активні. - - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній потік через `--thread auto|here`. + - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й залишає майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілки успадковують прив’язку батьківського каналу. + - У прив’язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив’язки гілок можуть перевизначати розв’язання цілі, доки активні. + - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірню гілку через `--thread auto|here`. - Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив’язок. + Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив’язки. @@ -758,7 +833,7 @@ Slash-команди `/model` і `/models` відкривають інтерак Режим сповіщень про реакції для кожної гільдії: - `off` - - `own` (типово) + - `own` (за замовчуванням) - `all` - `allowlist` (використовує `guilds..users`) @@ -767,26 +842,26 @@ Slash-команди `/model` і `/models` відкривають інтерак - `ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. + `ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок розв’язання: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: - - Discord приймає емодзі Unicode або назви користувацьких емодзі. + - Discord приймає unicode emoji або назви користувацьких emoji. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - Записи конфігурації, ініційовані каналом, увімкнені типово. + Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням. - Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). + Це впливає на потоки `/config set|unset` (коли командні функції ввімкнені). Вимкнути: @@ -803,7 +878,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Маршрутизуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ID застосунку + розв’язання списку дозволів) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. + Маршрутизуйте WebSocket-трафік Gateway Discord і стартові REST-пошуки (ідентифікатор застосунку + розв’язання списку дозволених) через HTTP(S)-проксі з `channels.discord.proxy`. ```json5 { @@ -834,7 +909,7 @@ Slash-команди `/model` і `/models` відкривають інтерак - Увімкніть розв’язання PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: + Увімкніть розв’язання PluralKit, щоб зіставляти проксовані повідомлення з ідентичністю учасника системи: ```json5 { @@ -851,10 +926,10 @@ Slash-команди `/model` і `/models` відкривають інтерак Примітки: - - списки дозволів можуть використовувати `pk:` - - відображувані імена учасників зіставляються за іменем/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ID початкового повідомлення й обмежені часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не задано + - списки дозволених можуть використовувати `pk:` + - відображувані імена учасників зіставляються за назвою/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошуки використовують ідентифікатор оригінального повідомлення й обмежені часовим вікном + - якщо пошук не вдається, проксовані повідомлення обробляються як повідомлення ботів і відкидаються, якщо `allowBots=true` не задано @@ -873,7 +948,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Приклад активності (користувацький статус є типовим типом активності): + Приклад активності (користувацький статус є стандартним типом активності): ```json5 { @@ -886,7 +961,7 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Приклад стримінгу: + Приклад потокової трансляції: ```json5 { @@ -903,10 +978,10 @@ Slash-команди `/model` і `/models` відкривають інтерак Мапа типів активності: - 0: Грає - - 1: Стримить (потребує `activityUrl`) + - 1: Транслює (потребує `activityUrl`) - 2: Слухає - 3: Дивиться - - 4: Користувацька (використовує текст активності як стан статусу; емодзі необов’язковий) + - 4: Користувацький (використовує текст активності як стан статусу; emoji необов’язковий) - 5: Змагається Приклад автоматичної присутності (сигнал стану runtime): @@ -926,50 +1001,50 @@ Slash-команди `/model` і `/models` відкривають інтерак } ``` - Автоматична присутність зіставляє доступність runtime зі статусом Discord: здоровий => онлайн, деградований або невідомий => бездіяльний, вичерпаний або недоступний => dnd. Необов’язкові перевизначення тексту: + Автоматична присутність відображає доступність runtime на статус Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` - - `autoPresence.exhaustedText` (підтримує заповнювач `{reason}`) + - `autoPresence.exhaustedText` (підтримує placeholder `{reason}`) - Discord підтримує обробку затверджень за допомогою кнопок у DM і може необов’язково публікувати запити на затвердження у вихідному каналі. + Discord підтримує обробку затверджень на основі кнопок у DM і може необов’язково публікувати запити на затвердження у вихідному каналі. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - `channels.discord.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) - - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) + - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec-затвердження, коли `enabled` не задано або має значення `"auto"` і можна розпізнати принаймні одного затверджувача, або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить exec-затверджувачів із `allowFrom` каналу, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт затверджень. + Discord автоматично вмикає нативні затвердження виконання, коли `enabled` не задано або має значення `"auto"` і можна розв’язати принаймні одного затверджувача — або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить затверджувачів виконання з канального `allowFrom`, застарілого `dm.allowFrom` чи `defaultTo` для прямих повідомлень. Задайте `enabled: false`, щоб явно вимкнути Discord як нативний клієнт затверджень. - Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на затвердження та кінцеві результати приватно. Спочатку він пробує DM Discord, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, OpenClaw повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. + Для чутливих групових команд лише для власників, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на затвердження та фінальні результати приватно. Спершу він пробує DM Discord, коли власник, що викликає команду, має маршрут власника Discord; якщо він недоступний, OpenClaw повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram. - Коли `target` має значення `channel` або `both`, запит на затвердження видимий у каналі. Кнопками можуть користуватися лише розпізнані затверджувачі; інші користувачі отримують ефемерну відмову. Запити на затвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сеансу, OpenClaw повертається до доставки через DM. + Коли `target` має значення `channel` або `both`, запит на затвердження видимий у каналі. Кнопки можуть використовувати лише розв’язані затверджувачі; інші користувачі отримують ефемерну відмову. Запити на затвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ідентифікатор каналу неможливо вивести з ключа сеансу, OpenClaw повертається до доставки через DM. - Discord також відтворює спільні кнопки затвердження, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для затверджувачів і розсилання в канали. - Коли ці кнопки присутні, вони є основним UX затвердження; OpenClaw - має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, - що чат-затвердження недоступні або ручне затвердження є єдиним шляхом. - Якщо нативний runtime затверджень Discord не активний, OpenClaw залишає - видимим локальний детермінований запит `/approve `. Якщо - runtime активний, але нативну картку неможливо доставити до жодної цілі, - OpenClaw надсилає резервне сповіщення в той самий чат із точною командою `/approve` - з очікуваного затвердження. + Discord також відображає спільні кнопки схвалення, які використовуються іншими чат-каналами. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали. + Коли ці кнопки присутні, вони є основним UX для схвалень; OpenClaw + має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, що + чат-схвалення недоступні або ручне схвалення є єдиним шляхом. + Якщо нативний runtime схвалень Discord не активний, OpenClaw залишає + локальну детерміновану підказку `/approve ` видимою. Якщо + runtime активний, але нативну картку неможливо доставити жодній цілі, + OpenClaw надсилає резервне сповіщення в тому самому чаті з точною командою `/approve` + з очікуваного схвалення. - Автентифікація Gateway і розв’язання затверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` розв’язуються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Затвердження типово спливають через 30 хвилин. + Автентифікація Gateway і розв’язання схвалень відповідають спільному контракту клієнта Gateway (`plugin:` ID розв’язуються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). За замовчуванням термін дії схвалень спливає через 30 хвилин. - Див. [Exec-затвердження](/uk/tools/exec-approvals). + Див. [Схвалення exec](/uk/tools/exec-approvals). ## Інструменти та шлюзи дій -Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими. +Дії повідомлень Discord охоплюють обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими. Основні приклади: @@ -978,26 +1053,26 @@ Slash-команди `/model` і `/models` відкривають інтерак - модерація: `timeout`, `kick`, `ban` - присутність: `setPresence` -Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб задати зображення обкладинки запланованої події. +Дія `event-create` приймає необов’язковий параметр `image` (URL або локальний шлях до файлу), щоб установити зображення обкладинки запланованої події. -Шлюзи дій розміщуються в `channels.discord.actions.*`. +Шлюзи дій розміщені в `channels.discord.actions.*`. -Типова поведінка шлюзу: +Поведінка шлюзів за замовчуванням: -| Група дій | За замовчуванням | +| Група дій | За замовчуванням | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | -| roles | вимкнено | -| moderation | вимкнено | -| presence | вимкнено | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled | +| roles | disabled | +| moderation | disabled | +| presence | disabled | -## Інтерфейс компонентів v2 +## UI Components v2 -OpenClaw використовує компоненти Discord v2 для підтверджень виконання та маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для користувацького інтерфейсу (розширений сценарій; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. +OpenClaw використовує Discord components v2 для схвалень exec і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширений сценарій; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex). -- Задається для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`. -- `embeds` ігноруються, коли наявні компоненти v2. +- Для окремого облікового запису задайте через `channels.discord.accounts..ui.components.accentColor`. +- `embeds` ігноруються, коли присутні components v2. Приклад: @@ -1017,20 +1092,20 @@ OpenClaw використовує компоненти Discord v2 для під ## Голос -Discord має дві окремі голосові поверхні: голосові канали реального часу (безперервні розмови) та вкладення голосових повідомлень (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидва варіанти. +Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвильової форми). Gateway підтримує обидві. ### Голосові канали Контрольний список налаштування: 1. Увімкніть Message Content Intent у Discord Developer Portal. -2. Увімкніть Server Members Intent, коли використовуються списки дозволених ролей/користувачів. +2. Увімкніть Server Members Intent, коли використовуються списки дозволів ролей/користувачів. 3. Запросіть бота зі scopes `bot` і `applications.commands`. 4. Надайте Connect, Speak, Send Messages і Read Message History у цільовому голосовому каналі. 5. Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). 6. Налаштуйте `channels.discord.voice`. -Використовуйте `/vc join|leave|status` для керування сеансами. Команда використовує агент за замовчуванням для облікового запису й дотримується тих самих правил списків дозволів і групової політики, що й інші команди Discord. +Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує стандартного агента облікового запису та дотримується тих самих правил allowlist і групової політики, що й інші команди Discord. ```bash /vc join channel: @@ -1070,36 +1145,36 @@ Discord має дві окремі голосові поверхні: голос Примітки: - `voice.tts` перевизначає `messages.tts` лише для голосового відтворення. -- `voice.model` перевизначає LLM, що використовується лише для відповідей у голосовому каналі Discord. Залиште це незаданим, щоб успадкувати модель маршрутизованого агента. +- `voice.model` перевизначає LLM, який використовується лише для відповідей у голосових каналах Discord. Залиште його незаданим, щоб успадкувати модель маршрутизованого агента. - STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію. -- Перевизначення Discord `systemPrompt` для окремого каналу застосовуються до ходів голосового транскрипту для цього голосового каналу. -- Ходи голосового транскрипту визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). -- Голос Discord є опційним для конфігурацій лише з текстом; задайте `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосовий runtime і gateway intent `GuildVoiceStates`. -- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent стану голосу. Залиште це незаданим, щоб intent відповідав ефективному ввімкненню голосу. +- Перевизначення `systemPrompt` для окремого каналу Discord застосовуються до ходів голосової транскрипції для цього голосового каналу. +- Ходи голосової транскрипції визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримати доступ до інструментів лише для власника (наприклад, `gateway` і `cron`). +- Голос Discord є opt-in для конфігурацій лише з текстом; задайте `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосовий runtime і Gateway intent `GuildVoiceStates`. +- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent стану голосу. Залиште його незаданим, щоб intent відповідав ефективному ввімкненню голосу. - `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються до параметрів приєднання `@discordjs/voice`. -- Типові значення `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. -- `voice.connectTimeoutMs` керує початковим очікуванням Ready у `@discordjs/voice` для `/vc join` і спроб автоматичного приєднання. Типово: `30000`. -- `voice.reconnectGraceMs` керує тим, як довго OpenClaw чекає, доки від'єднаний голосовий сеанс почне повторне підключення, перш ніж знищити його. Типово: `15000`. -- OpenClaw також відстежує помилки розшифрування під час приймання й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись після повторюваних помилок у короткому вікні. -- Якщо після оновлення журнали приймання неодноразово показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding з PR discord.js #11449, яке закрило issue discord.js #11419. +- Значення за замовчуванням `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо їх не задано. +- `voice.connectTimeoutMs` керує початковим очікуванням Ready `@discordjs/voice` для `/vc join` і спроб автоматичного приєднання. За замовчуванням: `30000`. +- `voice.reconnectGraceMs` керує тим, як довго OpenClaw чекає, доки від’єднана голосова сесія почне повторне підключення, перш ніж знищити її. За замовчуванням: `15000`. +- OpenClaw також відстежує помилки розшифрування прийому та автоматично відновлюється, виходячи з голосового каналу й повторно приєднуючись до нього після повторюваних помилок у короткому вікні. +- Якщо після оновлення журнали прийому повторно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, зберіть звіт про залежності та журнали. Вбудована лінійка `@discordjs/voice` містить upstream-виправлення padding з discord.js PR #11449, яке закрило issue discord.js #11419. -Конвеєр голосового каналу: +Пайплайн голосового каналу: -- Захоплення Discord PCM перетворюється на тимчасовий WAV-файл. +- Захоплення PCM Discord перетворюється на тимчасовий WAV-файл. - `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`. -- Транскрипт надсилається через вхідний обробник Discord і маршрутизацію, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки Discord voice відповідає за фінальне відтворення TTS. +- Транскрипт надсилається через вхідний потік і маршрутизацію Discord, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки Discord voice відповідає за фінальне відтворення TTS. - `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу. -- `voice.tts` об'єднується поверх `messages.tts`; отримане аудіо відтворюється в приєднаному каналі. +- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється в каналі, до якого приєднано бота. -Облікові дані визначаються для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. +Облікові дані розв’язуються для кожного компонента: автентифікація маршруту LLM для `voice.model`, автентифікація STT для `tools.media.audio` і автентифікація TTS для `messages.tts`/`voice.tts`. ### Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд хвильової форми й потребують аудіо OGG/Opus. OpenClaw генерує хвильову форму автоматично, але потребує `ffmpeg` і `ffprobe` на хості gateway для перевірки й перетворення. +Голосові повідомлення Discord показують попередній перегляд хвильової форми та потребують аудіо OGG/Opus. OpenClaw генерує хвильову форму автоматично, але потребує `ffmpeg` і `ffprobe` на хості Gateway, щоб перевіряти й конвертувати. - Надайте **локальний шлях до файлу** (URL відхиляються). -- Не вказуйте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). -- Приймається будь-який аудіоформат; OpenClaw перетворює його на OGG/Opus за потреби. +- Опустіть текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload). +- Приймається будь-який аудіоформат; OpenClaw конвертує в OGG/Opus за потреби. ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) @@ -1111,16 +1186,16 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a - увімкніть Message Content Intent - - увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника + - увімкніть Server Members Intent, коли ви залежите від розв’язання користувача/учасника - перезапустіть gateway після зміни intents - + - перевірте `groupPolicy` - - перевірте список дозволених guild у `channels.discord.guilds` - - якщо існує map `channels` для guild, дозволені лише перелічені канали + - перевірте allowlist guild у `channels.discord.guilds` + - якщо існує map `channels` guild, дозволені лише перелічені канали - перевірте поведінку `requireMention` і шаблони згадок Корисні перевірки: @@ -1133,29 +1208,29 @@ openclaw logs --follow - + Поширені причини: - - `groupPolicy="allowlist"` без відповідного списку дозволених guild/channel - - `requireMention` налаштовано в неправильному місці (має бути під `channels.discord.guilds` або в записі каналу) - - відправника заблоковано списком дозволених `users` для guild/channel + - `groupPolicy="allowlist"` без відповідного allowlist guild/каналу + - `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або записі каналу) + - відправника заблоковано allowlist `users` guild/каналу - + Типові журнали: - `Slow listener detected ...` - `stuck session: sessionKey=agent:...:discord:... state=processing ...` - Параметри черги gateway Discord: + Параметри черги Gateway Discord: - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` - - це керує лише роботою listener gateway Discord, а не тривалістю ходу агента + - це керує лише роботою слухача Gateway Discord, а не тривалістю ходу агента - Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Message listeners передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сеансу, доки життєвий цикл сеансу/інструмента/runtime не завершиться або не перерве роботу. + Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/runtime не завершиться або не перерве роботу. ```json5 { @@ -1176,100 +1251,100 @@ openclaw logs --follow - OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типового URL gateway Discord і обмежуються за частотою в журналах. + OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої використовують стандартний URL Gateway Discord як fallback і обмежуються за частотою в журналах. Параметри тайм-ауту метаданих: - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs` - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs` - - запасний env, коли config не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` - - типово: `30000` (30 секунд), максимум: `120000` + - env fallback, коли config не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS` + - за замовчуванням: `30000` (30 секунд), максимум: `120000` Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте slug keys, runtime-зіставлення все одно може працювати, але probe не може повністю перевірити дозволи. + Якщо ви використовуєте ключі slug, runtime-зіставлення все одно може працювати, але probe не може повністю перевірити дозволи. - + - DM вимкнено: `channels.discord.dm.enabled=false` - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікується підтвердження сполучення в режимі `pairing` + - очікується схвалення pairing у режимі `pairing` - + За замовчуванням повідомлення, створені ботом, ігноруються. - Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволів, щоб уникнути циклічної поведінки. - Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте строгі правила згадок і allowlist, щоб уникнути циклічної поведінки. + Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. - + - - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення приймання voice Discord - - підтвердьте `channels.discord.voice.daveEncryption=true` (типово) - - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (upstream-типове значення) і налаштовуйте лише за потреби - - стежте за журналами: + - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була наявна логіка відновлення приймання голосу Discord + - підтвердьте `channels.discord.voice.daveEncryption=true` (за замовчуванням) + - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (типове значення upstream) і налаштовуйте лише за потреби + - стежте в журналах за: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - якщо помилки тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте з upstream-історією приймання DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) + - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте з історією приймання upstream DAVE у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) і [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449) -## Довідник конфігурації +## Довідник із конфігурації -Основний довідник: [Довідник конфігурації - Discord](/uk/gateway/config-channels#discord). +Основний довідник: [Довідник із конфігурації - Discord](/uk/gateway/config-channels#discord). - + - запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` - команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` -- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` -- метадані gateway: `gatewayInfoTimeoutMs` +- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` +- метадані Gateway: `gatewayInfoTimeoutMs` - відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- streaming: `streaming` (застарілий alias: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` - медіа/повтор: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry` - дії: `actions.*` -- presence: `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_BOT_TOKEN` бажано використовувати в контрольованих середовищах). - Надавайте мінімально необхідні дозволи Discord. -- Якщо розгортання або стан команд застаріли, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`. +- Якщо розгортання/стан команд застаріли, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`. ## Пов’язане - - Сполучіть користувача Discord із Gateway. + + Зв’яжіть користувача Discord із gateway. - - Груповий чат і поведінка списку дозволених. + + Поведінка групового чату та списку дозволених. - + Маршрутизуйте вхідні повідомлення до агентів. - + Модель загроз і посилення захисту. - + Зіставляйте гільдії та канали з агентами. - - Поведінка вбудованих команд. + + Поведінка нативних команд. diff --git a/docs/uk/channels/pairing.md b/docs/uk/channels/pairing.md index 4d988a3b4..0b0fbd8d5 100644 --- a/docs/uk/channels/pairing.md +++ b/docs/uk/channels/pairing.md @@ -1,20 +1,20 @@ --- read_when: - Налаштування контролю доступу до особистих повідомлень - - Сполучення нового вузла iOS/Android + - Створення пари з новим iOS/Android Node - Огляд стану безпеки OpenClaw -summary: 'Огляд спарювання: схваліть, хто може надсилати вам приватні повідомлення + які вузли можуть приєднуватися' +summary: 'Огляд сполучення: схвалюйте, хто може писати вам у приватні повідомлення + які вузли можуть приєднуватися' title: Сполучення x-i18n: - generated_at: "2026-04-29T05:57:19Z" + generated_at: "2026-05-01T22:59:51Z" model: gpt-5.5 provider: openai - source_hash: cfdcaf831aedb122ea85200518b8dc1c6f42eff365444dee6c4b740050b1ce26 + source_hash: b11f4b538b9100e14c3dfe13c7a64995e5cebfc1c459839c6fa7a397f4cfb9ec source_path: channels/pairing.md workflow: 16 --- -«Сполучення» — це явний крок підтвердження доступу в OpenClaw. +«Сполучення» — це явний етап схвалення доступу в OpenClaw. Воно використовується у двох місцях: 1. **Сполучення DM** (кому дозволено спілкуватися з ботом) @@ -22,97 +22,123 @@ x-i18n: Контекст безпеки: [Безпека](/uk/gateway/security) -## 1) Сполучення DM (вхідний доступ до чату) +## 1) Сполучення DM (доступ до вхідного чату) Коли канал налаштовано з політикою DM `pairing`, невідомі відправники отримують короткий код, а їхнє повідомлення **не обробляється**, доки ви не схвалите доступ. -Типові політики DM задокументовано тут: [Безпека](/uk/gateway/security) +Стандартні політики DM задокументовано тут: [Безпека](/uk/gateway/security) `dmPolicy: "open"` є публічною лише тоді, коли ефективний список дозволених DM містить `"*"`. -Налаштування й перевірка вимагають цей wildcard для публічно відкритих конфігурацій. Якщо наявний -стан містить `open` з конкретними записами `allowFrom`, runtime все одно допускає -лише цих відправників, а схвалення в pairing-store не розширюють доступ `open`. +Налаштування й перевірка потребують цього wildcard для публічно відкритих конфігурацій. Якщо наявний +стан містить `open` із конкретними записами `allowFrom`, під час виконання все одно допускаються +лише ці відправники, а схвалення зі сховища сполучення не розширюють доступ `open`. Коди сполучення: - 8 символів, великі літери, без неоднозначних символів (`0O1I`). -- **Завершують дію через 1 годину**. Бот надсилає повідомлення про сполучення лише коли створюється новий запит (приблизно раз на годину для кожного відправника). -- Очікувані запити на сполучення DM типово обмежено **3 на канал**; додаткові запити ігноруються, доки один із них не завершить дію або не буде схвалений. +- **Спливають через 1 годину**. Бот надсилає повідомлення про сполучення лише тоді, коли створюється новий запит (приблизно раз на годину для кожного відправника). +- Очікувані запити сполучення DM за замовчуванням обмежено **3 на канал**; додаткові запити ігноруються, доки один із них не спливе або не буде схвалений. -### Схвалення відправника +### Схвалити відправника ```bash openclaw pairing list telegram openclaw pairing approve telegram ``` -Якщо власника команд ще не налаштовано, схвалення коду сполучення DM також початково заповнює -`commands.ownerAllowFrom` схваленим відправником, наприклад `telegram:123456789`. -Це дає початковим налаштуванням явного власника для привілейованих команд і запитів -підтвердження exec. Після появи власника подальші схвалення сполучення надають лише -доступ до DM; вони не додають нових власників. +Якщо власника команд ще не налаштовано, схвалення коду сполучення DM також початково +заповнює `commands.ownerAllowFrom` схваленим відправником, наприклад `telegram:123456789`. +Це дає першому налаштуванню явного власника для привілейованих команд і запитів +схвалення виконання. Після появи власника подальші схвалення сполучення надають лише +доступ DM; вони не додають більше власників. Підтримувані канали: `bluebubbles`, `discord`, `feishu`, `googlechat`, `imessage`, `irc`, `line`, `matrix`, `mattermost`, `msteams`, `nextcloud-talk`, `nostr`, `openclaw-weixin`, `signal`, `slack`, `synology-chat`, `telegram`, `twitch`, `whatsapp`, `zalo`, `zalouser`. +### Багаторазові групи відправників + +Використовуйте верхньорівневі `accessGroups`, коли той самий набір довірених відправників має застосовуватися до кількох каналів повідомлень або до списків дозволених як для DM, так і для груп. Статичні групи відправників використовують `type: "message.senders"` і перелічують учасників у звичайному для кожного каналу синтаксисі `allowFrom`. + +```json5 +{ + accessGroups: { + operators: { + type: "message.senders", + members: { + "*": ["global-owner-id"], + discord: ["discord:123456789012345678"], + telegram: ["987654321"], + whatsapp: ["+15551234567"], + }, + }, + }, + channels: { + telegram: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"] }, + whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["accessGroup:operators"] }, + }, +} +``` + +Список учасників `"*"` спільний для всіх каналів повідомлень. Списки, специфічні для каналу, перевіряються за власними правилами зіставлення відправників цього каналу. + ### Де зберігається стан Зберігається в `~/.openclaw/credentials/`: - Очікувані запити: `-pairing.json` - Сховище схваленого списку дозволених: - - Типовий обліковий запис: `-allowFrom.json` - - Нетиповий обліковий запис: `--allowFrom.json` + - Обліковий запис за замовчуванням: `-allowFrom.json` + - Обліковий запис не за замовчуванням: `--allowFrom.json` -Поведінка області дії облікового запису: +Поведінка областей дії облікових записів: -- Нетипові облікові записи читають/записують лише свій scoped файл списку дозволених. -- Типовий обліковий запис використовує channel-scoped unscoped файл списку дозволених. +- Облікові записи не за замовчуванням читають/записують лише свій файл списку дозволених з областю дії. +- Обліковий запис за замовчуванням використовує файл списку дозволених каналу без області дії. Ставтеся до них як до чутливих даних (вони керують доступом до вашого асистента). -Сховище списку дозволених для сполучення призначене для доступу до DM. Авторизація груп є окремою. +Сховище списку дозволених для сполучення призначене для доступу DM. Авторизація груп є окремою. Схвалення коду сполучення DM не дозволяє цьому відправнику автоматично виконувати групові -команди або керувати ботом у групах. Початкове налаштування першого власника є окремим станом конфігурації -в `commands.ownerAllowFrom`, а доставка групових чатів і надалі дотримується -списків дозволених груп каналу (наприклад `groupAllowFrom`, `groups` або перевизначень для окремих груп -чи окремих тем залежно від каналу). +команди або керувати ботом у групах. Початкове встановлення першого власника — це окремий стан +конфігурації в `commands.ownerAllowFrom`, а доставка групового чату все одно дотримується +групових списків дозволених каналу (наприклад `groupAllowFrom`, `groups` або перевизначень +для окремої групи чи теми залежно від каналу). -## 2) Сполучення пристрою Node (iOS/Android/macOS/headless вузли) +## 2) Сполучення пристроїв Node (iOS/Android/macOS/headless Node) -Вузли підключаються до Gateway як **пристрої** з `role: node`. Gateway +Node підключаються до Gateway як **пристрої** з `role: node`. Gateway створює запит на сполучення пристрою, який потрібно схвалити. ### Сполучення через Telegram (рекомендовано для iOS) Якщо ви використовуєте Plugin `device-pair`, перше сполучення пристрою можна повністю виконати з Telegram: -1. У Telegram напишіть вашому боту: `/pair` -2. Бот відповідає двома повідомленнями: повідомленням з інструкцією та окремим повідомленням із **кодом налаштування** (його легко скопіювати/вставити в Telegram). -3. На телефоні відкрийте застосунок OpenClaw iOS → Settings → Gateway. -4. Вставте код налаштування та підключіться. -5. Поверніться в Telegram: `/pair pending` (перегляньте ідентифікатори запитів, роль і області дії), потім схваліть. +1. У Telegram напишіть своєму боту: `/pair` +2. Бот відповість двома повідомленнями: повідомленням з інструкцією та окремим повідомленням із **кодом налаштування** (його легко скопіювати/вставити в Telegram). +3. На телефоні відкрийте застосунок OpenClaw для iOS → Settings → Gateway. +4. Вставте код налаштування й підключіться. +5. Поверніться в Telegram: `/pair pending` (перегляньте ID запитів, роль і області дії), потім схваліть. -Код налаштування — це JSON-пакет, закодований у base64, який містить: +Код налаштування — це JSON-навантаження, закодоване в base64, яке містить: -- `url`: WebSocket URL Gateway (`ws://...` або `wss://...`) -- `bootstrapToken`: короткочасний bootstrap-токен для одного пристрою, який використовується для початкового handshake сполучення +- `url`: URL WebSocket для Gateway (`ws://...` або `wss://...`) +- `bootstrapToken`: короткочасний bootstrap-токен для одного пристрою, що використовується для початкового рукостискання сполучення Цей bootstrap-токен несе вбудований bootstrap-профіль сполучення: - основний переданий токен `node` залишається з `scopes: []` - будь-який переданий токен `operator` залишається обмеженим bootstrap-списком дозволених: `operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write` -- перевірки bootstrap-областей мають префікс ролі, а не один плаский пул областей: - записи області operator задовольняють лише запити operator, а не-operator ролі - все одно мають запитувати області під власним префіксом ролі -- подальша ротація/відкликання токена залишається обмеженою як схваленим - рольовим контрактом пристрою, так і operator-областями сесії викликача +- перевірки bootstrap-областей дії мають префікс ролі, а не один плаский пул областей дії: + записи областей дії operator задовольняють лише запити operator, а ролі не-operator + все одно мають запитувати області дії з власним префіксом ролі +- подальша ротація/відкликання токенів залишається обмеженою як схваленим + контрактом ролі пристрою, так і областями дії operator сесії викликача Ставтеся до коду налаштування як до пароля, доки він чинний. -### Схвалення пристрою Node +### Схвалити пристрій Node ```bash openclaw devices list @@ -120,18 +146,18 @@ openclaw devices approve openclaw devices reject ``` -Якщо той самий пристрій повторює спробу з іншими деталями автентифікації (наприклад іншими -роллю/областями/публічним ключем), попередній очікуваний запит замінюється і створюється новий +Якщо той самий пристрій повторює спробу з іншими даними автентифікації (наприклад іншими +роллю/областями дії/публічним ключем), попередній очікуваний запит замінюється, і створюється новий `requestId`. -Уже сполучений пристрій не отримує ширший доступ непомітно. Якщо він повторно підключається і просить більше областей або ширшу роль, OpenClaw залишає наявне схвалення без змін і створює новий очікуваний запит на підвищення доступу. Використовуйте `openclaw devices list`, щоб порівняти поточний схвалений доступ із новим запитаним доступом перед схваленням. +Уже сполучений пристрій не отримує ширший доступ непомітно. Якщо він повторно підключається, запитуючи більше областей дії або ширшу роль, OpenClaw залишає наявне схвалення без змін і створює новий очікуваний запит на підвищення доступу. Використовуйте `openclaw devices list`, щоб порівняти поточний схвалений доступ із новим запитаним доступом перед схваленням. -### Необов’язкове автоматичне схвалення Node за довіреним CIDR +### Необов’язкове автоматичне схвалення Node для довірених CIDR -Сполучення пристроїв типово залишається ручним. Для суворо контрольованих мереж Node -можна ввімкнути автоматичне схвалення першого підключення Node з явними CIDR або точними IP: +Сполучення пристроїв за замовчуванням залишається ручним. Для суворо контрольованих мереж Node +можна ввімкнути автоматичне схвалення першого Node з явними CIDR або точними IP-адресами: ```json5 { @@ -145,29 +171,29 @@ openclaw devices reject } ``` -Це застосовується лише до нових запитів на сполучення `role: node` без запитаних -областей. Клієнти Operator, браузера, Control UI та WebChat усе одно потребують ручного -схвалення. Зміни ролі, області, метаданих і публічного ключа також потребують ручного +Це застосовується лише до нових запитів сполучення `role: node` без запитаних +областей дії. Клієнти operator, browser, Control UI та WebChat усе ще потребують ручного +схвалення. Зміни ролі, області дії, метаданих і публічного ключа також потребують ручного схвалення. ### Зберігання стану сполучення Node Зберігається в `~/.openclaw/devices/`: -- `pending.json` (короткочасний; очікувані запити завершують дію) +- `pending.json` (короткочасний; очікувані запити спливають) - `paired.json` (сполучені пристрої + токени) ### Примітки - Застарілий API `node.pair.*` (CLI: `openclaw nodes pending|approve|reject|remove|rename`) є - окремим сховищем сполучення, власником якого є Gateway. WS-вузли все одно потребують сполучення пристрою. -- Запис сполучення є довговічним джерелом істини для схвалених ролей. Активні + окремим сховищем сполучення, яким володіє Gateway. WS Node все ще потребують сполучення пристроїв. +- Запис сполучення є довготривалим джерелом істини для схвалених ролей. Активні токени пристроїв залишаються обмеженими цим схваленим набором ролей; випадковий запис токена поза схваленими ролями не створює нового доступу. ## Пов’язані документи -- Модель безпеки + prompt injection: [Безпека](/uk/gateway/security) +- Модель безпеки + ін’єкція в prompt: [Безпека](/uk/gateway/security) - Безпечне оновлення (запустіть doctor): [Оновлення](/uk/install/updating) - Конфігурації каналів: - Telegram: [Telegram](/uk/channels/telegram)