diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 74342938f..6c52bbca3 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,38 +1,60 @@ --- read_when: - - Налаштування Slack або налагодження режиму сокета/HTTP для Slack + - Налаштування Slack або налагодження режиму socket/HTTP у Slack summary: Налаштування Slack і поведінка під час виконання (режим Socket + URL-адреси HTTP-запитів) title: Slack x-i18n: - generated_at: "2026-05-05T01:21:09Z" + generated_at: "2026-05-05T01:44:06Z" model: gpt-5.5 provider: openai - source_hash: 7334027c606ff6465190433d2159c3f9cfbcf1e8a3a1e826682423f71700a064 + source_hash: 9a8e1cbfd3d99bfc24d79b56ee762d1ab399402391b241ff40698249b0828008 source_path: channels/slack.md workflow: 16 --- -Готово до продакшену для DM і каналів через інтеграції Slack app. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються. +Готово до продакшену для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються. - - DM у Slack за замовчуванням використовують режим сполучення. + + Slack DM типово використовують режим спарювання. Нативна поведінка команд і каталог команд. - - Міжканальна діагностика та сценарії відновлення. + + Міжканальна діагностика та інструкції з відновлення. +## Вибір між Socket Mode і HTTP Request URLs + +Обидва транспорти готові до продакшену та мають паритет функцій для обміну повідомленнями, слеш-команд, App Home та інтерактивності. Обирайте за формою розгортання, а не за функціями. + +| Аспект | Socket Mode (типово) | HTTP Request URLs | +| ---------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | +| Публічна URL-адреса Gateway | Не потрібна | Потрібна (DNS, TLS, зворотний проксі або тунель) | +| Вихідна мережа | Вихідний WSS до `wss-primary.slack.com` має бути доступний | Без вихідного WS; лише вхідний HTTPS | +| Потрібні токени | Bot token (`xoxb-...`) + App-Level Token (`xapp-...`) з `connections:write` | Bot token (`xoxb-...`) + Signing Secret | +| Ноутбук розробника / за firewall | Працює без додаткових налаштувань | Потрібен публічний тунель (ngrok, Cloudflare Tunnel, Tailscale Funnel) або staging Gateway | +| Горизонтальне масштабування | Один сеанс Socket Mode на застосунок на хост; для кількох Gateway потрібні окремі застосунки Slack | Stateless POST-обробник; кілька реплік Gateway можуть спільно використовувати один застосунок за балансувальником навантаження | +| Кілька облікових записів на одному Gateway | Підтримується; кожен обліковий запис відкриває власний WS | Підтримується; кожному обліковому запису потрібен унікальний `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували | +| Транспорт слеш-команд | Доставляються через WS-з’єднання; `slash_commands[].url` ігнорується | Slack надсилає POST до `slash_commands[].url`; поле потрібне для dispatch команди | +| Підписування запитів | Не використовується (автентифікація — це App-Level Token) | Slack підписує кожен запит; OpenClaw перевіряє через `signingSecret` | +| Відновлення після розриву з’єднання | Slack SDK автоматично перепідключається; застосовується налаштування pong-timeout транспорту Gateway | Немає постійного з’єднання, яке може розірватися; повторні спроби виконуються для кожного запиту від Slack | + + + **Обирайте Socket Mode** для хостів з одним Gateway, ноутбуків розробників і on-prem мереж, які можуть виходити до `*.slack.com`, але не можуть приймати вхідний HTTPS. + +**Обирайте HTTP Request URLs**, коли запускаєте кілька реплік Gateway за балансувальником навантаження, коли вихідний WSS заблокований, але вхідний HTTPS дозволений, або коли ви вже завершуєте Slack webhooks на зворотному проксі. + + ## Швидке налаштування - + - - Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → виберіть свій робочий простір → вставте один із наведених нижче маніфестів → **Next** → **Create**. + + Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → виберіть свій workspace → вставте один із маніфестів нижче → **Next** → **Create**. @@ -166,10 +188,10 @@ x-i18n: - **Recommended** відповідає повному набору можливостей вбудованого Slack plugin: App Home, слеш-команди, файли, реакції, закріплення, групові DM і читання емодзі/груп користувачів. Виберіть **Minimal**, коли політика робочого простору обмежує scopes — він охоплює DM, історію каналів/груп, згадки та слеш-команди, але вилучає файли, реакції, закріплення, групові DM (`mpim:*`), `emoji:read` і `usergroups:read`. Див. [Контрольний список маніфесту та scopes](#manifest-and-scope-checklist), щоб дізнатися обґрунтування для кожного scope і додаткові параметри, як-от додаткові слеш-команди. + **Recommended** відповідає повному набору функцій вбудованого Slack plugin: App Home, слеш-команди, файли, реакції, закріплення, групові DM та читання emoji/usergroup. Обирайте **Minimal**, коли політика workspace обмежує scopes — він покриває DM, історію каналів/груп, згадки та слеш-команди, але прибирає файли, реакції, закріплення, групові DM (`mpim:*`), `emoji:read` і `usergroups:read`. Див. [Чекліст маніфесту та scopes](#manifest-and-scope-checklist) для обґрунтування кожного scope й додаткових опцій, як-от додаткові слеш-команди. - Після того як Slack створить app: + Після того як Slack створить застосунок: - **Basic Information → App-Level Tokens → Generate Token and Scopes**: додайте `connections:write`, збережіть, скопіюйте значення `xapp-...`. - **Install App → Install to Workspace**: скопіюйте `xoxb-...` Bot User OAuth Token. @@ -199,7 +221,7 @@ openclaw config patch --file ./slack.socket.patch.json5 --dry-run openclaw config patch --file ./slack.socket.patch.json5 ``` - Резервний варіант через env (лише обліковий запис за замовчуванням): + Резервний варіант через env (лише типовий обліковий запис): ```bash SLACK_APP_TOKEN=xapp-... @@ -208,7 +230,7 @@ SLACK_BOT_TOKEN=xoxb-... - + ```bash openclaw gateway @@ -221,8 +243,8 @@ openclaw gateway - - Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → виберіть свій робочий простір → вставте один із наведених нижче маніфестів → замініть `https://gateway-host.example.com/slack/events` на публічну URL-адресу вашого Gateway → **Next** → **Create**. + + Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → виберіть свій workspace → вставте один із маніфестів нижче → замініть `https://gateway-host.example.com/slack/events` на публічну URL-адресу Gateway → **Next** → **Create**. @@ -305,7 +327,7 @@ openclaw gateway } ``` -```json Minimal +```json Мінімальний { "display_information": { "name": "OpenClaw", @@ -368,9 +390,13 @@ openclaw gateway - **Recommended** відповідає повному набору можливостей вбудованого Slack plugin; **Minimal** вилучає файли, реакції, закріплення, групові DM (`mpim:*`), `emoji:read` і `usergroups:read` для робочих просторів із суворими обмеженнями. Див. [Контрольний список маніфесту та scopes](#manifest-and-scope-checklist), щоб дізнатися обґрунтування для кожного scope. + **Рекомендований** відповідає повному набору функцій вбудованого Slack plugin; **Мінімальний** вилучає файли, реакції, закріплення, групові DM (`mpim:*`), `emoji:read` і `usergroups:read` для робочих просторів із суворими обмеженнями. Див. [контрольний список маніфеста й scope](#manifest-and-scope-checklist), щоб отримати обґрунтування для кожного scope. + + Усі три поля URL (`slash_commands[].url`, `event_subscriptions.request_url` і `interactivity.request_url` / `message_menu_options_url`) вказують на той самий endpoint OpenClaw. Схема маніфеста Slack вимагає, щоб вони називалися окремо, але OpenClaw маршрутизує за типом payload, тож достатньо одного `webhookPath` (типово `/slack/events`). Slash-команди без `slash_commands[].url` у режимі HTTP непомітно не виконуватимуть жодної дії. + + Після того як Slack створить app: - **Basic Information → App Credentials**: скопіюйте **Signing Secret** для перевірки запитів. @@ -405,7 +431,7 @@ openclaw config patch --file ./slack.http.patch.json5 Використовуйте унікальні шляхи Webhook для HTTP із кількома обліковими записами - Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували. + Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. @@ -424,7 +450,7 @@ openclaw gateway ## Налаштування транспорту Socket Mode -OpenClaw за замовчуванням встановлює для клієнта Slack SDK тайм-аут pong у 15 секунд для Socket Mode. Перевизначайте параметри транспорту лише тоді, коли потрібне налаштування під конкретний робочий простір або хост: +OpenClaw типово встановлює для клієнта Slack SDK тайм-аут pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування під конкретний робочий простір або хост: ```json5 { @@ -441,13 +467,13 @@ OpenClaw за замовчуванням встановлює для клієн } ``` -Використовуйте це лише для робочих просторів Socket Mode, які журналюють тайм-аути pong/server-ping вебсокета Slack, або працюють на хостах із відомим блокуванням event loop. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — це очікування server pings від Slack. Повідомлення й події app залишаються станом застосунку, а не сигналами живучості транспорту. +Використовуйте це лише для робочих просторів Socket Mode, які журналюють тайм-аути Slack websocket pong/server-ping, або працюють на хостах із відомим голодуванням event loop. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — це очікування ping від сервера Slack. Повідомлення й події app залишаються станом застосунку, а не сигналами живучості транспорту. -## Контрольний список маніфесту та scopes +## Контрольний список маніфеста й scope -Базовий маніфест Slack app однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` слеш-команди). +Базовий маніфест Slack app однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` slash-команди). -Базовий маніфест (Socket Mode за замовчуванням): +Базовий маніфест (типово Socket Mode): ```json { @@ -564,19 +590,19 @@ OpenClaw за замовчуванням встановлює для клієн } ``` -### Додаткові налаштування маніфесту +### Додаткові налаштування маніфеста -Відкрийте різні функції, які розширюють наведені вище типові значення. +Відкрийте різні функції, що розширюють наведені вище типові значення. -Типовий маніфест вмикає вкладку **Home** для Slack App Home і підписується на `app_home_opened`. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечний типовий вигляд Home за допомогою `views.publish`; корисне навантаження розмови або приватна конфігурація не включаються. Вкладка **Messages** залишається ввімкненою для приватних повідомлень Slack. +Типовий маніфест вмикає вкладку Slack App Home **Home** і підписується на `app_home_opened`. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечний типовий Home view за допомогою `views.publish`; payload розмови або приватна конфігурація не включаються. Вкладка **Messages** залишається ввімкненою для Slack DM. - Замість однієї налаштованої команди можна використовувати кілька [нативних slash-команд](#commands-and-slash-behavior) з урахуванням нюансів: + Можна використовувати кілька [нативних slash-команд](#commands-and-slash-behavior) замість однієї налаштованої команди, з певними нюансами: - Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована. - - Одночасно можна зробити доступними не більше ніж 25 slash-команд. + - Одночасно можна зробити доступними не більше 25 slash-команд. Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list): @@ -705,7 +731,7 @@ OpenClaw за замовчуванням встановлює для клієн - Використовуйте той самий список `slash_commands`, що й у Socket Mode вище, і додайте `"url": "https://gateway-host.example.com/slack/events"` до кожного запису. Приклад: + Використовуйте той самий список `slash_commands`, що й вище для Socket Mode, і додайте `"url": "https://gateway-host.example.com/slack/events"` до кожного запису. Приклад: ```json { @@ -731,13 +757,13 @@ OpenClaw за замовчуванням встановлює для клієн - - Додайте область бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість типової ідентичності застосунку Slack. + + Додайте область бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (користувацьке ім'я та піктограму) замість стандартної ідентичності застосунку Slack. Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`. - + Якщо ви налаштовуєте `channels.slack.userToken`, типовими областями читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` @@ -754,35 +780,35 @@ OpenClaw за замовчуванням встановлює для клієн ## Модель токенів - `botToken` + `appToken` потрібні для Socket Mode. -- Режим HTTP потребує `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні текстові - рядки або об’єкти SecretRef. -- Токени конфігурації перевизначають резервні значення env. -- Резервні значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до типового облікового запису. -- `userToken` (`xoxp-...`) налаштовується лише в конфігурації (без резервного значення env) і типово має поведінку лише для читання (`userTokenReadOnly: true`). +- HTTP-режим потребує `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті + рядки або об'єкти SecretRef. +- Токени конфігурації перевизначають резервне значення env. +- Резервне значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до стандартного облікового запису. +- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення env) і за замовчуванням має поведінку лише для читання (`userTokenReadOnly: true`). Поведінка знімка стану: - Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`). -- Стан може бути `available`, `configured_unavailable` або `missing`. +- Стан: `available`, `configured_unavailable` або `missing`. - `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше неінлайнове джерело секретів, але поточний шлях команди/середовища виконання - не зміг отримати фактичне значення. -- У режимі HTTP включено `signingSecretStatus`; у Socket Mode - потрібна пара — `botTokenStatus` + `appTokenStatus`. + або інше неінлайнове джерело секрету, але поточна команда/шлях виконання + не змогли визначити фактичне значення. +- У HTTP-режимі включено `signingSecretStatus`; у Socket Mode + обов'язкова пара — це `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогу токен користувача може мати перевагу, коли його налаштовано. Для записів перевага залишається за токеном бота; записи з токеном користувача дозволені лише коли `userTokenReadOnly: false` і токен бота недоступний. +Для дій/читання каталогу user token може мати перевагу, коли його налаштовано. Для записів bot token залишається пріоритетним; записи через user-token дозволені лише коли `userTokenReadOnly: false` і bot token недоступний. ## Дії та шлюзи -Дії Slack контролюються через `channels.slack.actions.*`. +Дії Slack керуються `channels.slack.actions.*`. -Доступні групи дій у поточних інструментах Slack: +Доступні групи дій у поточному інструментарії Slack: -| Група | Типово | +| Група | За замовчуванням | | ---------- | ------- | | messages | увімкнено | | reactions | увімкнено | @@ -790,26 +816,26 @@ OpenClaw за замовчуванням встановлює для клієн | memberInfo | увімкнено | | emojiList | увімкнено | -Поточні дії повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ідентифікатори файлів Slack, показані у вхідних плейсхолдерах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файлу для інших типів файлів. +Поточні дії повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. `download-file` приймає ID файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файла для інших типів файлів. -## Контроль доступу та маршрутизація +## Керування доступом і маршрутизація - `channels.slack.dmPolicy` контролює доступ DM. `channels.slack.allowFrom` — канонічний allowlist для DM. + `channels.slack.dmPolicy` керує доступом до DM. `channels.slack.allowFrom` — канонічний список дозволів DM. - - `pairing` (типово) + - `pairing` (за замовчуванням) - `allowlist` - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`) - `disabled` Прапорці DM: - - `dm.enabled` (типово true) + - `dm.enabled` (за замовчуванням true) - `channels.slack.allowFrom` - `dm.allowFrom` (застаріле) - - `dm.groupEnabled` (групові DM типово false) - - `dm.groupChannels` (необов’язковий allowlist MPIM) + - `dm.groupEnabled` (групові DM за замовчуванням false) + - `dm.groupChannels` (необов'язковий список дозволів MPIM) Пріоритет для кількох облікових записів: @@ -823,27 +849,27 @@ OpenClaw за замовчуванням встановлює для клієн - - `channels.slack.groupPolicy` контролює обробку каналів: + + `channels.slack.groupPolicy` керує обробкою каналів: - `open` - `allowlist` - `disabled` - Allowlist каналів розміщується в `channels.slack.channels` і **має використовувати стабільні ідентифікатори каналів Slack** (наприклад `C12345678`) як ключі конфігурації. + Список дозволів каналів міститься в `channels.slack.channels` і **має використовувати стабільні ID каналів Slack** (наприклад, `C12345678`) як ключі конфігурації. - Примітка щодо середовища виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), середовище виконання повертається до `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо `channels.defaults.groupPolicy` задано). + Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), середовище виконання повертається до `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо `channels.defaults.groupPolicy` задано). - Розпізнавання назви/ідентифікатора: + Розпізнавання імені/ID: - - записи списку дозволених каналів і записи списку дозволених DM розпізнаються під час запуску, коли доступ до токена це дозволяє - - нерозпізнані записи з назвами каналів зберігаються як налаштовано, але типово ігноруються для маршрутизації - - вхідна авторизація та маршрутизація каналів типово спершу використовують ID; пряме зіставлення за іменем користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи списку дозволів каналів і записи списку дозволів DM розпізнаються під час запуску, коли доступ токена це дозволяє + - нерозпізнані записи з іменами каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації + - вхідна авторизація та маршрутизація каналів за замовчуванням спершу використовують ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - Ключі на основі назв (`#channel-name` або `channel-name`) **не** збігаються за `groupPolicy: "allowlist"`. Пошук каналу типово спершу використовує ID, тому ключ на основі назви ніколи не маршрутизуватиметься успішно, а всі повідомлення в цьому каналі буде мовчки заблоковано. Це відрізняється від `groupPolicy: "open"`, де ключ каналу не потрібен для маршрутизації, а ключ на основі назви здається робочим. + Ключі на основі імен (`#channel-name` або `channel-name`) **не** збігаються за `groupPolicy: "allowlist"`. Пошук каналу за замовчуванням спершу використовує ID, тому ключ на основі імені ніколи не маршрутизуватиметься успішно, а всі повідомлення в цьому каналі буде тихо заблоковано. Це відрізняється від `groupPolicy: "open"`, де ключ каналу не потрібен для маршрутизації, і здається, що ключ на основі імені працює. - Завжди використовуйте ID каналу Slack як ключ. Щоб знайти його: клацніть канал у Slack правою кнопкою миші → **Copy link** — ID (`C...`) зʼявиться в кінці URL. + Завжди використовуйте ID каналу Slack як ключ. Щоб знайти його: клацніть канал у Slack правою кнопкою миші → **Copy link** — ID (`C...`) з'являється наприкінці URL. Правильно: @@ -860,7 +886,7 @@ OpenClaw за замовчуванням встановлює для клієн } ``` - Неправильно (мовчки блокується за `groupPolicy: "allowlist"`): + Неправильно (тихо блокується за `groupPolicy: "allowlist"`): ```json5 { @@ -879,85 +905,85 @@ OpenClaw за замовчуванням встановлює для клієн - Повідомлення в каналах типово пропускаються лише за наявності згадки. + Повідомлення каналів за замовчуванням обмежені згадками. Джерела згадок: - явна згадка застосунку (`<@botId>`) - згадка групи користувачів Slack (``), коли користувач бота є учасником цієї групи користувачів; потребує `usergroups:read` - - regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`) - - неявна поведінка гілки з відповіддю боту (вимкнено, коли `thread.requireExplicitMention` має значення `true`) + - шаблони регулярних виразів для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) + - неявна поведінка відповіді на потік із ботом (вимкнено, коли `thread.requireExplicitMention` має значення `true`) - Поканальні елементи керування (`channels.slack.channels.`; назви лише через розпізнавання під час запуску або `dangerouslyAllowNameMatching`): + Поканальні елементи керування (`channels.slack.channels.`; імена лише через розв'язання під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - - `users` (список дозволених) + - `users` (allowlist) - `allowBots` - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"` - (застарілі ключі без префікса досі зіставляються лише з `id:`) + - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або символ узагальнення `"*"` + (застарілі ключі без префікса й надалі зіставляються лише з `id:`) - `allowBots` є консервативним для каналів і приватних каналів: повідомлення кімнати, написані ботом, приймаються лише тоді, коли бот-відправник явно вказаний у списку дозволених `users` цієї кімнати, або коли принаймні один явний ID власника Slack із `channels.slack.allowFrom` наразі є учасником кімнати. Wildcard і записи власників за відображуваним іменем не задовольняють умову присутності власника. Присутність власника використовує Slack `conversations.members`; переконайтеся, що застосунок має відповідний read-scope для типу кімнати (`channels:read` для публічних каналів, `groups:read` для приватних каналів). Якщо пошук учасників не вдається, OpenClaw відкидає повідомлення кімнати, написане ботом. + `allowBots` є консервативним для каналів і приватних каналів: повідомлення кімнати, створені ботом, приймаються лише тоді, коли бот-відправник явно вказаний в allowlist `users` цієї кімнати, або коли принаймні один явний ID власника Slack із `channels.slack.allowFrom` зараз є учасником кімнати. Символи узагальнення та записи власників за відображуваним іменем не задовольняють наявність власника. Наявність власника використовує `conversations.members` Slack; переконайтеся, що застосунок має відповідну область читання для типу кімнати (`channels:read` для публічних каналів, `groups:read` для приватних каналів). Якщо пошук учасників завершується невдало, OpenClaw відкидає повідомлення кімнати, створене ботом. -## Гілки, сеанси та теги відповіді +## Потоки, сеанси та теги відповідей - DM маршрутизуються як `direct`; канали як `channel`; MPIM як `group`. -- Привʼязки маршрутів Slack приймають необроблені ID учасників, а також цільові форми Slack, як-от `channel:C12345678`, `user:U12345678` і `<@U12345678>`. -- За типового `session.dmScope=main` DM Slack згортаються в головний сеанс агента. +- Прив'язки маршрутів Slack приймають сирі ID співрозмовників, а також форми цілей Slack, як-от `channel:C12345678`, `user:U12345678` і `<@U12345678>`. +- З типовим `session.dmScope=main` DM Slack згортаються до головного сеансу агента. - Сеанси каналів: `agent::slack:channel:`. -- Відповіді в гілках можуть створювати суфікси сеансів гілок (`:thread:`), коли це застосовно. +- Відповіді в потоках можуть створювати суфікси сеансів потоків (`:thread:`), коли це застосовно. - Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`. -- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень гілки завантажується під час запуску нового сеансу гілки (типово `20`; задайте `0`, щоб вимкнути). -- `channels.slack.thread.requireExplicitMention` (типово `false`): коли `true`, пригнічує неявні згадки в гілці, щоб бот відповідав лише на явні згадки `@bot` у гілках, навіть якщо бот уже брав участь у гілці. Без цього відповіді в гілці за участі бота обходять фільтр `requireMention`. +- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень потоку, які отримуються під час запуску нового сеансу потоку (типово `20`; установіть `0`, щоб вимкнути). +- `channels.slack.thread.requireExplicitMention` (типово `false`): коли `true`, пригнічує неявні згадки в потоках, щоб бот відповідав лише на явні згадки `@bot` усередині потоків, навіть якщо бот уже брав участь у потоці. Без цього відповіді в потоці, де брав участь бот, обходять обмеження `requireMention`. -Елементи керування гілками відповідей: +Елементи керування потоками відповідей: - `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`) -- `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel` +- `channels.slack.replyToModeByChatType`: окремо для `direct|group|channel` - застарілий резервний варіант для прямих чатів: `channels.slack.dm.replyToMode` -Підтримуються ручні теги відповіді: +Підтримуються ручні теги відповідей: - `[[reply_to_current]]` - `[[reply_to:]]` -`replyToMode="off"` вимикає **всі** гілки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги досі враховуються в режимі `"off"`. Гілки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими в рядку. +`replyToMode="off"` вимикає **всі** потоки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги й надалі враховуються в режимі `"off"`. Потоки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими в рядку. ## Реакції підтвердження -`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. +`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. -Порядок розпізнавання: +Порядок розв'язання: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") +- резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: -- Slack очікує shortcodes (наприклад, `"eyes"`). +- Slack очікує короткі коди (наприклад, `"eyes"`). - Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально. -## Потокове передавання тексту +## Текстове потокове передавання `channels.slack.streaming` керує поведінкою живого попереднього перегляду: - `off`: вимкнути потокове передавання живого попереднього перегляду. - `partial` (типово): замінювати текст попереднього перегляду найновішим частковим виводом. - `block`: додавати фрагментовані оновлення попереднього перегляду. -- `progress`: показувати текст стану прогресу під час генерації, потім надсилати фінальний текст. -- `streaming.preview.toolProgress`: коли активний чернетковий попередній перегляд, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Задайте `false`, щоб зберігати окремі повідомлення інструментів/прогресу. -- `streaming.preview.commandText` / `streaming.progress.commandText`: задайте `status`, щоб зберігати компактні рядки прогресу інструментів, приховуючи необроблений текст команд/exec (типово: `raw`). +- `progress`: показувати текст стану поступу під час генерації, а потім надсилати фінальний текст. +- `streaming.preview.toolProgress`: коли чернетковий попередній перегляд активний, спрямовувати оновлення інструментів/поступу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Установіть `false`, щоб зберігати окремі повідомлення інструментів/поступу. +- `streaming.preview.commandText` / `streaming.progress.commandText`: установіть `status`, щоб зберігати компактні рядки поступу інструментів, приховуючи сирий текст команд/виконання (типово: `raw`). -Приховати необроблений текст команд/exec, зберігаючи компактні рядки прогресу: +Приховати сирий текст команд/виконання, зберігаючи компактні рядки поступу: ```json { @@ -975,16 +1001,16 @@ OpenClaw за замовчуванням встановлює для клієн } ``` -`channels.slack.streaming.nativeTransport` керує нативним потоковим передаванням тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (типово: `true`). +`channels.slack.streaming.nativeTransport` керує нативним текстовим потоковим передаванням Slack, коли `channels.slack.streaming.mode` має значення `partial` (типово: `true`). -- Для появи нативного потокового передавання тексту та стану гілки помічника Slack має бути доступна гілка відповіді. Вибір гілки досі відповідає `replyToMode`. -- Канали, групові чати та кореневі повідомлення DM верхнього рівня досі можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне або гілки відповіді немає. -- DM Slack верхнього рівня типово залишаються поза гілками, тому вони не показують нативний потоковий/статусний попередній перегляд Slack у стилі гілки; натомість OpenClaw публікує й редагує чернетковий попередній перегляд у DM. -- Медіа та нетекстові payloads повертаються до звичайної доставки. -- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні фінальні текстові/блокові повідомлення скидаються лише тоді, коли вони можуть редагувати попередній перегляд на місці. -- Якщо потокове передавання зазнає збою посеред відповіді, OpenClaw повертається до звичайної доставки для решти payloads. +- Для появи нативного текстового потокового передавання та стану потоку асистента Slack має бути доступний потік відповіді. Вибір потоку й надалі дотримується `replyToMode`. +- Канали, групові чати та кореневі повідомлення DM верхнього рівня й надалі можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне або немає потоку відповіді. +- DM Slack верхнього рівня за замовчуванням залишаються поза потоками, тому вони не показують нативний попередній перегляд потоку/стану Slack у стилі потоку; натомість OpenClaw публікує та редагує чернетковий попередній перегляд у DM. +- Медіа та нетекстові корисні навантаження повертаються до звичайної доставки. +- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні текстові/блокові фінальні повідомлення скидаються лише тоді, коли вони можуть редагувати попередній перегляд на місці. +- Якщо потокове передавання завершується невдало посеред відповіді, OpenClaw повертається до звичайної доставки для решти корисних навантажень. -Використати чернетковий попередній перегляд замість нативного потокового передавання тексту Slack: +Використовуйте чернетковий попередній перегляд замість нативного текстового потокового передавання Slack: ```json5 { @@ -1001,41 +1027,41 @@ OpenClaw за замовчуванням встановлює для клієн Застарілі ключі: -- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming.mode`. -- boolean `channels.slack.streaming` автоматично мігрує до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. -- застарілий `channels.slack.nativeStreaming` автоматично мігрує до `channels.slack.streaming.nativeTransport`. +- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`. +- булевий `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. +- застарілий `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`. -## Резервна реакція введення +## Резервна реакція набору тексту -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це найкорисніше поза відповідями в гілках, які використовують типовий індикатор стану "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в гілках, які використовують типовий індикатор стану "is typing...". -Порядок розпізнавання: +Порядок розв’язання: - `channels.slack.accounts..typingReaction` - `channels.slack.typingReaction` Примітки: -- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). -- Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху помилки. +- Slack очікує короткі коди (наприклад `"hourglass_flowing_sand"`). +- Реакція виконується за принципом best-effort, а очищення автоматично пробується після завершення відповіді або шляху помилки. ## Медіа, фрагментація та доставка - Файлові вкладення Slack завантажуються з приватних URL, розміщених Slack (потік запиту з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й обмеження розміру це дозволяють. Заповнювачі файлів включають Slack `fileId`, щоб агенти могли отримати оригінальний файл через `download-file`. + Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запиту з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне та обмеження розміру це дозволяють. Заповнювачі файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл через `download-file`. - Завантаження використовують обмежені тайм-аути простою та загального часу. Якщо отримання файлу Slack зависає або завершується з помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу. + Завантаження використовують обмежені тайм-аути простою та загального часу. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу. - Типове runtime-обмеження розміру вхідних даних — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. + Стандартне обмеження розміру вхідних даних під час виконання становить `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. - текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000) - - `channels.slack.chunkMode="newline"` вмикає розбиття зі пріоритетом абзаців - - надсилання файлів використовують API завантаження Slack і можуть включати відповіді в гілках (`thread_ts`) - - обмеження вихідних медіа відповідає `channels.slack.mediaMaxMb`, коли налаштовано; інакше надсилання в канал використовує типові значення за MIME-типом із media pipeline + - `channels.slack.chunkMode="newline"` вмикає поділ із пріоритетом абзаців + - надсилання файлів використовує API завантаження Slack і може включати відповіді в гілках (`thread_ts`) + - обмеження вихідних медіа бере `channels.slack.mediaMaxMb`, коли його налаштовано; інакше надсилання в канали використовує типові значення MIME-виду з конвеєра медіа @@ -1045,14 +1071,14 @@ OpenClaw за замовчуванням встановлює для клієн - `user:` для DM - `channel:` для каналів - DM Slack лише з текстом/блоками можуть публікуватися безпосередньо в ID користувачів; завантаження файлів і надсилання в гілках спершу відкривають DM через API розмов Slack, оскільки ці шляхи потребують конкретного ID розмови. + Текстові або лише блокові DM Slack можуть публікуватися безпосередньо за ID користувачів; завантаження файлів і надсилання в гілках спочатку відкривають DM через API розмов Slack, бо ці шляхи потребують конкретного ID розмови. ## Команди та поведінка slash -Slash-команди зʼявляються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові значення команд: +Slash-команди з’являються у Slack як одна налаштована команда або кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити стандартні параметри команди: - `enabled: false` - `name: "openclaw"` @@ -1063,32 +1089,32 @@ Slash-команди зʼявляються в Slack або як одна нал /openclaw /help ``` -Нативні команди потребують [додаткових налаштувань маніфесту](#additional-manifest-settings) у вашому застосунку Slack і натомість вмикаються через `channels.slack.commands.native: true` або `commands.native: true` у глобальних конфігураціях. +Нативні команди потребують [додаткових налаштувань маніфесту](#additional-manifest-settings) у вашій програмі Slack і натомість вмикаються через `channels.slack.commands.native: true` або `commands.native: true` у глобальних конфігураціях. -- Автоматичний режим нативних команд **вимкнено** для Slack, тому `commands.native: "auto"` не вмикає нативні команди Slack. +- Автоматичний режим нативних команд для Slack **вимкнено**, тому `commands.native: "auto"` не вмикає нативні команди Slack. ```txt /help ``` -Меню аргументів нативних команд використовують адаптивну стратегію рендерингу, яка показує модальне підтвердження перед dispatch вибраного значення опції: +Меню нативних аргументів використовують адаптивну стратегію відображення, яка показує модальне вікно підтвердження перед dispatch вибраного значення опції: - до 5 опцій: блоки кнопок - 6-100 опцій: статичне меню вибору -- понад 100 опцій: зовнішній select з асинхронною фільтрацією опцій, коли доступні обробники interactivity options -- перевищені ліміти Slack: закодовані значення опцій повертаються до кнопок +- понад 100 опцій: зовнішній вибір з асинхронною фільтрацією опцій, коли доступні обробники параметрів інтерактивності +- перевищено обмеження Slack: закодовані значення опцій повертаються до кнопок ```txt /think ``` -Slash-сеанси використовують ізольовані ключі на кшталт `agent::slack:slash:` і досі маршрутизують виконання команд до цільового сеансу розмови за допомогою `CommandTargetSessionKey`. +Slash-сесії використовують ізольовані ключі на кшталт `agent::slack:slash:` і все одно спрямовують виконання команд до цільової сесії розмови за допомогою `CommandTargetSessionKey`. ## Інтерактивні відповіді -Slack може рендерити інтерактивні елементи керування відповідями, створені агентом, але цю функцію типово вимкнено. +Slack може відображати інтерактивні елементи керування відповідями, створені агентом, але ця функція типово вимкнена. -Увімкнути її глобально: +Увімкніть її глобально: ```json5 { @@ -1102,7 +1128,7 @@ Slack може рендерити інтерактивні елементи ке } ``` -Або увімкнути її лише для одного облікового запису Slack: +Або ввімкніть її лише для одного облікового запису Slack: ```json5 { @@ -1120,31 +1146,31 @@ Slack може рендерити інтерактивні елементи ке } ``` -Коли ввімкнено, агенти можуть видавати директиви відповідей лише для Slack: +Коли ввімкнено, агенти можуть виводити директиви відповідей лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Ці директиви компілюються в Slack Block Kit і маршрутизують кліки або вибори назад через наявний шлях подій взаємодії Slack. +Ці директиви компілюються у Slack Block Kit і спрямовують натискання або вибори назад через наявний шлях подій взаємодії Slack. Примітки: -- Це інтерфейс, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. -- Значення інтерактивних callback — це згенеровані OpenClaw непрозорі токени, а не сирі значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищуватимуть обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload блоків. +- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. +- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом. +- Якщо згенеровані інтерактивні блоки перевищили б обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного корисного навантаження блоків. -## Схвалення exec у Slack +## Exec-затвердження у Slack -Slack може працювати як нативний клієнт схвалень з інтерактивними кнопками та взаємодіями замість повернення до вебінтерфейсу або термінала. +Slack може діяти як нативний клієнт затвердження з інтерактивними кнопками та взаємодіями, замість повернення до Web UI або термінала. -- Схвалення exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналу. -- Схвалення Plugin все ще можуть оброблятися через ту саму нативну для Slack поверхню кнопок, коли запит уже потрапляє в Slack і тип id схвалення — `plugin:`. -- Авторизація схвалювачів усе ще застосовується: лише користувачі, визначені як схвалювачі, можуть схвалювати або відхиляти запити через Slack. +- Exec-затвердження використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналу. +- Plugin-затвердження все ще можуть розв’язуватися через ту саму нативну для Slack поверхню кнопок, коли запит уже потрапляє у Slack і вид ID затвердження — `plugin:`. +- Авторизація затверджувачів усе ще застосовується: лише користувачі, визначені як затверджувачі, можуть затверджувати або відхиляти запити через Slack. -Це використовує ту саму спільну поверхню кнопок схвалення, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на схвалення відображаються як кнопки Block Kit безпосередньо в розмові. -Коли ці кнопки присутні, вони є основним UX для схвалення; OpenClaw -має включати ручну команду `/approve` лише тоді, коли результат інструмента повідомляє, що схвалення -в чаті недоступні або ручне схвалення є єдиним шляхом. +Це використовує ту саму спільну поверхню кнопок затвердження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашої програми Slack, запити на затвердження відображаються як кнопки Block Kit безпосередньо в розмові. +Коли ці кнопки наявні, вони є основним UX затвердження; OpenClaw +має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, що chat +затвердження недоступні або ручне затвердження є єдиним шляхом. Шлях конфігурації: @@ -1153,11 +1179,11 @@ Slack може працювати як нативний клієнт схвал - `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter` -Slack автоматично вмикає нативні схвалення exec, коли `enabled` не задано або має значення `"auto"` і визначено принаймні одного -схвалювача. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт схвалень. -Установіть `enabled: true`, щоб примусово ввімкнути нативні схвалення, коли визначено схвалювачів. +Slack автоматично вмикає нативні exec-затвердження, коли `enabled` не задано або має значення `"auto"` і принаймні один +затверджувач розв’язується. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт затвердження. +Установіть `enabled: true`, щоб примусово ввімкнути нативні затвердження, коли затверджувачі розв’язуються. -Типова поведінка без явної конфігурації схвалень exec у Slack: +Типова поведінка без явної конфігурації exec-затверджень Slack: ```json5 { @@ -1167,8 +1193,8 @@ Slack автоматично вмикає нативні схвалення exec } ``` -Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити схвалювачів, додати фільтри або -увімкнути доставку в чат походження: +Явна нативна конфігурація Slack потрібна лише тоді, коли потрібно перевизначити затверджувачів, додати фільтри або +вибрати доставку в початковий чат: ```json5 { @@ -1184,52 +1210,52 @@ Slack автоматично вмикає нативні схвалення exec } ``` -Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на схвалення exec також мають +Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити exec-затвердження також мають маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також -окреме; нативні кнопки Slack усе ще можуть обробляти схвалення Plugin, коли ці запити вже потрапляють +окреме; нативні кнопки Slack усе ще можуть розв’язувати Plugin-затвердження, коли ці запити вже потрапляють у Slack. -Same-chat `/approve` також працює в каналах Slack і DM, які вже підтримують команди. Див. [Схвалення exec](/uk/tools/exec-approvals), щоб переглянути повну модель переспрямування схвалень. +`/approve` у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. [Exec-затвердження](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування затверджень. ## Події та операційна поведінка -- Редагування/видалення повідомлень відображаються в системні події. -- Трансляції тредів (відповіді треду з «Also send to channel») обробляються як звичайні повідомлення користувача. -- Події додавання/видалення реакцій відображаються в системні події. -- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення закріплення відображаються в системні події. -- `channel_id_changed` може мігрувати ключі конфігурації каналів, коли ввімкнено `configWrites`. -- Метадані теми/призначення каналу вважаються ненадійним контекстом і можуть бути вставлені в контекст маршрутизації. -- Початкове повідомлення треду та засівання початкового контексту історії треду фільтруються налаштованими allowlist відправників, коли це застосовно. -- Дії блоків і взаємодії з модальними вікнами створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload: - - дії блоків: вибрані значення, мітки, значення picker та метадані `workflow_*` - - події modal `view_submission` і `view_closed` з метаданими маршрутизованого каналу та введеннями форми +- Редагування/видалення повідомлень зіставляються із системними подіями. +- Трансляції гілок (відповіді в гілках "Also send to channel") обробляються як звичайні повідомлення користувачів. +- Події додавання/видалення реакцій зіставляються із системними подіями. +- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень зіставляються із системними подіями. +- `channel_id_changed` може мігрувати ключі конфігурації каналів, коли `configWrites` увімкнено. +- Метадані теми/призначення каналу вважаються ненадійним контекстом і можуть бути введені в контекст маршрутизації. +- Початкове повідомлення гілки та засівання контексту початкової історії гілки фільтруються налаштованими allowlist відправників, коли це застосовно. +- Дії блоків і модальні взаємодії створюють структуровані системні події `Slack interaction: ...` з багатими полями корисного навантаження: + - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` + - події модальних `view_submission` і `view_closed` із маршрутизованими метаданими каналу та введеннями форми ## Довідник конфігурації Основний довідник: [Довідник конфігурації - Slack](/uk/gateway/config-channels#slack). - + - режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` - перемикач сумісності: `dangerouslyAllowNameMatching` (break-glass; тримайте вимкненим, якщо не потрібно) - доступ до каналу: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` -- треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- гілки/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress` -- ops/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` +- операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Усунення несправностей - - Перевірте в такому порядку: + + Перевірте по черзі: - `groupPolicy` - - allowlist каналів (`channels.slack.channels`) — **ключі мають бути ID каналів** (`C12345678`), а не назвами (`#channel-name`). Ключі на основі назв тихо не спрацьовують за `groupPolicy: "allowlist"`, тому що маршрутизація каналів типово спершу використовує ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → **Copy link** — значення `C...` наприкінці URL є ID каналу. + - allowlist каналів (`channels.slack.channels`) — **ключами мають бути ID каналів** (`C12345678`), а не назви (`#channel-name`). Ключі на основі назв непомітно не спрацьовують із `groupPolicy: "allowlist"`, бо маршрутизація каналів типово спочатку використовує ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → **Copy link** — значення `C...` наприкінці URL є ID каналу. - `requireMention` - - поканальний allowlist `users` + - per-channel allowlist `users` Корисні команди: @@ -1241,14 +1267,14 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - схвалення pairing / записи allowlist - - події DM Slack Assistant: докладні журнали зі згадкою `drop message_changed` - зазвичай означають, що Slack надіслав відредаговану подію треду Assistant без + - затвердження pairing / записи allowlist + - Події DM Slack Assistant: докладні журнали зі згадкою `drop message_changed` + зазвичай означають, що Slack надіслав подію редагованої гілки Assistant без відновлюваного людського відправника в метаданих повідомлення ```bash @@ -1257,34 +1283,34 @@ openclaw pairing list slack - - Перевірте bot + app токени та ввімкнення Socket Mode у налаштуваннях застосунку Slack. + + Перевірте токени бота й програми та ввімкнення Socket Mode у налаштуваннях програми Slack. Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або `appTokenStatus: "configured_unavailable"`, обліковий запис Slack - налаштовано, але поточне середовище виконання не змогло визначити значення, - підтримане SecretRef. + налаштований, але поточне середовище виконання не змогло розв’язати + значення на основі SecretRef. - + Перевірте: - - signing secret - - webhook path - - Slack Request URLs (Events + Interactivity + Slash Commands) + - секрет підписування + - шлях Webhook + - URL запитів Slack (події + інтерактивність + Slash Commands) - унікальний `webhookPath` для кожного HTTP-облікового запису - Якщо `signingSecretStatus: "configured_unavailable"` з’являється в знімках - облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло - визначити signing secret, підтриманий SecretRef. + Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках + облікового запису, HTTP-обліковий запис налаштований, але поточне середовище виконання не змогло + розв’язати секрет підписування на основі SecretRef. - + Перевірте, що саме ви мали на увазі: - - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack + - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими у Slack - або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`) Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. @@ -1292,68 +1318,68 @@ openclaw pairing list slack -## Довідник щодо бачення для вкладень +## Довідник vision для вкладень -Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішні й обмеження розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як завантажуваний файловий контекст, а не обробляються як вхідні зображення. +Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішні й обмеження розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як завантажуваний файловий контекст, а не обробляються як вхідне зображення. ### Підтримувані типи медіа -| Тип медіа | Джерело | Поточна поведінка | Примітки | -| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й прикріплюються до ходу для обробки з підтримкою vision | Обмеження на файл: `channels.slack.mediaMaxMb` (типово 20 MB) | -| Файли PDF | URL файлу Slack | Завантажуються й доступні як файловий контекст для інструментів, як-от `download-file` або `pdf` | Вхідні дані Slack не перетворюють PDF автоматично на image-vision input | -| Інші файли | URL файлу Slack | Завантажуються, коли можливо, і доступні як файловий контекст | Бінарні файли не обробляються як вхідні зображення | -| Відповіді треду | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути гідратовані як контекст, коли відповідь не має безпосередніх медіа | Стартери лише з файлами використовують placeholder вкладення | -| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення | +| Тип медіа | Джерело | Поточна поведінка | Примітки | +| ------------------------------ | -------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й додаються до ходу для обробки з підтримкою зору | Ліміт на файл: `channels.slack.mediaMaxMb` (за замовчуванням 20 MB) | +| Файли PDF | URL файлу Slack | Завантажуються й надаються як файловий контекст для інструментів на кшталт `download-file` або `pdf` | Вхідні дані Slack не перетворюють PDF на вхідні дані для image-vision автоматично | +| Інші файли | URL файлу Slack | Завантажуються, коли це можливо, і надаються як файловий контекст | Бінарні файли не обробляються як вхідні зображення | +| Відповіді в треді | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути додані як контекст, коли відповідь не має власних медіа | Початкові повідомлення лише з файлами використовують placeholder вкладення | +| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення | -### Вхідний pipeline +### Вхідний конвеєр Коли надходить повідомлення Slack із файловими вкладеннями: -1. OpenClaw завантажує файл із приватного URL Slack, використовуючи bot token (`xoxb-...`). +1. OpenClaw завантажує файл із приватного URL Slack за допомогою токена бота (`xoxb-...`). 2. У разі успіху файл записується до сховища медіа. -3. Завантажені шляхи медіа та типи вмісту додаються до вхідного контексту. -4. Шляхи моделі/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту. +3. Шляхи до завантажених медіа й типи вмісту додаються до вхідного контексту. +4. Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладені зображення з цього контексту. 5. Файли, що не є зображеннями, залишаються доступними як файлові метадані або посилання на медіа для інструментів, які можуть їх обробляти. ### Успадкування вкладень кореня треду Коли повідомлення надходить у треді (має батьківський `thread_ts`): -- Якщо сама відповідь не має безпосередніх медіа, а включене кореневе повідомлення має файли, Slack може гідратувати кореневі файли як контекст стартера треду. +- Якщо сама відповідь не має безпосередніх медіа, а включене кореневе повідомлення має файли, Slack може додати кореневі файли як контекст початкового повідомлення треду. - Безпосередні вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення. -- Кореневе повідомлення, яке має лише файли й не має тексту, представляється з placeholder вкладенням, щоб fallback усе ще міг включити його файли. +- Кореневе повідомлення, яке має лише файли й не має тексту, представляється placeholder вкладення, щоб fallback все одно міг включити його файли. ### Обробка кількох вкладень Коли одне повідомлення Slack містить кілька файлових вкладень: -- Кожне вкладення обробляється незалежно через медійний pipeline. -- Завантажені посилання на медіа агрегуються в контекст повідомлення. +- Кожне вкладення обробляється незалежно через конвеєр медіа. +- Посилання на завантажені медіа агрегуються в контекст повідомлення. - Порядок обробки відповідає порядку файлів Slack у payload події. -- Помилка завантаження одного вкладення не блокує інші. +- Збій завантаження одного вкладення не блокує інші. ### Обмеження розміру, завантаження та моделей -- **Обмеження розміру**: типово 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`. -- **Помилки завантаження**: файли, які Slack не може віддати, протерміновані URL, недоступні файли, надто великі файли та HTML-відповіді автентифікації/входу Slack пропускаються замість повідомлення як непідтримувані формати. -- **Vision model**: аналіз зображень використовує активну модель відповіді, коли вона підтримує vision, або модель зображень, налаштовану в `agents.defaults.imageModel`. +- **Ліміт розміру**: за замовчуванням 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`. +- **Збої завантаження**: файли, які Slack не може віддати, прострочені URL, недоступні файли, завеликі файли та HTML-відповіді Slack для автентифікації/входу пропускаються замість того, щоб повідомлятися як непідтримувані формати. +- **Модель зору**: аналіз зображень використовує активну модель відповіді, коли вона підтримує зір, або модель зображень, налаштовану в `agents.defaults.imageModel`. ### Відомі обмеження -| Сценарій | Поточна поведінка | Обхідний шлях | -| ------------------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| Прострочена URL-адреса файлу Slack | Файл пропущено; помилка не відображається | Повторно завантажте файл у Slack | -| Модель зору не налаштовано | Вкладення зображень зберігаються як медіапосилання, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використайте модель відповіді з підтримкою зору | -| Дуже великі зображення (> 20 MB за замовчуванням) | Пропущено відповідно до обмеження розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє | -| Переслані/поширені вкладення | Текст і медіа зображень/файлів, розміщені в Slack, обробляються за принципом найкращих зусиль | Повторно поширте безпосередньо в потоці OpenClaw | -| PDF-вкладення | Зберігаються як контекст файлу/медіа, але не спрямовуються автоматично через зоровий аналіз зображень | Використайте `download-file` для метаданих файлу або інструмент `pdf` для аналізу PDF | +| Сценарій | Поточна поведінка | Обхідний шлях | +| ------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| Прострочений URL файлу Slack | Файл пропускається; помилка не показується | Повторно завантажте файл у Slack | +| Модель зору не налаштована | Вкладені зображення зберігаються як посилання на медіа, але не аналізуються як зображення | Налаштуйте `agents.defaults.imageModel` або використайте модель відповіді з підтримкою зору | +| Дуже великі зображення (> 20 MB за замовчуванням) | Пропускаються відповідно до ліміту розміру | Збільште `channels.slack.mediaMaxMb`, якщо Slack дозволяє | +| Переслані/поширені вкладення | Текст і розміщені у Slack медіа зображень/файлів обробляються best-effort | Поширте їх напряму в треді OpenClaw | +| Вкладення PDF | Зберігаються як файловий/медійний контекст, не спрямовуються автоматично через image vision | Використайте `download-file` для файлових метаданих або інструмент `pdf` для аналізу PDF | ### Пов’язана документація - [Конвеєр розуміння медіа](/uk/nodes/media-understanding) - [Інструмент PDF](/uk/tools/pdf) -- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення зорового аналізу вкладень Slack +- Epic: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення зору для вкладень Slack - Регресійні тести: [#51353](https://github.com/openclaw/openclaw/issues/51353) - Жива перевірка: [#51354](https://github.com/openclaw/openclaw/issues/51354) @@ -1361,21 +1387,21 @@ Slack може прикріплювати завантажені медіа до - Сполучіть користувача Slack із Gateway. + Зв’яжіть користувача Slack із Gateway. - Поведінка каналу та групових DM. + Поведінка каналів і групових DM. - - Маршрутизуйте вхідні повідомлення до агентів. + + Спрямовуйте вхідні повідомлення до агентів. - Модель загроз і посилення захисту. + Модель загроз і зміцнення захисту. - Структура конфігурації та пріоритетність. + Структура конфігурації та пріоритети. - + Каталог команд і поведінка.