diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md
index 1ff2a11aa..bea59bc28 100644
--- a/docs/uk/channels/discord.md
+++ b/docs/uk/channels/discord.md
@@ -1,44 +1,44 @@
---
read_when:
- Робота над функціями каналу Discord
-summary: Стан підтримки бота Discord, можливості та налаштування
+summary: Стан підтримки бота Discord, можливості та конфігурація
title: Discord
x-i18n:
- generated_at: "2026-05-02T02:19:18Z"
+ generated_at: "2026-05-02T02:59:12Z"
model: gpt-5.5
provider: openai
- source_hash: 38dbdcf8fe6eb84c77ec7d0e88ecd839b6ecfa311194b2740a3a17a34f85823c
+ source_hash: 3f82966fd7c7f5ded09d72ea8bc8fe255316fe0178ee71c3f8a4e36410aead54
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".
- Натисніть **Bot** на бічній панелі. Установіть **Username** на те, як ви називаєте свого агента OpenClaw.
+ Натисніть **Bot** на бічній панелі. Встановіть **Username** на ім’я, яким ви називаєте свого агента OpenClaw.
-
+
Залишаючись на сторінці **Bot**, прокрутіть униз до **Privileged Gateway Intents** і ввімкніть:
- **Message Content Intent** (обов’язково)
@@ -47,18 +47,18 @@ x-i18n:
-
+
Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**.
Попри назву, це створює ваш перший токен — нічого не "скидається".
- Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться.
+ Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він незабаром знадобиться.
-
+
Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з правильними дозволами, щоб додати бота на свій сервер.
Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть:
@@ -66,7 +66,7 @@ x-i18n:
- `bot`
- `applications.commands`
- Нижче з’явиться розділ **Bot Permissions**. Увімкніть принаймні:
+ Нижче з’явиться розділ **Bot Permissions**. Увімкніть щонайменше:
**General Permissions**
- View Channels
@@ -77,31 +77,31 @@ x-i18n:
- Attach Files
- Add Reactions (необов’язково)
- Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в тредах Discord, зокрема у сценаріях форумних або медіаканалів, які створюють чи продовжують тред, також увімкніть **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**
+ 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,21 +120,21 @@ 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 / config.
+
+ Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому це. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурації.
- > "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``."
+ > "Я вже встановив токен свого бота Discord у конфігурації. Завершіть налаштування Discord з User ID `` і Server ID ``."
-
+
Якщо ви віддаєте перевагу файловій конфігурації, задайте:
```json5
@@ -152,15 +152,15 @@ openclaw gateway
}
```
- Резервне env-значення для облікового запису за замовчуванням:
+ Env fallback для стандартного облікового запису:
```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,32 +206,32 @@ 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 fallback. `DISCORD_BOT_TOKEN` використовується лише для стандартного облікового запису.
+Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один gateway-монітор для цього токена. Токен із конфігурації має перевагу над стандартним env fallback; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис повідомляється як вимкнений.
+Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для конкретного виклику використовується саме для цього виклику. Це стосується дій надсилання й читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису та налаштування повторних спроб усе ще беруться з вибраного облікового запису в активному знімку runtime.
-## Рекомендовано: налаштуйте робочий простір сервера
+## Рекомендовано: налаштуйте робочий простір гільдії
-Коли особисті повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
+Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
-
- Це дає вашому агенту змогу відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях.
+
+ Це дозволяє вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях.
-
- > "Add my Discord Server ID `` to the guild allowlist"
+
+ > "Додай мій Discord Server ID `` до списку дозволених гільдій"
-
+
```json5
{
@@ -254,17 +254,17 @@ openclaw pairing approve discord
-
- За замовчуванням ваш агент відповідає в каналах сервера лише тоді, коли його згадали через @. Для приватного сервера вам, імовірно, потрібно, щоб він відповідав на кожне повідомлення.
+
+ Типово ваш агент відповідає в каналах гільдії лише тоді, коли його @згадали. Для приватного сервера ви, ймовірно, хочете, щоб він відповідав на кожне повідомлення.
- У каналах сервера звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
+ У каналах гільдії звичайні фінальні відповіді помічника типово залишаються приватними. Видимий вивід Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може типово залишатися спостерігачем і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
-
- > "Allow my agent to respond on this server without having to be @mentioned"
+
+ > "Дозволь моєму агенту відповідати на цьому сервері без потреби бути @згаданим"
-
- Установіть `requireMention: false` у конфігурації вашого сервера:
+
+ Задайте `requireMention: false` у конфігурації вашої гільдії:
```json5
{
@@ -280,72 +280,72 @@ 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
-- Gateway володіє підключенням Discord.
+- Gateway володіє з’єднанням Discord.
- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord.
-- Метадані сервера/каналу Discord додаються до підказки моделі як ненадійний
+- Метадані гільдії/каналу Discord додаються до підказки моделі як ненадійний
контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт
- назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з
- майбутнього контексту повторного відтворення.
-- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основний сеанс агента (`agent:main:main`).
-- Канали серверів мають ізольовані ключі сеансів (`agent::discord:channel:`).
-- Групові DM за замовчуванням ігноруються (`channels.discord.dm.groupEnabled=false`).
-- Нативні slash-команди виконуються в ізольованих командних сеансах (`agent::discord:slash:`), але все одно передають `CommandTargetSessionKey` до маршрутизованого сеансу розмови.
-- Доставка текстових оголошень cron/heartbeat до Discord використовує фінальну
- видиму асистенту відповідь один раз. Медіа й структуровані корисні навантаження компонентів залишаються
- багатоповідомленнєвими, коли агент випускає кілька придатних до доставки корисних навантажень.
+ назад, OpenClaw видаляє скопійовані метадані з вихідних відповідей і з
+ майбутнього контексту відтворення.
+- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`).
+- Канали гільдій ізольовані ключами сесій (`agent::discord:channel:`).
+- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`).
+- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), водночас усе ще несучи `CommandTargetSessionKey` до маршрутизованої сесії розмови.
+- Текстова доставка оголошень cron/heartbeat до Discord використовує фінальну
+ видиму асистенту відповідь один раз. Медіа й структуровані payload-и компонентів залишаються
+ багатоповідомними, коли агент видає кілька доставних payload-ів.
-## Канали форумів
+## Форумні канали
-Канали форумів і медіа Discord приймають лише дописи в гілках. OpenClaw підтримує два способи їх створення:
+Форумні й медіаканали Discord приймають лише дописи в потоках. OpenClaw підтримує два способи їх створення:
-- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити гілку. Заголовок гілки використовує перший непорожній рядок вашого повідомлення.
-- Використайте `openclaw message thread create`, щоб створити гілку напряму. Не передавайте `--message-id` для каналів форумів.
+- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити потік. Заголовок потоку використовує перший непорожній рядок вашого повідомлення.
+- Використайте `openclaw message thread create`, щоб створити потік напряму. Не передавайте `--message-id` для форумних каналів.
-Приклад: надіслати до батьківського форуму, щоб створити гілку
+Приклад: надішліть до батьківського форуму, щоб створити потік
```bash
openclaw message send --channel discord --target channel: \
--message "Topic title\nBody of the post"
```
-Приклад: явно створити гілку форуму
+Приклад: створіть форумний потік явно
```bash
openclaw message thread create --channel discord --target channel: \
--thread-name "Topic title" --message "Body of the post"
```
-Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самої гілки (`channel:`).
+Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте до самого потоку (`channel:`).
## Інтерактивні компоненти
-OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із корисним навантаженням `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
+OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload-ом `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення й дотримуються наявних налаштувань Discord `replyToMode`.
Підтримувані блоки:
@@ -353,21 +353,21 @@ OpenClaw підтримує контейнери компонентів Discord
- Рядки дій дозволяють до 5 кнопок або одне меню вибору
- Типи вибору: `string`, `user`, `role`, `mentionable`, `channel`
-За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів, доки вони не завершать строк дії.
+За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити кнопкам, спискам вибору й формам використовуватися багато разів, доки вони не завершать строк дії.
-Щоб обмежити, хто може натискати кнопку, установіть `allowedUsers` для цієї кнопки (ідентифікатори користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують ефемерну відмову.
+Щоб обмежити, хто може натиснути кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли налаштовано, користувачі без збігу отримують ефемерну відмову.
-Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного середовища виконання, а також кроком надсилання. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і використовувати її може лише користувач, який її викликав.
+Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі й сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і використовувати її може лише користувач, який її викликав.
-Файлові вкладення:
+Вкладення файлів:
-- Блоки `file` мають указувати на посилання вкладення (`attachment://`)
+- Блоки `file` мають посилатися на reference вкладення (`attachment://`)
- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів
-- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення
+- Використовуйте `filename`, щоб перевизначити ім’я завантаження, коли воно має збігатися з reference вкладення
Модальні форми:
-- Додайте `components.modal` із до 5 полями
+- Додайте `components.modal` з до 5 полями
- Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select`
- OpenClaw автоматично додає кнопку запуску
@@ -425,41 +425,41 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
-## Контроль доступу та маршрутизація
+## Контроль доступу й маршрутизація
- `channels.discord.dmPolicy` керує доступом до DM. `channels.discord.allowFrom` є канонічним списком дозволених DM.
+ `channels.discord.dmPolicy` керує доступом до DM. `channels.discord.allowFrom` є канонічним allowlist для DM.
- `pairing` (за замовчуванням)
- `allowlist`
- - `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`)
+ - `open` (вимагає, щоб `channels.discord.allowFrom` містив `"*"`)
- `disabled`
- Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують створити пару в режимі `pairing`).
+ Якщо політика DM не відкрита, невідомі користувачі блокуються (або отримують запит на сполучення в режимі `pairing`).
- Пріоритет для кількох облікових записів:
+ Пріоритетність кількох акаунтів:
- - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- - Для одного облікового запису `allowFrom` має пріоритет над застарілим `dm.allowFrom`.
- - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхні власні `allowFrom` і застаріле `dm.allowFrom` не задані.
- - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`.
+ - `channels.discord.accounts.default.allowFrom` застосовується лише до акаунта `default`.
+ - Для одного акаунта `allowFrom` має пріоритет над застарілим `dm.allowFrom`.
+ - Іменовані акаунти успадковують `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 для доставки:
- `user:`
- згадка `<@id>`
- Голі числові ідентифікатори зазвичай розпізнаються як ідентифікатори каналів, коли активне значення каналу за замовчуванням, але ідентифікатори, зазначені в ефективному DM `allowFrom` облікового запису, трактуються як цілі користувацьких DM для сумісності.
+ Голі числові ID зазвичай розпізнаються як ID каналів, коли активний типовий канал, але ID, перелічені в ефективному DM `allowFrom` акаунта, трактуються як цілі користувацьких DM для сумісності.
DM Discord можуть використовувати динамічні записи `accessGroup:` у `channels.discord.allowFrom`.
- Назви груп доступу спільні для каналів повідомлень. Використовуйте `type: "message.senders"` для статичної групи, члени якої виражені у звичайному синтаксисі `allowFrom` кожного каналу, або `type: "discord.channelAudience"`, коли поточна аудиторія `ViewChannel` каналу Discord має динамічно визначати членство. Спільну поведінку груп доступу задокументовано тут: [Групи доступу](/uk/channels/access-groups).
+ Імена груп доступу спільні для каналів повідомлень. Використовуйте `type: "message.senders"` для статичної групи, учасники якої виражені у звичайному синтаксисі `allowFrom` кожного каналу, або `type: "discord.channelAudience"`, коли поточна аудиторія `ViewChannel` каналу Discord має динамічно визначати членство. Спільна поведінка груп доступу задокументована тут: [Групи доступу](/uk/channels/access-groups).
```json5
{
@@ -482,9 +482,9 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Текстовий канал Discord не має окремого списку учасників. `type: "discord.channelAudience"` моделює членство так: відправник DM є учасником налаштованого сервера й наразі має ефективний дозвіл `ViewChannel` на налаштованому каналі після застосування ролей і перевизначень каналу.
+ Текстовий канал Discord не має окремого списку учасників. `type: "discord.channelAudience"` моделює членство так: відправник DM є учасником налаштованої гільдії й наразі має ефективний дозвіл `ViewChannel` на налаштованому каналі після застосування ролей і перевизначень каналу.
- Приклад: дозволити будь-кому, хто може бачити `#maintainers`, писати боту в DM, залишаючи DM закритими для всіх інших.
+ Приклад: дозвольте будь-кому, хто бачить `#maintainers`, надсилати DM боту, залишаючи DM закритими для всіх інших.
```json5
{
@@ -505,7 +505,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Ви можете змішувати динамічні та статичні записи:
+ Можна змішувати динамічні й статичні записи:
```json5
{
@@ -525,29 +525,29 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Пошуки закривають доступ у разі помилки. Якщо Discord повертає `Missing Access`, пошук учасника завершується невдало або канал належить іншому серверу, відправник DM вважається неавторизованим.
+ Пошуки не відкривають доступ у разі помилки. Якщо Discord повертає `Missing Access`, пошук учасника завершується невдачею або канал належить іншій гільдії, відправник DM вважається неавторизованим.
- Увімкніть **Server Members Intent** на порталі розробника Discord для бота, коли використовуєте групи доступу аудиторії каналу. DM не містять стану учасника сервера, тому OpenClaw визначає учасника через Discord REST під час авторизації.
+ Увімкніть **Server Members Intent** у Discord Developer Portal для бота, коли використовуєте групи доступу аудиторії каналу. DM не містять стану учасника гільдії, тому OpenClaw розв’язує учасника через Discord REST під час авторизації.
- Обробка серверів керується `channels.discord.groupPolicy`:
+ Обробкою гільдій керує `channels.discord.groupPolicy`:
- `open`
- `allowlist`
- `disabled`
- Безпечна базова лінія, коли існує `channels.discord`, це `allowlist`.
+ Безпечна базова лінія, коли існує `channels.discord`, — `allowlist`.
Поведінка `allowlist`:
- - сервер має збігатися з `channels.discord.guilds` (переважно `id`, slug також приймається)
- - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ідентифікатори) і `roles` (лише ідентифікатори ролей); якщо налаштовано будь-який із них, відправників дозволено, коли вони збігаються з `users` АБО `roles`
- - прямий збіг за назвою/тегом вимкнено за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
- - назви/теги підтримуються для `users`, але ідентифікатори безпечніші; `openclaw security audit` попереджає, коли використовуються записи назви/тега
- - якщо сервер має налаштовані `channels`, канали не зі списку відхиляються
- - якщо сервер не має блока `channels`, дозволені всі канали на цьому сервері зі списку дозволених
+ - гільдія має збігатися з `channels.discord.guilds` (переважно `id`, slug приймається)
+ - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправників дозволено, коли вони збігаються з `users` АБО `roles`
+ - прямий збіг імен/тегів вимкнено за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як режим сумісності на випадок крайньої потреби
+ - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів
+ - якщо гільдія має налаштовані `channels`, канали, яких немає в списку, відхиляються
+ - якщо гільдія не має блока `channels`, дозволені всі канали в цій allowlisted гільдії
Приклад:
@@ -573,33 +573,33 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Якщо ви лише задаєте `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервна поведінка середовища виконання — `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`.
+ Якщо ви лише встановите `DISCORD_BOT_TOKEN` і не створите блок `channels.discord`, runtime fallback буде `groupPolicy="allowlist"` (із попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` — `open`.
- Повідомлення серверів за замовчуванням обмежені згадками.
+ Повідомлення гільдій за замовчуванням обмежені згадкою.
Виявлення згадок охоплює:
- явну згадку бота
- - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
+ - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- неявну поведінку відповіді боту в підтримуваних випадках
- `requireMention` налаштовується для кожного сервера/каналу (`channels.discord.guilds...`).
- `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here).
+ `requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`).
+ `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (за винятком @everyone/@here).
Групові DM:
- за замовчуванням: ігноруються (`dm.groupEnabled=false`)
- - необов’язковий список дозволених через `dm.groupChannels` (ідентифікатори каналів або slugs)
+ - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug-и)
### Маршрутизація агентів на основі ролей
-Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників сервера Discord до різних агентів за ідентифікатором ролі. Прив’язки на основі ролей приймають лише ідентифікатори ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише за сервером. Якщо прив’язка також задає інші поля збігу (наприклад, `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
+Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише гільдії. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
```json5
{
@@ -625,49 +625,49 @@ Slash-команди `/model` і `/models` відкривають інтерак
## Нативні команди й авторизація команд
-- `commands.native` за замовчуванням дорівнює `"auto"` і ввімкнено для Discord.
-- Перевизначення для окремого каналу: `channels.discord.commands.native`.
+- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord.
+- Перевизначення для каналу: `channels.discord.commands.native`.
- `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord.
-- Авторизація нативних команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень.
-- Команди все ще можуть бути видимими в UI Discord для користувачів, які не авторизовані; виконання все одно застосовує авторизацію OpenClaw і повертає «не авторизовано».
+- Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень.
+- Команди все ще можуть бути видимі в UI Discord для неавторизованих користувачів; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized".
Див. [Slash-команди](/uk/tools/slash-commands) для каталогу команд і поведінки.
-Типові налаштування slash-команд:
+Налаштування slash-команд за замовчуванням:
- `ephemeral: true`
-## Відомості про функції
+## Подробиці функції
-
- Discord підтримує теги відповідей у виводі агента:
+
+ Discord підтримує теги відповіді у виводі агента:
- `[[reply_to_current]]`
- `[[reply_to:]]`
- Керується `channels.discord.replyToMode`:
+ Керується через `channels.discord.replyToMode`:
- - `off` (типово)
+ - `off` (за замовчуванням)
- `first`
- `all`
- `batched`
- Примітка: `off` вимикає неявне формування ланцюжків відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються.
- `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord для ходу.
- `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли
- вхідний хід був debounce-пакетом із кількох повідомлень. Це корисно,
- коли нативні відповіді потрібні переважно для неоднозначних швидких чатів, а не для кожного
- ходу з одним повідомленням.
+ Примітка: `off` вимикає неявне групування відповідей у ланцюжки. Явні теги `[[reply_to_*]]` усе одно враховуються.
+ `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord для цього ходу.
+ `batched` додає неявне посилання нативної відповіді Discord лише тоді, коли
+ вхідний хід був дебаунсованим пакетом із кількох повідомлень. Це корисно,
+ коли нативні відповіді потрібні переважно для неоднозначних бурхливих чатів,
+ а не для кожного ходу з одним повідомленням.
- Ідентифікатори повідомлень показуються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
+ 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 швидко впирається в обмеження частоти, коли кілька ботів або Gateway використовують один обліковий запис.
```json5
{
@@ -685,47 +685,47 @@ Slash-команди `/model` і `/models` відкривають інтерак
```
- `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів.
- - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`).
- - Медіа, помилки та фінальні відповіді з явним посиланням скасовують очікувані редагування попереднього перегляду.
- - `streaming.preview.toolProgress` (типово `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
+ - `block` надсилає фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`).
+ - Медіа, помилки та фінальні повідомлення з явною відповіддю скасовують очікувані редагування попереднього перегляду.
+ - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
- Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного стримінгу.
+ Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потокове передавання `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного стримінгу.
-
+
Контекст історії гільдії:
- - `channels.discord.historyLimit` типово `20`
- - резервне значення: `messages.groupChat.historyLimit`
+ - `channels.discord.historyLimit` за замовчуванням `20`
+ - резервний варіант: `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`.
- - Реакції message-tool можуть розв’язувати цілі DM `user:`.
+ - Ланцюжки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
+ - Сеанси ланцюжків успадковують вибір `/model` рівня сеансу батьківського каналу лише як резервну модель; локальні для ланцюжка вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено.
+ - `channels.discord.thread.inheritParent` (за замовчуванням `false`) дозволяє новим автоматичним ланцюжкам засіватися з батьківського транскрипту. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`.
+ - Реакції інструмента повідомлень можуть розв’язувати DM-цілі `user:`.
- `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді.
- Теми каналів вставляються як **ненадійний** контекст. Allowlist обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту.
+ Теми каналів вводяться як **ненадійний** контекст. Списки дозволених користувачів обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту.
-
- Discord може прив’язати гілку до цілі сеансу, щоб наступні повідомлення в цій гілці й далі маршрутизувалися до того самого сеансу (включно із сеансами субагентів).
+
+ Discord може прив’язати ланцюжок до цілі сеансу, щоб подальші повідомлення в цьому ланцюжку продовжували маршрутизуватися до того самого сеансу (зокрема сеансів підагентів).
Команди:
- - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сеансу
- - `/unfocus` вилучити прив’язку поточної гілки
+ - `/focus ` прив’язати поточний/новий ланцюжок до цілі підагента/сеансу
+ - `/unfocus` прибрати прив’язку поточного ланцюжка
- `/agents` показати активні запуски та стан прив’язки
- - `/session idle ` переглянути/оновити автоматичне unfocus через неактивність для сфокусованих прив’язок
+ - `/session idle ` переглянути/оновити автоматичне скасування фокуса через неактивність для сфокусованих прив’язок
- `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок
Конфігурація:
@@ -756,16 +756,16 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `session.threadBindings.*` задає глобальні типові значення.
- `channels.discord.threadBindings.*` перевизначає поведінку Discord.
- - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для `sessions_spawn({ thread: true })`.
- - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати гілки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`).
- - Якщо прив’язки гілок вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки гілок недоступні.
+ - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати ланцюжки для `sessions_spawn({ thread: true })`.
+ - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати ланцюжки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`).
+ - Якщо прив’язки ланцюжків вимкнено для облікового запису, `/focus` і пов’язані операції прив’язки ланцюжків недоступні.
- Див. [Субагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference).
+ Див. [Підагенти](/uk/tools/subagents), [Агенти ACP](/uk/tools/acp-agents) і [Довідник конфігурації](/uk/gateway/configuration-reference).
-
- Для стабільних робочих просторів ACP у режимі «завжди ввімкнено» налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord.
+
+ Для стабільних «завжди ввімкнених» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, що націлюються на розмови Discord.
Шлях конфігурації:
@@ -821,19 +821,19 @@ 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), щоб дізнатися подробиці поведінки прив’язок.
- Режим сповіщень про реакції для окремої гільдії:
+ Режим сповіщень про реакції для кожної гільдії:
- `off`
- - `own` (типово)
+ - `own` (за замовчуванням)
- `all`
- `allowlist` (використовує `guilds..users`)
@@ -842,24 +842,24 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `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 set|unset` (коли функції команд увімкнено).
@@ -878,7 +878,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
- Маршрутизуйте Discord gateway WebSocket-трафік і стартові REST-пошуки (ідентифікатор застосунку + розв’язання allowlist) через HTTP(S)-проксі з `channels.discord.proxy`.
+ Маршрутизуйте WebSocket-трафік Discord gateway і стартові REST-запити (ID застосунку + розв’язання списку дозволених) через HTTP(S)-проксі з `channels.discord.proxy`.
```json5
{
@@ -926,15 +926,39 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - allowlist можуть використовувати `pk:`
+ - списки дозволених можуть використовувати `pk:`
- відображувані імена учасників зіставляються за назвою/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true`
- - пошуки використовують ідентифікатор оригінального повідомлення та обмежені часовим вікном
- - якщо пошук завершується невдало, проксійовані повідомлення вважаються повідомленнями ботів і відкидаються, якщо `allowBots=true` не встановлено
+ - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном
+ - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота та відкидаються, якщо `allowBots=true` не встановлено
+
+
+
+
+ Використовуйте `mentionAliases`, коли агентам потрібні детерміновані вихідні згадки для відомих користувачів Discord. Ключі — це дескриптори без початкового `@`; значення — ID користувачів Discord. Невідомі дескриптори, `@everyone`, `@here` і згадки всередині Markdown-кодспанів лишаються без змін.
+
+```json5
+{
+ channels: {
+ discord: {
+ mentionAliases: {
+ Vladislava: "123456789012345678",
+ },
+ accounts: {
+ ops: {
+ mentionAliases: {
+ OpsLead: "234567890123456789",
+ },
+ },
+ },
+ },
+ },
+}
+```
- Оновлення присутності застосовуються, коли ви встановлюєте поле статусу або активності, або коли вмикаєте автоматичну присутність.
+ Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичну присутність.
Приклад лише зі статусом:
@@ -948,7 +972,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Приклад активності (власний статус є типовим типом активності):
+ Приклад активності (користувацький статус є типовим типом активності):
```json5
{
@@ -961,7 +985,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Приклад стримінгу:
+ Приклад потокового передавання:
```json5
{
@@ -975,13 +999,13 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Мапа типів активності:
+ Карта типів активності:
- 0: Грає
- - 1: Стримить (потребує `activityUrl`)
+ - 1: Транслює (потребує `activityUrl`)
- 2: Слухає
- 3: Дивиться
- - 4: Власна (використовує текст активності як стан статусу; emoji необов’язковий)
+ - 4: Користувацький (використовує текст активності як стан статусу; емодзі необов’язковий)
- 5: Змагається
Приклад автоматичної присутності (сигнал стану runtime):
@@ -1005,29 +1029,29 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `autoPresence.healthyText`
- `autoPresence.degradedText`
- - `autoPresence.exhaustedText` (підтримує placeholder `{reason}`)
+ - `autoPresence.exhaustedText` (підтримує заповнювач `{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; якщо це недоступно, він повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram.
+ Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликав команду, має маршрут власника Discord; якщо це недоступно, він повертається до першого доступного маршруту власника з `commands.ownerAllowFrom`, наприклад Telegram.
- Коли `target` має значення `channel` або `both`, запит на схвалення видно в каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують тимчасову відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не можна вивести з ключа сесії, OpenClaw повертається до доставки через DM.
+ Коли `target` має значення `channel` або `both`, запит на схвалення видимий у каналі. Лише визначені схвалювачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw повертається до доставки через DM.
- Discord також відображає спільні кнопки схвалення, які використовуються іншими чат-каналами. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали.
+ Discord також відображає спільні кнопки схвалення, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали.
Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw
- має включати ручну команду `/approve` лише тоді, коли результат інструмента каже,
+ має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує,
що чат-схвалення недоступні або ручне схвалення є єдиним шляхом.
Якщо нативне середовище виконання схвалень Discord не активне, OpenClaw залишає
видимим локальний детермінований запит `/approve `. Якщо
@@ -1035,44 +1059,44 @@ Slash-команди `/model` і `/models` відкривають інтерак
OpenClaw надсилає резервне сповіщення в той самий чат із точною командою `/approve`
з очікуваного схвалення.
- Автентифікація Gateway і визначення схвалень відповідають спільному контракту клієнта Gateway (`plugin:` ID визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Схвалення за замовчуванням спливають через 30 хвилин.
+ Автентифікація Gateway і визначення схвалення відповідають спільному контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). Схвалення типово спливають через 30 хвилин.
- Див. [схвалення Exec](/uk/tools/exec-approvals).
+ Див. [Схвалення Exec](/uk/tools/exec-approvals).
## Інструменти та шлюзи дій
-Дії повідомлень Discord включають обмін повідомленнями, адміністрування каналів, модерацію, присутність і дії з метаданими.
+Дії повідомлень Discord охоплюють повідомлення, адміністрування каналів, модерацію, присутність і дії з метаданими.
Основні приклади:
-- обмін повідомленнями: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
+- повідомлення: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
- реакції: `react`, `reactions`, `emojiList`
- модерація: `timeout`, `kick`, `ban`
- присутність: `setPresence`
-Дія `event-create` приймає необов’язковий параметр `image` (URL або шлях до локального файлу), щоб встановити обкладинку запланованої події.
+Дія `event-create` приймає необов’язковий параметр `image` (URL або локальний шлях до файлу), щоб задати зображення обкладинки запланованої події.
Шлюзи дій розташовані в `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
+## UI Components v2
-OpenClaw використовує компоненти Discord v2 для схвалень exec і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширений сценарій; потребує створення 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.
Приклад:
@@ -1092,20 +1116,20 @@ OpenClaw використовує компоненти Discord v2 для схв
## Голос
-Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду хвильової форми). Gateway підтримує обидві.
+Discord має дві окремі голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидві.
### Голосові канали
Контрольний список налаштування:
1. Увімкніть Message Content Intent у Discord Developer Portal.
-2. Увімкніть Server Members Intent, коли використовуються списки дозволів ролей/користувачів.
-3. Запросіть бота зі scope `bot` і `applications.commands`.
+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` для керування сесіями. Команда використовує типового агента облікового запису й дотримується тих самих правил списку дозволених і групової політики, що й інші команди Discord.
```bash
/vc join channel:
@@ -1113,7 +1137,7 @@ Discord має дві окремі голосові поверхні: realtime *
/vc leave
```
-Приклад автоприєднання:
+Приклад автоматичного приєднання:
```json5
{
@@ -1146,35 +1170,35 @@ Discord має дві окремі голосові поверхні: realtime *
- `voice.tts` перевизначає `messages.tts` лише для голосового відтворення.
- `voice.model` перевизначає LLM, що використовується лише для відповідей голосового каналу Discord. Залиште його незаданим, щоб успадкувати модель маршрутизованого агента.
-- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрибування.
-- Перевизначення `systemPrompt` для окремих каналів Discord застосовуються до ходів голосового транскрипта для цього голосового каналу.
-- Ходи голосового транскрипта визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); спікери, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`).
-- Голос Discord є opt-in для конфігурацій лише з текстом; встановіть `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосове середовище виконання та gateway intent `GuildVoiceStates`.
-- `channels.discord.intents.voiceStates` може явно перевизначити підписку на intent голосового стану. Залиште його незаданим, щоб intent відповідав ефективному ввімкненню голосу.
+- STT використовує `tools.media.audio`; `voice.model` не впливає на транскрипцію.
+- Перевизначення `systemPrompt` Discord для окремого каналу застосовуються до ходів голосового транскрипту для цього голосового каналу.
+- Ходи голосового транскрипту визначають статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`).
+- Голос Discord є opt-in для конфігурацій лише з текстом; задайте `channels.discord.voice.enabled=true` (або залиште наявний блок `channels.discord.voice`), щоб увімкнути команди `/vc`, голосове середовище виконання та 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 з PR discord.js #11449, яке закрило issue discord.js #11419.
Пайплайн голосового каналу:
- PCM-захоплення Discord перетворюється на тимчасовий WAV-файл.
- `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`.
-- Транскрипт надсилається через вхід Discord і маршрутизацію, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, бо Discord voice відповідає за фінальне відтворення TTS.
+- Транскрипт надсилається через вхід Discord і маршрутизацію, тоді як LLM відповіді працює з політикою голосового виводу, яка приховує інструмент агента `tts` і просить повернути текст, оскільки голос Discord відповідає за фінальне відтворення TTS.
- `voice.model`, якщо задано, перевизначає лише LLM відповіді для цього ходу голосового каналу.
-- `voice.tts` об’єднується поверх `messages.tts`; отримане аудіо відтворюється у приєднаному каналі.
+- `voice.tts` об’єднується поверх `messages.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.
+- Надайте **локальний шлях до файлу** (URL відхиляються).
+- Опустіть текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload).
+- Приймається будь-який аудіоформат; OpenClaw перетворює його на OGG/Opus за потреби.
```bash
message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true)
@@ -1183,7 +1207,7 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
## Усунення несправностей
-
+
- увімкніть Message Content Intent
- увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника
@@ -1191,11 +1215,11 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
-
+
- перевірте `groupPolicy`
- - перевірте список дозволів гільдій у `channels.discord.guilds`
- - якщо існує мапа `channels` гільдії, дозволені лише перелічені канали
+ - перевірте список дозволених guild у `channels.discord.guilds`
+ - якщо існує мапа `channels` для guild, дозволені лише перелічені канали
- перевірте поведінку `requireMention` і шаблони згадок
Корисні перевірки:
@@ -1208,29 +1232,29 @@ openclaw logs --follow
-
+
Поширені причини:
- - `groupPolicy="allowlist"` без відповідного списку дозволів гільдії/каналу
- - `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або записі каналу)
- - відправника заблоковано списком дозволів `users` гільдії/каналу
+ - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналу
+ - `requireMention` налаштовано не в тому місці (має бути під `channels.discord.guilds` або в записі каналу)
+ - відправника заблоковано списком дозволених `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`
- - це керує лише роботою слухача gateway Discord, а не тривалістю ходу агента
+ - один обліковий запис: `channels.discord.eventQueue.listenerTimeout`
+ - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout`
+ - це керує лише роботою listener Gateway Discord, а не тривалістю ходу агента
- Discord не застосовує таймаут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу.
+ Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень передають роботу негайно, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу.
```json5
{
@@ -1250,66 +1274,66 @@ openclaw logs --follow
-
- OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до стандартного URL gateway Discord і обмежуються за частотою в журналах.
+
+ OpenClaw отримує метадані Discord `/gateway/bot` перед підключенням. Тимчасові збої повертаються до типового URL Gateway Discord і обмежуються за частотою в журналах.
- Параметри таймауту метаданих:
+ Налаштування тайм-ауту метаданих:
- - один акаунт: `channels.discord.gatewayInfoTimeoutMs`
- - кілька акаунтів: `channels.discord.accounts..gatewayInfoTimeoutMs`
- - резервне значення env, коли config не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
- - за замовчуванням: `30000` (30 секунд), максимум: `120000`
+ - один обліковий запис: `channels.discord.gatewayInfoTimeoutMs`
+ - кілька облікових записів: `channels.discord.accounts..gatewayInfoTimeoutMs`
+ - резервне env-значення, коли конфіг не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
+ - типово: `30000` (30 секунд), максимум: `120000`
-
- OpenClaw чекає на подію gateway `READY` Discord під час запуску та після перепідключень середовища виконання. Налаштуванням із кількома акаунтами та рознесенням запуску може знадобитися довше startup READY window, ніж стандартне.
+
+ OpenClaw чекає на подію `READY` Gateway Discord під час запуску та після повторних підключень середовища виконання. Конфігураціям із кількома обліковими записами та поетапним запуском може знадобитися довше вікно startup READY, ніж типове.
- Параметри таймауту READY:
+ Налаштування тайм-ауту READY:
- - запуск, один акаунт: `channels.discord.gatewayReadyTimeoutMs`
- - запуск, кілька акаунтів: `channels.discord.accounts..gatewayReadyTimeoutMs`
- - резервне значення env для запуску, коли config не задано: `OPENCLAW_DISCORD_READY_TIMEOUT_MS`
- - стандарт для запуску: `15000` (15 секунд), максимум: `120000`
- - runtime, один акаунт: `channels.discord.gatewayRuntimeReadyTimeoutMs`
- - runtime, кілька акаунтів: `channels.discord.accounts..gatewayRuntimeReadyTimeoutMs`
- - резервне значення env для runtime, коли config не задано: `OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS`
- - стандарт для runtime: `30000` (30 секунд), максимум: `120000`
+ - запуск для одного облікового запису: `channels.discord.gatewayReadyTimeoutMs`
+ - запуск для кількох облікових записів: `channels.discord.accounts..gatewayReadyTimeoutMs`
+ - резервне значення env під час запуску, якщо конфігурацію не задано: `OPENCLAW_DISCORD_READY_TIMEOUT_MS`
+ - типове значення під час запуску: `15000` (15 секунд), максимум: `120000`
+ - runtime для одного облікового запису: `channels.discord.gatewayRuntimeReadyTimeoutMs`
+ - runtime для кількох облікових записів: `channels.discord.accounts..gatewayRuntimeReadyTimeoutMs`
+ - резервне значення env для runtime, якщо конфігурацію не задано: `OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS`
+ - типове значення runtime: `30000` (30 секунд), максимум: `120000`
- Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів.
+ Перевірки дозволів `channels status --probe` працюють лише для числових ідентифікаторів каналів.
- Якщо ви використовуєте ключі slug, зіставлення під час виконання все ще може працювати, але перевірка не може повністю підтвердити дозволи.
+ Якщо ви використовуєте ключі-slug, зіставлення під час виконання все одно може працювати, але probe не зможе повністю перевірити дозволи.
- DM вимкнено: `channels.discord.dm.enabled=false`
- - Політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`)
- - очікування схвалення сполучення в режимі `pairing`
+ - політику DM вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`)
+ - очікується схвалення сполучення в режимі `pairing`
-
- За замовчуванням повідомлення, створені ботами, ігноруються.
+
+ Типово повідомлення, створені ботами, ігноруються.
- Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списку дозволених, щоб уникнути циклічної поведінки.
+ Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте строгі правила згадок і списку дозволених, щоб уникнути циклічної поведінки.
Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота.
-
+
- - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була доступна логіка відновлення приймання голосу Discord
- - підтвердьте `channels.discord.voice.daveEncryption=true` (за замовчуванням)
- - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (стандартне значення upstream) і налаштовуйте лише за потреби
- - стежте за журналами на наявність:
+ - підтримуйте OpenClaw актуальним (`openclaw update`), щоб була присутня логіка відновлення приймання голосу Discord
+ - підтвердьте `channels.discord.voice.daveEncryption=true` (типово)
+ - почніть із `channels.discord.voice.decryptionFailureTolerance=24` (типове значення upstream) і налаштовуйте лише за потреби
+ - стежте за журналами для:
- `discord voice: DAVE decrypt failures detected`
- `discord voice: repeated decrypt failures; attempting rejoin`
- - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали та порівняйте їх з upstream-історією приймання DAVE у [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)
@@ -1322,13 +1346,13 @@ openclaw logs --follow
- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots`
- політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
-- команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
+- команди: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
- Gateway: `gatewayInfoTimeoutMs`, `gatewayReadyTimeoutMs`, `gatewayRuntimeReadyTimeoutMs`
- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
-- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
+- доставлення: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
-- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, за замовчуванням `100MB`), `retry`
+- медіа/повторні спроби: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry`
- дії: `actions.*`
- присутність: `activity`, `status`, `activityType`, `activityUrl`
- UI: `ui.components.accentColor`
@@ -1336,28 +1360,28 @@ openclaw logs --follow
-## Безпека та експлуатація
+## Безпека та операції
-- Розглядайте токени ботів як секрети (у керованих середовищах бажано `DISCORD_BOT_TOKEN`).
-- Надавайте мінімально необхідні дозволи Discord.
-- Якщо розгортання/стан команди застаріли, перезапустіть Gateway і повторно перевірте за допомогою `openclaw channels status --probe`.
+- Вважайте токени ботів секретами (у керованих середовищах бажано `DISCORD_BOT_TOKEN`).
+- Надавайте Discord дозволи за принципом найменших привілеїв.
+- Якщо розгортання команд або стан застаріли, перезапустіть gateway і повторно перевірте за допомогою `openclaw channels status --probe`.
## Пов’язане
- Сполучіть користувача Discord із Gateway.
+ Сполучіть користувача Discord із gateway.
Поведінка групового чату та списку дозволених.
- Спрямовуйте вхідні повідомлення до агентів.
+ Маршрутизуйте вхідні повідомлення до агентів.
Модель загроз і посилення захисту.
-
+
Зіставляйте гільдії та канали з агентами.
diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md
index 901693e72..711b703ab 100644
--- a/docs/uk/channels/slack.md
+++ b/docs/uk/channels/slack.md
@@ -1,42 +1,42 @@
---
read_when:
- - Налаштування Slack або налагодження режиму сокета/HTTP для Slack
-summary: Налаштування Slack і поведінка під час виконання (режим сокетів + URL-адреси HTTP-запитів)
+ - Налаштування Slack або налагодження сокетного/HTTP-режиму Slack
+summary: Налаштування Slack і поведінка під час виконання (режим Socket + URL-адреси HTTP-запитів)
title: Slack
x-i18n:
- generated_at: "2026-05-01T13:24:11Z"
+ generated_at: "2026-05-02T02:59:10Z"
model: gpt-5.5
provider: openai
- source_hash: d2b065eab0e80dc223d33d0e0c8210e1ff05ff24426f7a335885540c9eb42ae9
+ source_hash: 82dbc27617415cb21e3c682d58c8a8a7f56c7471af0b43d5fcbb5df3fa872a49
source_path: channels/slack.md
workflow: 16
---
-Готово до продакшну для приватних повідомлень і каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються.
+Готово до production-використання для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються.
- Приватні повідомлення Slack за замовчуванням використовують режим сполучення.
+ Slack DM типово використовують режим сполучення.
-
+
Нативна поведінка команд і каталог команд.
-
- Міжканальна діагностика й інструкції з відновлення.
+
+ Міжканальна діагностика та playbook-и відновлення.
## Швидке налаштування
-
+
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- - виберіть **from a manifest** і виберіть робочу область для свого застосунку
- - вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче й продовжте створення
- - згенеруйте **App-Level Token** (`xapp-...`) з `connections:write`
+ - виберіть **from a manifest** і виберіть робочий простір для свого застосунку
+ - вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче та продовжте створення
+ - згенеруйте **App-Level Token** (`xapp-...`) із `connections:write`
- установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
@@ -64,7 +64,7 @@ openclaw config patch --file ./slack.socket.patch.json5 --dry-run
openclaw config patch --file ./slack.socket.patch.json5
```
- Резервний варіант через змінні середовища (лише обліковий запис за замовчуванням):
+ Резервний варіант через env (лише типовий обліковий запис):
```bash
SLACK_APP_TOKEN=xapp-...
@@ -89,7 +89,7 @@ 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-...`)
@@ -121,7 +121,7 @@ openclaw config patch --file ./slack.http.patch.json5
```
- Використовуйте унікальні шляхи webhook для HTTP з кількома обліковими записами
+ Використовуйте унікальні шляхи Webhook для HTTP з кількома обліковими записами
Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували.
@@ -142,7 +142,7 @@ openclaw gateway
## Налаштування транспорту Socket Mode
-OpenClaw за замовчуванням установлює для клієнта Slack SDK час очікування pong 15 секунд у Socket Mode. Перевизначайте транспортні налаштування лише тоді, коли потрібне налаштування під конкретну робочу область або хост:
+OpenClaw типово встановлює для клієнта Slack SDK час очікування pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли вам потрібне налаштування для конкретного робочого простору або хоста:
```json5
{
@@ -159,13 +159,13 @@ OpenClaw за замовчуванням установлює для клієн
}
```
-Використовуйте це лише для робочих областей Socket Mode, у журналах яких є тайм-аути Slack websocket pong/server-ping, або для хостів із відомим виснаженням циклу подій. `clientPingTimeout` — це очікування pong після того, як SDK надсилає клієнтський ping; `serverPingTimeout` — це очікування ping від сервера Slack. Повідомлення й події застосунку залишаються станом застосунку, а не сигналами працездатності транспорту.
+Використовуйте це лише для робочих просторів Socket Mode, які записують у журнал тайм-аути pong websocket Slack або server-ping, чи працюють на хостах із відомим голодуванням event loop. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — це очікування ping-ів сервера Slack. Повідомлення й події застосунку залишаються станом застосунку, а не сигналами живості транспорту.
-## Контрольний список маніфесту й областей доступу
+## Чекліст маніфесту та scope-ів
-Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` слеш-команди).
+Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` slash-команди).
-Базовий маніфест (Socket Mode за замовчуванням):
+Базовий маніфест (Socket Mode типово):
```json
{
@@ -212,6 +212,7 @@ OpenClaw за замовчуванням установлює для клієн
"pins:write",
"reactions:read",
"reactions:write",
+ "usergroups:read",
"users:read"
]
}
@@ -239,7 +240,7 @@ OpenClaw за замовчуванням установлює для клієн
}
```
-Для режиму **HTTP Request URLs** замініть `settings` на HTTP-варіант і додайте `url` до кожної слеш-команди. Потрібна публічна URL-адреса:
+Для режиму **HTTP Request URLs** замініть `settings` на HTTP-варіант і додайте `url` до кожної slash-команди. Потрібна публічна URL-адреса:
```json
{
@@ -271,22 +272,22 @@ OpenClaw за замовчуванням установлює для клієн
### Додаткові налаштування маніфесту
-Відкрийте різні функції, що розширюють наведені вище типові значення.
+Покажіть різні функції, що розширюють наведені вище типові значення.
-Типовий маніфест вмикає вкладку Slack App Home **Home** і підписується на `app_home_opened`. Коли учасник робочої області відкриває вкладку Home, OpenClaw публікує безпечний типовий вигляд Home за допомогою `views.publish`; корисне навантаження розмови або приватна конфігурація не включаються. Вкладка **Messages** залишається ввімкненою для приватних повідомлень Slack.
+Типовий маніфест вмикає вкладку **Home** у Slack App Home і підписується на `app_home_opened`. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечне типове подання Home через `views.publish`; payload розмови або приватна конфігурація не включаються. Вкладка **Messages** залишається ввімкненою для Slack DM.
-
+
- Кілька [нативних слеш-команд](#commands-and-slash-behavior) можна використовувати замість однієї налаштованої команди з урахуванням нюансів:
+ Кілька [нативних slash-команд](#commands-and-slash-behavior) можна використовувати замість однієї налаштованої команди з такими нюансами:
- Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована.
- - Одночасно може бути доступно не більше 25 слеш-команд.
+ - Одночасно можна зробити доступними не більше ніж 25 slash-команд.
Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list):
-
+
```json
"slash_commands": [
@@ -403,7 +404,7 @@ OpenClaw за замовчуванням установлює для клієн
- Використовуйте той самий список `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": [
@@ -426,14 +427,14 @@ OpenClaw за замовчуванням установлює для клієн
-
- Додайте область доступу бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та іконку) замість типової ідентичності застосунку Slack.
+
+ Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власне ім’я користувача та іконку) замість типової ідентичності застосунку Slack.
Якщо ви використовуєте іконку emoji, Slack очікує синтаксис `:emoji_name:`.
- Якщо ви налаштовуєте `channels.slack.userToken`, типовими областями читання є:
+ Якщо ви налаштовуєте `channels.slack.userToken`, типові області читання такі:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@@ -441,7 +442,7 @@ OpenClaw за замовчуванням установлює для клієн
- `reactions:read`
- `pins:read`
- `emoji:read`
- - `search:read` (якщо ви покладаєтеся на читання через пошук Slack)
+ - `search:read` (якщо ви покладаєтеся на читання пошуку Slack)
@@ -449,49 +450,49 @@ OpenClaw за замовчуванням установлює для клієн
## Модель токенів
- `botToken` + `appToken` потрібні для Socket Mode.
-- HTTP mode потребує `botToken` + `signingSecret`.
+- HTTP-режим потребує `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті текстові
рядки або об’єкти SecretRef.
-- Токени в конфігурації перевизначають запасні значення з env.
-- Запасне значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до облікового запису за замовчуванням.
-- `userToken` (`xoxp-...`) задається лише в конфігурації (без запасного значення env) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`).
+- Токени в конфігурації перевизначають резервні значення з env.
+- Резервні env-значення `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до стандартного облікового запису.
+- `userToken` (`xoxp-...`) налаштовується лише через конфігурацію (без резервного env-значення) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`).
Поведінка знімка стану:
- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status`
для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`).
-- Стан може бути `available`, `configured_unavailable` або `missing`.
+- Стан: `available`, `configured_unavailable` або `missing`.
- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
- або інше неінлайнове джерело секрету, але поточний шлях команди/середовища виконання
- не зміг отримати фактичне значення.
-- У HTTP mode включено `signingSecretStatus`; у Socket Mode
- потрібною парою є `botTokenStatus` + `appTokenStatus`.
+ або інше не-inline джерело секрету, але поточний шлях команди/середовища виконання
+ не зміг визначити фактичне значення.
+- У HTTP-режимі включено `signingSecretStatus`; у Socket Mode
+ обов’язкова пара — `botTokenStatus` + `appTokenStatus`.
-Для дій/читання каталогу токен користувача може мати пріоритет, якщо його налаштовано. Для запису пріоритет залишається за токеном бота; записи через токен користувача дозволені лише тоді, коли `userTokenReadOnly: false` і токен бота недоступний.
+Для дій/читання довідника 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 | увімкнено |
-Поточні дії повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ID файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файлу для інших типів файлів.
+Поточні дії повідомлень Slack містять `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ідентифікатори файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локальних файлів для інших типів файлів.
## Контроль доступу та маршрутизація
- `channels.slack.dmPolicy` керує доступом до DM. `channels.slack.allowFrom` є канонічним списком дозволених для DM.
+ `channels.slack.dmPolicy` керує доступом до DM. `channels.slack.allowFrom` — канонічний allowlist для DM.
- `pairing` (за замовчуванням)
- `allowlist`
@@ -504,7 +505,7 @@ OpenClaw за замовчуванням установлює для клієн
- `channels.slack.allowFrom`
- `dm.allowFrom` (застаріле)
- `dm.groupEnabled` (групові DM за замовчуванням false)
- - `dm.groupChannels` (необов’язковий список дозволених MPIM)
+ - `dm.groupChannels` (необов’язковий allowlist MPIM)
Пріоритет для кількох облікових записів:
@@ -518,27 +519,27 @@ OpenClaw за замовчуванням установлює для клієн
-
+
`channels.slack.groupPolicy` керує обробкою каналів:
- `open`
- `allowlist`
- `disabled`
- Список дозволених каналів міститься в `channels.slack.channels` і **має використовувати стабільні ID каналів Slack** (наприклад, `C12345678`) як ключі конфігурації.
+ Allowlist каналів міститься в `channels.slack.channels` і **має використовувати стабільні ідентифікатори каналів Slack** (наприклад, `C12345678`) як ключі конфігурації.
- Примітка щодо середовища виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), середовище виконання повертається до `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
+ Примітка щодо середовища виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), середовище виконання повертається до `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо `channels.defaults.groupPolicy` задано).
- Розпізнавання імені/ID:
+ Розпізнавання імен/ідентифікаторів:
- - записи списку дозволених каналів і записи списку дозволених DM розпізнаються під час запуску, коли доступ токена це дозволяє
+ - записи allowlist каналів і записи allowlist DM розпізнаються під час запуску, коли доступ токена це дозволяє
- нерозпізнані записи з іменами каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації
- - вхідна авторизація та маршрутизація каналів за замовчуванням спершу використовують ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
+ - вхідна авторизація та маршрутизація каналів за замовчуванням спершу використовують ID; пряме зіставлення імен користувачів/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
- Ключі на основі імен (`#channel-name` або `channel-name`) **не** збігаються при `groupPolicy: "allowlist"`. Пошук каналу за замовчуванням спершу використовує ID, тому ключ на основі імені ніколи не маршрутизуватиметься успішно, і всі повідомлення в цьому каналі буде тихо заблоковано. Це відрізняється від `groupPolicy: "open"`, де ключ каналу не потрібен для маршрутизації, а ключ на основі імені виглядає так, ніби працює.
+ Ключі на основі імен (`#channel-name` або `channel-name`) **не** збігаються під `groupPolicy: "allowlist"`. Пошук каналу за замовчуванням спершу використовує ID, тому ключ на основі імені ніколи не маршрутизуватиметься успішно, а всі повідомлення в цьому каналі буде тихо заблоковано. Це відрізняється від `groupPolicy: "open"`, де ключ каналу не потрібен для маршрутизації, і ключ на основі імені виглядає робочим.
- Завжди використовуйте ID каналу Slack як ключ. Щоб знайти його: клацніть канал у Slack правою кнопкою миші → **Copy link** — ID (`C...`) з’являється в кінці URL.
+ Завжди використовуйте ідентифікатор каналу Slack як ключ. Щоб знайти його: клацніть канал у Slack правою кнопкою миші → **Copy link** — ID (`C...`) з’явиться в кінці URL.
Правильно:
@@ -555,7 +556,7 @@ OpenClaw за замовчуванням установлює для клієн
}
```
- Неправильно (тихо блокується при `groupPolicy: "allowlist"`):
+ Неправильно (тихо блокується під `groupPolicy: "allowlist"`):
```json5
{
@@ -573,54 +574,55 @@ OpenClaw за замовчуванням установлює для клієн
-
- Повідомлення каналу за замовчуванням пропускаються через шлюз згадок.
+
+ Повідомлення каналів за замовчуванням пропускаються лише за згадкою.
Джерела згадок:
- явна згадка застосунку (`<@botId>`)
- - regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- - неявна поведінка треду reply-to-bot (вимкнено, коли `thread.requireExplicitMention` має значення `true`)
+ - згадка групи користувачів Slack (``), коли користувач бота є учасником цієї групи користувачів; потребує `usergroups:read`
+ - regex-патерни згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
+ - неявна поведінка гілки з відповіддю боту (вимкнено, коли `thread.requireExplicitMention` має значення `true`)
- Поканальні елементи керування (`channels.slack.channels.`; назви лише через розв’язання під час запуску або `dangerouslyAllowNameMatching`):
+ Поканальні елементи керування (`channels.slack.channels.`; імена лише через розв’язання під час запуску або `dangerouslyAllowNameMatching`):
- `requireMention`
- - `users` (allowlist)
+ - `users` (список дозволених)
- `allowBots`
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"`
+ - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"`
(застарілі ключі без префікса й надалі зіставляються лише з `id:`)
- `allowBots` консервативний для каналів і приватних каналів: повідомлення кімнати, створені ботом, приймаються лише тоді, коли бот-відправник явно вказаний у allowlist `users` цієї кімнати, або коли принаймні один явний ID власника Slack із `channels.slack.allowFrom` зараз є учасником кімнати. Wildcard і записи власників за відображуваним іменем не задовольняють наявність власника. Наявність власника використовує Slack `conversations.members`; переконайтеся, що застосунок має відповідний read scope для типу кімнати (`channels:read` для публічних каналів, `groups:read` для приватних каналів). Якщо пошук учасників не вдається, OpenClaw відкидає повідомлення кімнати, створене ботом.
+ `allowBots` є консервативним для каналів і приватних каналів: повідомлення кімнати, створені ботом, приймаються лише тоді, коли бот-відправник явно вказаний у списку дозволених `users` цієї кімнати, або коли принаймні один явний ідентифікатор власника Slack із `channels.slack.allowFrom` наразі є учасником кімнати. Wildcard і записи власників за відображуваним іменем не підтверджують присутність власника. Присутність власника використовує Slack `conversations.members`; переконайтеся, що застосунок має відповідну область читання для типу кімнати (`channels:read` для публічних каналів, `groups:read` для приватних каналів). Якщо пошук учасників не вдається, OpenClaw відкидає повідомлення кімнати, створене ботом.
-## Треди, сеанси й теги відповідей
+## Гілки, сесії та теги відповіді
- DM маршрутизуються як `direct`; канали як `channel`; MPIM як `group`.
-- З типовим `session.dmScope=main` DM Slack згортаються до основного сеансу агента.
-- Сеанси каналів: `agent::slack:channel:`.
-- Відповіді в тредах можуть створювати суфікси сеансів треду (`:thread:`), коли це застосовно.
-- Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`.
-- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень треду отримується під час запуску нового сеансу треду (типово `20`; установіть `0`, щоб вимкнути).
-- `channels.slack.thread.requireExplicitMention` (типово `false`): коли `true`, пригнічує неявні згадки в тредах, тож бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять перевірку `requireMention`.
+- За стандартного `session.dmScope=main` DM Slack згортаються до основної сесії агента.
+- Сесії каналів: `agent::slack:channel:`.
+- Відповіді в гілках можуть створювати суфікси сесій гілок (`:thread:`), коли це застосовно.
+- Стандартне значення `channels.slack.thread.historyScope` — `thread`; стандартне значення `thread.inheritParent` — `false`.
+- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень гілки отримується під час запуску нової сесії гілки (стандартно `20`; задайте `0`, щоб вимкнути).
+- `channels.slack.thread.requireExplicitMention` (стандартно `false`): коли `true`, пригнічує неявні згадки в гілці, щоб бот відповідав лише на явні згадки `@bot` усередині гілок, навіть якщо бот уже брав участь у гілці. Без цього відповіді в гілці, де брав участь бот, обходять пропускання `requireMention`.
-Елементи керування відповідями в тредах:
+Елементи керування гілками відповідей:
-- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`)
+- `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 залишаються видимими вбудовано.
## Реакції підтвердження
@@ -636,29 +638,29 @@ OpenClaw за замовчуванням установлює для клієн
Примітки:
-- Slack очікує shortcodes (наприклад, `"eyes"`).
+- Slack очікує короткі коди (наприклад, `"eyes"`).
- Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально.
## Потокове передавання тексту
-`channels.slack.streaming` керує поведінкою live preview:
+`channels.slack.streaming` керує поведінкою живого попереднього перегляду:
-- `off`: вимкнути потокове передавання live preview.
-- `partial` (типово): замінювати текст preview найновішим частковим виводом.
-- `block`: додавати фрагментовані оновлення preview.
-- `progress`: показувати текст стану прогресу під час генерування, а потім надсилати фінальний текст.
-- `streaming.preview.toolProgress`: коли draft preview активний, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення preview (типово: `true`). Установіть `false`, щоб зберігати окремі повідомлення інструментів/прогресу.
+- `off`: вимкнути потокове передавання живого попереднього перегляду.
+- `partial` (стандартно): замінювати текст попереднього перегляду найновішим частковим виводом.
+- `block`: додавати фрагментовані оновлення попереднього перегляду.
+- `progress`: показувати текст стану перебігу під час генерування, а потім надсилати фінальний текст.
+- `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`.
-- Корені каналів і групових чатів усе ще можуть використовувати звичайний draft preview, коли нативне потокове передавання недоступне.
-- DM Slack верхнього рівня типово залишаються поза тредом, тому вони не показують preview у стилі треду; використовуйте відповіді в тредах або `typingReaction`, якщо хочете бачити там прогрес.
-- Медіа й нетекстові payloads повертаються до звичайної доставки.
-- Медіа/помилки фінальних повідомлень скасовують очікувані редагування preview; придатні текстові/блокові фінальні повідомлення скидаються лише тоді, коли можуть редагувати preview на місці.
-- Якщо потокове передавання зазнає збою посеред відповіді, OpenClaw повертається до звичайної доставки для решти payloads.
+- Для появи нативного потокового передавання тексту та стану гілки асистента Slack має бути доступна гілка відповіді. Вибір гілки й надалі дотримується `replyToMode`.
+- Корені каналів і групових чатів усе ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне.
+- DM Slack верхнього рівня за замовчуванням залишаються поза гілкою, тому вони не показують попередній перегляд у стилі гілки; використовуйте відповіді в гілках або `typingReaction`, якщо хочете бачити перебіг там.
+- Медіа та нетекстові payload-и повертаються до звичайної доставки.
+- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні текстові/блокові фінальні повідомлення скидаються лише тоді, коли можуть редагувати попередній перегляд на місці.
+- Якщо потокове передавання зазнає збою посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload-ів.
-Використовуйте draft preview замість нативного потокового передавання тексту Slack:
+Використовуйте чернетковий попередній перегляд замість нативного потокового передавання тексту Slack:
```json5
{
@@ -675,13 +677,13 @@ OpenClaw за замовчуванням установлює для клієн
Застарілі ключі:
-- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming.mode`.
-- boolean `channels.slack.streaming` автоматично мігрує до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
-- застарілий `channels.slack.nativeStreaming` автоматично мігрує до `channels.slack.streaming.nativeTransport`.
+- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`.
+- булевий `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
+- застарілий `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`.
-## Резервна typing reaction
+## Резервна реакція набору
-`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в тредах, які використовують типовий індикатор стану "набирає текст...".
+`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це найкорисніше поза відповідями в гілках, які використовують стандартний індикатор стану "is typing...".
Порядок розв’язання:
@@ -690,26 +692,26 @@ OpenClaw за замовчуванням установлює для клієн
Примітки:
-- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`).
-- Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху помилки.
+- Slack очікує короткі коди (наприклад, `"hourglass_flowing_sand"`).
+- Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху збою.
-## Медіа, фрагментація й доставка
+## Медіа, фрагментація та доставка
- Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й дозволяють обмеження розміру. Заповнювачі файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл за допомогою `download-file`.
+ Вкладені файли Slack завантажуються з приватних URL, розміщених у Slack (потік запиту з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне та обмеження розміру це дозволяють. Заповнювачі файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл за допомогою `download-file`.
- Завантаження використовують обмежені idle і загальні тайм-аути. Якщо отримання файлу Slack зависає або зазнає збою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу.
+ Завантаження використовують обмежені таймаути простою та загального часу. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу.
- Стандартне обмеження розміру вхідних даних під час виконання становить `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
+ Обмеження розміру вхідних даних під час виконання за замовчуванням становить `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
- - текстові фрагменти використовують `channels.slack.textChunkLimit` (стандартно 4000)
- - `channels.slack.chunkMode="newline"` вмикає поділ із пріоритетом абзаців
- - надсилання файлів використовує API завантаження Slack і може включати відповіді в треді (`thread_ts`)
- - обмеження вихідних медіа відповідає `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує стандартні значення за MIME-типом із медіаконвеєра
+ - текстові фрагменти використовують `channels.slack.textChunkLimit` (за замовчуванням 4000)
+ - `channels.slack.chunkMode="newline"` вмикає розбиття з пріоритетом абзаців
+ - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
+ - обмеження вихідних медіа відповідає `channels.slack.mediaMaxMb`, коли налаштовано; інакше надсилання в канал використовує типові значення за MIME-типом із медіаконвеєра
@@ -719,14 +721,14 @@ OpenClaw за замовчуванням установлює для клієн
- `user:` для DM
- `channel:` для каналів
- Slack DM відкриваються через API розмов Slack під час надсилання до цілей користувачів.
+ DM Slack відкриваються через API розмов Slack під час надсилання до цілей користувача.
## Команди та поведінка slash
-Slash-команди з’являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити стандартні значення команд:
+Slash-команди з’являються у Slack як одна налаштована команда або кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові значення команд:
- `enabled: false`
- `name: "openclaw"`
@@ -737,7 +739,7 @@ Slash-команди з’являються в Slack або як одна на
/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.
@@ -745,22 +747,22 @@ Slash-команди з’являються в Slack або як одна на
/help
```
-Меню нативних аргументів використовують адаптивну стратегію відтворення, яка показує модальне вікно підтвердження перед відправленням вибраного значення опції:
+Меню нативних аргументів використовують адаптивну стратегію відтворення, яка показує модальне вікно підтвердження перед передаванням вибраного значення опції:
- до 5 опцій: блоки кнопок
-- 6-100 опцій: статичне меню вибору
-- понад 100 опцій: зовнішній вибір з асинхронною фільтрацією опцій, коли доступні обробники опцій інтерактивності
-- перевищено ліміти Slack: закодовані значення опцій повертаються до кнопок
+- 6–100 опцій: статичне меню вибору
+- понад 100 опцій: зовнішній вибір з асинхронною фільтрацією опцій, коли доступні обробники параметрів інтерактивності
+- перевищені ліміти Slack: закодовані значення опцій повертаються до кнопок
```txt
/think
```
-Slash-сеанси використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно маршрутизують виконання команд до сеансу цільової розмови за допомогою `CommandTargetSessionKey`.
+Slash-сеанси використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно спрямовують виконання команд до цільового сеансу розмови за допомогою `CommandTargetSessionKey`.
## Інтерактивні відповіді
-Slack може відтворювати створені агентом інтерактивні елементи керування відповідями, але ця функція стандартно вимкнена.
+Slack може відтворювати створені агентом елементи керування інтерактивною відповіддю, але ця функція за замовчуванням вимкнена.
Увімкніть її глобально:
@@ -799,39 +801,39 @@ Slack може відтворювати створені агентом інте
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
-Ці директиви компілюються в Slack Block Kit і маршрутизують натискання або вибори назад через наявний шлях подій взаємодії Slack.
+Ці директиви компілюються в Slack Block Kit і спрямовують кліки або вибори назад через наявний шлях подій взаємодії Slack.
Примітки:
-- Це інтерфейс, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
-- Значення інтерактивних callback є непрозорими токенами, згенерованими OpenClaw, а не сирими значеннями, створеними агентом.
+- Це інтерфейс, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок.
+- Значення інтерактивних callback — це згенеровані OpenClaw непрозорі токени, а не сирі значення, створені агентом.
- Якщо згенеровані інтерактивні блоки перевищили б ліміти Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload блоків.
-## Підтвердження exec у Slack
+## Підтвердження виконання у Slack
Slack може працювати як нативний клієнт підтверджень з інтерактивними кнопками та взаємодіями, замість повернення до Web UI або термінала.
-- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації в DM/канал.
-- Підтвердження Plugin все ще можуть вирішуватися через ту саму нативну поверхню кнопок Slack, коли запит уже потрапляє в Slack і тип id підтвердження є `plugin:`.
-- Авторизація підтверджувача все ще застосовується: лише користувачі, ідентифіковані як підтверджувачі, можуть схвалювати або відхиляти запити через Slack.
+- Підтвердження виконання використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналів.
+- Підтвердження Plugin усе ще можуть вирішуватися через ту саму нативну для Slack поверхню кнопок, коли запит уже надходить у Slack, а вид ідентифікатора підтвердження — `plugin:`.
+- Авторизація користувачів, які підтверджують, усе ще застосовується: лише користувачі, визначені як ті, хто може підтверджувати, можуть схвалювати або відхиляти запити через Slack.
Це використовує ту саму спільну поверхню кнопок підтвердження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити підтвердження відтворюються як кнопки Block Kit безпосередньо в розмові.
Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw
-має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, що
-підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом.
+має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, що підтвердження в чаті
+недоступні або ручне підтвердження є єдиним шляхом.
Шлях конфігурації:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers` (необов’язково; повертається до `commands.ownerAllowFrom`, коли можливо)
-- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, стандартно: `dm`)
+- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`)
- `agentFilter`, `sessionFilter`
-Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"` і
-визначається принаймні один підтверджувач. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтверджень.
-Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли підтверджувачів визначено.
+Slack автоматично вмикає нативні підтвердження виконання, коли `enabled` не задано або має значення `"auto"` і
+визначається принаймні один користувач для підтвердження. Задайте `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтверджень.
+Задайте `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли визначаються користувачі для підтвердження.
-Стандартна поведінка без явної конфігурації підтверджень exec для Slack:
+Типова поведінка без явної конфігурації підтверджень виконання Slack:
```json5
{
@@ -841,8 +843,8 @@ Slack автоматично вмикає нативні підтверджен
}
```
-Явна нативна конфігурація Slack потрібна лише тоді, коли потрібно перевизначити підтверджувачів, додати фільтри або
-увімкнути доставку до вихідного чату:
+Явна нативна конфігурація Slack потрібна лише тоді, коли потрібно перевизначити користувачів для підтвердження, додати фільтри або
+увімкнути доставку в чат походження:
```json5
{
@@ -858,39 +860,39 @@ Slack автоматично вмикає нативні підтверджен
}
```
-Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити підтвердження exec також мають
-маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
-окреме; нативні кнопки Slack усе ще можуть вирішувати підтвердження Plugin, коли ці запити вже потрапляють
+Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити підтвердження виконання також мають
+спрямовуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
+окреме; нативні кнопки Slack усе ще можуть вирішувати підтвердження Plugin, коли ці запити вже надходять
у Slack.
-`/approve` у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. [Підтвердження exec](/uk/tools/exec-approvals), щоб отримати повну модель переспрямування підтверджень.
+`/approve` у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. [Підтвердження виконання](/uk/tools/exec-approvals), щоб переглянути повну модель переспрямування підтверджень.
## Події та операційна поведінка
-- Редагування/видалення повідомлень відображаються в системні події.
-- Трансляції тредів (відповіді в треді "Also send to channel") обробляються як звичайні повідомлення користувача.
-- Події додавання/видалення реакцій відображаються в системні події.
-- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення закріплень відображаються в системні події.
-- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли `configWrites` увімкнено.
+- Редагування/видалення повідомлень зіставляються із системними подіями.
+- Трансляції тредів (відповіді в треді з параметром «Також надіслати в канал») обробляються як звичайні повідомлення користувача.
+- Події додавання/видалення реакцій зіставляються із системними подіями.
+- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення закріплення зіставляються із системними подіями.
+- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`.
- Метадані теми/призначення каналу розглядаються як ненадійний контекст і можуть бути вставлені в контекст маршрутизації.
-- Автор початку треду та початкове наповнення контексту історією треду фільтруються за налаштованими allowlist відправників, коли застосовно.
-- Дії блоків і модальні взаємодії генерують структуровані системні події `Slack interaction: ...` з багатими полями payload:
+- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються налаштованими списками дозволених відправників, коли застосовно.
+- Дії блоків і модальні взаємодії виводять структуровані системні події `Slack interaction: ...` з насиченими полями payload:
- дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*`
- - події модального `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеннями форми
+ - події модальних `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введенням форми
## Довідник конфігурації
-Основний довідник: [Довідник конфігурації - Slack](/uk/gateway/config-channels#slack).
+Основний довідник: [Довідник конфігурації — Slack](/uk/gateway/config-channels#slack).
- режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
-- перемикач сумісності: `dangerouslyAllowNameMatching` (break-glass; тримайте вимкненим, якщо не потрібно)
-- доступ до каналу: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
+- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний; тримайте вимкненим, якщо не потрібно)
+- доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
-- ops/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
+- операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
@@ -898,12 +900,12 @@ Slack автоматично вмикає нативні підтверджен
- Перевірте в такому порядку:
+ Перевірте по черзі:
- `groupPolicy`
- - allowlist каналу (`channels.slack.channels`) — **ключі мають бути ID каналів** (`C12345678`), а не назвами (`#channel-name`). Ключі на основі назв тихо не спрацьовують за `groupPolicy: "allowlist"`, бо маршрутизація каналів стандартно насамперед базується на ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → **Copy link** — значення `C...` наприкінці URL є ID каналу.
+ - список дозволених каналів (`channels.slack.channels`) — **ключі мають бути ідентифікаторами каналів** (`C12345678`), а не назвами (`#channel-name`). Ключі на основі назв непомітно не спрацьовують із `groupPolicy: "allowlist"`, оскільки маршрутизація каналів за замовчуванням насамперед використовує ідентифікатори. Щоб знайти ідентифікатор: клацніть правою кнопкою канал у Slack → **Copy link** — значення `C...` наприкінці URL є ідентифікатором каналу.
- `requireMention`
- - allowlist `users` для окремого каналу
+ - поканальний список дозволених `users`
Корисні команди:
@@ -915,14 +917,14 @@ openclaw doctor
-
+
Перевірте:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
- - підтвердження спарювання / записи allowlist
- - події DM Slack Assistant: докладні журнали зі згадкою `drop message_changed`
- зазвичай означають, що Slack надіслав подію відредагованого треду Assistant без
+ - підтвердження pairing / записи списку дозволених
+ - Події DM Slack Assistant: докладні журнали зі згадкою `drop message_changed`
+ зазвичай означають, що Slack надіслав відредаговану подію треду Assistant без
відновлюваного людського відправника в метаданих повідомлення
```bash
@@ -931,53 +933,52 @@ openclaw pairing list slack
-
+
Перевірте токени bot + app і ввімкнення Socket Mode у налаштуваннях застосунку Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
- налаштовано, але поточний runtime не зміг визначити значення,
- підкріплене SecretRef.
+ налаштований, але поточне середовище виконання не змогло визначити значення на основі SecretRef.
-
+
Перевірте:
- signing secret
- - webhook path
+ - шлях Webhook
- URL запитів Slack (Events + Interactivity + Slash Commands)
- унікальний `webhookPath` для кожного HTTP-облікового запису
- Якщо `signingSecretStatus: "configured_unavailable"` з’являється в
- знімках облікових записів, HTTP-обліковий запис налаштовано, але поточний runtime не зміг
- визначити signing secret, підкріплений SecretRef.
+ Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках облікового запису,
+ HTTP-обліковий запис налаштований, але поточне середовище виконання не змогло
+ визначити signing secret на основі SecretRef.
-
+
Перевірте, що саме ви мали на увазі:
- - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack
+ - режим нативних команд (`channels.slack.commands.native: true`) із відповідними slash-командами, зареєстрованими у Slack
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
- Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів.
+ Також перевірте `commands.useAccessGroups` і списки дозволених каналів/користувачів.
## Довідник vision для вкладень
-Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішні та ліміти розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як контекст файлів для завантаження, а не розглядаються як вхідні зображення.
+Slack може прикріплювати завантажені медіа до кроку агента, коли завантаження файлів Slack успішне й обмеження розміру дозволяють. Файли зображень можуть проходити через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як контекст файлів для завантаження, а не обробляються як вхідні зображення.
### Підтримувані типи медіа
| Тип медіа | Джерело | Поточна поведінка | Примітки |
| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
-| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються та прикріплюються до ходу для обробки з підтримкою vision | Обмеження на файл: `channels.slack.mediaMaxMb` (стандартно 20 MB) |
-| PDF-файли | URL файлу Slack | Завантажуються та надаються як файловий контекст для інструментів, таких як `download-file` або `pdf` | Вхідний шлях Slack не перетворює PDF на вхідні дані image-vision автоматично |
-| Інші файли | URL файлу Slack | Завантажуються, коли можливо, і надаються як файловий контекст | Бінарні файли не розглядаються як вхідні зображення |
-| Відповіді в треді | Файли автора треду | Файли кореневого повідомлення можуть бути гідратовані як контекст, коли відповідь не має безпосередніх медіа | Автори лише з файлами використовують placeholder вкладення |
+| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й додаються до ходу для обробки з підтримкою зору | Ліміт на файл: `channels.slack.mediaMaxMb` (типово 20 MB) |
+| Файли PDF | URL файлу Slack | Завантажуються й надаються як файловий контекст для інструментів, як-от `download-file` або `pdf` | Вхідні повідомлення Slack не перетворюють PDF автоматично на вхідні дані для зорової обробки |
+| Інші файли | URL файлу Slack | Завантажуються, коли це можливо, і надаються як файловий контекст | Бінарні файли не обробляються як вхідні зображення |
+| Відповіді в треді | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути завантажені як контекст, коли відповідь не має власних медіа | Початкові повідомлення лише з файлами використовують заповнювач вкладення |
| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення |
### Вхідний конвеєр
@@ -985,49 +986,49 @@ Slack може прикріплювати завантажені медіа до
Коли надходить повідомлення Slack із файловими вкладеннями:
1. OpenClaw завантажує файл із приватної URL-адреси Slack за допомогою токена бота (`xoxb-...`).
-2. Файл успішно записується до сховища медіа.
-3. Завантажені шляхи медіа та типи вмісту додаються до вхідного контексту.
-4. Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту.
-5. Файли, що не є зображеннями, залишаються доступними як метадані файлів або посилання на медіа для інструментів, які можуть їх обробляти.
+2. У разі успіху файл записується до сховища медіа.
+3. Шляхи завантажених медіа й типи вмісту додаються до вхідного контексту.
+4. Шляхи моделі/інструменту з підтримкою зображень можуть використовувати вкладення зображень із цього контексту.
+5. Файли, що не є зображеннями, залишаються доступними як файлові метадані або посилання на медіа для інструментів, які можуть їх обробляти.
### Успадкування вкладень кореня треду
-Коли повідомлення надходить у тред (має батьківський `thread_ts`):
+Коли повідомлення надходить у треді (має батьківський `thread_ts`):
-- Якщо сама відповідь не має безпосередніх медіа, а включене кореневе повідомлення має файли, Slack може гідратувати кореневі файли як контекст початку треду.
-- Безпосередні вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
-- Кореневе повідомлення, яке має лише файли й не має тексту, представляється заповнювачем вкладення, щоб резервний механізм усе одно міг включити його файли.
+- Якщо сама відповідь не має власних медіа, а включене кореневе повідомлення має файли, Slack може завантажити кореневі файли як контекст початкового повідомлення треду.
+- Власні вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
+- Кореневе повідомлення, яке має лише файли й не має тексту, представляється заповнювачем вкладення, щоб резервний варіант усе одно міг включити його файли.
### Обробка кількох вкладень
Коли одне повідомлення Slack містить кілька файлових вкладень:
- Кожне вкладення обробляється незалежно через медіаконвеєр.
-- Завантажені посилання на медіа агрегуються в контекст повідомлення.
+- Посилання на завантажені медіа агрегуються в контекст повідомлення.
- Порядок обробки відповідає порядку файлів Slack у корисному навантаженні події.
- Помилка завантаження одного вкладення не блокує інші.
### Обмеження розміру, завантаження та моделей
-- **Обмеження розміру**: Типово 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`.
-- **Помилки завантаження**: Файли, які Slack не може надати, протерміновані URL-адреси, недоступні файли, завеликі файли та HTML-відповіді автентифікації/входу Slack пропускаються замість того, щоб повідомлятися як непідтримувані формати.
-- **Модель бачення**: Аналіз зображень використовує активну модель відповіді, якщо вона підтримує бачення, або модель зображень, налаштовану в `agents.defaults.imageModel`.
+- **Ліміт розміру**: Типово 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`.
+- **Помилки завантаження**: Файли, які Slack не може надати, прострочені URL-адреси, недоступні файли, завеликі файли та HTML-відповіді автентифікації/входу Slack пропускаються, а не повідомляються як непідтримувані формати.
+- **Зорова модель**: Аналіз зображень використовує активну модель відповіді, коли вона підтримує зір, або модель зображень, налаштовану в `agents.defaults.imageModel`.
### Відомі обмеження
-| Сценарій | Поточна поведінка | Обхідний шлях |
-| ------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
-| Протермінована URL-адреса файлу Slack | Файл пропускається; помилка не показується | Повторно завантажте файл у Slack |
-| Модель бачення не налаштована | Вкладення зображень зберігаються як посилання на медіа, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використовуйте модель відповіді з підтримкою бачення |
-| Дуже великі зображення (> 20 MB типово) | Пропускаються відповідно до обмеження розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє |
-| Переслані/поширені вкладення | Текст і розміщені в Slack медіа зображень/файлів обробляються за принципом найкращої спроби | Поширте безпосередньо в треді OpenClaw |
-| PDF-вкладення | Зберігаються як контекст файлу/медіа, автоматично не спрямовуються через бачення зображень | Використовуйте `download-file` для метаданих файлу або інструмент `pdf` для аналізу PDF |
+| Сценарій | Поточна поведінка | Обхідний шлях |
+| -------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| Прострочена URL-адреса файлу Slack | Файл пропускається; помилка не показується | Повторно завантажте файл у Slack |
+| Зорова модель не налаштована | Вкладення зображень зберігаються як посилання на медіа, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використовуйте модель відповіді з підтримкою зору |
+| Дуже великі зображення (> 20 MB типово) | Пропускаються відповідно до ліміту розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє |
+| Переслані/спільні вкладення | Текст і розміщені в Slack медіа зображень/файлів обробляються за принципом найкращих зусиль | Поділіться ними повторно безпосередньо в треді OpenClaw |
+| Вкладення PDF | Зберігаються як файловий/медійний контекст, не спрямовуються автоматично через зорову обробку зображень | Використовуйте `download-file` для файлових метаданих або інструмент `pdf` для аналізу PDF |
### Пов’язана документація
- [Конвеєр розуміння медіа](/uk/nodes/media-understanding)
- [Інструмент PDF](/uk/tools/pdf)
-- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення бачення вкладень Slack
+- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення зорової обробки вкладень Slack
- Регресійні тести: [#51353](https://github.com/openclaw/openclaw/issues/51353)
- Жива перевірка: [#51354](https://github.com/openclaw/openclaw/issues/51354)
@@ -1035,19 +1036,19 @@ Slack може прикріплювати завантажені медіа до
- Сполучіть користувача Slack із gateway.
+ Сполучіть користувача Slack із Gateway.
Поведінка каналів і групових DM.
-
- Маршрутизуйте вхідні повідомлення до агентів.
+
+ Спрямовуйте вхідні повідомлення до агентів.
Модель загроз і посилення захисту.
- Структура конфігурації та пріоритет.
+ Структура конфігурації та пріоритетність.
Каталог команд і поведінка.
diff --git a/docs/uk/gateway/config-channels.md b/docs/uk/gateway/config-channels.md
index c88fcfd09..a123e61a6 100644
--- a/docs/uk/gateway/config-channels.md
+++ b/docs/uk/gateway/config-channels.md
@@ -1,29 +1,29 @@
---
read_when:
- Налаштування Plugin каналу (автентифікація, контроль доступу, кілька облікових записів)
- - Усунення несправностей із ключами конфігурації для окремих каналів
- - Аудит політики приватних повідомлень, групової політики або обмеження згадок
-summary: 'Конфігурація каналів: контроль доступу, сполучення, окремі ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо'
+ - Усунення несправностей із ключами конфігурації для кожного каналу
+ - Аудит політики DM, політики груп або обмеження за згадками
+summary: 'Конфігурація каналів: контроль доступу, сполучення, ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо'
title: Конфігурація — канали
x-i18n:
- generated_at: "2026-05-01T18:35:03Z"
+ generated_at: "2026-05-02T02:59:28Z"
model: gpt-5.5
provider: openai
- source_hash: bca1314b67f8d2dd4699888a728af28a75b973b001901581536df31c2d0e8ce8
+ source_hash: bc790f19aed583b4c52988c170c8883bf56282cfbf3eae26f655f7a4660bd4ed
source_path: gateway/config-channels.md
workflow: 16
---
Ключі конфігурації для окремих каналів у `channels.*`. Охоплює доступ до DM і груп,
-налаштування кількох облікових записів, обмеження за згадками та ключі для окремих каналів Slack, Discord,
-Telegram, WhatsApp, Matrix, iMessage та інших вбудованих channel plugins.
+налаштування з кількома обліковими записами, обмеження за згадкою та ключі для окремих каналів Slack, Discord,
+Telegram, WhatsApp, Matrix, iMessage та інших bundled channel plugins.
-Для агентів, інструментів, середовища виконання gateway та інших ключів верхнього рівня див.
+Для агентів, інструментів, середовища виконання Gateway та інших ключів верхнього рівня див.
[Довідник конфігурації](/uk/gateway/configuration-reference).
## Канали
-Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не встановлено `enabled: false`).
+Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не задано `enabled: false`).
### Доступ до DM і груп
@@ -32,14 +32,14 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих channe
| Політика DM | Поведінка |
| ------------------- | --------------------------------------------------------------- |
| `pairing` (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
-| `allowlist` | Лише відправники в `allowFrom` (або в сховищі дозволених після сполучення) |
+| `allowlist` | Лише відправники в `allowFrom` (або paired allow store) |
| `open` | Дозволити всі вхідні DM (потребує `allowFrom: ["*"]`) |
-| `disabled` | Ігнорувати всі вхідні DM |
+| `disabled` | Ігнорувати всі вхідні DM |
-| Групова політика | Поведінка |
+| Групова політика | Поведінка |
| --------------------- | ------------------------------------------------------ |
-| `allowlist` (типово) | Лише групи, що відповідають налаштованому списку дозволених |
-| `open` | Обходити списки дозволених груп (обмеження за згадками все одно застосовується) |
+| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist |
+| `open` | Обійти групові allowlists (обмеження за згадкою все ще застосовується) |
| `disabled` | Блокувати всі повідомлення груп/кімнат |
@@ -48,9 +48,9 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих channe
Якщо блок провайдера повністю відсутній (`channels.` відсутній), групова політика під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску.
-### Перевизначення моделі каналу
+### Перевизначення моделей каналів
-Використовуйте `channels.modelByChannel`, щоб закріпити певні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналів застосовується, коли сесія ще не має перевизначення моделі (наприклад, встановленого через `/model`).
+Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналів застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`).
```json5
{
@@ -92,14 +92,14 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих channe
```
- `channels.defaults.groupPolicy`: резервна групова політика, коли `groupPolicy` на рівні провайдера не встановлено.
-- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь контекст цитат/тредів/історії), `allowlist` (включати лише контекст від відправників зі списку дозволених), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels..contextVisibility`.
-- `channels.defaults.heartbeat.showOk`: включати справні статуси каналів у вивід heartbeat.
-- `channels.defaults.heartbeat.showAlerts`: включати погіршені/помилкові статуси у вивід heartbeat.
-- `channels.defaults.heartbeat.useIndicator`: рендерити компактний вивід heartbeat у стилі індикатора.
+- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включає весь контекст цитат/тредів/історії), `allowlist` (включає лише контекст від відправників з allowlist), `allowlist_quote` (те саме, що allowlist, але зберігає явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels..contextVisibility`.
+- `channels.defaults.heartbeat.showOk`: включати справні статуси каналів у вивід Heartbeat.
+- `channels.defaults.heartbeat.showAlerts`: включати погіршені/помилкові статуси у вивід Heartbeat.
+- `channels.defaults.heartbeat.useIndicator`: відображати компактний вивід Heartbeat у стилі індикатора.
### WhatsApp
-WhatsApp працює через web-канал Gateway (Baileys Web). Він запускається автоматично, коли існує зв’язана сесія.
+WhatsApp працює через вебканал Gateway (Baileys Web). Він запускається автоматично, коли існує прив’язаний сеанс.
```json5
{
@@ -139,7 +139,7 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-
+
```json5
{
@@ -157,9 +157,9 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-- Вихідні команди типово використовують обліковий запис `default`, якщо він існує; інакше перший налаштований ID облікового запису (відсортований).
-- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли збігається з налаштованим ID облікового запису.
-- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`.
+- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше перший налаштований ID облікового запису (у відсортованому порядку).
+- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли він збігається з налаштованим ID облікового запису.
+- Застарілий каталог авторизації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`.
- Перевизначення для окремого облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
@@ -219,13 +219,13 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символічні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для типового облікового запису.
+- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlinks відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для типового облікового запису.
- `apiRoot` — це лише корінь Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy root, а не `https://api.telegram.org/bot`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot`.
-- Необов’язковий `channels.telegram.defaultAccount` перевизначає типовий вибір облікового запису, коли збігається з налаштованим ID облікового запису.
-- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явне типове значення (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли воно відсутнє або недійсне.
+- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим ID облікового запису.
+- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явний типовий обліковий запис (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли він відсутній або недійсний.
- `configWrites: false` блокує записи конфігурації, ініційовані Telegram (міграції ID супергруп, `/config set|unset`).
-- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
-- Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в особистих і групових чатах).
+- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [Агентах ACP](/uk/tools/acp-agents#channel-specific-settings).
+- Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах).
- Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry).
### Discord
@@ -330,39 +330,40 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для стандартного акаунта.
-- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політик акаунта все одно надходять з вибраного акаунта в активному знімку runtime.
-- Необов'язковий `channels.discord.defaultAccount` перевизначає вибір стандартного акаунта, коли він збігається з налаштованим id акаунта.
-- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; голі числові ID відхиляються.
-- Slug-и guild мають нижній регістр із пробілами, заміненими на `-`; ключі каналів використовують slug-овану назву (без `#`). Надавайте перевагу ID guild.
-- Повідомлення, створені ботами, стандартно ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
-- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (окрім @everyone/@here).
-- `maxLinesPerMessage` (стандартно 17) розбиває високі повідомлення, навіть якщо вони менші за 2000 символів.
-- `channels.discord.threadBindings` керує прив'язаною до Discord thread маршрутизацією:
- - `enabled`: перевизначення Discord для функцій прив'язаних до thread сесій (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив'язана доставка/маршрутизація)
- - `idleHours`: перевизначення Discord для автоматичного unfocus через неактивність у годинах (`0` вимикає)
+- Токен: `channels.discord.token`, із `DISCORD_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням.
+- Прямі вихідні виклики, які надають явний `token` Discord, використовують цей токен для виклику; параметри повторних спроб і політик облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime.
+- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
+- Використовуйте `user:` (DM) або `channel:` (канал гільдії) для цілей доставки; прості числові ID відхиляються.
+- Слаги гільдій пишуться малими літерами із заміною пробілів на `-`; ключі каналів використовують назву зі слагом (без `#`). Надавайте перевагу ID гільдій.
+- Повідомлення, створені ботами, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
+- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (крім @everyone/@here).
+- `channels.discord.mentionAliases` зіставляє стабільний вихідний текст `@handle` з ID користувачів Discord перед надсиланням, тож відомих учасників команди можна згадувати детерміновано, навіть коли тимчасовий кеш каталогу порожній. Перевизначення для окремого облікового запису розміщені в `channels.discord.accounts..mentionAliases`.
+- `maxLinesPerMessage` (за замовчуванням 17) розбиває високі повідомлення, навіть якщо вони менші за 2000 символів.
+- `channels.discord.threadBindings` керує маршрутизацією Discord, прив’язаною до тредів:
+ - `enabled`: перевизначення Discord для функцій сесії, прив’язаних до тредів (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, а також прив’язана доставка/маршрутизація)
+ - `idleHours`: перевизначення Discord для автоматичного скасування фокуса через неактивність у годинах (`0` вимикає)
- `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає)
- - `spawnSubagentSessions`: перемикач із явним увімкненням для автоматичного створення/прив'язування thread через `sessions_spawn({ thread: true })`
-- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив'язки ACP для каналів і threads (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
+ - `spawnSubagentSessions`: перемикач явного ввімкнення для автоматичного створення/прив’язки треду через `sessions_spawn({ thread: true })`
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі прив’язки ACP для каналів і тредів (використовуйте ID каналу/треду в `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів компонентів Discord v2.
-- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов'язкові перевизначення auto-join + LLM + TTS. Текстові конфігурації Discord стандартно лишають голос вимкненим; задайте `channels.discord.voice.enabled=true`, щоб увімкнути.
-- `channels.discord.voice.model` необов'язково перевизначає модель LLM, яку використовують для відповідей у голосових каналах Discord.
-- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (стандартно `true` і `24`).
-- `channels.discord.voice.connectTimeoutMs` керує початковим очікуванням Ready `@discordjs/voice` для `/vc join` і спроб auto-join (стандартно `30000`).
-- `channels.discord.voice.reconnectGraceMs` керує тим, скільки часу від'єднана голосова сесія може мати на вхід у сигналізацію повторного підключення, перш ніж OpenClaw її знищить (стандартно `15000`).
-- OpenClaw додатково намагається відновити отримання голосу, виходячи з голосової сесії та повторно приєднуючись до неї після повторюваних помилок розшифрування.
-- `channels.discord.streaming` є канонічним ключем режиму потоку. Застарілі значення `streamMode` і булеві `streaming` автоматично мігруються.
-- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов'язкові перевизначення тексту статусу.
-- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення за ім'ям/тегом (режим сумісності break-glass).
-- `channels.discord.execApprovals`: нативна для Discord доставка схвалень exec і авторизація схвалювачів.
- - `enabled`: `true`, `false` або `"auto"` (стандартно). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо пропущено, використовує `commands.ownerAllowFrom`.
- - `agentFilter`: необов'язковий allowlist ID агентів. Пропустіть, щоб пересилати схвалення для всіх агентів.
- - `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex).
- - `target`: куди надсилати запити схвалення. `"dm"` (стандартно) надсилає в DM схвалювачів, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли target містить `"channel"`, кнопками можуть користуватися лише визначені схвалювачі.
- - `cleanupAfterResolve`: коли `true`, видаляє DM схвалень після схвалення, відмови або timeout.
+- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові перевизначення автоприєднання + LLM + TTS. Текстові конфігурації Discord за замовчуванням залишають голос вимкненим; задайте `channels.discord.voice.enabled=true`, щоб увімкнути.
+- `channels.discord.voice.model` необов’язково перевизначає модель LLM, що використовується для відповідей у голосових каналах Discord.
+- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (`true` і `24` за замовчуванням).
+- `channels.discord.voice.connectTimeoutMs` керує початковим очікуванням Ready `@discordjs/voice` для `/vc join` і спроб автоприєднання (`30000` за замовчуванням).
+- `channels.discord.voice.reconnectGraceMs` керує тим, скільки часу від’єднана голосова сесія може входити в сигналізацію повторного підключення, перш ніж OpenClaw її знищить (`15000` за замовчуванням).
+- OpenClaw додатково намагається відновити приймання голосу, виходячи з голосової сесії та повторно приєднуючись до неї після повторюваних помилок дешифрування.
+- `channels.discord.streaming` є канонічним ключем режиму потоку. Застарілі значення `streamMode` і булеві значення `streaming` автоматично мігруються.
+- `channels.discord.autoPresence` зіставляє доступність runtime зі статусом присутності бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
+- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваними іменем/тегом (режим сумісності для аварійного обходу).
+- `channels.discord.execApprovals`: доставка схвалень exec у нативному форматі Discord і авторизація схвалювачів.
+ - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо пропущено, використовується резервне значення `commands.ownerAllowFrom`.
+ - `agentFilter`: необов’язковий список дозволених ID агентів. Пропустіть, щоб пересилати схвалення для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або регулярний вираз).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (за замовчуванням) надсилає в DM схвалювачів, `"channel"` надсилає до початкового каналу, `"both"` надсилає в обидва місця. Коли target включає `"channel"`, кнопками можуть користуватися лише визначені схвалювачі.
+ - `cleanupAfterResolve`: коли `true`, видаляє DM зі схваленнями після схвалення, відмови або тайм-ауту.
-**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, стандартно), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
+**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, за замовчуванням), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
### Google Chat
@@ -393,11 +394,11 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-- JSON сервісного акаунта: inline (`serviceAccount`) або на основі файлу (`serviceAccountFile`).
-- SecretRef сервісного акаунта також підтримується (`serviceAccountRef`).
-- Резервні значення env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- JSON сервісного облікового запису: вбудований (`serviceAccount`) або на основі файлу (`serviceAccountFile`).
+- SecretRef сервісного облікового запису також підтримується (`serviceAccountRef`).
+- Резервні змінні середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
- Використовуйте `spaces/` або `users/` для цілей доставки.
-- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення email principal (режим сумісності break-glass).
+- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваним email principal (режим сумісності для аварійного обходу).
### Slack
@@ -469,44 +470,44 @@ WhatsApp працює через web-канал Gateway (Baileys Web). Він з
}
```
-- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резервного env стандартного акаунта).
-- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для окремого акаунта).
-- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте це лише під час дослідження timeout ping/pong або поведінки застарілого websocket.
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають plaintext
- рядки або об'єкти SecretRef.
-- Знімки акаунтів Slack надають поля джерела/статусу для кожних облікових даних, як-от
- `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, в HTTP mode,
- `signingSecretStatus`. `configured_unavailable` означає, що акаунт
- налаштований через SecretRef, але поточний шлях command/runtime не зміг
+- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резервного env облікового запису за замовчуванням).
+- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для окремого облікового запису).
+- `socketMode` передає налаштування транспорту Socket Mode SDK Slack до публічного API приймача Bolt. Використовуйте це лише під час розслідування тайм-аутів ping/pong або поведінки застарілого websocket.
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають прості текстові
+ рядки або об’єкти SecretRef.
+- Знімки облікових записів Slack надають поля джерела/статусу для окремих облікових даних, як-от
+ `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
+ `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
+ налаштовано через SecretRef, але поточний шлях команди/runtime не зміг
визначити значення секрету.
- `configWrites: false` блокує записи конфігурації, ініційовані Slack.
-- Необов'язковий `channels.slack.defaultAccount` перевизначає вибір стандартного акаунта, коли він збігається з налаштованим id акаунта.
-- `channels.slack.streaming.mode` є канонічним ключем режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` автоматично мігруються.
+- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
+- `channels.slack.streaming.mode` є канонічним ключем режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі значення `streamMode`, булеві значення `streaming` і значення `nativeStreaming` автоматично мігруються.
- Використовуйте `user:` (DM) або `channel:` для цілей доставки.
-**Режими сповіщень про реакції:** `off`, `own` (стандартно), `all`, `allowlist` (з `reactionAllowlist`).
+**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (з `reactionAllowlist`).
-**Ізоляція сесій thread:** `thread.historyScope` є окремим для thread (стандартно) або спільним для всього каналу. `thread.inheritParent` копіює transcript батьківського каналу до нових threads.
+**Ізоляція тредових сесій:** `thread.historyScope` є окремим для кожного треду (за замовчуванням) або спільним для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові треди.
-- Нативний streaming Slack разом зі Slack assistant-style статусом thread "is typing..." потребують цільового thread для відповіді. DM верхнього рівня стандартно лишаються поза thread, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі thread.
-- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки відповідь виконується, а потім прибирає її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: нативна для Slack доставка схвалень exec і авторизація схвалювачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
+- Нативний стримінг Slack разом зі статусом треду в стилі асистента Slack "is typing..." потребують цілі треду для відповіді. DM верхнього рівня за замовчуванням залишаються поза тредом, тому вони використовують `typingReaction` або звичайну доставку замість попереднього перегляду в стилі треду.
+- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім прибирає її після завершення. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`.
+- `channels.slack.execApprovals`: доставка схвалень exec у нативному форматі Slack і авторизація схвалювачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
-| Група дій | Стандартно | Примітки |
+| Група дій | За замовчуванням | Примітки |
| ------------ | ------- | ---------------------- |
-| reactions | увімкнено | Ставити реакції + показувати список реакцій |
+| reactions | увімкнено | Реагувати + перелічувати реакції |
| messages | увімкнено | Читати/надсилати/редагувати/видаляти |
-| pins | увімкнено | Закріпити/відкріпити/показати список |
+| pins | увімкнено | Закріпити/відкріпити/перелічити |
| memberInfo | увімкнено | Інформація про учасника |
-| emojiList | увімкнено | Список власних emoji |
+| emojiList | увімкнено | Список користувацьких емодзі |
### Mattermost
-Mattermost постачається як bundled Plugin у поточних випусках OpenClaw. Старіші або
-custom builds можуть встановити поточний npm package за допомогою
+Mattermost постачається як вбудований Plugin у поточних релізах OpenClaw. Старіші або
+кастомні збірки можуть установити поточний npm-пакет за допомогою
`openclaw plugins install @openclaw/mattermost`; якщо npm повідомляє, що
-пакет, яким володіє OpenClaw, deprecated, використовуйте bundled Plugin або локальний checkout
-доки не буде опубліковано новіший npm package.
+пакет, яким володіє OpenClaw, застарів, використовуйте вбудований Plugin або локальний checkout
+до публікації новішого npm-пакета.
```json5
{
@@ -536,18 +537,23 @@ custom builds можуть встановити поточний npm package з
}
```
-Режими чату: `oncall` (відповідати на @-mention, стандартно), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з trigger prefix).
+Режими чату: `oncall` (відповідати на @-згадку, за замовчуванням), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
Коли нативні команди Mattermost увімкнено:
-- `commands.callbackPath` має бути шляхом (наприклад, `/api/channels/mattermost/command`), а не повним URL.
+- `commands.callbackPath` має бути шляхом (наприклад, `/api/channels/mattermost/command`), а не повною URL-адресою.
- `commands.callbackUrl` має вказувати на endpoint OpenClaw gateway і бути доступним із сервера Mattermost.
-- Власні slash callback автентифікуються токенами для кожної команди, які повертає Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або жодні команди не активовано, OpenClaw відхиляє callback із повідомленням `Unauthorized: invalid command token.`
-- Для приватних/tailnet/внутрішніх callback-хостів Mattermost може вимагати, щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback-хост/домен. Використовуйте значення хоста/домену, а не повні URL.
+- Нативні slash callbacks автентифікуються токенами для кожної команди, які повертає
+ Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або
+ жодні команди не активовано, OpenClaw відхиляє callbacks з
+ `Unauthorized: invalid command token.`
+- Для приватних/tailnet/внутрішніх callback-хостів Mattermost може вимагати,
+ щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain.
+ Використовуйте значення host/domain, а не повні URL-адреси.
- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Mattermost.
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
-- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для стандартного значення).
-- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
+- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для типового значення).
+- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим account id.
### Signal
@@ -568,11 +574,11 @@ custom builds можуть встановити поточний npm package з
}
```
-**Режими сповіщень про реакції:** `off`, `own` (стандартно), `all`, `allowlist` (з `reactionAllowlist`).
+**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (з `reactionAllowlist`).
- `channels.signal.account`: прив’язати запуск каналу до конкретної ідентичності облікового запису Signal.
- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Signal.
-- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
+- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим account id.
### BlueBubbles
@@ -591,9 +597,9 @@ BlueBubbles — рекомендований шлях для iMessage (на ба
}
```
-- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
-- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
-- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сеансів ACP. Використовуйте handle BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- Основні key paths, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
+- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим account id.
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP sessions. Використовуйте BlueBubbles handle або target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles).
### iMessage
@@ -622,17 +628,17 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а
}
```
-- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
+- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим account id.
-- Потребує Full Disk Access до БД Messages.
-- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб отримати список чатів.
-- `cliPath` може вказувати на SSH-обгортку; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
-- `attachmentRoots` і `remoteAttachmentRoots` обмежують вхідні шляхи вкладень (стандартно: `/Users/*/Library/Messages/Attachments`).
-- SCP використовує сувору перевірку host-key, тому переконайтеся, що ключ relay-хоста вже існує в `~/.ssh/known_hosts`.
+- Потрібен Full Disk Access до Messages DB.
+- Надавайте перевагу target `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб перелічити чати.
+- `cliPath` може вказувати на SSH wrapper; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
+- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`).
+- SCP використовує сувору перевірку host key, тому переконайтеся, що ключ relay host уже існує в `~/.ssh/known_hosts`.
- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані iMessage.
-- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних сеансів ACP. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP sessions. Використовуйте нормалізований handle або явний chat target (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
-
+
```bash
#!/usr/bin/env bash
@@ -674,20 +680,20 @@ Matrix працює на базі Plugin і налаштовується в `cha
```
- Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`.
-- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його за допомогою `channels.matrix.accounts..proxy`.
-- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver. `proxy` і ця згода на мережу є незалежними засобами керування.
-- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у конфігураціях із кількома обліковими записами.
-- `channels.matrix.autoJoin` стандартно має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
-- `channels.matrix.execApprovals`: Matrix-native доставка схвалень exec і авторизація approver.
- - `enabled`: `true`, `false` або `"auto"` (стандартно). В автоматичному режимі схвалення exec активуються, коли approver можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено схвалювати exec-запити.
- - `agentFilter`: необов’язковий allowlist ID агентів. Опустіть, щоб пересилати схвалення для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (стандартно), `"channel"` (початкова кімната) або `"both"`.
+- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його за допомогою `channels.matrix.accounts..proxy`.
+- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeservers. `proxy` і ця згода на мережу є незалежними елементами керування.
+- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у налаштуваннях із кількома обліковими записами.
+- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
+- `channels.matrix.execApprovals`: нативна для Matrix доставка exec approvals і авторизація затверджувачів.
+ - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі exec approvals активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: Matrix user IDs (наприклад, `@owner:example.org`), яким дозволено затверджувати exec requests.
+ - `agentFilter`: необов’язковий allowlist agent ID. Опустіть, щоб пересилати approvals для всіх agents.
+ - `sessionFilter`: необов’язкові session key patterns (підрядок або regex).
+ - `target`: куди надсилати approval prompts. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`.
- Перевизначення для окремого облікового запису: `channels.matrix.accounts..execApprovals`.
-- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сеанси: `per-user` (стандартно) спільно використовує їх за маршрутизованим peer, тоді як `per-room` ізолює кожну DM-кімнату.
-- Перевірки статусу Matrix і live-пошуки в каталозі використовують ту саму політику проксі, що й runtime-трафік.
-- Повну конфігурацію Matrix, правила таргетування та приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
+- `channels.matrix.dm.sessionScope` керує тим, як Matrix DMs групуються в sessions: `per-user` (типово) спільно використовується за маршрутизованим peer, а `per-room` ізолює кожну DM room.
+- Matrix status probes і live directory lookups використовують ту саму proxy policy, що й runtime traffic.
+- Повну конфігурацію Matrix, правила targeting і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
### Microsoft Teams
@@ -706,8 +712,8 @@ Microsoft Teams працює на базі Plugin і налаштовуєтьс
}
```
-- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
-- Повну конфігурацію Teams (облікові дані, Webhook, політика DM/груп, перевизначення для окремих команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams).
+- Основні key paths, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
+- Повну конфігурацію Teams (credentials, Webhook, DM/group policy, перевизначення для окремої team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams).
### IRC
@@ -732,8 +738,8 @@ IRC працює на базі Plugin і налаштовується в `channe
}
```
-- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
-- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з id налаштованого облікового запису.
+- Основні key paths, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
+- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим account id.
- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc).
### Кілька облікових записів (усі канали)
@@ -759,34 +765,34 @@ IRC працює на базі Plugin і налаштовується в `channe
}
```
-- `default` використовується, коли `accountId` опущено (CLI + маршрутизація).
-- Env-токени застосовуються лише до **стандартного** облікового запису.
+- `default` використовується, коли `accountId` пропущено (CLI + routing).
+- Env tokens застосовуються лише до **типового** облікового запису.
- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису.
-- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента.
-- Якщо ви додаєте нестандартний обліковий запис через `openclaw channels add` (або onboarding каналу), залишаючись на конфігурації каналу верхнього рівня з одним обліковим записом, OpenClaw спочатку переносить account-scoped значення верхнього рівня для одного облікового запису в карту облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/стандартну ціль.
-- Наявні прив’язки лише каналу (без `accountId`) продовжують відповідати стандартному обліковому запису; account-scoped прив’язки залишаються необов’язковими.
-- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи account-scoped значення верхнього рівня для одного облікового запису в підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/стандартну ціль.
+- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого agent.
+- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або onboarding каналу), поки все ще використовуєте однооблікову конфігурацію каналу верхнього рівня, OpenClaw спочатку переносить account-scoped top-level single-account values до channel account map, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявний відповідний named/default target.
+- Наявні channel-only bindings (без `accountId`) і далі відповідають типовому обліковому запису; account-scoped bindings залишаються необов’язковими.
+- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи account-scoped top-level single-account values до promoted account, вибраного для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявний відповідний named/default target.
-### Інші Plugin-канали
+### Інші канали Plugin
-Багато Plugin-каналів налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
+Багато каналів Plugin налаштовуються як `channels.` і задокументовані на власних сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
Дивіться повний індекс каналів: [Канали](/uk/channels).
### Mention gating у групових чатах
-Для групових повідомлень стандартно **вимагається mention** (metadata mention або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage.
+Групові повідомлення типово **вимагають mention** (metadata mention або безпечні regex patterns). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
-Видимі відповіді керуються окремо. Для групових/канальних кімнат стандартне значення — `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw все одно обробляє turn, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Установлюйте `"automatic"` лише тоді, коли потрібна legacy-поведінка, за якої звичайні відповіді публікуються назад у кімнату. Щоб застосувати таку саму поведінку видимих відповідей лише через інструмент і до прямих чатів, установіть `messages.visibleReplies: "message_tool"`; Codex harness також використовує цю поведінку лише через інструмент як своє стандартне значення для прямих чатів, коли параметр не задано.
+Visible replies керуються окремо. Для group/channel rooms типове значення `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw усе ще обробляє turn, але звичайні final replies залишаються приватними, а видимий output у кімнаті потребує `message(action=send)`. Задайте `"automatic"` лише тоді, коли потрібна legacy behavior, за якої звичайні відповіді публікуються назад у room. Щоб застосувати таку саму поведінку tool-only visible-reply також до direct chats, задайте `messages.visibleReplies: "message_tool"`; Codex harness також використовує цю tool-only behavior як своє незадане типове значення для direct-chat.
-Якщо інструмент повідомлень недоступний за активної політики інструментів, OpenClaw повертається до автоматичних видимих відповідей замість того, щоб мовчки пригнічувати відповідь. `openclaw doctor` попереджає про цю невідповідність.
+Якщо message tool недоступний за активної tool policy, OpenClaw повертається до automatic visible replies замість того, щоб мовчки пригнічувати відповідь. `openclaw doctor` попереджає про цю невідповідність.
-Gateway гаряче перезавантажує конфігурацію `messages` після збереження файлу. Перезапуск потрібен лише тоді, коли file watching або перезавантаження конфігурації вимкнено в розгортанні.
+Gateway hot-reloads конфігурацію `messages` після збереження файлу. Перезапускайте лише тоді, коли file watching або config reload вимкнено в розгортанні.
-**Типи mention:**
+**Типи mentions:**
-- **Metadata mentions**: власні @-mentions платформи. Ігноруються в режимі WhatsApp self-chat.
-- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони та небезпечні вкладені повторення ігноруються.
-- Mention gating застосовується лише тоді, коли виявлення можливе (власні mentions або принаймні один шаблон).
+- **Metadata mentions**: нативні platform @-mentions. Ігноруються в режимі WhatsApp self-chat.
+- **Text patterns**: безпечні regex patterns у `agents.list[].groupChat.mentionPatterns`. Некоректні patterns і небезпечне nested repetition ігноруються.
+- Mention gating застосовується лише тоді, коли виявлення можливе (native mentions або принаймні один pattern).
```json5
{
@@ -803,11 +809,11 @@ Gateway гаряче перезавантажує конфігурацію `mess
}
```
-`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його за допомогою `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути.
+`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути.
-`messages.visibleReplies` є глобальним значенням за замовчуванням для source-turn; `messages.groupChat.visibleReplies` перевизначає його для source-turn у групах/каналах. Коли `messages.visibleReplies` не задано, harness може надати власне значення за замовчуванням для direct/source; Codex harness за замовчуванням використовує `message_tool`. Списки дозволених каналів і mention gating все ще визначають, чи буде turn оброблено.
+`messages.visibleReplies` — це глобальне значення за замовчуванням для вихідних ходів; `messages.groupChat.visibleReplies` перевизначає його для вихідних ходів групи/каналу. Коли `messages.visibleReplies` не задано, harness може надати власне значення за замовчуванням для прямих/вихідних чатів; harness Codex за замовчуванням використовує `message_tool`. Списки дозволених каналів і перевірка згадок усе одно визначають, чи буде хід оброблено.
-#### Обмеження історії DM
+#### Обмеження історії приватних повідомлень
```json5
{
@@ -822,13 +828,13 @@ Gateway гаряче перезавантажує конфігурацію `mess
}
```
-Визначення: перевизначення для окремого DM → значення провайдера за замовчуванням → без обмеження (зберігається все).
+Порядок визначення: перевизначення для окремого приватного чату → значення провайдера за замовчуванням → без обмеження (зберігається все).
Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Режим чату із собою
-Додайте власний номер до `allowFrom`, щоб увімкнути режим чату із собою (ігнорує нативні @-mentions, відповідає лише на текстові шаблони):
+Додайте власний номер до `allowFrom`, щоб увімкнути режим чату із собою (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
```json5
{
@@ -876,32 +882,32 @@ Gateway гаряче перезавантажує конфігурацію `mess
}
```
-
+
- Цей блок налаштовує поверхні команд. Поточний вбудований і bundled каталог команд див. у [Slash Commands](/uk/tools/slash-commands).
-- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналам/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовано на сторінках їхніх каналів/Plugin, а також у [Slash Commands](/uk/tools/slash-commands).
+- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналам/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовано на сторінках відповідних каналів/Plugin, а також у [Slash Commands](/uk/tools/slash-commands).
- Текстові команди мають бути **окремими** повідомленнями з початковим `/`.
- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим.
- `nativeSkills: "auto"` вмикає нативні команди Skills для Discord/Telegram, залишає Slack вимкненим.
- Перевизначення для окремого каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди.
-- Перевизначте нативну реєстрацію Skills для окремого каналу за допомогою `channels..commands.nativeSkills`.
+- Перевизначайте реєстрацію нативних Skills для окремого каналу через `channels..commands.nativeSkills`.
- `channels.telegram.customCommands` додає додаткові пункти меню Telegram-бота.
-- `bash: true` вмикає `! ` для shell хоста. Потребує `tools.elevated.enabled` і відправника в `tools.elevated.allowFrom.`.
-- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів Gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; доступна лише для читання команда `/config show` залишається доступною для звичайних клієнтів операторів із write scope.
-- `mcp: true` вмикає `/mcp` для конфігурації керованого OpenClaw MCP-сервера в `mcp.servers`.
-- `plugins: true` вмикає `/plugins` для виявлення Plugin, установлення та керування ввімкненням/вимкненням.
+- `bash: true` вмикає `! ` для оболонки хоста. Потребує `tools.elevated.enabled` і відправника в `tools.elevated.allowFrom.`.
+- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; `/config show` лише для читання залишається доступним для звичайних клієнтів-операторів із правами запису.
+- `mcp: true` вмикає `/mcp` для конфігурації MCP-сервера, керованого OpenClaw, у `mcp.servers`.
+- `plugins: true` вмикає `/plugins` для виявлення Plugin, встановлення та елементів керування ввімкненням/вимкненням.
- `channels..configWrites` обмежує зміни конфігурації для окремого каналу (за замовчуванням: true).
-- Для каналів із кількома обліковими записами `channels..accounts..configWrites` також обмежує записи, спрямовані на цей обліковий запис (наприклад, `/allowlist --config --account ` або `/config set channels..accounts....`).
-- `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. За замовчуванням: `true`.
+- Для багатооблікових каналів `channels..accounts..configWrites` також обмежує записи, націлені на цей обліковий запис (наприклад, `/allowlist --config --account ` або `/config set channels..accounts....`).
+- `restart: false` вимикає `/restart` і дії інструмента перезапуску gateway. За замовчуванням: `true`.
- `ownerAllowFrom` — це явний список дозволених власників для команд/інструментів лише для власника. Він окремий від `allowFrom`.
-- `ownerDisplay: "hash"` хешує id власників у системному prompt. Установіть `ownerDisplaySecret`, щоб керувати хешуванням.
-- `allowFrom` задається для кожного провайдера. Коли його встановлено, це **єдине** джерело авторизації (списки дозволених каналів/pairing і `useAccessGroups` ігноруються).
-- `useAccessGroups: false` дозволяє командам обходити політики access-group, коли `allowFrom` не встановлено.
+- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному промпті. Установіть `ownerDisplaySecret`, щоб керувати хешуванням.
+- `allowFrom` задається для кожного провайдера. Якщо його встановлено, це **єдине** джерело авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються).
+- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено.
- Мапа документації команд:
- вбудований і bundled каталог: [Slash Commands](/uk/tools/slash-commands)
- - поверхні команд, специфічні для каналів: [Канали](/uk/channels)
+ - поверхні команд для окремих каналів: [Канали](/uk/channels)
- команди QQ Bot: [QQ Bot](/uk/channels/qqbot)
- - команди pairing: [Pairing](/uk/channels/pairing)
+ - команди сполучення: [Сполучення](/uk/channels/pairing)
- команда картки LINE: [LINE](/uk/channels/line)
- memory dreaming: [Dreaming](/uk/concepts/dreaming)