diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md
index e5d81948e..a5dce8117 100644
--- a/docs/uk/channels/discord.md
+++ b/docs/uk/channels/discord.md
@@ -4,103 +4,103 @@ read_when:
summary: Стан підтримки бота Discord, можливості та конфігурація
title: Discord
x-i18n:
- generated_at: "2026-05-03T19:16:24Z"
+ generated_at: "2026-05-03T21:05:24Z"
model: gpt-5.5
provider: openai
- source_hash: 84582bdf79202e996bc1e5526acefa4954c5fedc62a904c733615a325870a3fd
+ source_hash: 3a38cb3c8e25c1f3d6b7ddfc35a0445dc264be74d74b08d0051528b462b743a3
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** і ввімкніть:
+
+ Залишаючись на сторінці **Bot**, прокрутіть до **Privileged Gateway Intents** і ввімкніть:
- **Message Content Intent** (обов’язково)
- - **Server Members Intent** (рекомендовано; потрібно для списків дозволених ролей і зіставлення імен з ID)
+ - **Server Members Intent** (рекомендовано; обов’язково для списків дозволених ролей і зіставлення імен з ID)
- **Presence Intent** (необов’язково; потрібно лише для оновлень присутності)
- Прокрутіть сторінку **Bot** назад угору й натисніть **Reset Token**.
+ Прокрутіть угору на сторінці **Bot** і натисніть **Reset Token**.
Попри назву, це створює ваш перший токен — нічого не "скидається".
- Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він скоро знадобиться.
+ Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він невдовзі знадобиться.
- Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на сервер.
+ Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL запрошення з потрібними дозволами, щоб додати бота на свій сервер.
- Прокрутіть униз до **OAuth2 URL Generator** і ввімкніть:
+ Прокрутіть до **OAuth2 URL Generator** і ввімкніть:
- `bot`
- `applications.commands`
Нижче з’явиться розділ **Bot Permissions**. Увімкніть щонайменше:
- **General Permissions**
- - View Channels
- **Text Permissions**
- - Send Messages
- - Read Message History
- - Embed Links
- - Attach Files
- - Add Reactions (необов’язково)
+ **Загальні дозволи**
+ - Переглядати канали
+ **Текстові дозволи**
+ - Надсилати повідомлення
+ - Читати історію повідомлень
+ - Вбудовувати посилання
+ - Прикріплювати файли
+ - Додавати реакції (необов’язково)
Це базовий набір для звичайних текстових каналів. Якщо ви плануєте публікувати в гілках Discord, зокрема у сценаріях форумних або медіаканалів, які створюють чи продовжують гілку, також увімкніть **Send Messages in Threads**.
- Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб під’єднати. Тепер ви маєте бачити свого бота на сервері Discord.
+ Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте бачити свого бота на сервері Discord.
-
- Повернувшись у застосунок Discord, потрібно ввімкнути Developer Mode, щоб копіювати внутрішні ID.
+
+ Повернувшись у застосунок Discord, потрібно ввімкнути режим розробника, щоб копіювати внутрішні ID.
- 1. Натисніть **User Settings** (значок шестерні біля вашого аватара) → **Advanced** → увімкніть **Developer Mode**
+ 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, перш ніж писати своєму агенту.
```bash
@@ -120,17 +120,17 @@ openclaw config patch --file ./discord.patch.json5
openclaw gateway
```
- Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw Mac або зупинивши й знову запустивши процес `openclaw gateway run`.
- Для встановлень керованого сервісу запустіть `openclaw gateway install` з оболонки, де доступний `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску.
- Якщо ваш хост заблокований або обмежений Discord під час стартового пошуку застосунку, задайте ID застосунку/клієнта Discord з Developer Portal, щоб запуск міг пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord.
+ Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw для Mac або зупинивши й знову запустивши процес `openclaw gateway run`.
+ Для встановлень керованого сервісу запустіть `openclaw gateway install` з оболонки, де наявний `DISCORD_BOT_TOKEN`, або збережіть змінну в `~/.openclaw/.env`, щоб сервіс міг розв’язати env SecretRef після перезапуску.
+ Якщо ваш хост заблокований або обмежений за частотою через стартовий пошук застосунку Discord, задайте ID застосунку/клієнта Discord з Developer Portal, щоб під час запуску пропустити цей REST-виклик. Використовуйте `channels.discord.applicationId` для облікового запису за замовчуванням або `channels.discord.accounts..applicationId`, коли запускаєте кілька ботів Discord.
-
+
- Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / конфігурації.
+ Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і скажіть йому це. Якщо Discord — ваш перший канал, натомість використовуйте вкладку CLI / конфігурація.
> "I already set my Discord bot token in config. Please finish Discord setup with User ID `` and Server ID ``."
@@ -152,7 +152,7 @@ openclaw gateway
}
```
- Резервне значення env для облікового запису за замовчуванням:
+ Резервний env для облікового запису за замовчуванням:
```bash
DISCORD_BOT_TOKEN=...
@@ -160,7 +160,7 @@ 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).
- Для кількох ботів Discord тримайте токен і ID застосунку кожного бота в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли кожен обліковий запис має використовувати той самий ID застосунку.
+ Для кількох ботів Discord зберігайте токен і ID застосунку кожного бота в його обліковому записі. Верхньорівневий `channels.discord.applicationId` успадковується обліковими записами, тому задавайте його там лише тоді, коли кожен обліковий запис має використовувати той самий ID застосунку.
```json5
{
@@ -187,12 +187,12 @@ DISCORD_BOT_TOKEN=...
-
- Зачекайте, доки gateway запуститься, а потім напишіть своєму боту в Discord приватне повідомлення. Він відповість кодом сполучення.
+
+ Дочекайтеся, доки Gateway запрацює, а потім надішліть особисте повідомлення своєму боту в Discord. Він відповість кодом зв’язування.
- Надішліть код сполучення своєму агенту в наявному каналі:
+ Надішліть код зв’язування своєму агенту в наявному каналі:
> "Approve this Discord pairing code: ``"
@@ -206,26 +206,26 @@ openclaw pairing approve discord
- Коди сполучення спливають через 1 годину.
+ Коди зв’язування спливають через 1 годину.
- Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення.
+ Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через особисті повідомлення.
-Розв’язання токенів враховує обліковий запис. Значення токена з конфігурації мають пріоритет над резервним значенням env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням.
-Якщо два ввімкнені облікові записи Discord розв’язуються в той самий токен бота, OpenClaw запускає лише один монітор gateway для цього токена. Токен із конфігурації має пріоритет над резервним значенням env за замовчуванням; інакше перший увімкнений обліковий запис отримує пріоритет, а дубльований обліковий запис позначається як вимкнений.
-Для розширених вихідних викликів (дії інструмента повідомлень/каналу) для цього виклику використовується явний `token` на рівні окремого виклику. Це застосовується до дій надсилання та читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Політика облікового запису й налаштування повторних спроб усе одно беруться з вибраного облікового запису в активному runtime-знімку.
+Розв’язання токенів враховує облікові записи. Значення токена в конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням.
+Якщо два ввімкнені облікові записи Discord розв’язуються до того самого токена бота, OpenClaw запускає лише один монітор Gateway для цього токена. Токен із конфігурації має пріоритет над резервним env за замовчуванням; інакше перемагає перший увімкнений обліковий запис, а дубльований обліковий запис позначається як вимкнений.
+Для розширених вихідних викликів (інструмент повідомлень/дії каналу) явний `token` для кожного виклику використовується саме для цього виклику. Це стосується дій надсилання та читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису й налаштування повторів усе одно беруться з вибраного облікового запису в активному знімку середовища виконання.
-## Рекомендовано: налаштуйте робочий простір гільдії
+## Рекомендовано: налаштуйте серверний робочий простір
-Коли приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента зі своїм контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
+Коли особисті повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власний сеанс агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.
-
- Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в приватних повідомленнях.
+
+ Це дає змогу вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в особистих повідомленнях.
@@ -254,17 +254,17 @@ openclaw pairing approve discord
-
- За замовчуванням ваш агент відповідає в каналах гільдії лише коли його згадують через @mention. Для приватного сервера вам, імовірно, потрібно, щоб він відповідав на кожне повідомлення.
+
+ За замовчуванням ваш агент відповідає в серверних каналах лише коли його @згадують. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення.
- У каналах гільдії звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід Discord потрібно явно надсилати інструментом `message`, тож агент може за замовчуванням спостерігати й публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
+ У серверних каналах звичайні фінальні відповіді асистента за замовчуванням залишаються приватними. Видимий вивід у Discord потрібно надсилати явно за допомогою інструмента `message`, тож агент може за замовчуванням залишатися непомітним і публікувати лише тоді, коли вирішить, що відповідь у каналі корисна.
> "Allow my agent to respond on this server without having to be @mentioned"
- Задайте `requireMention: false` у конфігурації гільдії:
+ Задайте `requireMention: false` у конфігурації свого сервера:
```json5
{
@@ -280,61 +280,61 @@ 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."
- Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони ін’єктуються в кожну сесію). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті.
+ Якщо вам потрібен спільний контекст у кожному каналі, помістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони вставляються в кожен сеанс). Зберігайте довгострокові нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті.
-Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкування. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що пасує вашому робочому процесу.
+Тепер створіть кілька каналів на своєму сервері Discord і почніть спілкування. Ваш агент бачить назву каналу, і кожен канал отримує власний ізольований сеанс — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому робочому процесу.
-## Модель runtime
+## Модель виконання
-- Gateway керує з’єднанням Discord.
-- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються до Discord.
-- Метадані гільдії/каналу Discord додаються до підказки моделі як ненадійний
- контекст, а не як видимий користувачу префікс відповіді. Якщо модель копіює цей конверт
+- Gateway керує підключенням Discord.
+- Маршрутизація відповідей детермінована: вхідні відповіді Discord повертаються в Discord.
+- Метадані гільдії/каналу Discord додаються до промпта моделі як недовірений
+ контекст, а не як видимий користувачу префікс відповіді. Якщо модель скопіює цю обгортку
назад, OpenClaw вилучає скопійовані метадані з вихідних відповідей і з
майбутнього контексту повторного відтворення.
-- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують головну сесію агента (`agent:main:main`).
-- Канали гільдії мають ізольовані ключі сесій (`agent::discord:channel:`).
+- За замовчуванням (`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.
+- Нативні slash-команди виконуються в ізольованих командних сесіях (`agent::discord:slash:`), але все ще передають `CommandTargetSessionKey` до маршрутизованої сесії розмови.
+- Доставка текстових оголошень cron/heartbeat у Discord використовує остаточну
+ видиму асистенту відповідь один раз. Медіа та структуровані payload-и компонентів залишаються
+ кількома повідомленнями, коли агент видає кілька payload-ів, придатних для доставки.
## Канали форумів
-Форумні та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення:
+Форуми та медіаканали Discord приймають лише дописи в тредах. OpenClaw підтримує два способи їх створення:
- Надішліть повідомлення до батьківського форуму (`channel:`), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення.
-- Використайте `openclaw message thread create`, щоб створити тред напряму. Не передавайте `--message-id` для форумних каналів.
+- Використайте `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: \
@@ -345,7 +345,7 @@ openclaw message thread create --channel discord --target channel: \
## Інтерактивні компоненти
-OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
+OpenClaw підтримує контейнери компонентів Discord v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload-ом `components`. Результати взаємодії маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`.
Підтримувані блоки:
@@ -353,23 +353,23 @@ OpenClaw підтримує контейнери компонентів Discord
- Рядки дій дозволяють до 5 кнопок або одне меню вибору
- Типи вибору: `string`, `user`, `role`, `mentionable`, `channel`
-За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, списки вибору та форми кілька разів до завершення строку їх дії.
+За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити багаторазове використання кнопок, виборів і форм, доки вони не завершать строк дії.
-Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Коли це налаштовано, користувачі без збігу отримують ефемерну відмову.
+Щоб обмежити, хто може натиснути кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Якщо налаштовано, невідповідні користувачі отримують ephemeral-відмову.
-Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадними списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору ефемерна, і використовувати її може лише користувач, який викликав команду.
+Slash-команди `/model` і `/models` відкривають інтерактивний вибір моделі з випадаючими списками провайдера, моделі та сумісного runtime, а також кроком Submit. `/models add` застаріла й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. Відповідь вибору є ephemeral, і користуватися нею може лише користувач, який її викликав.
Вкладення файлів:
-- Блоки `file` мають указувати на посилання вкладення (`attachment://`)
+- Блоки `file` мають вказувати на посилання вкладення (`attachment://`)
- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів
-- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має збігатися з посиланням вкладення
+- Використовуйте `filename`, щоб перевизначити назву завантаження, коли вона має відповідати посиланню вкладення
Модальні форми:
-- Додайте `components.modal` з до 5 полями
+- Додайте `components.modal` із максимум 5 полями
- Типи полів: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select`
-- OpenClaw автоматично додає кнопку-тригер
+- OpenClaw автоматично додає кнопку запуску
Приклад:
@@ -428,38 +428,38 @@ Slash-команди `/model` і `/models` відкривають інтерак
## Контроль доступу та маршрутизація
-
- `channels.discord.dmPolicy` керує доступом DM. `channels.discord.allowFrom` є канонічним allowlist DM.
+
+ `channels.discord.dmPolicy` керує доступом DM. `channels.discord.allowFrom` є канонічним allowlist для DM.
- `pairing` (за замовчуванням)
- `allowlist`
- `open` (потребує, щоб `channels.discord.allowFrom` містив `"*"`)
- `disabled`
- Якщо політика DM не відкрита, невідомі користувачі блокуються (або їм пропонується pairing у режимі `pairing`).
+ Якщо політика DM не відкрита, невідомих користувачів блокують (або пропонують pairing у режимі `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>`
- Голі числові ID зазвичай розпізнаються як ID каналів, коли активне значення каналу за замовчуванням, але 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
{
@@ -484,7 +484,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
Текстовий канал 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 Developer Portal, коли використовуєте групи доступу на основі аудиторії каналу. 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 приймається)
- - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони збігаються з `users` АБО `roles`
- - прямий збіг за іменем/тегом за замовчуванням вимкнений; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
+ - гільдія має відповідати `channels.discord.guilds` (переважно `id`, slug приймається)
+ - необов’язкові allowlist-и відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволені, коли вони відповідають `users` АБО `roles`
+ - пряме зіставлення імен/тегів за замовчуванням вимкнене; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності
- імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи імен/тегів
- - якщо гільдія має налаштовані `channels`, канали поза списком забороняються
- - якщо гільдія не має блоку `channels`, дозволяються всі канали в цій гільдії з allowlist
+ - якщо гільдія має налаштовані `channels`, канали поза списком заборонені
+ - якщо гільдія не має блоку `channels`, дозволені всі канали в цій гільдії з allowlist
Приклад:
@@ -573,11 +573,11 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Якщо ви лише встановили `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, runtime fallback — `groupPolicy="allowlist"` (з попередженням у логах), навіть якщо `channels.defaults.groupPolicy` має значення `open`.
+ Якщо ви встановили лише `DISCORD_BOT_TOKEN` і не створили блок `channels.discord`, runtime fallback дорівнює `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`.
-
+
Повідомлення гільдії за замовчуванням обмежені згадками.
Виявлення згадок включає:
@@ -586,22 +586,22 @@ Slash-команди `/model` і `/models` відкривають інтерак
- налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- неявну поведінку відповіді боту в підтримуваних випадках
- Під час написання вихідних повідомлень Discord використовуйте канонічний синтаксис згадок: `<@USER_ID>` для користувачів, `<#CHANNEL_ID>` для каналів і `<@&ROLE_ID>` для ролей. Не використовуйте застарілу форму згадки нікнейму `<@!USER_ID>`.
+ Під час написання вихідних повідомлень Discord використовуйте канонічний синтаксис згадок: `<@USER_ID>` для користувачів, `<#CHANNEL_ID>` для каналів і `<@&ROLE_ID>` для ролей. Не використовуйте застарілу форму згадки псевдоніма `<@!USER_ID>`.
`requireMention` налаштовується для кожної гільдії/каналу (`channels.discord.guilds...`).
- `ignoreOtherMentions` необов’язково відкидає повідомлення, які згадують іншого користувача/роль, але не бота (крім @everyone/@here).
+ `ignoreOtherMentions` необов’язково відкидає повідомлення, що згадують іншого користувача/роль, але не бота (крім @everyone/@here).
Групові DM:
- за замовчуванням: ігноруються (`dm.groupEnabled=false`)
- - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug)
+ - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug-и)
### Маршрутизація агентів на основі ролей
-Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдій Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після peer- або parent-peer-прив’язок і перед прив’язками лише за гільдією. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
+Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників гільдії Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і оцінюються після прив’язок peer або parent-peer та перед прив’язками лише для гільдії. Якщо прив’язка також задає інші поля збігу (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися.
```json5
{
@@ -627,49 +627,49 @@ Slash-команди `/model` і `/models` відкривають інтерак
## Нативні команди та авторизація команд
-- `commands.native` за замовчуванням має значення `"auto"` й увімкнений для Discord.
+- `commands.native` за замовчуванням має значення `"auto"` і ввімкнено для Discord.
- Перевизначення для окремого каналу: `channels.discord.commands.native`.
-- `commands.native=false` пропускає реєстрацію й очищення slash-команд Discord під час запуску. Раніше зареєстровані команди можуть залишатися видимими в Discord, доки ви не видалите їх із застосунку Discord.
-- Автентифікація нативних команд використовує ті самі allowlist-и/політики Discord, що й звичайна обробка повідомлень.
-- Команди можуть залишатися видимими в інтерфейсі Discord для користувачів, які не авторизовані; виконання все одно застосовує автентифікацію OpenClaw і повертає "not authorized".
+- `commands.native=false` пропускає реєстрацію slash-команд Discord і очищення під час запуску. Раніше зареєстровані команди можуть залишатися видимими в Discord, доки ви не видалите їх із застосунку Discord.
+- Авторизація нативних команд використовує ті самі allowlist-и/політики Discord, що й звичайна обробка повідомлень.
+- Команди все ще можуть бути видимими в інтерфейсі Discord для неавторизованих користувачів; виконання все одно застосовує авторизацію OpenClaw і повертає «не авторизовано».
Див. [Slash-команди](/uk/tools/slash-commands), щоб переглянути каталог команд і поведінку.
-Стандартні налаштування slash-команд:
+Налаштування slash-команд за замовчуванням:
- `ephemeral: true`
-## Відомості про функції
+## Деталі функцій
-
- Discord підтримує теги відповіді у виводі агента:
+
+ Discord підтримує теги відповідей у виводі агента:
- `[[reply_to_current]]`
- `[[reply_to:]]`
Керується `channels.discord.replyToMode`:
- - `off` (типово)
+ - `off` (за замовчуванням)
- `first`
- `all`
- `batched`
- Примітка: `off` вимикає неявне групування відповідей у гілки. Явні теги `[[reply_to_*]]` усе одно враховуються.
- `first` завжди додає неявне нативне посилання відповіді до першого вихідного повідомлення Discord для цього ходу.
- `batched` додає неявне нативне посилання відповіді Discord лише тоді, коли
+ Примітка: `off` вимикає неявне створення гілок відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються.
+ `first` завжди прикріплює неявне посилання нативної відповіді до першого вихідного повідомлення Discord для цього ходу.
+ `batched` прикріплює неявне посилання нативної відповіді Discord лише тоді, коли
вхідний хід був debounced-пакетом із кількох повідомлень. Це корисно,
коли нативні відповіді потрібні переважно для неоднозначних швидких чатів, а не для кожного
ходу з одним повідомленням.
- Ідентифікатори повідомлень виводяться в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
+ ID повідомлень передаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення.
-
- OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (типово) | `partial` | `block` | `progress`. `progress` зіставляється з `partial` у Discord; `streamMode` є застарілим псевдонімом і автоматично мігрується.
+
+ OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. `channels.discord.streaming` приймає `off` (за замовчуванням) | `partial` | `block` | `progress`. `progress` тримає одну редаговану чернетку статусу й оновлює її прогресом інструментів до фінальної доставки; `streamMode` є застарілим псевдонімом і мігрується автоматично.
- Типовим залишається `off`, оскільки редагування попереднього перегляду в Discord швидко впираються в обмеження частоти, коли кілька ботів або Gateway спільно використовують один обліковий запис.
+ За замовчуванням залишається `off`, бо редагування попереднього перегляду Discord швидко впираються в ліміти частоти, коли кілька ботів або Gateway використовують один обліковий запис.
```json5
{
@@ -687,19 +687,19 @@ Slash-команди `/model` і `/models` відкривають інтерак
```
- `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів.
- - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, з обмеженням до `textChunkLimit`).
- - Медіа, помилки та фінальні відповіді з явним reply скасовують очікувані редагування попереднього перегляду.
- - `streaming.preview.toolProgress` (типово `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
+ - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk`, щоб налаштувати розмір і точки розриву, обмежені `textChunkLimit`).
+ - Медіа, помилки та фінальні відповіді з явним reply скасовують відкладені редагування попереднього перегляду.
+ - `streaming.preview.toolProgress` (за замовчуванням `true`) керує тим, чи оновлення інструментів/прогресу повторно використовують повідомлення попереднього перегляду.
- Трансляція попереднього перегляду підтримує лише текст; медіавідповіді повертаються до звичайної доставки. Коли трансляцію `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної трансляції.
+ Потоковий попередній перегляд підтримує лише текст; відповіді з медіа повертаються до звичайної доставки. Коли потоковий режим `block` явно ввімкнено, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійної трансляції.
-
+
Контекст історії guild:
- - `channels.discord.historyLimit` типово `20`
- - резервне значення: `messages.groupChat.historyLimit`
+ - `channels.discord.historyLimit` за замовчуванням `20`
+ - fallback: `messages.groupChat.historyLimit`
- `0` вимикає
Керування історією DM:
@@ -709,26 +709,26 @@ Slash-команди `/model` і `/models` відкривають інтерак
Поведінка гілок:
- - Гілки Discord маршрутизуються як сеанси каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
- - Сеанси гілок успадковують вибір `/model` рівня сеансу батьківського каналу як резервний варіант лише для моделі; локальні для гілки вибори `/model` усе одно мають пріоритет, а історія транскрипту батьківського каналу не копіюється, якщо успадкування транскрипту не ввімкнено.
- - `channels.discord.thread.inheritParent` (типово `false`) дозволяє новим авто-гілкам починати з транскрипту батьківського каналу. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..thread.inheritParent`.
- - Реакції інструмента повідомлень можуть розпізнавати DM-цілі `user:`.
- - `guilds..channels..requireMention: false` зберігається під час резервної активації на етапі відповіді.
+ - Гілки Discord маршрутизуються як сесії каналів і успадковують конфігурацію батьківського каналу, якщо її не перевизначено.
+ - Сесії гілок успадковують вибір `/model` рівня сесії батьківського каналу як fallback лише для моделі; локальні для гілки вибори `/model` усе одно мають пріоритет, а історія transcript батьків не копіюється, якщо не ввімкнено успадкування transcript.
+ - `channels.discord.thread.inheritParent` (за замовчуванням `false`) вмикає для нових auto-threads початкове наповнення з батьківського transcript. Перевизначення для окремих облікових записів містяться в `channels.discord.accounts..thread.inheritParent`.
+ - Реакції message-tool можуть визначати DM-цілі `user:`.
+ - `guilds..channels..requireMention: false` зберігається під час fallback активації на етапі відповіді.
- Теми каналів додаються як **ненадійний** контекст. Allowlists обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту.
+ Теми каналів вставляються як **недовірений** контекст. Allowlists обмежують, хто може запускати агента, але не є повною межею редагування додаткового контексту.
-
- Discord може прив'язати гілку до цілі сеансу, щоб подальші повідомлення в цій гілці й надалі маршрутизувалися до того самого сеансу (включно із сеансами субагентів).
+
+ Discord може прив’язати гілку до цілі сесії, щоб подальші повідомлення в цій гілці продовжували маршрутизуватися до тієї самої сесії (зокрема сесій субагентів).
Команди:
- - `/focus ` прив'язати поточну/нову гілку до цілі субагента/сеансу
- - `/unfocus` видалити прив'язку поточної гілки
- - `/agents` показати активні запуски та стан прив'язки
- - `/session idle ` переглянути/оновити авто-unfocus через неактивність для сфокусованих прив'язок
- - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив'язок
+ - `/focus ` прив’язати поточну/нову гілку до цілі субагента/сесії
+ - `/unfocus` видалити прив’язку поточної гілки
+ - `/agents` показати активні запуски та стан прив’язки
+ - `/session idle ` переглянути/оновити автоматичне зняття фокуса через неактивність для сфокусованих прив’язок
+ - `/session max-age ` переглянути/оновити жорсткий максимальний вік для сфокусованих прив’язок
Конфігурація:
@@ -757,19 +757,19 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - `session.threadBindings.*` задає глобальні типові значення.
+ - `session.threadBindings.*` задає глобальні значення за замовчуванням.
- `channels.discord.threadBindings.*` перевизначає поведінку Discord.
- - `spawnSessions` керує автоматичним створенням/прив'язуванням гілок для `sessions_spawn({ thread: true })` і створень гілок ACP. Типово: `true`.
- - `defaultSpawnContext` керує нативним контекстом субагента для створень, прив'язаних до гілки. Типово: `"fork"`.
- - Застарілі ключі `spawnSubagentSessions`/`spawnAcpSessions` мігруються через `openclaw doctor --fix`.
- - Якщо прив'язки гілок вимкнені для облікового запису, `/focus` і пов'язані операції прив'язки гілок недоступні.
+ - `spawnSessions` керує автоматичним створенням/прив’язуванням гілок для `sessions_spawn({ thread: true })` і створень гілок ACP. За замовчуванням: `true`.
+ - `defaultSpawnContext` керує нативним контекстом субагента для створень, прив’язаних до гілки. За замовчуванням: `"fork"`.
+ - Застарілі ключі `spawnSubagentSessions`/`spawnAcpSessions` мігруються командою `openclaw doctor --fix`.
+ - Якщо прив’язки гілок вимкнено для облікового запису, `/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.
Шлях конфігурації:
@@ -825,27 +825,27 @@ Slash-команди `/model` і `/models` відкривають інтерак
Примітки:
- - `/acp spawn codex --bind here` прив'язує поточний канал або гілку на місці й залишає майбутні повідомлення в тому самому сеансі ACP. Повідомлення гілки успадковують прив'язку батьківського каналу.
- - У прив'язаному каналі або гілці `/new` і `/reset` скидають той самий сеанс ACP на місці. Тимчасові прив'язки гілок можуть перевизначати розпізнавання цілі, доки активні.
- - `spawnSessions` керує створенням/прив'язуванням дочірніх гілок через `--thread auto|here`.
+ - `/acp spawn codex --bind here` прив’язує поточний канал або гілку на місці й утримує майбутні повідомлення в тій самій сесії ACP. Повідомлення гілки успадковують прив’язку батьківського каналу.
+ - У прив’язаному каналі або гілці `/new` і `/reset` скидають ту саму сесію ACP на місці. Тимчасові прив’язки гілок можуть перевизначати визначення цілі, поки активні.
+ - `spawnSessions` обмежує створення/прив’язування дочірніх гілок через `--thread auto|here`.
- Див. [Агенти ACP](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив'язок.
+ Див. [ACP-агенти](/uk/tools/acp-agents), щоб дізнатися подробиці поведінки прив’язок.
-
+
Режим сповіщень про реакції для окремого guild:
- `off`
- - `own` (типово)
+ - `own` (за замовчуванням)
- `all`
- `allowlist` (використовує `guilds..users`)
- Події реакцій перетворюються на системні події та додаються до маршрутизованого сеансу Discord.
+ Події реакцій перетворюються на системні події й прикріплюються до маршрутизованої сесії Discord.
-
+
`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
@@ -853,19 +853,19 @@ Slash-команди `/model` і `/models` відкривають інтерак
- `channels.discord.accounts..ackReaction`
- `channels.discord.ackReaction`
- `messages.ackReaction`
- - резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
+ - fallback на emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
- - Discord приймає unicode emoji або назви користувацьких emoji.
+ - Discord приймає unicode emoji або власні назви emoji.
- Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису.
-
- Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням.
+
+ Записи конфігурації, ініційовані каналом, увімкнено за замовчуванням.
- Це впливає на потоки `/config set|unset` (коли функції команд увімкнені).
+ Це впливає на потоки `/config set|unset` (коли функції команд увімкнено).
Вимкнення:
@@ -881,8 +881,8 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- Спрямовуйте WebSocket-трафік Gateway Discord і стартові REST-запити (ID застосунку + розпізнавання allowlist) через HTTP(S)-проксі за допомогою `channels.discord.proxy`.
+
+ Маршрутизуйте трафік WebSocket Gateway Discord і стартові REST-запити (ID застосунку + визначення allowlist) через HTTP(S)-проксі з `channels.discord.proxy`.
```json5
{
@@ -912,8 +912,8 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- Увімкніть розпізнавання PluralKit, щоб зіставляти proxied-повідомлення з ідентичністю учасника системи:
+
+ Увімкніть визначення PluralKit, щоб зіставляти proxied-повідомлення з ідентичністю учасника системи:
```json5
{
@@ -932,13 +932,13 @@ Slash-команди `/model` і `/models` відкривають інтерак
- allowlists можуть використовувати `pk:`
- відображувані імена учасників зіставляються за name/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true`
- - пошуки використовують ID оригінального повідомлення й обмежені часовим вікном
- - якщо пошук не вдається, proxied-повідомлення розглядаються як повідомлення ботів і відкидаються, якщо `allowBots=true` не задано
+ - пошуки використовують оригінальний ID повідомлення й обмежені часовим вікном
+ - якщо пошук не вдається, proxied-повідомлення вважаються повідомленнями ботів і відкидаються, якщо `allowBots=true` не задано
-
- Використовуйте `mentionAliases`, коли агентам потрібні детерміновані вихідні згадки для відомих користувачів Discord. Ключі є handle-ами без початкового `@`; значення є ID користувачів Discord. Невідомі handle-и, `@everyone`, `@here` і згадки всередині code span-ів Markdown залишаються без змін.
+
+ Використовуйте `mentionAliases`, коли агентам потрібні детерміновані вихідні згадки для відомих користувачів Discord. Ключі — це handles без початкового `@`; значення — ID користувачів Discord. Невідомі handles, `@everyone`, `@here` і згадки всередині Markdown code spans залишаються без змін.
```json5
{
@@ -961,8 +961,8 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- Оновлення presence застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте auto presence.
+
+ Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичну присутність.
Приклад лише зі статусом:
@@ -976,7 +976,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Приклад активності (користувацький статус є типовим типом активності):
+ Приклад активності (власний статус є типом активності за замовчуванням):
```json5
{
@@ -989,7 +989,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Приклад трансляції:
+ Приклад streaming:
```json5
{
@@ -1006,13 +1006,13 @@ Slash-команди `/model` і `/models` відкривають інтерак
Карта типів активності:
- 0: Грає
- - 1: Транслює (потребує `activityUrl`)
+ - 1: Streaming (потребує `activityUrl`)
- 2: Слухає
- 3: Дивиться
- - 4: Користувацька (використовує текст активності як стан статусу; emoji необов'язковий)
+ - 4: Власний (використовує текст активності як стан статусу; emoji необов’язковий)
- 5: Змагається
- Приклад auto presence (сигнал стану runtime):
+ Приклад автоматичної присутності (сигнал стану runtime):
```json5
{
@@ -1029,7 +1029,7 @@ Slash-команди `/model` і `/models` відкривають інтерак
}
```
- Auto presence зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов'язкові перевизначення тексту:
+ Автоматична присутність зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту:
- `autoPresence.healthyText`
- `autoPresence.degradedText`
@@ -1037,70 +1037,70 @@ Slash-команди `/model` і `/models` відкривають інтерак
-
- 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.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`)
+ - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`)
- `agentFilter`, `sessionFilter`, `cleanupAfterResolve`
- Discord автоматично вмикає нативні підтвердження виконання, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного затверджувача: або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить затверджувачів виконання з каналового `allowFrom`, застарілого `dm.allowFrom` чи `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт підтверджень.
+ Discord автоматично вмикає власні схвалення exec, коли `enabled` не задано або має значення `"auto"` і можна визначити принаймні одного схвалювача: або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить схвалювачів exec з канального `allowFrom`, застарілого `dm.allowFrom` або direct-message `defaultTo`. Задайте `enabled: false`, щоб явно вимкнути Discord як власний клієнт схвалень.
- Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на підтвердження та фінальні результати приватно. Спершу він пробує Discord DM, коли власник, який викликає команду, має маршрут власника Discord; якщо він недоступний, використовується перший доступний маршрут власника з `commands.ownerAllowFrom`, наприклад Telegram.
+ Для чутливих групових команд лише для власника, як-от `/diagnostics` і `/export-trajectory`, OpenClaw надсилає запити на схвалення та фінальні результати приватно. Спочатку він пробує Discord DM, коли власник, що викликає команду, має власницький маршрут Discord; якщо він недоступний, OpenClaw повертається до першого доступного власницького маршруту з `commands.ownerAllowFrom`, наприклад Telegram.
- Коли `target` має значення `channel` або `both`, запит на підтвердження видимий у каналі. Кнопками можуть користуватися лише визначені затверджувачі; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тому вмикайте доставлення в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw повертається до доставлення через DM.
+ Коли `target` має значення `channel` або `both`, запит на схвалення видно в каналі. Кнопками можуть користуватися лише визначені схвалювачі; інші користувачі отримують ефемерну відмову. Запити на схвалення містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw повертається до доставки через DM.
- Discord також відображає спільні кнопки підтвердження, які використовують інші чат-канали. Нативний адаптер Discord переважно додає маршрутизацію DM для затверджувачів і розсилання в канали.
- Коли ці кнопки наявні, вони є основним UX підтвердження; OpenClaw
- має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує,
- що чат-підтвердження недоступні або ручне підтвердження є єдиним шляхом.
- Якщо нативне середовище виконання підтверджень Discord не активне, OpenClaw залишає
- локальну детерміновану підказку `/approve ` видимою. Якщо
- середовище виконання активне, але нативну картку неможливо доставити жодній цілі,
- OpenClaw надсилає в той самий чат резервне повідомлення з точною командою `/approve`
- з очікуваного підтвердження.
+ Discord також відтворює спільні кнопки схвалення, які використовують інші чат-канали. Власний адаптер Discord переважно додає маршрутизацію DM для схвалювачів і розсилання в канали.
+ Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw
+ має додавати ручну команду `/approve` лише тоді, коли результат інструмента вказує,
+ що чат-схвалення недоступні або ручне схвалення є єдиним шляхом.
+ Якщо власне середовище виконання схвалень Discord не активне, OpenClaw зберігає
+ видимим локальний детермінований запит `/approve `. Якщо
+ середовище виконання активне, але власну картку неможливо доставити жодній цілі,
+ OpenClaw надсилає резервне повідомлення в той самий чат із точною командою `/approve`
+ з очікуваного схвалення.
- Автентифікація Gateway і визначення підтверджень дотримуються спільного контракту клієнта Gateway (ID `plugin:` визначаються через `plugin.approval.resolve`; інші ID — через `exec.approval.resolve`). Підтвердження типово спливають через 30 хвилин.
+ Автентифікація Gateway і розв’язання схвалень дотримуються спільного контракту клієнта Gateway (`plugin:` ID розв’язуються через `plugin.approval.resolve`; інші ID через `exec.approval.resolve`). За замовчуванням схвалення спливають через 30 хвилин.
- Див. [Підтвердження виконання](/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.*`.
+Шлюзи дій містяться в `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 Components v2
+## UI компонентів v2
-OpenClaw використовує Discord components v2 для підтверджень виконання та маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для користувацького UI (розширений режим; потребує створення payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані.
+OpenClaw використовує компоненти Discord v2 для схвалень exec і маркерів між контекстами. Дії повідомлень Discord також можуть приймати `components` для власного UI (розширений режим; потребує побудови payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані.
- `channels.discord.ui.components.accentColor` задає акцентний колір, який використовують контейнери компонентів Discord (hex).
-- Задайте для окремого облікового запису через `channels.discord.accounts..ui.components.accentColor`.
-- `embeds` ігноруються, коли наявні components v2.
+- Задайте для кожного облікового запису через `channels.discord.accounts..ui.components.accentColor`.
+- `embeds` ігноруються, коли присутні компоненти v2.
Приклад:
@@ -1120,20 +1120,20 @@ OpenClaw використовує Discord components v2 для підтверд
## Голос
-Discord має дві окремі голосові поверхні: голосові канали реального часу **voice channels** (безперервні розмови) і **voice message attachments** (формат попереднього перегляду хвилі). Gateway підтримує обидві.
+Discord має дві різні голосові поверхні: realtime **голосові канали** (безперервні розмови) і **вкладення голосових повідомлень** (формат попереднього перегляду з хвильовою формою). Gateway підтримує обидві.
### Голосові канали
Контрольний список налаштування:
1. Увімкніть Message Content Intent у Discord Developer Portal.
-2. Увімкніть Server Members Intent, коли використовуються allowlist ролей/користувачів.
-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`).
+5. Увімкніть власні команди (`commands.native` або `channels.discord.commands.native`).
6. Налаштуйте `channels.discord.voice`.
-Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує типового агента облікового запису та дотримується тих самих правил allowlist і групової політики, що й інші команди Discord.
+Використовуйте `/vc join|leave|status` для керування сесіями. Команда використовує стандартного агента облікового запису й дотримується тих самих правил списку дозволених і групової політики, що й інші команди Discord.
```bash
/vc join channel:
@@ -1175,32 +1175,32 @@ Discord має дві окремі голосові поверхні: голос
- `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`, голосове середовище виконання та intent Gateway `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.
+- Перевизначення `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.
-Пайплайн голосового каналу:
+Конвеєр голосового каналу:
-- Захоплення Discord PCM перетворюється на тимчасовий файл WAV.
+- PCM-захоплення Discord перетворюється на тимчасовий WAV-файл.
- `tools.media.audio` обробляє STT, наприклад `openai/gpt-4o-mini-transcribe`.
-- Транскрипт надсилається через вхід Discord і маршрутизацію, тоді як LLM відповіді працює з політикою voice-output, яка приховує інструмент агента `tts` і просить повернути текст, оскільки голос Discord відповідає за фінальне відтворення 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`.
+Облікові дані розв’язуються для кожного компонента: автентифікація маршруту 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 відхиляються).
+- Надайте **локальний шлях до файлу** (URL відхиляються).
- Не додавайте текстовий вміст (Discord відхиляє текст + голосове повідомлення в одному payload).
- Приймається будь-який аудіоформат; OpenClaw за потреби конвертує в OGG/Opus.
@@ -1211,19 +1211,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a
## Усунення несправностей
-
+
- увімкніть Message Content Intent
- - увімкніть Server Members Intent, коли ви залежите від визначення користувача/учасника
+ - увімкніть Server Members Intent, коли ви залежите від розв’язання користувачів/учасників
- перезапустіть gateway після зміни intents
-
+
- перевірте `groupPolicy`
- - перевірте allowlist гільдії в `channels.discord.guilds`
- - якщо існує map `channels` гільдії, дозволені лише перелічені канали
+ - перевірте список дозволених guild у `channels.discord.guilds`
+ - якщо існує мапа `channels` guild, дозволені лише перелічені канали
- перевірте поведінку `requireMention` і шаблони згадок
Корисні перевірки:
@@ -1236,29 +1236,29 @@ openclaw logs --follow
-
+
Поширені причини:
- - `groupPolicy="allowlist"` без відповідного allowlist гільдії/каналу
+ - `groupPolicy="allowlist"` без відповідного списку дозволених guild/каналу
- `requireMention` налаштовано в неправильному місці (має бути в `channels.discord.guilds` або записі каналу)
- - відправника заблоковано allowlist `users` гільдії/каналу
+ - відправника заблоковано списком дозволених `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, а не часом життя ходу агента
+ - це керує лише роботою слухача Gateway Discord, а не тривалістю ходу агента
- Discord не застосовує тайм-аут, що належить каналу, до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершить або не перерве роботу.
+ Discord не застосовує власний тайм-аут каналу до поставлених у чергу ходів агента. Слухачі повідомлень одразу передають роботу далі, а поставлені в чергу запуски Discord зберігають порядок у межах сесії, доки життєвий цикл сесії/інструмента/середовища виконання не завершиться або не перерве роботу.
```json5
{
@@ -1278,38 +1278,38 @@ 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, коли конфіг не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
- - типово: `30000` (30 секунд), максимум: `120000`
+ - резервне значення env, коли конфігурацію не задано: `OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS`
+ - за замовчуванням: `30000` (30 секунд), максимум: `120000`
- OpenClaw чекає на подію `READY` Gateway Discord під час запуску та після повторних підключень у runtime. Налаштування з кількома обліковими записами й рознесенням запуску можуть потребувати довшого вікна READY під час запуску, ніж стандартне.
+ OpenClaw очікує на подію gateway `READY` від Discord під час запуску та після повторних підключень під час роботи. Конфігураціям із кількома обліковими записами та рознесеним у часі запуском може знадобитися довше стартове вікно READY, ніж типове.
Параметри тайм-ауту READY:
- - запуск з одним обліковим записом: `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.discord.gatewayReadyTimeoutMs`
+ - запуск для кількох облікових записів: `channels.discord.accounts..gatewayReadyTimeoutMs`
+ - резервне env-значення для запуску, коли конфігурацію не задано: `OPENCLAW_DISCORD_READY_TIMEOUT_MS`
+ - типове значення для запуску: `15000` (15 секунд), максимум: `120000`
+ - під час роботи для одного облікового запису: `channels.discord.gatewayRuntimeReadyTimeoutMs`
+ - під час роботи для кількох облікових записів: `channels.discord.accounts..gatewayRuntimeReadyTimeoutMs`
+ - резервне env-значення під час роботи, коли конфігурацію не задано: `OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS`
+ - типове значення під час роботи: `30000` (30 секунд), максимум: `120000`
- Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів.
+ Перевірки дозволів `channels status --probe` працюють лише для числових ідентифікаторів каналів.
- Якщо ви використовуєте slug-ключі, зіставлення в runtime все одно може працювати, але probe не може повністю перевірити дозволи.
+ Якщо ви використовуєте ключі-slug, зіставлення під час роботи все одно може працювати, але probe не може повністю перевірити дозволи.
@@ -1321,11 +1321,11 @@ openclaw logs --follow
-
+
За замовчуванням повідомлення, створені ботами, ігноруються.
- Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки.
- Надавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота.
+ Якщо ви встановлюєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і списків дозволених, щоб уникнути циклічної поведінки.
+ Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота.
```json5
{
@@ -1352,15 +1352,15 @@ openclaw logs --follow
-
+
- - підтримуйте 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)
@@ -1369,17 +1369,17 @@ openclaw logs --follow
Основний довідник: [Довідник конфігурації - Discord](/uk/gateway/config-channels#discord).
-
+
-- запуск/auth: `enabled`, `token`, `accounts.*`, `allowBots`
+- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots`
- політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
-- команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
-- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
-- Gateway: `gatewayInfoTimeoutMs`, `gatewayReadyTimeoutMs`, `gatewayRuntimeReadyTimeoutMs`
-- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
+- команди: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*`
+- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency`
+- gateway: `gatewayInfoTimeoutMs`, `gatewayReadyTimeoutMs`, `gatewayRuntimeReadyTimeoutMs`
+- відповіді/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
-- streaming: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
-- медіа/повторна спроба: `mediaMaxMb` (обмежує вихідні завантаження Discord, стандарт `100MB`), `retry`
+- потокове передавання: `streaming` (застарілий псевдонім: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce`
+- медіа/повторні спроби: `mediaMaxMb` (обмежує вихідні завантаження Discord, типово `100MB`), `retry`
- дії: `actions.*`
- присутність: `activity`, `status`, `activityType`, `activityUrl`
- UI: `ui.components.accentColor`
@@ -1389,29 +1389,29 @@ 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.
- Поведінка групового чату та allowlist.
+ Груповий чат і поведінка списку дозволених.
Маршрутизуйте вхідні повідомлення до агентів.
- Модель загроз і посилення захисту.
+ Модель загроз і зміцнення захисту.
- Зіставляйте guilds і канали з агентами.
+ Зіставляйте гільдії та канали з агентами.
-
+
Поведінка нативних команд.
diff --git a/docs/uk/channels/telegram.md b/docs/uk/channels/telegram.md
index bacca5ff1..765c8f4bc 100644
--- a/docs/uk/channels/telegram.md
+++ b/docs/uk/channels/telegram.md
@@ -4,25 +4,25 @@ read_when:
summary: Стан підтримки бота Telegram, можливості та конфігурація
title: Telegram
x-i18n:
- generated_at: "2026-05-03T19:29:10Z"
+ generated_at: "2026-05-03T21:05:27Z"
model: gpt-5.5
provider: openai
- source_hash: 06252b1540d5794aa5d8fe1066bf9d121e682a0df969a265d890445e97d5d647
+ source_hash: 528ace9dae29eda22f98cc1436ec16146eb9d83edc73aa6db1ab8283f4f873c0
source_path: channels/telegram.md
workflow: 16
---
-Готово до продакшну для особистих повідомлень ботів і груп через grammY. Довге опитування є режимом за замовчуванням; режим Webhook необовʼязковий.
+Готово до продакшну для DM ботів і груп через grammY. Довге опитування є режимом за замовчуванням; режим Webhook необов’язковий.
- Політика особистих повідомлень за замовчуванням для Telegram — сполучення.
+ Типова політика DM для Telegram — сполучення.
-
- Міжканальна діагностика та інструкції з відновлення.
+
+ Міжканальна діагностика та плейбуки відновлення.
- Повні шаблони та приклади конфігурації каналів.
+ Повні шаблони й приклади конфігурації каналів.
@@ -30,13 +30,13 @@ x-i18n:
- Відкрийте Telegram і поспілкуйтеся з **@BotFather** (переконайтеся, що handle точно `@BotFather`).
+ Відкрийте Telegram і почніть чат із **@BotFather** (переконайтеся, що handle точно `@BotFather`).
Виконайте `/newbot`, дотримуйтеся підказок і збережіть токен.
-
+
```json5
{
@@ -51,12 +51,12 @@ x-i18n:
}
```
- Резервний варіант через env: `TELEGRAM_BOT_TOKEN=...` (лише обліковий запис за замовчуванням).
+ Резервне значення з env: `TELEGRAM_BOT_TOKEN=...` (лише типовий обліковий запис).
Telegram **не** використовує `openclaw channels login telegram`; налаштуйте токен у config/env, а потім запустіть gateway.
-
+
```bash
openclaw gateway
@@ -74,43 +74,43 @@ openclaw pairing approve telegram
-Порядок визначення токена враховує обліковий запис. На практиці значення з config мають пріоритет над резервним env, а `TELEGRAM_BOT_TOKEN` застосовується лише до облікового запису за замовчуванням.
+Порядок визначення токена враховує обліковий запис. На практиці значення config мають пріоритет над резервним значенням env, а `TELEGRAM_BOT_TOKEN` застосовується лише до типового облікового запису.
## Налаштування на боці Telegram
- Боти Telegram за замовчуванням використовують **Privacy Mode**, який обмежує, які групові повідомлення вони отримують.
+ Боти Telegram за замовчуванням використовують **режим приватності**, який обмежує, які групові повідомлення вони отримують.
- Якщо бот має бачити всі групові повідомлення, зробіть одне з двох:
+ Якщо бот має бачити всі групові повідомлення, зробіть одне з цього:
- вимкніть режим приватності через `/setprivacy`, або
- зробіть бота адміністратором групи.
- Після перемикання режиму приватності видаліть і знову додайте бота в кожну групу, щоб Telegram застосував зміну.
+ Після перемикання режиму приватності видаліть і повторно додайте бота в кожній групі, щоб Telegram застосував зміну.
Статус адміністратора керується в налаштуваннях групи Telegram.
- Боти-адміністратори отримують усі групові повідомлення, що корисно для постійної поведінки в групі.
+ Боти-адміністратори отримують усі групові повідомлення, що корисно для постійно активної поведінки в групі.
- - `/setjoingroups`, щоб дозволити або заборонити додавання до груп
+ - `/setjoingroups`, щоб дозволити/заборонити додавання до груп
- `/setprivacy` для поведінки видимості в групах
-## Контроль доступу та активація
+## Керування доступом і активація
-
+
`channels.telegram.dmPolicy` керує доступом до прямих повідомлень:
- `pairing` (за замовчуванням)
@@ -118,27 +118,27 @@ openclaw pairing approve telegram
- `open` (потребує, щоб `allowFrom` містив `"*"`)
- `disabled`
- `dmPolicy: "open"` з `allowFrom: ["*"]` дозволяє будь-якому обліковому запису Telegram, який знайде або вгадає імʼя користувача бота, керувати ботом. Використовуйте це лише для навмисно публічних ботів із жорстко обмеженими інструментами; боти з одним власником мають використовувати `allowlist` з числовими ID користувачів.
+ `dmPolicy: "open"` з `allowFrom: ["*"]` дозволяє будь-якому обліковому запису Telegram, який знайде або вгадає ім’я користувача бота, керувати ботом. Використовуйте це лише для навмисно публічних ботів із жорстко обмеженими інструментами; боти з одним власником мають використовувати `allowlist` із числовими ID користувачів.
`channels.telegram.allowFrom` приймає числові ID користувачів Telegram. Префікси `telegram:` / `tg:` приймаються та нормалізуються.
- У конфігураціях із кількома обліковими записами обмежувальний верхньорівневий `channels.telegram.allowFrom` розглядається як межа безпеки: записи рівня облікового запису `allowFrom: ["*"]` не роблять цей обліковий запис публічним, якщо ефективний allowlist облікового запису після злиття все ще не містить явного wildcard.
- `dmPolicy: "allowlist"` з порожнім `allowFrom` блокує всі особисті повідомлення та відхиляється валідацією конфігурації.
+ У конфігураціях із кількома обліковими записами обмежувальний `channels.telegram.allowFrom` верхнього рівня вважається межею безпеки: записи рівня облікового запису `allowFrom: ["*"]` не роблять цей обліковий запис публічним, якщо ефективний allowlist облікового запису після злиття не містить явний wildcard.
+ `dmPolicy: "allowlist"` із порожнім `allowFrom` блокує всі DM і відхиляється під час валідації конфігурації.
Налаштування запитує лише числові ID користувачів.
- Якщо ви оновилися і ваша конфігурація містить записи allowlist у форматі `@username`, виконайте `openclaw doctor --fix`, щоб їх вирішити (best-effort; потрібен токен бота Telegram).
+ Якщо ви оновилися й ваша конфігурація містить записи allowlist `@username`, виконайте `openclaw doctor --fix`, щоб їх розв’язати (найкраща можлива спроба; потрібен токен бота Telegram).
Якщо раніше ви покладалися на файли allowlist зі сховища сполучень, `openclaw doctor --fix` може відновити записи в `channels.telegram.allowFrom` у потоках allowlist (наприклад, коли `dmPolicy: "allowlist"` ще не має явних ID).
- Для ботів з одним власником надавайте перевагу `dmPolicy: "allowlist"` з явними числовими ID `allowFrom`, щоб політика доступу була стійко зафіксована в конфігурації (замість залежності від попередніх схвалень сполучення).
+ Для ботів з одним власником віддавайте перевагу `dmPolicy: "allowlist"` з явними числовими ID `allowFrom`, щоб політика доступу була сталою в конфігурації (замість залежності від попередніх підтверджень сполучення).
- Поширене непорозуміння: схвалення сполучення для особистих повідомлень не означає «цей відправник авторизований всюди».
- Сполучення надає доступ до особистих повідомлень. Якщо власника команд ще немає, перше схвалене сполучення також задає `commands.ownerAllowFrom`, щоб команди лише для власника та схвалення exec мали явний обліковий запис оператора.
- Авторизація відправника в групі все одно береться з явних allowlist у конфігурації.
- Якщо ви хочете «я авторизований один раз, і працюють як особисті повідомлення, так і групові команди», додайте свій числовий ID користувача Telegram у `channels.telegram.allowFrom`; для команд лише для власника переконайтеся, що `commands.ownerAllowFrom` містить `telegram:`.
+ Типова плутанина: підтвердження сполучення DM не означає «цей відправник авторизований всюди».
+ Сполучення надає доступ до DM. Якщо власника команд ще не існує, перше підтверджене сполучення також встановлює `commands.ownerAllowFrom`, щоб команди лише для власника й підтвердження exec мали явний обліковий запис оператора.
+ Авторизація відправників у групах і далі надходить із явних allowlist у конфігурації.
+ Якщо ви хочете «я авторизований один раз, і працюють як DM, так і групові команди», додайте свій числовий ID користувача Telegram у `channels.telegram.allowFrom`; для команд лише для власника переконайтеся, що `commands.ownerAllowFrom` містить `telegram:`.
### Як знайти свій ID користувача Telegram
Безпечніше (без стороннього бота):
- 1. Напишіть своєму боту в особисті повідомлення.
+ 1. Надішліть DM своєму боту.
2. Виконайте `openclaw logs --follow`.
3. Прочитайте `from.id`.
@@ -153,13 +153,13 @@ curl "https://api.telegram.org/bot/getUpdates"
- Два механізми застосовуються разом:
+ Два засоби керування застосовуються разом:
1. **Які групи дозволені** (`channels.telegram.groups`)
- немає config `groups`:
- з `groupPolicy: "open"`: будь-яка група може пройти перевірки ID групи
- з `groupPolicy: "allowlist"` (за замовчуванням): групи заблоковані, доки ви не додасте записи `groups` (або `"*"`)
- - `groups` налаштовано: працює як allowlist (явні ID або `"*"`)
+ - `groups` налаштовано: діє як allowlist (явні ID або `"*"`)
2. **Які відправники дозволені в групах** (`channels.telegram.groupPolicy`)
- `open`
@@ -168,13 +168,13 @@ curl "https://api.telegram.org/bot/getUpdates"
`groupAllowFrom` використовується для фільтрації відправників у групах. Якщо не задано, Telegram повертається до `allowFrom`.
Записи `groupAllowFrom` мають бути числовими ID користувачів Telegram (префікси `telegram:` / `tg:` нормалізуються).
- Не додавайте ID чатів груп або супергруп Telegram у `groupAllowFrom`. Відʼємні ID чатів належать до `channels.telegram.groups`.
- Нечислові записи ігноруються для авторизації відправника.
- Межа безпеки (`2026.2.25+`): авторизація відправника в групі **не** успадковує схвалення зі сховища сполучень для особистих повідомлень.
- Сполучення залишається лише для особистих повідомлень. Для груп задайте `groupAllowFrom` або `allowFrom` на рівні групи чи теми.
+ Не додавайте ID чатів груп або супергруп Telegram у `groupAllowFrom`. Від’ємні ID чатів мають бути в `channels.telegram.groups`.
+ Нечислові записи ігноруються для авторизації відправників.
+ Межа безпеки (`2026.2.25+`): авторизація відправників у групах **не** успадковує підтвердження зі сховища сполучень DM.
+ Сполучення залишається лише для DM. Для груп задайте `groupAllowFrom` або `allowFrom` для групи/теми.
Якщо `groupAllowFrom` не задано, Telegram повертається до config `allowFrom`, а не до сховища сполучень.
Практичний шаблон для ботів з одним власником: задайте свій ID користувача в `channels.telegram.allowFrom`, залиште `groupAllowFrom` незаданим і дозвольте цільові групи в `channels.telegram.groups`.
- Примітка про runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням закритий для відмови з `groupPolicy="allowlist"`, якщо `channels.defaults.groupPolicy` не задано явно.
+ Примітка щодо runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням fail-closed до `groupPolicy="allowlist"`, якщо `channels.defaults.groupPolicy` не задано явно.
Приклад: дозволити будь-якого учасника в одній конкретній групі:
@@ -211,20 +211,20 @@ curl "https://api.telegram.org/bot/getUpdates"
```
- Поширена помилка: `groupAllowFrom` не є allowlist груп Telegram.
+ Типова помилка: `groupAllowFrom` не є allowlist груп Telegram.
- - Розміщуйте відʼємні ID чатів груп або супергруп Telegram, як-от `-1001234567890`, у `channels.telegram.groups`.
- - Розміщуйте ID користувачів Telegram, як-от `8734062810`, у `groupAllowFrom`, коли хочете обмежити, які люди всередині дозволеної групи можуть запускати бота.
+ - Додавайте від’ємні ID чатів груп або супергруп Telegram, як-от `-1001234567890`, у `channels.telegram.groups`.
+ - Додавайте ID користувачів Telegram, як-от `8734062810`, у `groupAllowFrom`, коли хочете обмежити, які люди в дозволеній групі можуть запускати бота.
- Використовуйте `groupAllowFrom: ["*"]` лише тоді, коли хочете, щоб будь-який учасник дозволеної групи міг говорити з ботом.
-
- Групові відповіді за замовчуванням потребують згадки.
+
+ Відповіді в групах за замовчуванням потребують згадки.
- Згадка може надходити з:
+ Згадка може походити з:
- нативної згадки `@botusername`, або
- шаблонів згадок у:
@@ -236,9 +236,9 @@ curl "https://api.telegram.org/bot/getUpdates"
- `/activation always`
- `/activation mention`
- Вони оновлюють лише стан сесії. Для збереження використовуйте config.
+ Вони оновлюють лише стан сесії. Для збереження використовуйте конфігурацію.
- Приклад постійної конфігурації:
+ Приклад сталої конфігурації:
```json5
{
@@ -254,9 +254,9 @@ curl "https://api.telegram.org/bot/getUpdates"
Отримання ID групового чату:
- - переслати групове повідомлення до `@userinfobot` / `@getidsbot`
- - або прочитати `chat.id` з `openclaw logs --follow`
- - або переглянути Bot API `getUpdates`
+ - перешліть групове повідомлення до `@userinfobot` / `@getidsbot`
+ - або прочитайте `chat.id` з `openclaw logs --follow`
+ - або перегляньте Bot API `getUpdates`
@@ -265,31 +265,31 @@ curl "https://api.telegram.org/bot/getUpdates"
- Telegram належить процесу gateway.
- Маршрутизація детермінована: вхідні повідомлення Telegram отримують відповіді назад у Telegram (модель не вибирає канали).
-- Вхідні повідомлення нормалізуються в спільний envelope каналу з метаданими відповіді та placeholders для медіа.
+- Вхідні повідомлення нормалізуються в спільний конверт каналу з метаданими відповіді та заповнювачами медіа.
- Групові сесії ізольовані за ID групи. Теми форуму додають `:topic:`, щоб теми залишалися ізольованими.
-- Особисті повідомлення можуть містити `message_thread_id`; OpenClaw зберігає ID потоку для відповідей, але за замовчуванням залишає особисті повідомлення у пласкій сесії. Налаштуйте `channels.telegram.dm.threadReplies: "inbound"`, `channels.telegram.direct..threadReplies: "inbound"`, `requireTopic: true` або відповідну конфігурацію теми, коли ви навмисно хочете ізоляцію сесій за темами в особистих повідомленнях.
-- Довге опитування використовує grammY runner із послідовністю за чатом і потоком. Загальна конкурентність runner sink використовує `agents.defaults.maxConcurrent`.
-- Довге опитування захищене всередині кожного процесу gateway, щоб лише один активний poller міг використовувати токен бота одночасно. Якщо ви все ще бачите конфлікти `getUpdates` 409, інший gateway OpenClaw, скрипт або зовнішній poller, імовірно, використовує той самий токен.
-- Перезапуски watchdog довгого опитування за замовчуванням спрацьовують після 120 секунд без завершеної liveness `getUpdates`. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо ваше розгортання все ще бачить хибні перезапуски через зупинку опитування під час тривалої роботи. Значення в мілісекундах і дозволене від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
-- Telegram Bot API не підтримує read receipts (`sendReadReceipts` не застосовується).
+- DM-повідомлення можуть містити `message_thread_id`; OpenClaw зберігає ID треду для відповідей, але за замовчуванням залишає DM у плоскій сесії. Налаштуйте `channels.telegram.dm.threadReplies: "inbound"`, `channels.telegram.direct..threadReplies: "inbound"`, `requireTopic: true` або відповідну конфігурацію теми, коли ви навмисно хочете ізоляцію сесій тем DM.
+- Довге опитування використовує grammY runner із послідовністю за чатами/тредами. Загальна конкурентність sink runner використовує `agents.defaults.maxConcurrent`.
+- Довге опитування захищене всередині кожного процесу gateway, тож лише один активний poller може використовувати токен бота за раз. Якщо ви все ще бачите конфлікти `getUpdates` 409, імовірно, інший OpenClaw gateway, скрипт або зовнішній poller використовує той самий токен.
+- Перезапуски watchdog для довгого опитування за замовчуванням спрацьовують після 120 секунд без завершеного liveness `getUpdates`. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо у вашому розгортанні все ще трапляються хибні перезапуски через polling-stall під час тривалої роботи. Значення вказується в мілісекундах і допускається від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
+- Telegram Bot API не підтримує сповіщення про прочитання (`sendReadReceipts` не застосовується).
-## Довідник можливостей
+## Довідник функцій
- OpenClaw може stream-ити часткові відповіді в реальному часі:
+ OpenClaw може транслювати часткові відповіді в реальному часі:
- прямі чати: повідомлення попереднього перегляду + `editMessageText`
- групи/теми: повідомлення попереднього перегляду + `editMessageText`
Вимога:
- - `channels.telegram.streaming` має значення `off | partial | block | progress` (за замовчуванням: `partial`)
- - `progress` відповідає `partial` у Telegram (сумісність із міжканальним найменуванням)
- - `streaming.preview.toolProgress` керує тим, чи оновлення інструментів/прогресу повторно використовують те саме редаговане повідомлення попереднього перегляду (за замовчуванням: `true`, коли активний streaming попереднього перегляду)
+ - `channels.telegram.streaming` — `off | partial | block | progress` (за замовчуванням: `partial`)
+ - `progress` зберігає один редагований статусний чернетковий текст і оновлює його прогресом інструментів до фінальної доставки
+ - `streaming.preview.toolProgress` керує тим, чи оновлення інструментів/прогресу повторно використовують те саме відредаговане повідомлення попереднього перегляду (за замовчуванням: `true`, коли активне потокове передавання попереднього перегляду)
- застарілі `channels.telegram.streamMode` і булеві значення `streaming` виявляються; виконайте `openclaw doctor --fix`, щоб мігрувати їх до `channels.telegram.streaming.mode`
- Оновлення попереднього перегляду прогресу інструментів — це короткі рядки «Працюємо...», які показуються під час роботи інструментів, наприклад виконання команд, читання файлів, оновлення плану або підсумки patch. Telegram залишає їх увімкненими за замовчуванням, щоб відповідати випущеній поведінці OpenClaw від `v2026.4.22` і новіших версій. Щоб зберегти редагований попередній перегляд для тексту відповіді, але приховати рядки прогресу інструментів, задайте:
+ Оновлення попереднього перегляду прогресу інструментів — це короткі рядки статусу, що показуються під час роботи інструментів, наприклад виконання команд, читання файлів, оновлення планування або підсумки patch. Telegram залишає їх увімкненими за замовчуванням, щоб відповідати випущеній поведінці OpenClaw від `v2026.4.22` і пізніших версій. Щоб зберегти відредагований попередній перегляд для тексту відповіді, але приховати рядки прогресу інструментів, задайте:
```json
{
@@ -306,42 +306,42 @@ curl "https://api.telegram.org/bot/getUpdates"
}
```
- Використовуйте `streaming.mode: "off"` лише тоді, коли потрібно доставляти тільки фінальну відповідь: редагування прев’ю в Telegram вимикаються, а загальні повідомлення інструментів/прогресу приглушуються замість надсилання окремих повідомлень «Працюю...». Запити на схвалення, медіа-вміст і помилки все одно проходять через звичайне фінальне доставлення. Використовуйте `streaming.preview.toolProgress: false`, коли потрібно залишити лише редагування прев’ю відповіді, приховавши рядки стану прогресу інструментів.
+ Використовуйте `streaming.mode: "off"` лише тоді, коли потрібна доставка тільки фінальної відповіді: редагування попереднього перегляду в Telegram вимикається, а загальні повідомлення інструментів/прогресу приглушуються замість надсилання як окремих статусних повідомлень. Запити на підтвердження, медіавміст і помилки все одно проходять через звичайну фінальну доставку. Використовуйте `streaming.preview.toolProgress: false`, коли потрібно лише зберегти редагування попереднього перегляду відповіді, приховавши рядки статусу прогресу інструментів.
- Відповіді на вибрані цитати в Telegram є винятком. Коли `replyToMode` має значення `"first"`, `"all"` або `"batched"` і вхідне повідомлення містить текст вибраної цитати, OpenClaw надсилає фінальну відповідь через нативний шлях відповіді на цитату в Telegram замість редагування прев’ю відповіді, тому `streaming.preview.toolProgress` не може показати короткі рядки «Працюю...» для цього звернення. Відповіді на поточне повідомлення без тексту вибраної цитати все одно зберігають потокове прев’ю. Установіть `replyToMode: "off"`, коли видимість прогресу інструментів важливіша за нативні відповіді на цитати, або встановіть `streaming.preview.toolProgress: false`, щоб явно прийняти цей компроміс.
+ Відповіді Telegram на вибрані цитати є винятком. Коли `replyToMode` має значення `"first"`, `"all"` або `"batched"` і вхідне повідомлення містить вибраний текст цитати, OpenClaw надсилає фінальну відповідь через нативний шлях відповіді з цитуванням Telegram замість редагування попереднього перегляду відповіді, тому `streaming.preview.toolProgress` не може показувати короткі рядки статусу для цього ходу. Відповіді на поточне повідомлення без вибраного тексту цитати й далі зберігають потоковий попередній перегляд. Установіть `replyToMode: "off"`, коли видимість прогресу інструментів важливіша за нативні відповіді з цитуванням, або встановіть `streaming.preview.toolProgress: false`, щоб явно прийняти цей компроміс.
- Для відповідей лише з текстом:
+ Для текстових відповідей:
- - короткі прев’ю в DM/групах/темах: OpenClaw зберігає те саме повідомлення прев’ю й виконує фінальне редагування на місці, якщо після появи прев’ю не було надіслано видимого повідомлення, що не є прев’ю
- - прев’ю, після яких іде видимий вивід, що не є прев’ю: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення й прибирає старіше прев’ю, тож фінальна відповідь з’являється після проміжного виводу
- - прев’ю, старші приблизно за одну хвилину: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення, а потім прибирає прев’ю, тож видима часова позначка Telegram відображає час завершення, а не час створення прев’ю
+ - короткі попередні перегляди в DM/групі/темі: OpenClaw зберігає те саме повідомлення попереднього перегляду й виконує фінальне редагування на місці, якщо після появи попереднього перегляду не було надіслано видиме повідомлення, що не є попереднім переглядом
+ - попередні перегляди, після яких іде видимий вивід, що не є попереднім переглядом: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення й очищає старіший попередній перегляд, тому фінальна відповідь з'являється після проміжного виводу
+ - попередні перегляди старші приблизно за одну хвилину: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення, а потім очищає попередній перегляд, тому видима часова позначка Telegram відображає час завершення, а не час створення попереднього перегляду
- Для складних відповідей (наприклад, медіа-вмісту) OpenClaw повертається до звичайного фінального доставлення, а потім прибирає повідомлення прев’ю.
+ Для складних відповідей (наприклад медіавмісту) OpenClaw повертається до звичайної фінальної доставки, а потім очищає повідомлення попереднього перегляду.
- Потокове прев’ю відокремлене від блокового потокового передавання. Коли блокове потокове передавання явно ввімкнено для Telegram, OpenClaw пропускає потік прев’ю, щоб уникнути подвійного потокового передавання.
+ Потоковий попередній перегляд відокремлений від потокової передачі блоків. Коли потокову передачу блоків явно ввімкнено для Telegram, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового надсилання.
- Потік міркувань лише для Telegram:
+ Потік reasoning тільки для Telegram:
- - `/reasoning stream` надсилає міркування в живе прев’ю під час генерування
- - фінальна відповідь надсилається без тексту міркувань
+ - `/reasoning stream` надсилає reasoning у живий попередній перегляд під час генерації
+ - фінальна відповідь надсилається без тексту reasoning
-
+
Вихідний текст використовує Telegram `parse_mode: "HTML"`.
- - Текст у стилі Markdown відображається як безпечний для Telegram HTML.
- - Сирий HTML моделі екранується, щоб зменшити кількість помилок розбору Telegram.
+ - Markdown-подібний текст рендериться у безпечний для Telegram HTML.
+ - Сирий HTML моделі екранується, щоб зменшити кількість помилок парсингу Telegram.
- Якщо Telegram відхиляє розібраний HTML, OpenClaw повторює спробу як звичайний текст.
- Прев’ю посилань увімкнені за замовчуванням і можуть бути вимкнені через `channels.telegram.linkPreview: false`.
+ Попередні перегляди посилань увімкнені за замовчуванням і можуть бути вимкнені через `channels.telegram.linkPreview: false`.
-
- Реєстрація меню команд Telegram виконується під час запуску за допомогою `setMyCommands`.
+
+ Реєстрація меню команд Telegram обробляється під час запуску через `setMyCommands`.
Типові значення нативних команд:
@@ -364,47 +364,47 @@ curl "https://api.telegram.org/bot/getUpdates"
Правила:
- - назви нормалізуються (початковий `/` видаляється, літери переводяться в нижній регістр)
+ - імена нормалізуються (видаляється початковий `/`, переводяться в нижній регістр)
- допустимий шаблон: `a-z`, `0-9`, `_`, довжина `1..32`
- користувацькі команди не можуть перевизначати нативні команди
- - конфлікти/дублікати пропускаються й записуються в журнал
+ - конфлікти/дублікати пропускаються й журналюються
Примітки:
- користувацькі команди є лише записами меню; вони не реалізують поведінку автоматично
- - команди Plugin/Skills усе одно можуть працювати під час введення, навіть якщо їх не показано в меню Telegram
+ - команди plugin/skill усе одно можуть працювати під час введення, навіть якщо їх не показано в меню Telegram
- Якщо нативні команди вимкнені, вбудовані команди видаляються. Користувацькі команди або команди Plugin усе ще можуть реєструватися, якщо налаштовані.
+ Якщо нативні команди вимкнено, вбудовані команди видаляються. Користувацькі/plugin-команди все ще можуть реєструватися, якщо налаштовані.
Поширені помилки налаштування:
- - `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнювалося після обрізання; зменште кількість команд Plugin/Skills/користувацьких команд або вимкніть `channels.telegram.commands.native`.
- - Помилка `deleteWebhook`, `deleteMyCommands` або `setMyCommands` з `404: Not Found`, коли прямі команди Bot API через curl працюють, може означати, що `channels.telegram.apiRoot` було встановлено на повний endpoint `/bot`. `apiRoot` має бути лише коренем Bot API, а `openclaw doctor --fix` видаляє випадковий кінцевий `/bot`.
- - `getMe returned 401` означає, що Telegram відхилив налаштований токен бота. Оновіть `botToken`, `tokenFile` або `TELEGRAM_BOT_TOKEN` поточним токеном BotFather; OpenClaw зупиняється до опитування, тому це не повідомляється як збій очищення Webhook.
- - `setMyCommands failed` з помилками мережі/fetch зазвичай означає, що вихідні DNS/HTTPS-з’єднання до `api.telegram.org` заблоковані.
+ - `setMyCommands failed` із `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнювалося після обрізання; зменште кількість plugin/skill/користувацьких команд або вимкніть `channels.telegram.commands.native`.
+ - Збій `deleteWebhook`, `deleteMyCommands` або `setMyCommands` із `404: Not Found`, коли прямі команди curl до Bot API працюють, може означати, що `channels.telegram.apiRoot` було встановлено на повний endpoint `/bot`. `apiRoot` має бути лише коренем Bot API, а `openclaw doctor --fix` видаляє випадковий кінцевий `/bot`.
+ - `getMe returned 401` означає, що Telegram відхилив налаштований токен бота. Оновіть `botToken`, `tokenFile` або `TELEGRAM_BOT_TOKEN` поточним токеном BotFather; OpenClaw зупиняється перед polling, тому це не повідомляється як збій очищення webhook.
+ - `setMyCommands failed` із помилками мережі/fetch зазвичай означає, що вихідний DNS/HTTPS до `api.telegram.org` заблоковано.
- ### Команди сполучення пристрою (Plugin `device-pair`)
+ ### Команди сполучення пристрою (`device-pair` plugin)
- Коли Plugin `device-pair` установлено:
+ Коли встановлено `device-pair` plugin:
1. `/pair` генерує код налаштування
2. вставте код у застосунок iOS
- 3. `/pair pending` показує список запитів, що очікують (зокрема роль/області дії)
- 4. схваліть запит:
- - `/pair approve ` для явного схвалення
+ 3. `/pair pending` перелічує запити в очікуванні (зокрема роль/scopes)
+ 4. підтвердьте запит:
+ - `/pair approve ` для явного підтвердження
- `/pair approve`, коли є лише один запит в очікуванні
- `/pair approve latest` для найновішого
- Код налаштування містить короткочасний bootstrap-токен. Вбудована передача bootstrap зберігає токен основного вузла на `scopes: []`; будь-який переданий токен оператора залишається обмеженим `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки областей дії bootstrap мають префікс ролі, тому цей allowlist оператора задовольняє лише запити оператора; неоператорським ролям усе ще потрібні області дії під власним префіксом ролі.
+ Код налаштування містить короткочасний bootstrap-токен. Вбудована передача bootstrap зберігає токен основного вузла на `scopes: []`; будь-який переданий операторський токен лишається обмеженим `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки bootstrap-scope мають префікс ролі, тому цей allowlist оператора задовольняє лише операторські запити; неоператорським ролям усе ще потрібні scopes під власним префіксом ролі.
- Якщо пристрій повторює спробу зі зміненими даними автентифікації (наприклад, роллю/областями дії/відкритим ключем), попередній запит в очікуванні замінюється, а новий запит використовує інший `requestId`. Повторно виконайте `/pair pending` перед схваленням.
+ Якщо пристрій повторює спробу зі зміненими деталями автентифікації (наприклад роль/scopes/публічний ключ), попередній запит в очікуванні замінюється, а новий запит використовує інший `requestId`. Повторно виконайте `/pair pending` перед підтвердженням.
Докладніше: [Сполучення](/uk/channels/pairing#pair-via-telegram-recommended-for-ios).
- Налаштуйте область дії вбудованої клавіатури:
+ Налаштуйте область дії inline-клавіатури:
```json5
{
@@ -442,7 +442,7 @@ curl "https://api.telegram.org/bot/getUpdates"
- `dm`
- `group`
- `all`
- - `allowlist` (типово)
+ - `allowlist` (за замовчуванням)
Застаріле `capabilities: ["inlineButtons"]` зіставляється з `inlineButtons: "all"`.
@@ -472,63 +472,63 @@ curl "https://api.telegram.org/bot/getUpdates"
Дії інструментів Telegram включають:
- - `sendMessage` (`to`, `content`, необов’язкові `mediaUrl`, `replyToMessageId`, `messageThreadId`)
+ - `sendMessage` (`to`, `content`, необов'язкові `mediaUrl`, `replyToMessageId`, `messageThreadId`)
- `react` (`chatId`, `messageId`, `emoji`)
- `deleteMessage` (`chatId`, `messageId`)
- `editMessage` (`chatId`, `messageId`, `content`)
- - `createForumTopic` (`chatId`, `name`, необов’язкові `iconColor`, `iconCustomEmojiId`)
+ - `createForumTopic` (`chatId`, `name`, необов'язкові `iconColor`, `iconCustomEmojiId`)
- Дії повідомлень каналу надають зручні псевдоніми (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
+ Дії повідомлень каналу надають ергономічні псевдоніми (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
- Елементи керування обмеженнями:
+ Елементи керування доступом:
- `channels.telegram.actions.sendMessage`
- `channels.telegram.actions.deleteMessage`
- `channels.telegram.actions.reactions`
- - `channels.telegram.actions.sticker` (типово: вимкнено)
+ - `channels.telegram.actions.sticker` (за замовчуванням: вимкнено)
Примітка: `edit` і `topic-create` наразі ввімкнені за замовчуванням і не мають окремих перемикачів `channels.telegram.actions.*`.
- Надсилання під час виконання використовують активний знімок конфігурації/секретів (запуск/перезавантаження), тому шляхи дій не виконують ситуативне повторне розв’язання SecretRef для кожного надсилання.
+ Runtime-надсилання використовують активний знімок config/secrets (запуск/перезавантаження), тому шляхи дій не виконують ad-hoc повторне розв'язання SecretRef для кожного надсилання.
Семантика видалення реакцій: [/tools/reactions](/uk/tools/reactions)
-
- Telegram підтримує явні теги потоків відповідей у згенерованому виводі:
+
+ Telegram підтримує явні теги reply threading у згенерованому виводі:
- `[[reply_to_current]]` відповідає на повідомлення, яке спричинило запуск
- `[[reply_to:]]` відповідає на конкретний ID повідомлення Telegram
`channels.telegram.replyToMode` керує обробкою:
- - `off` (типово)
+ - `off` (за замовчуванням)
- `first`
- `all`
- Коли потоки відповідей увімкнені й оригінальний текст або підпис Telegram доступний, OpenClaw автоматично включає нативний уривок цитати Telegram. Telegram обмежує нативний текст цитати 1024 кодовими одиницями UTF-16, тому довші повідомлення цитуються з початку й повертаються до звичайної відповіді, якщо Telegram відхиляє цитату.
+ Коли reply threading увімкнено й доступний оригінальний текст або підпис Telegram, OpenClaw автоматично включає нативний фрагмент цитати Telegram. Telegram обмежує нативний текст цитати 1024 кодовими одиницями UTF-16, тому довші повідомлення цитуються від початку й повертаються до звичайної відповіді, якщо Telegram відхиляє цитату.
- Примітка: `off` вимикає неявні потоки відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються.
+ Примітка: `off` вимикає неявний reply threading. Явні теги `[[reply_to_*]]` усе одно враховуються.
-
- Супергрупи форумів:
+
+ Форумні супергрупи:
- - ключі сесій тем додають `:topic:`
- - відповіді та індикатор набору спрямовуються до потоку теми
- - шлях конфігурації теми:
+ - ключі сесій теми додають `:topic:`
+ - відповіді та typing спрямовуються в потік теми
+ - шлях config теми:
`channels.telegram.groups..topics.`
- Особливий випадок загальної теми (`threadId=1`):
+ Спеціальний випадок загальної теми (`threadId=1`):
- надсилання повідомлень пропускає `message_thread_id` (Telegram відхиляє `sendMessage(...thread_id=1)`)
- - дії набору все одно включають `message_thread_id`
+ - дії typing усе ще включають `message_thread_id`
- Успадкування тем: записи тем успадковують налаштування групи, якщо їх не перевизначено (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
- `agentId` застосовується лише до теми й не успадковується з типових значень групи.
+ Наслідування теми: записи теми наслідують налаштування групи, якщо їх не перевизначено (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
+ `agentId` є лише тематичним і не наслідується з типових значень групи.
- **Маршрутизація агентів за темами**: кожна тема може маршрутизуватися до іншого агента через установлення `agentId` у конфігурації теми. Це дає кожній темі власний ізольований робочий простір, пам’ять і сесію. Приклад:
+ **Маршрутизація агента за темою**: кожна тема може маршрутизуватися до іншого агента через установлення `agentId` у config теми. Це дає кожній темі власний ізольований workspace, пам'ять і сесію. Приклад:
```json5
{
@@ -550,24 +550,24 @@ curl "https://api.telegram.org/bot/getUpdates"
Після цього кожна тема має власний ключ сесії: `agent:zu:telegram:group:-1001234567890:topic:3`
- **Постійне прив’язування тем ACP**: теми форумів можуть закріплювати сесії harness ACP через типізовані прив’язки ACP верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та ідентифікатором із кваліфікатором теми, наприклад `-1001234567890:topic:42`). Наразі область дії обмежена темами форумів у групах/супергрупах. Див. [Агенти ACP](/uk/tools/acp-agents).
+ **Постійне прив'язування теми ACP**: форумні теми можуть закріплювати сесії ACP harness через типізовані прив'язки ACP верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та кваліфікованим за темою id на кшталт `-1001234567890:topic:42`). Наразі обмежено форумними темами в групах/супергрупах. Див. [Агенти ACP](/uk/tools/acp-agents).
- **Породження прив’язаного до потоку ACP з чату**: `/acp spawn --thread here|auto` прив’язує поточну тему до нової сесії ACP; подальші повідомлення спрямовуються туди напряму. OpenClaw закріплює підтвердження породження в темі. Потрібно, щоб `channels.telegram.threadBindings.spawnSessions` залишалося ввімкненим (типово: `true`).
+ **Прив'язаний до потоку ACP spawn із чату**: `/acp spawn --thread here|auto` прив'язує поточну тему до нової сесії ACP; подальші повідомлення маршрутизуються туди напряму. OpenClaw закріплює підтвердження spawn у темі. Потрібно, щоб `channels.telegram.threadBindings.spawnSessions` лишалося ввімкненим (за замовчуванням: `true`).
- Контекст шаблону надає `MessageThreadId` і `IsForum`. DM-чати з `message_thread_id` за замовчуванням зберігають маршрутизацію DM і метадані відповіді в пласких сесіях; вони використовують ключі сесій із підтримкою потоків лише коли налаштовано `threadReplies: "inbound"`, `threadReplies: "always"`, `requireTopic: true` або відповідну конфігурацію теми. Використовуйте `channels.telegram.dm.threadReplies` верхнього рівня як типове значення облікового запису або `direct..threadReplies` для одного DM.
+ Контекст шаблону надає `MessageThreadId` і `IsForum`. DM-чати з `message_thread_id` за замовчуванням зберігають DM-маршрутизацію та метадані відповіді у плоских сесіях; вони використовують ключі сесій з урахуванням потоків лише тоді, коли налаштовано `threadReplies: "inbound"`, `threadReplies: "always"`, `requireTopic: true` або відповідний config теми. Використовуйте верхньорівневий `channels.telegram.dm.threadReplies` для типового значення облікового запису або `direct..threadReplies` для одного DM.
-
+
### Аудіоповідомлення
- Telegram розрізняє голосові нотатки й аудіофайли.
+ Telegram розрізняє голосові повідомлення та аудіофайли.
- - типово: поведінка аудіофайлу
- - тег `[[audio_as_voice]]` у відповіді агента примусово надсилає голосову нотатку
- - транскрипти вхідних голосових нотаток оформлюються в контексті агента як машинно згенерований,
- ненадійний текст; виявлення згадок усе одно використовує сирий
- транскрипт, тому голосові повідомлення з обмеженням за згадкою продовжують працювати.
+ - за замовчуванням: поведінка аудіофайлу
+ - тег `[[audio_as_voice]]` у відповіді агента, щоб примусово надіслати голосове повідомлення
+ - транскрипти вхідних голосових повідомлень оформлюються як машинно згенерований,
+ недовірений текст у контексті агента; виявлення згадок усе одно використовує сирий
+ транскрипт, тому голосові повідомлення з mention-gating продовжують працювати.
Приклад дії повідомлення:
@@ -619,7 +619,7 @@ curl "https://api.telegram.org/bot/getUpdates"
- `~/.openclaw/telegram/sticker-cache.json`
- Стікери описуються один раз (коли можливо) і кешуються, щоб зменшити кількість повторних викликів vision.
+ Стікери описуються один раз (коли це можливо) і кешуються, щоб зменшити повторні виклики розпізнавання зображень.
Увімкнути дії зі стікерами:
@@ -659,31 +659,31 @@ curl "https://api.telegram.org/bot/getUpdates"
-
+
Реакції Telegram надходять як оновлення `message_reaction` (окремо від корисного навантаження повідомлень).
- Коли ввімкнено, OpenClaw ставить у чергу системні події на кшталт:
+ Коли це ввімкнено, OpenClaw ставить у чергу системні події на кшталт:
- `Telegram reaction added: 👍 by Alice (@alice) on msg 42`
Конфігурація:
- - `channels.telegram.reactionNotifications`: `off | own | all` (стандартно: `own`)
- - `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` (стандартно: `minimal`)
+ - `channels.telegram.reactionNotifications`: `off | own | all` (типово: `own`)
+ - `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` (типово: `minimal`)
Примітки:
- - `own` означає лише реакції користувачів на повідомлення, надіслані ботом (за найкращою спробою через кеш надісланих повідомлень).
- - Події реакцій усе одно враховують засоби контролю доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); неавторизовані відправники відкидаються.
- - Telegram не надає ідентифікатори тредів в оновленнях реакцій.
- - нефорумні групи спрямовуються до сеансу групового чату
- - форумні групи спрямовуються до сеансу загальної теми групи (`:topic:1`), а не до точної початкової теми
+ - `own` означає лише реакції користувачів на повідомлення, надіслані ботом (за найкращої спроби через кеш надісланих повідомлень).
+ - Події реакцій усе ще поважають засоби контролю доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); неавторизовані відправники відкидаються.
+ - Telegram не надає ідентифікатори гілок в оновленнях реакцій.
+ - групи не форумного типу спрямовуються до сесії групового чату
+ - форумні групи спрямовуються до сесії загальної теми групи (`:topic:1`), а не до точної початкової теми
- `allowed_updates` для polling/webhook автоматично включає `message_reaction`.
+ `allowed_updates` для polling/webhook автоматично містить `message_reaction`.
-
+
`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
@@ -700,12 +700,12 @@ curl "https://api.telegram.org/bot/getUpdates"
-
- Записи конфігурації каналу ввімкнені стандартно (`configWrites !== false`).
+
+ Записи конфігурації каналу ввімкнено типово (`configWrites !== false`).
- Записи, ініційовані Telegram, включають:
+ Записи, ініційовані Telegram, охоплюють:
- - події міграції групи (`migrate_to_chat_id`) для оновлення `channels.telegram.groups`
+ - події міграції груп (`migrate_to_chat_id`) для оновлення `channels.telegram.groups`
- `/config set` і `/config unset` (потрібне ввімкнення команд)
Вимкнути:
@@ -722,32 +722,32 @@ curl "https://api.telegram.org/bot/getUpdates"
-
- Стандартно використовується long polling. Для режиму webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов'язкові `webhookPath`, `webhookHost`, `webhookPort` (стандартні значення `/telegram-webhook`, `127.0.0.1`, `8787`).
+
+ Типово використовується long polling. Для режиму webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов’язкові `webhookPath`, `webhookHost`, `webhookPort` (типово `/telegram-webhook`, `127.0.0.1`, `8787`).
- Локальний слухач прив'язується до `127.0.0.1:8787`. Для публічного входу або поставте зворотний проксі перед локальним портом, або свідомо задайте `webhookHost: "0.0.0.0"`.
+ Локальний слухач прив’язується до `127.0.0.1:8787`. Для публічного ingress або поставте зворотний проксі перед локальним портом, або навмисно задайте `webhookHost: "0.0.0.0"`.
- Режим Webhook перевіряє захисти запиту, секретний токен Telegram і JSON-тіло перед поверненням `200` до Telegram.
- Потім OpenClaw обробляє оновлення асинхронно через ті самі лінії бота для кожного чату/теми, що використовуються long polling, тому повільні ходи агента не затримують ACK доставки Telegram.
+ Режим webhook перевіряє захист запиту, секретний токен Telegram і JSON-тіло перед поверненням `200` до Telegram.
+ Потім OpenClaw обробляє оновлення асинхронно через ті самі доріжки бота для кожного чату/теми, що й long polling, тому повільні ходи агента не затримують ACK доставки Telegram.
-
- - Стандартне значення `channels.telegram.textChunkLimit` — 4000.
- - `channels.telegram.chunkMode="newline"` надає перевагу межам абзаців (порожнім рядкам) перед поділом за довжиною.
- - `channels.telegram.mediaMaxMb` (стандартно 100) обмежує розмір вхідних і вихідних медіа Telegram.
- - `channels.telegram.mediaGroupFlushMs` (стандартно 500) керує тим, як довго альбоми/медіагрупи Telegram буферизуються перед тим, як OpenClaw надсилає їх як одне вхідне повідомлення. Збільште це значення, якщо частини альбому надходять із запізненням; зменште його, щоб скоротити затримку відповіді на альбом.
- - `channels.telegram.timeoutSeconds` перевизначає час очікування клієнта Telegram API (якщо не задано, застосовується стандарт grammY). Клієнти ботів обмежують налаштовані значення, нижчі за 60-секундний захист вихідних запитів тексту/набирання, щоб grammY не переривав видиму доставку відповіді до того, як зможуть спрацювати транспортний захист і fallback OpenClaw. Long polling усе одно використовує 45-секундний захист запиту `getUpdates`, щоб неактивні опитування не залишалися покинутими безстроково.
- - `channels.telegram.pollingStallThresholdMs` стандартно має значення `120000`; налаштовуйте в межах від `30000` до `600000` лише для хибнопозитивних перезапусків через зависання polling.
- - історія контексту групи використовує `channels.telegram.historyLimit` або `messages.groupChat.historyLimit` (стандартно 50); `0` вимикає.
- - додатковий контекст відповіді/цитати/пересилання наразі передається як отриманий.
- - allowlist Telegram насамперед обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
+
+ - Типове значення `channels.telegram.textChunkLimit` — 4000.
+ - `channels.telegram.chunkMode="newline"` надає перевагу межам абзаців (порожнім рядкам) перед розбиттям за довжиною.
+ - `channels.telegram.mediaMaxMb` (типово 100) обмежує розмір вхідних і вихідних медіа Telegram.
+ - `channels.telegram.mediaGroupFlushMs` (типово 500) керує тим, як довго альбоми/медіагрупи Telegram буферизуються, перш ніж OpenClaw передасть їх як одне вхідне повідомлення. Збільште це значення, якщо частини альбому надходять із запізненням; зменште його, щоб скоротити затримку відповіді на альбом.
+ - `channels.telegram.timeoutSeconds` перевизначає тайм-аут клієнта Telegram API (якщо не задано, застосовується типове значення grammY). Клієнти ботів обмежують налаштовані значення нижче 60-секундного захисту вихідних запитів тексту/набору, щоб grammY не переривав доставку видимої відповіді до того, як спрацює транспортний захист і резервний механізм OpenClaw. Long polling усе ще використовує 45-секундний захист запиту `getUpdates`, щоб неактивні опитування не залишалися покинутими безкінечно.
+ - `channels.telegram.pollingStallThresholdMs` типово дорівнює `120000`; налаштовуйте в діапазоні від `30000` до `600000` лише для хибнопозитивних перезапусків через зависання polling.
+ - історія контексту групи використовує `channels.telegram.historyLimit` або `messages.groupChat.historyLimit` (типово 50); `0` вимикає.
+ - додатковий контекст відповіді/цитати/пересилання наразі передається як отримано.
+ - allowlist Telegram передусім обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- Елементи керування історією DM:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms[""].historyLimit`
- - Конфігурація `channels.telegram.retry` застосовується до помічників надсилання Telegram (CLI/інструменти/дії) для відновлюваних вихідних помилок API. Доставка фінальної відповіді для вхідних повідомлень також використовує обмежений повтор safe-send для збоїв Telegram до підключення, але не повторює неоднозначні мережеві оболонки після надсилання, які можуть дублювати видимі повідомлення.
+ - Конфігурація `channels.telegram.retry` застосовується до допоміжних засобів надсилання Telegram (CLI/інструменти/дії) для відновлюваних вихідних помилок API. Доставка фінальної відповіді для вхідних повідомлень також використовує обмежений повтор безпечного надсилання для збоїв Telegram до підключення, але не повторює неоднозначні мережеві оболонки після надсилання, які можуть дублювати видимі повідомлення.
- Ціль надсилання CLI може бути числовим ID чату або ім'ям користувача:
+ Ціль надсилання CLI може бути числовим ID чату або іменем користувача:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
@@ -769,7 +769,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
- `--poll-duration-seconds` (5-600)
- `--poll-anonymous`
- `--poll-public`
- - `--thread-id` для форумних тем (або використайте ціль `:topic:`)
+ - `--thread-id` для форумних тем (або використовуйте ціль `:topic:`)
Надсилання Telegram також підтримує:
@@ -780,25 +780,25 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Обмеження дій:
- `channels.telegram.actions.sendMessage=false` вимикає вихідні повідомлення Telegram, включно з опитуваннями
- - `channels.telegram.actions.poll=false` вимикає створення опитувань Telegram, залишаючи звичайні надсилання ввімкненими
+ - `channels.telegram.actions.poll=false` вимикає створення опитувань Telegram, залишаючи звичайне надсилання ввімкненим
-
- Telegram підтримує схвалення exec у DM схвалювачів і може необов'язково публікувати запити в початковому чаті або темі. Схвалювачі мають бути числовими ID користувачів Telegram.
+
+ Telegram підтримує схвалення exec у DM схвалювачів і може необов’язково публікувати запити в початковому чаті або темі. Схвалювачі мають бути числовими ID користувачів Telegram.
Шлях конфігурації:
- `channels.telegram.execApprovals.enabled` (автоматично вмикається, коли можна визначити принаймні одного схвалювача)
- - `channels.telegram.execApprovals.approvers` (відступає до числових ID власників із `commands.ownerAllowFrom`)
- - `channels.telegram.execApprovals.target`: `dm` (стандартно) | `channel` | `both`
+ - `channels.telegram.execApprovals.approvers` (повертається до числових ID власників із `commands.ownerAllowFrom`)
+ - `channels.telegram.execApprovals.target`: `dm` (типово) | `channel` | `both`
- `agentFilter`, `sessionFilter`
- `channels.telegram.allowFrom`, `groupAllowFrom` і `defaultTo` керують тим, хто може спілкуватися з ботом і куди він надсилає звичайні відповіді. Вони не роблять когось схвалювачем exec. Перше схвалене спарювання DM ініціалізує `commands.ownerAllowFrom`, коли власника команд ще не існує, тому налаштування з одним власником усе одно працює без дублювання ID у `execApprovals.approvers`.
+ `channels.telegram.allowFrom`, `groupAllowFrom` і `defaultTo` керують тим, хто може говорити з ботом і куди він надсилає звичайні відповіді. Вони не роблять когось схвалювачем exec. Перше схвалене сполучення DM початково заповнює `commands.ownerAllowFrom`, коли власника команд ще немає, тому налаштування з одним власником усе ще працює без дублювання ID у `execApprovals.approvers`.
- Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє у форумну тему, OpenClaw зберігає тему для запиту схвалення та подальшого повідомлення. Схвалення exec стандартно спливають через 30 хвилин.
+ Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє у форумну тему, OpenClaw зберігає тему для запиту схвалення та подальшого повідомлення. Схвалення exec типово спливають через 30 хвилин.
- Кнопки inline-схвалення також потребують, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). ID схвалень із префіксом `plugin:` визначаються через схвалення plugin; інші спершу визначаються через схвалення exec.
+ Inline-кнопки схвалення також потребують, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). ID схвалення з префіксом `plugin:` визначаються через схвалення plugin; інші спершу визначаються через схвалення exec.
Див. [Схвалення exec](/uk/tools/exec-approvals).
@@ -807,14 +807,14 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
## Елементи керування відповідями про помилки
-Коли агент стикається з помилкою доставки або provider, Telegram може або відповісти текстом помилки, або приховати його. Цю поведінку контролюють два ключі конфігурації:
+Коли агент стикається з помилкою доставки або провайдера, Telegram може або відповісти текстом помилки, або придушити його. Цією поведінкою керують два ключі конфігурації:
-| Ключ | Значення | Стандартно | Опис |
-| ----------------------------------- | ----------------- | ---------- | ---------------------------------------------------------------------------------------------------- |
-| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає дружнє повідомлення про помилку в чат. `silent` повністю пригнічує відповіді про помилки. |
-| `channels.telegram.errorCooldownMs` | число (мс) | `60000` | Мінімальний час між відповідями про помилки до того самого чату. Запобігає спаму помилками під час збоїв. |
+| Ключ | Значення | Типово | Опис |
+| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- |
+| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає дружнє повідомлення про помилку в чат. `silent` повністю придушує відповіді про помилки. |
+| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Мінімальний час між відповідями про помилки до того самого чату. Запобігає спаму помилками під час збоїв. |
-Підтримуються перевизначення для окремих облікових записів, груп і тем (таке саме успадкування, як і для інших ключів конфігурації Telegram).
+Підтримуються перевизначення для кожного облікового запису, групи та теми (те саме успадкування, що й для інших ключів конфігурації Telegram).
```json5
{
@@ -835,56 +835,56 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
## Усунення несправностей
-
+
- Якщо `requireMention=false`, режим приватності Telegram має дозволяти повну видимість.
- BotFather: `/setprivacy` -> Disable
- потім видаліть і повторно додайте бота до групи
- `openclaw channels status` попереджає, коли конфігурація очікує групові повідомлення без згадки.
- `openclaw channels status --probe` може перевіряти явні числові ID груп; wildcard `"*"` не можна перевірити на членство.
- - швидкий тест сеансу: `/activation always`.
+ - швидка перевірка сесії: `/activation always`.
-
+
- - коли існує `channels.telegram.groups`, група має бути в списку (або включати `"*"`)
+ - коли існує `channels.telegram.groups`, група має бути в списку (або містити `"*"`)
- перевірте членство бота в групі
- перегляньте журнали: `openclaw logs --follow` для причин пропуску
-
+
- - авторизуйте свою ідентичність відправника (спарювання та/або числовий `allowFrom`)
- - авторизація команд усе одно застосовується, навіть коли політика групи — `open`
+ - авторизуйте свою ідентичність відправника (сполучення та/або числовий `allowFrom`)
+ - авторизація команд усе ще застосовується, навіть коли політика групи — `open`
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що нативне меню має забагато записів; зменште кількість команд plugin/skill/користувацьких команд або вимкніть нативні меню
- - стартові виклики `deleteMyCommands` / `setMyCommands` і виклики набирання `sendChatAction` обмежені й повторюються один раз через транспортний fallback Telegram у разі тайм-ауту запиту. Постійні мережеві/fetch-помилки зазвичай указують на проблеми доступності DNS/HTTPS до `api.telegram.org`
+ - стартові виклики `deleteMyCommands` / `setMyCommands` і виклики набору `sendChatAction` обмежені й повторюються один раз через транспортний резерв Telegram у разі тайм-ауту запиту. Постійні мережеві/fetch-помилки зазвичай вказують на проблеми досяжності DNS/HTTPS до `api.telegram.org`
-
+
- `getMe returned 401` — це збій автентифікації Telegram для налаштованого токена бота.
- - Повторно скопіюйте або згенеруйте заново токен бота в BotFather, а потім оновіть `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts..botToken` або `TELEGRAM_BOT_TOKEN` для типового облікового запису.
- - `deleteWebhook 401 Unauthorized` під час запуску також є збоєм автентифікації; трактування цього як "Webhook не існує" лише відкладе той самий збій через неправильний токен до пізніших викликів API.
+ - Повторно скопіюйте або згенеруйте заново токен бота в BotFather, а потім оновіть `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts..botToken` або `TELEGRAM_BOT_TOKEN` для стандартного облікового запису.
+ - `deleteWebhook 401 Unauthorized` під час запуску також є збоєм автентифікації; трактування цього як «Webhook не існує» лише відклало б той самий збій через поганий токен до пізніших викликів API.
-
+
- - Node 22+ і власний fetch/proxy можуть спричинити негайне переривання, якщо типи AbortSignal не збігаються.
- - Деякі хости спочатку розв’язують `api.telegram.org` в IPv6; несправний вихідний IPv6-трафік може спричиняти періодичні збої Telegram API.
- - Якщо журнали містять `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює ці помилки як відновлювані мережеві помилки.
- - Під час запуску polling OpenClaw повторно використовує успішну стартову перевірку `getMe` для grammY, тому runner не потребує другого `getMe` перед першим `getUpdates`.
- - Якщо `deleteWebhook` завершується з тимчасовою мережевою помилкою під час запуску polling, OpenClaw переходить до long polling замість виконання ще одного контрольного виклику перед polling. Webhook, який усе ще активний, проявляється як конфлікт `getUpdates`; після цього OpenClaw перебудовує транспорт Telegram і повторює очищення Webhook.
- - Якщо сокети Telegram перевикористовуються за коротким фіксованим інтервалом, перевірте, чи не занизьке значення `channels.telegram.timeoutSeconds`; клієнти ботів обмежують налаштовані значення нижче за захисні межі вихідних запитів і `getUpdates`, але старіші випуски могли переривати кожен polling або відповідь, коли це значення було нижче за ці межі.
- - Якщо журнали містять `Polling stall detected`, OpenClaw перезапускає polling і перебудовує транспорт Telegram після 120 секунд без завершеної перевірки життєздатності long-poll за замовчуванням.
- - `openclaw channels status --probe` і `openclaw doctor` попереджають, коли запущений обліковий запис polling не завершив `getUpdates` після стартового пільгового періоду, коли запущений обліковий запис Webhook не завершив `setWebhook` після стартового пільгового періоду або коли остання успішна активність транспорту polling застаріла.
- - Збільшуйте `channels.telegram.pollingStallThresholdMs` лише тоді, коли довготривалі виклики `getUpdates` працюють справно, але ваш хост усе одно повідомляє про хибні перезапуски через зупинку polling. Постійні зупинки зазвичай вказують на проблеми proxy, DNS, IPv6 або вихідного TLS між хостом і `api.telegram.org`.
+ - Node 22+ і власний fetch/proxy можуть спричиняти негайне переривання, якщо типи AbortSignal не збігаються.
+ - Деякі хости спершу розв’язують `api.telegram.org` в IPv6; несправний вихідний IPv6-трафік може спричиняти періодичні збої Telegram API.
+ - Якщо журнали містять `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює ці операції як відновлювані мережеві помилки.
+ - Під час запуску опитування OpenClaw повторно використовує успішну стартову перевірку `getMe` для grammY, тож виконавцю не потрібен другий `getMe` перед першим `getUpdates`.
+ - Якщо `deleteWebhook` завершується збоєм через тимчасову мережеву помилку під час запуску опитування, OpenClaw переходить до long polling замість ще одного передопитувального виклику площини керування. Якщо Webhook усе ще активний, це проявляється як конфлікт `getUpdates`; OpenClaw тоді перебудовує транспорт Telegram і повторює очищення Webhook.
+ - Якщо сокети Telegram перестворюються з коротким фіксованим інтервалом, перевірте, чи не занизьке значення `channels.telegram.timeoutSeconds`; клієнти ботів обмежують налаштовані значення нижче захисних меж вихідних запитів і `getUpdates`, але старіші випуски могли переривати кожне опитування або відповідь, коли це значення було нижчим за ці межі.
+ - Якщо журнали містять `Polling stall detected`, OpenClaw типово перезапускає опитування й перебудовує транспорт Telegram після 120 секунд без завершеної перевірки життєздатності long-poll.
+ - `openclaw channels status --probe` і `openclaw doctor` попереджають, коли запущений обліковий запис опитування не завершив `getUpdates` після стартового пільгового періоду, коли запущений обліковий запис Webhook не завершив `setWebhook` після стартового пільгового періоду, або коли остання успішна активність транспорту опитування застаріла.
+ - Збільшуйте `channels.telegram.pollingStallThresholdMs` лише тоді, коли довготривалі виклики `getUpdates` працюють нормально, але ваш хост усе ще повідомляє про хибні перезапуски через зависання опитування. Постійні зависання зазвичай вказують на проблеми з proxy, DNS, IPv6 або вихідним TLS між хостом і `api.telegram.org`.
- Telegram також враховує змінні середовища proxy процесу для транспорту Bot API, зокрема `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` та їхні варіанти в нижньому регістрі. `NO_PROXY` / `no_proxy` усе ще можуть обходити `api.telegram.org`.
- - Якщо керований proxy OpenClaw налаштовано через `OPENCLAW_PROXY_URL` для сервісного середовища і стандартні змінні середовища proxy відсутні, Telegram також використовує цю URL-адресу для транспорту Bot API.
- - На VPS-хостах із нестабільним прямим вихідним трафіком/TLS спрямовуйте виклики Telegram API через `channels.telegram.proxy`:
+ - Якщо керований proxy OpenClaw налаштовано через `OPENCLAW_PROXY_URL` для сервісного середовища й немає стандартних змінних середовища proxy, Telegram також використовує цей URL для транспорту Bot API.
+ - На VPS-хостах із нестабільним прямим виходом/TLS маршрутизуйте виклики Telegram API через `channels.telegram.proxy`:
```yaml
channels:
@@ -892,8 +892,8 @@ channels:
proxy: socks5://:@proxy-host:1080
```
- - Node 22+ за замовчуванням використовує `autoSelectFamily=true` (крім WSL2). Порядок результатів DNS Telegram враховує `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`, потім `channels.telegram.network.dnsResultOrder`, потім типовий порядок процесу, наприклад `NODE_OPTIONS=--dns-result-order=ipv4first`; якщо нічого не застосовується, Node 22+ повертається до `ipv4first`.
- - Якщо ваш хост — WSL2 або явно краще працює лише з IPv4, примусово задайте вибір сімейства:
+ - Node 22+ типово використовує `autoSelectFamily=true` (крім WSL2). Порядок результатів DNS для Telegram враховує `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`, потім `channels.telegram.network.dnsResultOrder`, потім стандарт процесу, як-от `NODE_OPTIONS=--dns-result-order=ipv4first`; якщо нічого не застосовується, Node 22+ повертається до `ipv4first`.
+ - Якщо ваш хост є WSL2 або явно краще працює в режимі лише IPv4, примусово задайте вибір сімейства:
```yaml
channels:
@@ -902,7 +902,7 @@ channels:
autoSelectFamily: false
```
- - Відповіді з діапазону для бенчмарків RFC 2544 (`198.18.0.0/15`) уже дозволені
+ - Відповіді діапазону RFC 2544 для бенчмаркінгу (`198.18.0.0/15`) уже дозволені
для завантажень медіа Telegram за замовчуванням. Якщо довірений fake-IP або
прозорий proxy переписує `api.telegram.org` на якусь іншу
приватну/внутрішню/спеціального використання адресу під час завантажень медіа, ви можете
@@ -915,18 +915,18 @@ channels:
dangerouslyAllowPrivateNetwork: true
```
- - Те саме явне ввімкнення доступне для кожного облікового запису в
+ - Така сама опція доступна для окремого облікового запису за адресою
`channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`.
- - Якщо ваш proxy розв’язує медіахости Telegram у `198.18.x.x`, спочатку залиште
+ - Якщо ваш proxy розв’язує хости медіа Telegram у `198.18.x.x`, спершу залиште
небезпечний прапорець вимкненим. Медіа Telegram уже дозволяє діапазон
- бенчмарків RFC 2544 за замовчуванням.
+ RFC 2544 для бенчмаркінгу за замовчуванням.
`channels.telegram.network.dangerouslyAllowPrivateNetwork` послаблює захист Telegram
- медіа від SSRF. Використовуйте його лише для довірених середовищ proxy,
- контрольованих оператором, як-от маршрутизація fake-IP у Clash, Mihomo або Surge, коли вони
- синтезують приватні або спеціального використання відповіді поза діапазоном бенчмарків
- RFC 2544. Залишайте його вимкненим для звичайного доступу Telegram через публічний інтернет.
+ від SSRF для медіа. Використовуйте це лише для довірених середовищ proxy,
+ контрольованих оператором, як-от Clash, Mihomo або маршрутизація fake-IP у Surge, коли вони
+ синтезують приватні або спеціального використання відповіді поза діапазоном RFC 2544 для бенчмаркінгу.
+ Для звичайного публічного доступу Telegram через інтернет залишайте це вимкненим.
- Перевизначення середовища (тимчасові):
@@ -943,23 +943,23 @@ dig +short api.telegram.org AAAA
-Додаткова допомога: [усунення неполадок каналів](/uk/channels/troubleshooting).
+Додаткова допомога: [Усунення несправностей каналів](/uk/channels/troubleshooting).
## Довідник конфігурації
-Основний довідник: [довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
+Основний довідник: [Довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
-
+
- запуск/автентифікація: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` має вказувати на звичайний файл; символічні посилання відхиляються)
-- керування доступом: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, верхньорівневі `bindings[]` (`type: "acp"`)
-- схвалення виконання: `execApprovals`, `accounts.*.execApprovals`
-- команди/меню: `commands.native`, `commands.nativeSkills`, `customCommands`
+- контроль доступу: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, верхньорівневий `bindings[]` (`type: "acp"`)
+- затвердження exec: `execApprovals`, `accounts.*.execApprovals`
+- команда/меню: `commands.native`, `commands.nativeSkills`, `customCommands`
- потоки/відповіді: `replyToMode`, `dm.threadReplies`, `direct.*.threadReplies`
-- потокова передача: `streaming` (попередній перегляд), `streaming.preview.toolProgress`, `blockStreaming`
-- форматування/доставлення: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
+- потокове передавання: `streaming` (попередній перегляд), `streaming.preview.toolProgress`, `blockStreaming`
+- форматування/доставка: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
- медіа/мережа: `mediaMaxMb`, `mediaGroupFlushMs`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
-- власний корінь API: `apiRoot` (лише корінь Bot API; не додавайте `/bot`)
+- власний корінь API: `apiRoot` (лише корінь Bot API; не включайте `/bot`)
- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- дії/можливості: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
- реакції: `reactionNotifications`, `reactionLevel`
@@ -969,28 +969,28 @@ dig +short api.telegram.org AAAA
-Пріоритет кількох облікових записів: коли налаштовано два або більше ідентифікаторів облікових записів, задайте `channels.telegram.defaultAccount` (або додайте `channels.telegram.accounts.default`), щоб зробити типову маршрутизацію явною. Інакше OpenClaw повертається до першого нормалізованого ідентифікатора облікового запису, і `openclaw doctor` попереджає про це. Іменовані облікові записи успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
+Пріоритетність кількох облікових записів: коли налаштовано два або більше ідентифікаторів облікових записів, задайте `channels.telegram.defaultAccount` (або включіть `channels.telegram.accounts.default`), щоб явно визначити стандартну маршрутизацію. Інакше OpenClaw повертається до першого нормалізованого ідентифікатора облікового запису, а `openclaw doctor` попереджає. Іменовані облікові записи успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
## Пов’язане
-
- Зв’яжіть користувача Telegram із Gateway.
+
+ Сполучіть користувача Telegram із Gateway.
-
- Поведінка allowlist для груп і тем.
+
+ Поведінка списку дозволених груп і тем.
-
+
Маршрутизуйте вхідні повідомлення до агентів.
-
+
Модель загроз і посилення захисту.
-
- Зіставте групи й теми з агентами.
+
+ Зіставляйте групи й теми з агентами.
-
+
Міжканальна діагностика.
diff --git a/docs/uk/concepts/progress-drafts.md b/docs/uk/concepts/progress-drafts.md
new file mode 100644
index 000000000..32be8ee76
--- /dev/null
+++ b/docs/uk/concepts/progress-drafts.md
@@ -0,0 +1,293 @@
+---
+read_when:
+ - Налаштування видимих оновлень перебігу для тривалих ходів чату
+ - Вибір між режимами часткового, блокового потокового передавання та потокового передавання прогресу
+ - Пояснення того, як OpenClaw оновлює одне повідомлення каналу під час виконання роботи
+ - Усунення несправностей із чернетками перебігу виконання, окремими повідомленнями про перебіг виконання або резервним механізмом фіналізації
+summary: 'Чернетки прогресу: одне видиме повідомлення про роботу, що триває, яке оновлюється під час роботи агента'
+title: Чернетки прогресу
+x-i18n:
+ generated_at: "2026-05-03T21:05:52Z"
+ model: gpt-5.5
+ provider: openai
+ source_hash: 0fc0dff38232228b49872d66f4498f065675cdd3abf3a0f4003cb34fcbb7de8c
+ source_path: concepts/progress-drafts.md
+ workflow: 16
+---
+
+Чернетки перебігу роботи роблять тривалі ходи агента живими в чаті, не перетворюючи
+розмову на стос тимчасових відповідей зі статусом.
+
+Коли чернетки перебігу роботи увімкнені, OpenClaw створює одне видиме повідомлення
+про роботу в процесі, оновлює його, поки агент читає, планує, викликає інструменти
+або чекає на схвалення, а потім перетворює цю чернетку на фінальну відповідь,
+коли канал може зробити це безпечно.
+
+```text
+Shelling
+- reading recent channel context
+- checking matching issues
+- preparing reply
+```
+
+Використовуйте чернетки перебігу роботи, коли потрібне одне охайне повідомлення
+зі статусом під час роботи з багатьма інструментами та фінальна відповідь після
+завершення ходу.
+
+## Швидкий старт
+
+Увімкніть чернетки перебігу роботи для кожного каналу через `streaming.mode: "progress"`:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ },
+ },
+ },
+}
+```
+
+Зазвичай цього достатньо. OpenClaw вибере автоматичну однослівну мітку, додаватиме
+стислі рядки перебігу, поки відбувається корисна робота, і приглушить дубльовані
+окремі повідомлення про перебіг для цього ходу.
+
+## Що бачать користувачі
+
+Чернетка перебігу роботи має дві частини:
+
+| Частина | Призначення |
+| --------------- | ---------------------------------------------------------------- |
+| Мітка | Короткий заголовок, наприклад `Thinking` або `Shelling`. |
+| Рядки перебігу | Стислі оновлення запуску, як-от виклики інструментів, кроки завдання або схвалення. |
+
+Мітка з'являється одразу, коли агент починає відповідати. Рядки перебігу додаються
+лише тоді, коли агент надсилає корисні оновлення про роботу. Фінальна відповідь
+замінює чернетку, коли це можливо; інакше OpenClaw надсилає фінальну відповідь
+звичайним способом і очищає або припиняє оновлювати чернетку відповідно до транспорту каналу.
+
+## Вибір режиму
+
+`channels..streaming.mode` керує видимою поведінкою роботи в процесі:
+
+| Режим | Найкраще для | Що з'являється в чаті |
+| ---------- | ------------------------------------ | -------------------------------------------------- |
+| `off` | Тихі канали | Лише фінальна відповідь. |
+| `partial` | Спостереження за появою тексту відповіді | Одна чернетка, яку редагують найновішим текстом відповіді. |
+| `block` | Більші фрагменти попереднього перегляду відповіді | Один попередній перегляд, що оновлюється або доповнюється більшими фрагментами. |
+| `progress` | Ходи з багатьма інструментами або тривалі ходи | Одна чернетка статусу, потім фінальна відповідь. |
+
+Виберіть `progress`, коли користувачам важливіше "що відбувається", ніж спостерігати,
+як текст відповіді транслюється токен за токеном.
+
+Виберіть `partial`, коли сама відповідь є сигналом перебігу.
+
+Виберіть `block`, коли потрібні оновлення попереднього перегляду чернетки більшими
+текстовими фрагментами. У Discord і Telegram `streaming.mode: "block"` усе ще є
+потоковим попереднім переглядом, а не звичайною доставкою блоками. Використовуйте
+`streaming.block.enabled` або застарілий `blockStreaming`, коли потрібні звичайні
+блокові відповіді.
+
+## Налаштування міток
+
+Мітки перебігу роботи містяться в `channels..streaming.progress`.
+
+Типова мітка — `auto`, яка вибирає з вбудованого в OpenClaw набору однослівних
+міток:
+
+```text
+Thinking
+Shelling
+Scuttling
+Clawing
+Pinching
+Molting
+Bubbling
+Tiding
+Reefing
+Cracking
+Sifting
+Brining
+Nautiling
+Krilling
+Barnacling
+Lobstering
+Tidepooling
+Pearling
+Snapping
+Surfacing
+```
+
+Використайте фіксовану мітку:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ progress: {
+ label: "Investigating",
+ },
+ },
+ },
+ },
+}
+```
+
+Використайте власний автоматичний набір міток:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ progress: {
+ label: "auto",
+ labels: ["Checking", "Reading", "Testing", "Finishing"],
+ },
+ },
+ },
+ },
+}
+```
+
+Приховайте мітку й показуйте лише рядки перебігу:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ progress: {
+ label: false,
+ },
+ },
+ },
+ },
+}
+```
+
+## Керування рядками перебігу
+
+Рядки перебігу ввімкнені типово в режимі перебігу. Вони походять із реальних
+подій запуску: запусків інструментів, оновлень елементів, планів завдань,
+схвалень, виводу команд, підсумків патчів і подібної активності агента.
+
+Обмежте кількість рядків, що залишаються видимими:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ progress: {
+ maxLines: 4,
+ },
+ },
+ },
+ },
+}
+```
+
+Збережіть одну чернетку перебігу, але приховайте рядки інструментів і завдань:
+
+```json5
+{
+ channels: {
+ discord: {
+ streaming: {
+ mode: "progress",
+ progress: {
+ toolProgress: false,
+ },
+ },
+ },
+ },
+}
+```
+
+З `toolProgress: false` OpenClaw усе одно приглушує старі окремі повідомлення
+про перебіг інструментів для цього ходу. Канал залишається візуально тихим до
+фінальної відповіді, за винятком мітки, якщо її налаштовано.
+
+## Поведінка каналів
+
+Кожен канал використовує найохайніший транспорт, який він підтримує:
+
+| Канал | Транспорт перебігу | Примітки |
+| --------------- | -------------------------------------- | --------------------------------------------------------------------- |
+| Discord | Надіслати одне повідомлення, потім редагувати його. | Фінальний текст редагується на місці, коли вміщується в одне безпечне повідомлення попереднього перегляду. |
+| Matrix | Надіслати одну подію, потім редагувати її. | Конфігурація потокової передачі на рівні облікового запису керує чернетками на рівні облікового запису. |
+| Microsoft Teams | Нативний потік Teams в особистих чатах. | `streaming.mode: "block"` зіставляється з блоковою доставкою Teams. |
+| Slack | Нативний потік або редагований допис-чернетка. | Доступність гілки впливає на те, чи можна використовувати нативну потокову передачу. |
+| Telegram | Надіслати одне повідомлення, потім редагувати його. | Старі видимі чернетки можуть замінюватися, щоб фінальні часові позначки залишалися корисними. |
+| Mattermost | Редагований допис-чернетка. | Активність інструментів згортається в той самий допис у стилі чернетки. |
+
+Канали без безпечної підтримки редагування зазвичай повертаються до індикаторів
+набору тексту або доставки лише фінальної відповіді.
+
+## Фіналізація
+
+Коли фінальна відповідь готова, OpenClaw намагається зберегти чат чистим:
+
+- Якщо чернетка може безпечно стати фінальною відповіддю, OpenClaw редагує її на місці.
+- Якщо канал використовує нативну потокову передачу перебігу, OpenClaw фіналізує
+ цей потік, коли нативний транспорт приймає фінальний текст.
+- Якщо фінальна відповідь містить медіа, запит на схвалення, явну ціль відповіді,
+ забагато фрагментів або невдале редагування/надсилання, OpenClaw надсилає фінальну
+ відповідь через звичайний шлях доставки каналу.
+
+Резервний шлях навмисний. Краще надіслати нову фінальну відповідь, ніж втратити
+текст, помилково прив'язати відповідь до гілки або перезаписати чернетку корисним
+навантаженням, яке канал не може безпечно представити.
+
+## Усунення несправностей
+
+**Я бачу лише фінальну відповідь.**
+
+Перевірте, що `channels..streaming.mode` встановлено на `progress` для
+облікового запису або каналу, який обробив повідомлення. Деякі групові шляхи або
+шляхи відповіді з цитуванням можуть вимкнути попередній перегляд чернетки для
+ходу, коли канал не може безпечно редагувати правильне повідомлення.
+
+**Я бачу мітку, але не бачу рядків інструментів.**
+
+Перевірте `streaming.progress.toolProgress`. Якщо значення `false`, OpenClaw
+зберігає поведінку однієї чернетки, але приховує рядки перебігу інструментів і завдань.
+
+**Я бачу нове фінальне повідомлення замість відредагованої чернетки.**
+
+Це резервний механізм безпеки. Це може трапитися для відповідей із медіа, довгих
+відповідей, явних цілей відповіді, старих чернеток Telegram, відсутніх цілей гілок
+Slack, видалених повідомлень попереднього перегляду або невдалої фіналізації нативного потоку.
+
+**Я все ще бачу окремі повідомлення про перебіг.**
+
+Режим перебігу приглушує типові окремі повідомлення про перебіг інструментів,
+коли чернетка активна. Якщо окремі повідомлення все ще з'являються, перевірте,
+що хід справді використовує режим перебігу, а не `streaming.mode: "off"` або шлях
+каналу, який не може створити чернетку для цього повідомлення.
+
+**Teams поводиться інакше, ніж Discord або Telegram.**
+
+Microsoft Teams використовує нативний потік в особистих чатах замість універсального
+транспорту попереднього перегляду з надсиланням і редагуванням. Teams також трактує
+`streaming.mode: "block"` як блокову доставку Teams, оскільки не має такого самого
+блокового режиму попереднього перегляду чернеток, який використовують Discord і Telegram.
+
+## Пов'язане
+
+- [Потокова передача й фрагментація](/uk/concepts/streaming)
+- [Повідомлення](/uk/concepts/messages)
+- [Конфігурація каналів](/uk/gateway/config-channels)
+- [Discord](/uk/channels/discord)
+- [Matrix](/uk/channels/matrix)
+- [Microsoft Teams](/uk/channels/msteams)
+- [Slack](/uk/channels/slack)
+- [Telegram](/uk/channels/telegram)
diff --git a/docs/uk/concepts/streaming.md b/docs/uk/concepts/streaming.md
index 1cf7e8697..298e19e36 100644
--- a/docs/uk/concepts/streaming.md
+++ b/docs/uk/concepts/streaming.md
@@ -1,29 +1,29 @@
---
read_when:
- - Пояснення того, як потокове передавання або розбиття на фрагменти працює в каналах
- - Зміна поведінки потокового передавання блоків або розбиття каналу на фрагменти
- - Налагодження дубльованих/передчасних блокових відповідей або потокового передавання попереднього перегляду каналу
-summary: Поведінка потокового передавання та розбиття на фрагменти (блокові відповіді, потокове передавання попереднього перегляду каналу, зіставлення режимів)
-title: Потокове передавання та розбиття на фрагменти
+ - Пояснення роботи потокової передачі або розбиття на фрагменти в каналах
+ - Зміна поведінки блокового потокового передавання або фрагментації каналів
+ - Налагодження дубльованих/передчасних блокових відповідей або потокового попереднього перегляду каналу
+summary: Поведінка потокового передавання + поділу на фрагменти (блокові відповіді, потокове передавання попереднього перегляду каналу, зіставлення режимів)
+title: Потокове передавання та поділ на фрагменти
x-i18n:
- generated_at: "2026-05-03T15:48:04Z"
+ generated_at: "2026-05-03T21:05:45Z"
model: gpt-5.5
provider: openai
- source_hash: 4a62b333123d317cad9a8063a68c5c026fb91b23731a6ccdb97d995d9bb8bdba
+ source_hash: 1335f4f5532060bd8bf839683a2b1fbab38f38887c5583135652b4753e0f6a50
source_path: concepts/streaming.md
workflow: 16
---
-OpenClaw має два окремі рівні потокової передачі:
+OpenClaw має два окремі шари потокового передавання:
-- **Потокова передача блоків (канали):** надсилає завершені **блоки** під час написання асистентом. Це звичайні повідомлення каналів (не дельти токенів).
-- **Потоковий попередній перегляд (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації.
+- **Потокове передавання блоків (канали):** надсилає завершені **блоки** під час написання відповіді асистентом. Це звичайні повідомлення каналу (не дельти токенів).
+- **Потокове передавання попереднього перегляду (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації.
-Сьогодні **справжньої потокової передачі дельт токенів** у повідомлення каналів немає. Потоковий попередній перегляд працює на основі повідомлень (надсилання + редагування/додавання).
+Сьогодні **справжнього потокового передавання дельт токенів** у повідомлення каналів немає. Потокове передавання попереднього перегляду працює на основі повідомлень (надсилання + редагування/додавання).
-## Потокова передача блоків (повідомлення каналів)
+## Потокове передавання блоків (повідомлення каналу)
-Потокова передача блоків надсилає вивід асистента великими фрагментами в міру їх появи.
+Потокове передавання блоків надсилає вивід асистента грубими фрагментами в міру його появи.
```
Model output
@@ -35,107 +35,112 @@ Model output
└─ channel send (block replies)
```
-Легенда:
+Позначення:
-- `text_delta/events`: події потоку моделі (можуть бути розрідженими для непотокових моделей).
-- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + бажаний розрив.
+- `text_delta/events`: події потоку моделі (можуть бути розрідженими для моделей без потокового передавання).
+- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + бажану точку розбиття.
- `channel send`: фактичні вихідні повідомлення (блокові відповіді).
**Елементи керування:**
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (типово вимкнено).
-- Перевизначення каналів: `*.blockStreaming` (і варіанти для окремих акаунтів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
+- Перевизначення каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
- `agents.defaults.blockStreamingBreak`: `"text_end"` або `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання потокових блоків перед надсиланням).
- Жорстке обмеження каналу: `*.textChunkLimit` (наприклад, `channels.whatsapp.textChunkLimit`).
-- Режим фрагментації каналу: `*.chunkMode` (`length` типово, `newline` ділить за порожніми рядками (межами абзаців) перед фрагментацією за довжиною).
-- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) ділить високі відповіді, щоб уникнути обрізання в UI.
+- Режим фрагментації каналу: `*.chunkMode` (`length` типово, `newline` розбиває за порожніми рядками (межами абзаців) перед фрагментацією за довжиною).
+- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває високі відповіді, щоб уникнути обрізання в UI.
**Семантика меж:**
-- `text_end`: передавати блоки потоком одразу після того, як chunker їх видає; скидати буфер на кожному `text_end`.
-- `message_end`: чекати завершення повідомлення асистента, потім скинути буферизований вивід.
+- `text_end`: передає блоки потоком щойно `chunker` їх видає; скидає буфер на кожному `text_end`.
+- `message_end`: чекає завершення повідомлення асистента, потім скидає буферизований вивід.
-`message_end` усе одно використовує chunker, якщо буферизований текст перевищує `maxChars`, тому наприкінці може видати кілька фрагментів.
+`message_end` все одно використовує `chunker`, якщо буферизований текст перевищує `maxChars`, тому наприкінці може видати кілька фрагментів.
-### Доставка медіа з потоковою передачею блоків
+### Доставлення медіа з потоковим передаванням блоків
-Директиви `MEDIA:` є звичайними метаданими доставки. Коли потокова передача блоків рано надсилає медіаблок, OpenClaw запам’ятовує цю доставку для поточного ходу. Якщо фінальне навантаження асистента повторює ту саму URL-адресу медіа, фінальна доставка вилучає дубльоване медіа замість повторного надсилання вкладення.
+Директиви `MEDIA:` є звичайними метаданими доставлення. Коли потокове передавання блоків рано надсилає медіаблок, OpenClaw запам’ятовує це доставлення для поточного ходу. Якщо фінальне корисне навантаження асистента повторює той самий URL медіа, фінальне доставлення вилучає дубльоване медіа замість повторного надсилання вкладення.
-Точні дублікати фінальних навантажень пригнічуються. Якщо фінальне навантаження додає окремий текст навколо медіа, яке вже було передано потоком, OpenClaw усе одно надсилає новий текст, зберігаючи медіа як одноразову доставку. Це запобігає дублюванню голосових нотаток або файлів у каналах на кшталт Telegram, коли агент видає `MEDIA:` під час потокової передачі, а провайдер також включає його в завершену відповідь.
+Точні дублікати фінальних корисних навантажень пригнічуються. Якщо фінальне корисне навантаження додає окремий текст навколо медіа, яке вже було передано потоком, OpenClaw все одно надсилає новий текст, зберігаючи медіа як одноразове доставлення. Це запобігає дублюванню голосових нотаток або файлів у таких каналах, як Telegram, коли агент видає `MEDIA:` під час потокового передавання, а провайдер також включає його в завершену відповідь.
-## Алгоритм фрагментації (нижні/верхні межі)
+## Алгоритм фрагментації (нижня/верхня межі)
-Фрагментацію блоків реалізує `EmbeddedBlockChunker`:
+Фрагментація блоків реалізована в `EmbeddedBlockChunker`:
- **Нижня межа:** не видавати, доки буфер >= `minChars` (якщо не примусово).
-- **Верхня межа:** надавати перевагу розбиттю перед `maxChars`; якщо примусово, розбивати на `maxChars`.
-- **Бажаний розрив:** `paragraph` → `newline` → `sentence` → `whitespace` → жорсткий розрив.
-- **Огорожі коду:** ніколи не розбивати всередині огорож; під час примусового розбиття на `maxChars` закрити + знову відкрити огорожу, щоб Markdown залишався коректним.
+- **Верхня межа:** надавати перевагу розбиттю до `maxChars`; якщо примусово, розбивати на `maxChars`.
+- **Бажана точка розбиття:** `paragraph` → `newline` → `sentence` → `whitespace` → жорсткий розрив.
+- **Кодові блоки:** ніколи не розбивати всередині блоків; під час примусового розбиття на `maxChars` закрити + знову відкрити блок, щоб Markdown залишався коректним.
-`maxChars` обмежується до `textChunkLimit` каналу, тому неможливо перевищити обмеження окремого каналу.
+`maxChars` обмежується до `textChunkLimit` каналу, тому перевищити обмеження конкретного каналу неможливо.
-## Об’єднання (злиття потокових блоків)
+## Коалесценція (об’єднання потокових блоків)
-Коли потокову передачу блоків увімкнено, OpenClaw може **об’єднувати послідовні блокові фрагменти** перед їх надсиланням. Це зменшує «спам з одного рядка», водночас зберігаючи поступовий вивід.
+Коли потокове передавання блоків увімкнено, OpenClaw може **об’єднувати послідовні блокові фрагменти** перед їхнім надсиланням. Це зменшує «спам одним рядком», водночас забезпечуючи поступовий вивід.
-- Об’єднання чекає на **періоди простою** (`idleMs`) перед скиданням.
+- Коалесценція чекає на **паузи бездіяльності** (`idleMs`) перед скиданням.
- Буфери обмежуються `maxChars` і будуть скинуті, якщо перевищать його.
-- `minChars` не дає надсилати крихітні фрагменти, доки не накопичиться достатньо тексту (фінальне скидання завжди надсилає залишковий текст).
-- З’єднувач виводиться з `blockStreamingChunk.breakPreference` (`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → пробіл).
-- Перевизначення каналів доступні через `*.blockStreamingCoalesce` (зокрема конфігурації для окремих акаунтів).
-- Типове значення `minChars` для об’єднання підвищено до 1500 для Signal/Slack/Discord, якщо його не перевизначено.
+- `minChars` запобігає надсиланню крихітних фрагментів, доки не накопичиться достатньо тексту (фінальне скидання завжди надсилає залишковий текст).
+- З’єднувач визначається з `blockStreamingChunk.breakPreference` (`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → пробіл).
+- Перевизначення каналів доступні через `*.blockStreamingCoalesce` (включно з конфігураціями для окремих облікових записів).
+- Типове `minChars` для коалесценції підвищено до 1500 для Signal/Slack/Discord, якщо не перевизначено.
-## Людський темп між блоками
+## Людиноподібний темп між блоками
-Коли потокову передачу блоків увімкнено, можна додати **випадкову паузу** між блоковими відповідями (після першого блоку). Це робить відповіді з кількох бульбашок природнішими.
+Коли потокове передавання блоків увімкнено, можна додати **рандомізовану паузу** між блоковими відповідями (після першого блока). Це робить відповіді з кількох бульбашок природнішими.
-- Конфігурація: `agents.defaults.humanDelay` (перевизначення для кожного агента через `agents.list[].humanDelay`).
+- Конфігурація: `agents.defaults.humanDelay` (перевизначається для кожного агента через `agents.list[].humanDelay`).
- Режими: `off` (типово), `natural` (800–2500 мс), `custom` (`minMs`/`maxMs`).
-- Застосовується лише до **блокових відповідей**, а не до фінальних відповідей чи підсумків інструментів.
+- Застосовується лише до **блокових відповідей**, не до фінальних відповідей чи підсумків інструментів.
-## "Передавати фрагменти чи все"
+## "Потоково передавати фрагменти або все"
Це відповідає:
-- **Передавати фрагменти:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (видавати в міру генерації). Каналам, крім Telegram, також потрібне `*.blockStreaming: true`.
-- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (скинути один раз, можливо кількома фрагментами, якщо дуже довго).
-- **Без потокової передачі блоків:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
+- **Потоково передавати фрагменти:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (надсилати в міру генерації). Каналам не Telegram також потрібен `*.blockStreaming: true`.
+- **Потоково передати все наприкінці:** `blockStreamingBreak: "message_end"` (скинути один раз, можливо кількома фрагментами, якщо дуже довго).
+- **Без потокового передавання блоків:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
-**Примітка щодо каналів:** Потокова передача блоків **вимкнена, якщо**
-`*.blockStreaming` явно не встановлено в `true`. Канали можуть передавати потоком живий попередній перегляд (`channels..streaming`) без блокових відповідей.
+**Примітка щодо каналів:** Потокове передавання блоків **вимкнено, якщо**
+`*.blockStreaming` явно не встановлено в `true`. Канали можуть передавати живий попередній перегляд
+(`channels..streaming`) без блокових відповідей.
-Нагадування про розташування конфігурації: типові значення `blockStreaming*` містяться в `agents.defaults`, а не в кореневій конфігурації.
+Нагадування про розташування конфігурації: типові значення `blockStreaming*` містяться в
+`agents.defaults`, а не в кореневій конфігурації.
-## Режими потокового попереднього перегляду
+## Режими потокового передавання попереднього перегляду
Канонічний ключ: `channels..streaming`
Режими:
-- `off`: вимкнути потоковий попередній перегляд.
+- `off`: вимкнути потокове передавання попереднього перегляду.
- `partial`: один попередній перегляд, який замінюється найновішим текстом.
- `block`: попередній перегляд оновлюється фрагментованими/доданими кроками.
-- `progress`: попередній перегляд прогресу/статусу під час генерації, фінальна відповідь після завершення.
+- `progress`: попередній перегляд прогресу/стану під час генерації, фінальна відповідь після завершення.
+
+`streaming.mode: "block"` — це режим потокового передавання попереднього перегляду для каналів із можливістю редагування, таких як Discord і Telegram. Він не вмикає доставлення блоків у каналі там. Використовуйте `streaming.block.enabled` або застарілий ключ каналу `blockStreaming`, коли потрібні звичайні блокові відповіді. Microsoft Teams є винятком: у нього немає транспорту блоків чорнового попереднього перегляду, тому `streaming.mode: "block"` відображається на блокове доставлення Teams замість нативного часткового/прогресивного потокового передавання.
### Відповідність каналів
-| Канал | `off` | `partial` | `block` | `progress` |
-| ---------- | ----- | --------- | ------- | --------------------------- |
-| Telegram | ✅ | ✅ | ✅ | зіставляється з `partial` |
-| Discord | ✅ | ✅ | ✅ | зіставляється з `partial` |
-| Slack | ✅ | ✅ | ✅ | ✅ |
-| Mattermost | ✅ | ✅ | ✅ | ✅ |
+| Канал | `off` | `partial` | `block` | `progress` |
+| ---------- | ----- | --------- | ------- | ----------------------------- |
+| Telegram | ✅ | ✅ | ✅ | редагований чернетковий прогрес |
+| Discord | ✅ | ✅ | ✅ | редагований чернетковий прогрес |
+| Slack | ✅ | ✅ | ✅ | ✅ |
+| Mattermost | ✅ | ✅ | ✅ | ✅ |
+| MS Teams | ✅ | ✅ | ✅ | нативний потік прогресу |
Лише Slack:
-- `channels.slack.streaming.nativeTransport` перемикає нативні виклики Slack API для потокової передачі, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
-- Нативна потокова передача Slack і статус треду асистента Slack потребують цільового треду відповіді. DM верхнього рівня не показують такий попередній перегляд у стилі треду, але все одно можуть використовувати чернеткові дописи попереднього перегляду Slack і редагування.
+- `channels.slack.streaming.nativeTransport` перемикає виклики нативного API потокового передавання Slack, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
+- Нативне потокове передавання Slack і статус потоку асистента Slack потребують цільового потоку відповіді. DM верхнього рівня не показують такий попередній перегляд у стилі потоку, але все одно можуть використовувати чернеткові дописи попереднього перегляду Slack і редагування.
Міграція застарілих ключів:
-- Telegram: застарілі значення `streamMode` і скалярні/булеві значення `streaming` виявляються та мігруються шляхами сумісності doctor/config до `streaming.mode`.
+- Telegram: застарілий `streamMode` і скалярні/булеві значення `streaming` виявляються й мігруються шляхами doctor/сумісності конфігурації до `streaming.mode`.
- Discord: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`.
- Slack: `streamMode` автоматично мігрує до `streaming.mode`; булевий `streaming` автоматично мігрує до `streaming.mode` плюс `streaming.nativeTransport`; застарілий `nativeStreaming` автоматично мігрує до `streaming.nativeTransport`.
@@ -143,50 +148,50 @@ Model output
Telegram:
-- Використовує `sendMessage` + оновлення попереднього перегляду через `editMessageText` у DM і групах/темах.
-- Надсилає нове фінальне повідомлення замість редагування на місці, коли попередній перегляд був видимий приблизно одну хвилину, а потім очищає попередній перегляд, щоб мітка часу Telegram відображала завершення відповіді.
-- Потоковий попередній перегляд пропускається, коли потокову передачу блоків Telegram явно увімкнено (щоб уникнути подвійної потокової передачі).
+- Використовує `sendMessage` + `editMessageText` для оновлень попереднього перегляду в DM і групах/темах.
+- Надсилає нове фінальне повідомлення замість редагування на місці, коли попередній перегляд був видимий приблизно одну хвилину, а потім очищає попередній перегляд, щоб позначка часу Telegram відображала завершення відповіді.
+- Потокове передавання попереднього перегляду пропускається, коли потокове передавання блоків Telegram явно ввімкнено (щоб уникнути подвійного потокового передавання).
- `/reasoning stream` може записувати міркування в попередній перегляд.
Discord:
- Використовує надсилання + редагування повідомлень попереднього перегляду.
-- Режим `block` використовує фрагментацію чернетки (`draftChunk`).
-- Потоковий попередній перегляд пропускається, коли потокову передачу блоків Discord явно увімкнено.
-- Фінальні медіа, помилки та навантаження з явною відповіддю скасовують очікувані попередні перегляди без скидання нової чернетки, а потім використовують звичайну доставку.
+- Режим `block` використовує чернеткову фрагментацію (`draftChunk`).
+- Потокове передавання попереднього перегляду пропускається, коли потокове передавання блоків Discord явно ввімкнено.
+- Фінальні медіа, помилки й корисні навантаження явної відповіді скасовують очікувані попередні перегляди без скидання нового чернеткового повідомлення, а потім використовують звичайне доставлення.
Slack:
-- `partial` може використовувати нативну потокову передачу Slack (`chat.startStream`/`append`/`stop`), коли вона доступна.
-- `block` використовує чернеткові попередні перегляди у стилі додавання.
-- `progress` використовує текст попереднього перегляду статусу, потім фінальну відповідь.
-- DM верхнього рівня без треду відповіді використовують чернеткові дописи попереднього перегляду та редагування замість нативної потокової передачі Slack.
-- Нативний і чернетковий потоковий попередній перегляд пригнічують блокові відповіді для цього ходу, тому відповідь Slack передається потоком лише одним шляхом доставки.
-- Фінальні медіа/помилки та фінали прогресу не створюють одноразових чернеткових повідомлень; лише текстові/блокові фінали, які можуть редагувати попередній перегляд, скидають очікуваний чернетковий текст.
+- `partial` може використовувати нативне потокове передавання Slack (`chat.startStream`/`append`/`stop`), коли доступно.
+- `block` використовує чернеткові попередні перегляди в стилі додавання.
+- `progress` використовує текст попереднього перегляду стану, а потім фінальну відповідь.
+- DM верхнього рівня без потоку відповіді використовують чернеткові дописи попереднього перегляду та редагування замість нативного потокового передавання Slack.
+- Нативне й чернеткове потокове передавання попереднього перегляду пригнічує блокові відповіді для цього ходу, тому відповідь Slack передається потоком лише одним шляхом доставлення.
+- Фінальні корисні навантаження медіа/помилок і фінали прогресу не створюють одноразові чернеткові повідомлення; лише текстові/блокові фінали, які можуть редагувати попередній перегляд, скидають очікуваний чернетковий текст.
Mattermost:
-- Передає думки, активність інструментів і частковий текст відповіді в один чернетковий допис попереднього перегляду, який фіналізується на місці, коли фінальну відповідь безпечно надіслати.
-- Повертається до надсилання нового фінального допису, якщо допис попереднього перегляду було видалено або він інакше недоступний на момент фіналізації.
-- Фінальні медіа/помилки скасовують очікувані оновлення попереднього перегляду перед звичайною доставкою замість скидання тимчасового допису попереднього перегляду.
+- Передає мислення, активність інструментів і частковий текст відповіді в один чернетковий допис попереднього перегляду, який фіналізується на місці, коли фінальну відповідь безпечно надсилати.
+- Повертається до надсилання нового фінального допису, якщо допис попереднього перегляду було видалено або він інакше недоступний під час фіналізації.
+- Фінальні корисні навантаження медіа/помилок скасовують очікувані оновлення попереднього перегляду перед звичайним доставленням замість скидання тимчасового допису попереднього перегляду.
Matrix:
- Чернеткові попередні перегляди фіналізуються на місці, коли фінальний текст може повторно використати подію попереднього перегляду.
-- Фінали лише з медіа, помилками та з невідповідністю цілі відповіді скасовують очікувані оновлення попереднього перегляду перед звичайною доставкою; уже видимий застарілий попередній перегляд редагується як видалений.
+- Фінали лише з медіа, помилками й невідповідністю цілі відповіді скасовують очікувані оновлення попереднього перегляду перед звичайним доставленням; уже видимий застарілий попередній перегляд редагується.
### Оновлення попереднього перегляду прогресу інструментів
-Потоковий попередній перегляд також може включати оновлення **прогресу інструментів** — короткі рядки статусу на кшталт "пошук в інтернеті", "читання файлу" або "виклик інструмента", які з’являються в тому самому повідомленні попереднього перегляду, доки інструменти працюють, перед фінальною відповіддю. Це підтримує візуальну активність багатоетапних ходів з інструментами, а не тишу між першим попереднім переглядом думок і фінальною відповіддю.
+Потокове передавання попереднього перегляду також може містити оновлення **прогресу інструментів** — короткі рядки стану на кшталт "пошук в інтернеті", "читання файлу" або "виклик інструмента", — які з’являються в тому самому повідомленні попереднього перегляду, поки інструменти працюють, до фінальної відповіді. Це зберігає багатокрокові ходи з інструментами візуально активними, а не мовчазними між першим попереднім переглядом мислення та фінальною відповіддю.
Підтримувані поверхні:
-- **Discord**, **Slack**, **Telegram** і **Matrix** типово передають прогрес інструментів у редагування живого попереднього перегляду, коли потоковий попередній перегляд активний.
+- **Discord**, **Slack**, **Telegram** і **Matrix** типово передають прогрес інструментів у редагування живого попереднього перегляду, коли потокове передавання попереднього перегляду активне. Microsoft Teams використовує свій нативний потік прогресу в особистих чатах.
- Telegram постачається з увімкненими оновленнями попереднього перегляду прогресу інструментів із `v2026.4.22`; збереження їх увімкненими підтримує цю випущену поведінку.
- **Mattermost** уже включає активність інструментів у свій єдиний чернетковий допис попереднього перегляду (див. вище).
-- Редагування прогресу інструментів дотримуються активного режиму потокового попереднього перегляду; вони пропускаються, коли потоковий попередній перегляд має значення `off` або коли потокова передача блоків перебрала повідомлення. У Telegram `streaming.mode: "off"` означає лише фінальну відповідь: загальні повідомлення про прогрес також пригнічуються замість доставки як окремі повідомлення "Працюємо...", тоді як запити підтвердження, медіанавантаження та помилки все одно маршрутизуються звичайно.
-- Щоб зберегти потоковий попередній перегляд, але приховати рядки прогресу інструментів, установіть `streaming.preview.toolProgress` у `false` для цього каналу. Щоб повністю вимкнути редагування попереднього перегляду, установіть `streaming.mode` у `off`.
-- Вибрані відповіді з цитатою Telegram є винятком: коли `replyToMode` не дорівнює `"off"` і наявний текст вибраної цитати, OpenClaw пропускає потік попереднього перегляду відповіді для цього ходу, тому рядки попереднього перегляду прогресу інструментів не можуть відобразитися. Відповіді на поточне повідомлення без тексту вибраної цитати все одно зберігають потоковий попередній перегляд. Докладніше див. у [документації каналу Telegram](/uk/channels/telegram).
+- Редагування прогресу інструментів дотримуються активного режиму потокового передавання попереднього перегляду; вони пропускаються, коли потокове передавання попереднього перегляду `off` або коли потокове передавання блоків узяло повідомлення на себе. У Telegram `streaming.mode: "off"` означає лише фінал: загальні повідомлення про прогрес також пригнічуються замість доставлення як окремі повідомлення стану, тоді як запити на схвалення, медіакорисні навантаження й помилки все одно маршрутизуються звичайно.
+- Щоб зберегти потокове передавання попереднього перегляду, але приховати рядки прогресу інструментів, встановіть `streaming.preview.toolProgress` у `false` для цього каналу. Щоб повністю вимкнути редагування попереднього перегляду, встановіть `streaming.mode` у `off`.
+- Вибрані цитовані відповіді Telegram є винятком: коли `replyToMode` не `"off"` і присутній вибраний текст цитати, OpenClaw пропускає потік попереднього перегляду відповіді для цього ходу, тому рядки попереднього перегляду прогресу інструментів не можуть відобразитися. Відповіді на поточне повідомлення без вибраного тексту цитати все одно зберігають потокове передавання попереднього перегляду. Докладніше див. у [документації каналу Telegram](/uk/channels/telegram).
Приклад:
@@ -207,6 +212,7 @@ Matrix:
## Пов’язане
-- [Повідомлення](/uk/concepts/messages) — життєвий цикл повідомлень і доставка
-- [Повторна спроба](/uk/concepts/retry) — поведінка повторної спроби в разі помилки доставки
-- [Канали](/uk/channels) — підтримка потокової передачі для кожного каналу
+- [Чернетки прогресу](/uk/concepts/progress-drafts) — видимі повідомлення про роботу в процесі, що оновлюються під час довгих ходів
+- [Повідомлення](/uk/concepts/messages) — життєвий цикл і доставлення повідомлень
+- [Повторна спроба](/uk/concepts/retry) — поведінка повторної спроби після помилки доставлення
+- [Канали](/uk/channels) — підтримка потокового передавання для кожного каналу
diff --git a/docs/uk/gateway/config-channels.md b/docs/uk/gateway/config-channels.md
index b20582074..304096931 100644
--- a/docs/uk/gateway/config-channels.md
+++ b/docs/uk/gateway/config-channels.md
@@ -1,56 +1,56 @@
---
read_when:
- Налаштування Plugin каналу (автентифікація, контроль доступу, кілька облікових записів)
- - Усунення несправностей із ключами конфігурації для кожного каналу
- - Аудит політики особистих повідомлень, групової політики або контролю згадувань
-summary: 'Налаштування каналів: контроль доступу, сполучення, ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо'
+ - Усунення неполадок із ключами конфігурації для окремих каналів
+ - Аудит політики особистих повідомлень, групової політики або обмеження згадок
+summary: 'Конфігурація каналів: контроль доступу, сполучення та ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо'
title: Конфігурація — канали
x-i18n:
- generated_at: "2026-05-03T18:20:39Z"
+ generated_at: "2026-05-03T21:06:17Z"
model: gpt-5.5
provider: openai
- source_hash: b92d7fe63a3d27c1740abb0986d6641d14d8d1017051f1744a02e1db77fda3c8
+ source_hash: 366bcee632c649219bbf6cf44d64cc13d966ec813abc74d54088d89de640b47c
source_path: gateway/config-channels.md
workflow: 16
---
-Ключі конфігурації для кожного каналу в `channels.*`. Охоплює доступ до DM і груп,
-налаштування кількох облікових записів, обмеження за згадкою та ключі для окремих каналів Slack, Discord,
-Telegram, WhatsApp, Matrix, iMessage та інших вбудованих plugins каналів.
+Поканальні ключі конфігурації в `channels.*`. Охоплює доступ до DM і груп,
+налаштування з кількома обліковими записами, керування згадками та поканальні ключі для Slack, Discord,
+Telegram, WhatsApp, Matrix, iMessage та інших вбудованих Plugin каналів.
Для агентів, інструментів, середовища виконання gateway та інших ключів верхнього рівня див.
-[довідник конфігурації](/uk/gateway/configuration-reference).
+[Довідник конфігурації](/uk/gateway/configuration-reference).
## Канали
-Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не встановлено `enabled: false`).
+Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`).
### Доступ до DM і груп
-Усі канали підтримують політики DM і політики груп:
+Усі канали підтримують політики DM і груп:
-| Політика DM | Поведінка |
+| Політика DM | Поведінка |
| ------------------- | --------------------------------------------------------------- |
-| `pairing` (за замовчуванням) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
-| `allowlist` | Лише відправники в `allowFrom` (або в сховищі дозволених після сполучення) |
-| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
+| `pairing` (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
+| `allowlist` | Лише відправники в `allowFrom` (або в парному allow-сховищі) |
+| `open` | Дозволити всі вхідні DM (потребує `allowFrom: ["*"]`) |
| `disabled` | Ігнорувати всі вхідні DM |
-| Політика груп | Поведінка |
-| -------------------- | ----------------------------------------------------- |
-| `allowlist` (за замовчуванням) | Лише групи, що відповідають налаштованому списку дозволених |
-| `open` | Обходити списки дозволених для груп (обмеження за згадкою все одно застосовується) |
-| `disabled` | Блокувати всі повідомлення груп/кімнат |
+| Політика груп | Поведінка |
+| --------------------- | ------------------------------------------------------ |
+| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist |
+| `open` | Обійти групові allowlist (керування згадками все ще діє) |
+| `disabled` | Блокувати всі повідомлення груп/кімнат |
-`channels.defaults.groupPolicy` задає стандартне значення, коли `groupPolicy` провайдера не встановлено.
-Коди сполучення спливають через 1 годину. Очікувані запити на сполучення DM обмежені **3 на канал**.
+`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` провайдера не встановлено.
+Коди сполучення спливають через 1 годину. Очікувані запити на сполучення DM обмежено **3 на канал**.
Якщо блок провайдера повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску.
### Перевизначення моделі каналу
-Використовуйте `channels.modelByChannel`, щоб закріпити певні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналу застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`).
+Використовуйте `channels.modelByChannel`, щоб закріпити певні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналу застосовується, коли сеанс ще не має перевизначення моделі (наприклад, установленого через `/model`).
```json5
{
@@ -71,7 +71,7 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих plugin
}
```
-### Стандартні значення каналів і Heartbeat
+### Типові значення каналів і Heartbeat
Використовуйте `channels.defaults` для спільної поведінки політики груп і Heartbeat між провайдерами:
@@ -92,14 +92,14 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих plugin
```
- `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
{
@@ -137,7 +137,7 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-
+
```json5
{
@@ -155,10 +155,10 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-- Вихідні команди за замовчуванням використовують обліковий запис `default`, якщо він є; інакше перший налаштований id облікового запису (після сортування).
-- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
+- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше перший налаштований ID облікового запису (відсортовано).
+- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли він збігається з ID налаштованого облікового запису.
- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`.
-- Перевизначення для облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
+- Перевизначення для окремого облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
@@ -217,14 +217,14 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символічні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для стандартного облікового запису.
-- `apiRoot` — це лише корінь Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy-корінь, а не `https://api.telegram.org/bot`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot`.
-- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
-- У налаштуваннях із кількома обліковими записами (2+ id облікових записів) задайте явний стандартний обліковий запис (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли він відсутній або недійсний.
+- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; симлінки відхиляються), з `TELEGRAM_BOT_TOKEN` як резервом для типового облікового запису.
+- `apiRoot` — це лише корінь Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy корінь, а не `https://api.telegram.org/bot`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot`.
+- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з ID налаштованого облікового запису.
+- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явний типовий (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли він відсутній або недійсний.
- `configWrites: false` блокує ініційовані Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`).
-- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [агентах ACP](/uk/tools/acp-agents#persistent-channel-bindings).
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантику полів спільно описано в [Агенти ACP](/uk/tools/acp-agents#persistent-channel-bindings).
- Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах).
-- Політика повторних спроб: див. [політику повторних спроб](/uk/concepts/retry).
+- Політика повторів: див. [Політика повторів](/uk/concepts/retry).
### Discord
@@ -279,7 +279,7 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
historyLimit: 20,
textChunkLimit: 2000,
chunkMode: "length", // length | newline
- streaming: "off", // off | partial | block | progress (progress maps to partial on Discord)
+ streaming: "off", // off | partial | block | progress
maxLinesPerMessage: 17,
ui: {
components: {
@@ -329,41 +329,41 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для типового облікового запису.
-- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; параметри повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку середовища виконання.
-- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим id облікового запису.
-- Використовуйте `user:` (DM) або `channel:` (канал гільдії) для цілей доставки; прості числові ID відхиляються.
-- Слаги гільдій пишуться малими літерами, а пробіли замінюються на `-`; ключі каналів використовують назву у вигляді слага (без `#`). Надавайте перевагу ID гільдій.
-- Повідомлення, створені ботами, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно відфільтровуються).
+- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервом для стандартного облікового запису.
+- Прямі вихідні виклики, що надають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку середовища виконання.
+- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
+- Використовуйте `user:` (DM) або `channel:` (канал гільдії) для цілей доставки; голі числові ID відхиляються.
+- Слаґи гільдій мають нижній регістр із пробілами, заміненими на `-`; ключі каналів використовують ім’я зі слаґом (без `#`). Віддавайте перевагу ID гільдій.
+- Повідомлення, створені ботами, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).
-- `channels.discord.mentionAliases` відображає стабільний вихідний текст `@handle` на Discord ID користувачів перед надсиланням, щоб відомих учасників команди можна було згадувати детерміновано, навіть коли тимчасовий кеш каталогу порожній. Перевизначення для окремих облікових записів розміщуються в `channels.discord.accounts..mentionAliases`.
-- `maxLinesPerMessage` (типово 17) розбиває високі повідомлення, навіть якщо вони мають менше ніж 2000 символів.
+- `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` і прив’язана доставка/маршрутизація)
+ - `enabled`: перевизначення Discord для функцій сеансів, прив’язаних до гілок (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язана доставка/маршрутизація)
- `idleHours`: перевизначення Discord для автоматичного скасування фокуса через неактивність у годинах (`0` вимикає)
- `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає)
- - `spawnSessions`: перемикач для `sessions_spawn({ thread: true })` і автоматичного створення/прив’язування гілок ACP thread-spawn (типово: `true`)
- - `defaultSpawnContext`: нативний контекст підагента для запусків, прив’язаних до гілок (типово `"fork"`)
-- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для каналів і гілок (використовуйте id каналу/гілки в `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#persistent-channel-bindings).
-- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів Discord components v2.
-- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові перевизначення авто-приєднання + LLM + TTS. Текстові конфігурації Discord типово залишають голос вимкненим; установіть `channels.discord.voice.enabled=true`, щоб увімкнути.
+ - `spawnSessions`: перемикач для `sessions_spawn({ thread: true })` і автоматичного створення/прив’язування гілок для ACP thread-spawn (стандартно: `true`)
+ - `defaultSpawnContext`: нативний контекст субагента для запусків, прив’язаних до гілки (стандартно `"fork"`)
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для каналів і гілок (використовуйте id каналу/гілки в `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#persistent-channel-bindings).
+- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів компонентів Discord v2.
+- `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` відображає доступність середовища виконання на присутність бота (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`: Discord ID користувачів, яким дозволено затверджувати запити exec. Якщо пропущено, використовується `commands.ownerAllowFrom`.
- - `agentFilter`: необов’язковий список дозволених ID агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або регулярний вираз).
- - `target`: куди надсилати запити на підтвердження. `"dm"` (типово) надсилає в DM затверджувачам, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли ціль містить `"channel"`, кнопки можуть використовувати лише визначені затверджувачі.
- - `cleanupAfterResolve`: коли `true`, видаляє DM із підтвердженнями після затвердження, відмови або тайм-ауту.
+- `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` зіставляє доступність середовища виконання з присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дає змогу необов’язково перевизначати текст статусу.
+- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення імен/тегів (режим сумісності break-glass).
+- `channels.discord.execApprovals`: нативна для Discord доставка підтверджень exec і авторизація схвалювачів.
+ - `enabled`: `true`, `false` або `"auto"` (стандартно). В автоматичному режимі підтвердження exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо пропущено, використовується резерв `commands.ownerAllowFrom`.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex).
+ - `target`: куди надсилати запити підтвердження. `"dm"` (стандартно) надсилає в DM схвалювачів, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли ціль містить `"channel"`, кнопки можуть використовувати лише визначені схвалювачі.
+ - `cleanupAfterResolve`: коли `true`, видаляє DM підтвердження після схвалення, відмови або тайм-ауту.
-**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
+**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, стандартно), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
### Google Chat
@@ -394,11 +394,11 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-- JSON облікового запису служби: вбудований (`serviceAccount`) або на основі файлу (`serviceAccountFile`).
-- SecretRef облікового запису служби також підтримується (`serviceAccountRef`).
-- Резервні змінні середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- JSON сервісного облікового запису: вбудований (`serviceAccount`) або на основі файла (`serviceAccountFile`).
+- SecretRef сервісного облікового запису також підтримується (`serviceAccountRef`).
+- Резерви env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
- Використовуйте `spaces/` або `users/` для цілей доставки.
-- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає змінне зіставлення email principal (режим сумісності break-glass).
+- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення email-принципала (режим сумісності break-glass).
### Slack
@@ -470,44 +470,44 @@ WhatsApp працює через web-канал gateway (Baileys Web). Він з
}
```
-- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резервного варіанта змінних середовища типового облікового запису).
-- **HTTP mode** потребує `botToken` плюс `signingSecret` (на кореневому рівні або для окремого облікового запису).
-- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте це лише під час розслідування тайм-аутів ping/pong або застарілої поведінки websocket.
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають plaintext
+- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резерву env стандартного облікового запису).
+- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для окремого облікового запису).
+- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте це лише під час розслідування тайм-аутів ping/pong або поведінки застарілого websocket.
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті текстові
рядки або об’єкти SecretRef.
-- Знімки облікових записів Slack надають поля джерела/статусу для окремих облікових даних, як-от
- `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
+- Знімки облікових записів Slack показують поля джерела/стану для окремих облікових даних, як-от
+ `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, у HTTP mode,
`signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
- налаштовано через SecretRef, але поточний шлях команди/середовища виконання не зміг
+ налаштований через SecretRef, але поточний шлях команди/середовища виконання не зміг
визначити значення секрету.
- `configWrites: false` блокує записи конфігурації, ініційовані Slack.
-- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з налаштованим id облікового запису.
-- `channels.slack.streaming.mode` є канонічним ключем режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично.
+- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
+- `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.historyScope` є окремим для кожної гілки (типово) або спільним для всього каналу. `thread.inheritParent` копіює транскрипт батьківського каналу до нових гілок.
+**Ізоляція сеансів гілок:** `thread.historyScope` є окремою для кожної гілки (стандартно) або спільною для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові гілки.
-- Нативний streaming Slack разом зі статусом гілки в стилі Slack assistant "is typing..." потребують цілі гілки для відповіді. DM верхнього рівня типово залишаються поза гілками, тому вони все ще можуть транслюватися через чорнові попередні перегляди Slack із публікацією та редагуванням замість показу нативного потокового/статусного попереднього перегляду в стилі гілки.
-- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте шорткод емодзі Slack, наприклад `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: нативна для Slack доставка підтверджень exec і авторизація затверджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (Slack ID користувачів), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
+- Нативне потокове передавання Slack разом зі статусом гілки в стилі асистента Slack "is typing..." потребують цілі гілки відповіді. DM верхнього рівня за замовчуванням залишаються поза гілками, тож вони все ще можуть потоково передаватися через чернеткові попередні перегляди Slack із публікацією та редагуванням замість показу нативного потокового/статусного попереднього перегляду в стилі гілки.
+- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім прибирає її після завершення. Використовуйте шорткод emoji Slack, наприклад `"hourglass_flowing_sand"`.
+- `channels.slack.execApprovals`: нативна для Slack доставка підтверджень exec і авторизація схвалювачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
-| Група дій | Типово | Примітки |
+| Група дій | Стандартно | Примітки |
| ------------ | ------- | ---------------------- |
| reactions | увімкнено | Реагувати + перелічувати реакції |
| messages | увімкнено | Читати/надсилати/редагувати/видаляти |
| pins | увімкнено | Закріпити/відкріпити/перелічити |
| memberInfo | увімкнено | Інформація про учасника |
-| emojiList | увімкнено | Список користувацьких емодзі |
+| emojiList | увімкнено | Список власних emoji |
### Mattermost
-Mattermost постачається як bundled Plugin у поточних випусках OpenClaw. Старіші або
-кастомні збірки можуть встановити поточний npm-пакет за допомогою
+Mattermost постачається як вбудований Plugin у поточних випусках OpenClaw. Старіші або
+кастомні збірки можуть установити поточний npm-пакет за допомогою
`openclaw plugins install @openclaw/mattermost`. Перевірте
[npmjs.com/package/@openclaw/mattermost](https://www.npmjs.com/package/@openclaw/mattermost)
-для поточних dist-tags перед фіксацією версії.
+щодо поточних dist-tags перед закріпленням версії.
```json5
{
@@ -537,22 +537,22 @@ Mattermost постачається як bundled Plugin у поточних ви
}
```
-Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
+Режими чату: `oncall` (відповідати на @-згадку, стандартно), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
Коли нативні команди Mattermost увімкнено:
- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою.
-- `commands.callbackUrl` має розв’язуватися в кінцеву точку Gateway OpenClaw і бути доступним із сервера Mattermost.
-- Нативні slash callbacks автентифікуються токенами для кожної команди, які повертає
- Mattermost під час реєстрації slash command. Якщо реєстрація завершується невдало або жодні
- команди не активовано, OpenClaw відхиляє callbacks із повідомленням
+- `commands.callbackUrl` має вказувати на кінцеву точку Gateway OpenClaw і бути доступним із сервера Mattermost.
+- Нативні slash-callbacks автентифікуються токенами для кожної команди, які повертає
+ Mattermost під час реєстрації slash-команди. Якщо реєстрація завершується помилкою або
+ жодні команди не активовано, OpenClaw відхиляє callbacks з
`Unauthorized: invalid command token.`
-- Для приватних/tailnet/внутрішніх хостів callback Mattermost може вимагати,
- щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив хост/домен callback.
+- Для приватних/tailnet/внутрішніх хостів callback Mattermost може вимагати, щоб
+ `ServiceSettings.AllowedUntrustedInternalConnections` містив callback-хост/домен.
Використовуйте значення хоста/домену, а не повні URL-адреси.
- `channels.mattermost.configWrites`: дозволити або заборонити ініційовані Mattermost записи конфігурації.
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
-- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для типового значення).
+- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для кожного каналу (`"*"` для типового значення).
- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з ідентифікатором налаштованого облікового запису.
### Signal
@@ -582,7 +582,7 @@ Mattermost постачається як bundled Plugin у поточних ви
### BlueBubbles
-BlueBubbles — рекомендований шлях iMessage (підтримується Plugin, налаштовується в `channels.bluebubbles`).
+BlueBubbles — рекомендований шлях для iMessage (на основі Plugin, налаштовується в `channels.bluebubbles`).
```json5
{
@@ -599,7 +599,7 @@ BlueBubbles — рекомендований шлях iMessage (підтриму
- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, коли він збігається з ідентифікатором налаштованого облікового запису.
-- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сеансів ACP. Використовуйте handle BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [ACP Agents](/uk/tools/acp-agents#persistent-channel-bindings).
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сеансів ACP. Використовуйте handle BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [Агенти ACP](/uk/tools/acp-agents#persistent-channel-bindings).
- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles).
### iMessage
@@ -634,9 +634,9 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а
- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб перелічити чати.
- `cliPath` може вказувати на SSH-обгортку; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
- `attachmentRoots` і `remoteAttachmentRoots` обмежують вхідні шляхи вкладень (типово: `/Users/*/Library/Messages/Attachments`).
-- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ хоста relay уже є в `~/.ssh/known_hosts`.
+- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ хоста ретранслятора вже є в `~/.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#persistent-channel-bindings).
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних сеансів ACP. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [Агенти ACP](/uk/tools/acp-agents#persistent-channel-bindings).
@@ -649,7 +649,7 @@ exec ssh -T gateway-host imsg "$@"
### Matrix
-Matrix підтримується Plugin і налаштовується в `channels.matrix`.
+Matrix працює на основі Plugin і налаштовується в `channels.matrix`.
```json5
{
@@ -679,25 +679,25 @@ 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 доставка схвалень exec і авторизація затверджувача.
- - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі схвалення exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ідентифікатори користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати запити exec.
- - `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Пропустіть, щоб пересилати схвалення для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або регулярний вираз).
- - `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`.
- - Перевизначення для окремих облікових записів: `channels.matrix.accounts..execApprovals`.
-- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сеанси: `per-user` (типово) спільно використовується за маршрутизованим peer, тоді як `per-room` ізолює кожну DM-кімнату.
-- Перевірки стану Matrix і live-пошуки каталогу використовують ту саму політику проксі, що й трафік під час виконання.
+- Автентифікація через токен використовує `accessToken`; автентифікація паролем використовує `userId` + `password`.
+- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його за допомогою `channels.matrix.accounts..proxy`.
+- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver. `proxy` і цей мережевий opt-in є незалежними елементами керування.
+- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у конфігураціях із кількома обліковими записами.
+- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові DM-подібні запрошення ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
+- `channels.matrix.execApprovals`: нативна для Matrix доставка підтверджень exec і авторизація approver.
+ - `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі підтвердження exec активуються, коли approver можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено підтверджувати запити exec.
+ - `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex).
+ - `target`: куди надсилати запити підтвердження. `"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).
### Microsoft Teams
-Microsoft Teams підтримується Plugin і налаштовується в `channels.msteams`.
+Microsoft Teams працює на основі Plugin і налаштовується в `channels.msteams`.
```json5
{
@@ -713,11 +713,11 @@ Microsoft Teams підтримується Plugin і налаштовуєтьс
```
- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
-- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams).
+- Повну конфігурацію Teams (облікові дані, Webhook, політику DM/груп, перевизначення для кожної команди/каналу) задокументовано в [Microsoft Teams](/uk/channels/msteams).
### IRC
-IRC підтримується Plugin і налаштовується в `channels.irc`.
+IRC працює на основі Plugin і налаштовується в `channels.irc`.
```json5
{
@@ -744,7 +744,7 @@ IRC підтримується Plugin і налаштовується в `channe
### Кілька облікових записів (усі канали)
-Запустіть кілька облікових записів на канал (кожен зі своїм `accountId`):
+Запускайте кілька облікових записів на канал (кожен зі своїм `accountId`):
```json5
{
@@ -766,29 +766,29 @@ IRC підтримується Plugin і налаштовується в `channe
```
- `default` використовується, коли `accountId` пропущено (CLI + маршрутизація).
-- Токени env застосовуються лише до **типового** облікового запису.
-- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису.
+- Env-токени застосовуються лише до **типового** облікового запису.
+- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для конкретного облікового запису.
- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента.
-- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або onboarding каналу), усе ще маючи конфігурацію каналу верхнього рівня з одним обліковим записом, OpenClaw спочатку переносить значення одного облікового запису верхнього рівня, прив’язані до облікового запису, у мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
-- Наявні прив’язки лише до каналу (без `accountId`) і надалі збігаються з типовим обліковим записом; прив’язки з областю дії облікового запису залишаються необов’язковими.
-- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення одного облікового запису верхнього рівня, прив’язані до облікового запису, у підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
+- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або onboarding каналу), залишаючись на конфігурації каналу верхнього рівня з одним обліковим записом, OpenClaw спочатку переносить значення верхнього рівня з областю облікового запису для одного облікового запису в карту облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переносять їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
+- Наявні прив’язки лише до каналу (без `accountId`) продовжують відповідати типовому обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими.
+- `openclaw doctor --fix` також виправляє змішані форми, переносячи значення верхнього рівня з областю облікового запису для одного облікового запису в підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
-### Інші Plugin-канали
+### Інші канали Plugin
-Багато Plugin-каналів налаштовуються як `channels.` і задокументовані на своїх спеціальних сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
-Див. повний індекс каналів: [Канали](/uk/channels).
+Багато каналів Plugin налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
+Дивіться повний індекс каналів: [Канали](/uk/channels).
-### Mention gating для групового чату
+### Mention gating у груповому чаті
-Групові повідомлення типово **вимагають mention** (metadata mention або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
+Групові повідомлення типово **вимагають mention** (metadata mention або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage.
-Видимі відповіді керуються окремо. Групові/канальні кімнати типово мають `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw усе ще обробляє turn, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнаті потребує `message(action=send)`. Установлюйте `"automatic"` лише тоді, коли потрібна застаріла поведінка, за якої звичайні відповіді публікуються назад у кімнату. Щоб застосувати таку саму поведінку видимих відповідей лише через інструмент до прямих чатів також, задайте `messages.visibleReplies: "message_tool"`; Codex harness також використовує цю поведінку лише через інструмент як свій типовий варіант для прямих чатів, коли значення не задано.
+Видимі відповіді керуються окремо. Для групових/канальних кімнат типово встановлено `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw усе ще обробляє turn, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Задавайте `"automatic"` лише тоді, коли потрібна застаріла поведінка, за якої звичайні відповіді публікуються назад у кімнату. Щоб застосувати таку саму поведінку видимих відповідей лише через інструмент і до прямих чатів, задайте `messages.visibleReplies: "message_tool"`; Codex harness також використовує цю поведінку лише через інструмент як своє незадане типове значення для прямого чату.
-Якщо інструмент повідомлень недоступний за активною політикою інструментів, OpenClaw повертається до автоматичних видимих відповідей замість мовчазного пригнічення відповіді. `openclaw doctor` попереджає про цю невідповідність.
+Якщо інструмент повідомлень недоступний у межах активної політики інструментів, OpenClaw повертається до автоматичних видимих відповідей замість того, щоб мовчки придушувати відповідь. `openclaw doctor` попереджає про цю невідповідність.
-Gateway гаряче перезавантажує конфігурацію `messages` після збереження файлу. Перезапускайте лише тоді, коли відстеження файлів або перезавантаження конфігурації вимкнено в розгортанні.
+Gateway гаряче перезавантажує конфігурацію `messages` після збереження файлу. Перезапускайте лише тоді, коли спостереження за файлами або перезавантаження конфігурації вимкнено в розгортанні.
-**Типи mention:**
+**Типи mentions:**
- **Metadata mentions**: нативні для платформи @-mentions. Ігноруються в режимі self-chat WhatsApp.
- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони та небезпечні вкладені повторення ігноруються.
@@ -809,9 +809,9 @@ Gateway гаряче перезавантажує конфігурацію `mess
}
```
-`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути.
+`messages.groupChat.historyLimit` встановлює глобальне значення за замовчуванням. Канали можуть перевизначити його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути.
-`messages.visibleReplies` — це глобальне значення за замовчуванням для вихідного ходу; `messages.groupChat.visibleReplies` перевизначає його для вихідних ходів групи/каналу. Коли `messages.visibleReplies` не задано, harness може надати власне значення за замовчуванням для прямих/вихідних чатів; Codex harness за замовчуванням використовує `message_tool`. Списки дозволених каналів і фільтрація за згадками все одно визначають, чи обробляється хід.
+`messages.visibleReplies` — це глобальне значення за замовчуванням для ходу джерела; `messages.groupChat.visibleReplies` перевизначає його для ходів джерела групи/каналу. Коли `messages.visibleReplies` не задано, обв’язка може надати власне значення за замовчуванням для прямих чатів/джерела; обв’язка Codex за замовчуванням використовує `message_tool`. Списки дозволених каналів і шлюзування згадок усе одно визначають, чи обробляється хід.
#### Обмеження історії DM
@@ -828,13 +828,13 @@ Gateway гаряче перезавантажує конфігурацію `mess
}
```
-Визначення: перевизначення для окремого DM → значення провайдера за замовчуванням → без обмеження (зберігається все).
+Вирішення: перевизначення для окремого DM → значення за замовчуванням провайдера → без обмеження (зберігається все).
Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Режим чату із собою
-Додайте власний номер у `allowFrom`, щоб увімкнути режим чату із собою (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
+Додайте власний номер до `allowFrom`, щоб увімкнути режим чату із собою (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
```json5
{
@@ -884,32 +884,32 @@ Gateway гаряче перезавантажує конфігурацію `mess
-- Цей блок налаштовує поверхні команд. Поточний вбудований і bundled каталог команд див. у [Команди зі скісною рискою](/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, а також у [Команди зі скісною рискою](/uk/tools/slash-commands).
+- Цей блок налаштовує поверхні команд. Поточний вбудований і комплектний каталог команд див. у [Slash Commands](/uk/tools/slash-commands).
+- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналам/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, сполучення пристрою `/pair`, пам’ять `/dreaming`, керування телефоном `/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` (логічне значення або `"auto"`). Для Discord `false` пропускає реєстрацію нативних команд і очищення під час запуску.
-- Перевизначайте реєстрацію нативних 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` лише для читання залишається доступним звичайним клієнтам операторів з областю запису.
-- `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`.
-- `ownerAllowFrom` — це явний список дозволених власників для команд/інструментів лише для власника. Він відокремлений від `allowFrom`.
-- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному prompt. Установіть `ownerDisplaySecret`, щоб керувати хешуванням.
-- `allowFrom` задається для кожного провайдера. Коли його встановлено, це **єдине** джерело авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються).
-- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено.
+- Перевизначення для каналу: `channels.discord.commands.native` (булеве значення або `"auto"`). Для Discord значення `false` пропускає реєстрацію нативних команд і очищення під час запуску.
+- Перевизначте реєстрацію нативних Skills для каналу через `channels..commands.nativeSkills`.
+- `channels.telegram.customCommands` додає додаткові пункти меню Telegram-бота.
+- `bash: true` вмикає `! ` для оболонки хоста. Потребує `tools.elevated.enabled` і відправника в `tools.elevated.allowFrom.`.
+- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів `chat.send` Gateway постійні записи `/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`.
+- `ownerAllowFrom` — це явний список дозволених власників для команд/інструментів лише для власника. Він окремий від `allowFrom`.
+- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному промпті. Задайте `ownerDisplaySecret`, щоб керувати хешуванням.
+- `allowFrom` задається для кожного провайдера. Коли встановлено, це **єдине** джерело авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються).
+- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не задано.
- Мапа документації команд:
- - вбудований і bundled каталог: [Команди зі скісною рискою](/uk/tools/slash-commands)
+ - вбудований і комплектний каталог: [Slash Commands](/uk/tools/slash-commands)
- поверхні команд для окремих каналів: [Канали](/uk/channels)
- команди QQ Bot: [QQ Bot](/uk/channels/qqbot)
- команди сполучення: [Сполучення](/uk/channels/pairing)
- команда картки LINE: [LINE](/uk/channels/line)
- - Dreaming пам’яті: [Dreaming](/uk/concepts/dreaming)
+ - memory dreaming: [Dreaming](/uk/concepts/dreaming)