diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 919740868..102f903a1 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,24 +1,24 @@ --- read_when: - - Налаштування Slack або налагодження режиму Slack socket/HTTP + - Налаштування Slack або налагодження режиму socket/HTTP у Slack summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Request URLs) title: Slack x-i18n: - generated_at: "2026-04-06T08:00:48Z" + generated_at: "2026-04-06T09:17:31Z" model: gpt-5.4 provider: openai - source_hash: 897001c13d400cc8387a27000b82dd4c0512b2b88e2fe47785634aed8b7ab7af + source_hash: 11571e7e10cfbf4de91dc1b1ed6582cd94afdcf6c3356fdd3ccc770096c6dd31 source_path: channels/slack.md workflow: 15 --- # Slack -Статус: готовий до production для DM + каналів через інтеграції застосунків Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються. +Статус: готовий до продакшену для особистих повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються. - - Slack DM за замовчуванням працюють у режимі пейрингу. + + Особисті повідомлення Slack типово працюють у режимі зіставлення. Нативна поведінка команд і каталог команд. @@ -33,12 +33,13 @@ x-i18n: - - У налаштуваннях застосунку Slack: + + У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - увімкніть **Socket Mode** - - створіть **App Token** (`xapp-...`) з `connections:write` - - встановіть застосунок і скопіюйте **Bot Token** (`xoxb-...`) + - виберіть **from a manifest** і виберіть робочу область для свого застосунку + - вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче й продовжуйте створення + - згенеруйте **App-Level Token** (`xapp-...`) з `connections:write` + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) @@ -56,7 +57,7 @@ x-i18n: } ``` - Резервне значення з env (лише для облікового запису за замовчуванням): + Резервне значення через env (лише для типового облікового запису): ```bash SLACK_APP_TOKEN=xapp-... @@ -65,19 +66,6 @@ SLACK_BOT_TOKEN=xoxb-... - - Підпишіть бот-події для: - - - `app_mention` - - `message.channels`, `message.groups`, `message.im`, `message.mpim` - - `reaction_added`, `reaction_removed` - - `member_joined_channel`, `member_left_channel` - - `channel_rename` - - `pin_added`, `pin_removed` - - Також увімкніть вкладку App Home **Messages Tab** для DM. - - ```bash @@ -91,15 +79,17 @@ openclaw gateway - + + У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - встановіть режим HTTP (`channels.slack.mode="http"`) - - скопіюйте **Signing Secret** Slack - - встановіть Request URL для Event Subscriptions + Interactivity + Slash command на той самий шлях webhook (типово `/slack/events`) + - виберіть **from a manifest** і виберіть робочу область для свого застосунку + - вставте [приклад маніфесту](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням + - збережіть **Signing Secret** для перевірки запитів + - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) - + ```json5 { @@ -115,12 +105,20 @@ openclaw gateway } ``` + + Використовуйте унікальні шляхи webhook для багатьох HTTP-облікових записів + + Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. + + - - Режим HTTP для кількох облікових записів підтримується. + + +```bash +openclaw gateway +``` - Призначте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували. @@ -292,13 +290,13 @@ openclaw gateway - - Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власне ім’я користувача й іконку) замість типової ідентичності застосунку Slack. + + Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість типової ідентичності застосунку Slack. - Якщо ви використовуєте emoji-іконку, Slack очікує синтаксис `:emoji_name:`. + Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`. - - Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope читання є: + + Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope для читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -313,32 +311,32 @@ openclaw gateway ## Модель токенів -- `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`). +- `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`). -Поведінка знімка статусу: +Поведінка знімка стану: - Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` - для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`). -- Статус має значення `available`, `configured_unavailable` або `missing`. -- `configured_unavailable` означає, що обліковий запис налаштований через SecretRef + для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`). +- Статус може бути `available`, `configured_unavailable` або `missing`. +- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef або інше не-inline джерело секретів, але поточний шлях команди/виконання не зміг визначити фактичне значення. - У режимі HTTP включається `signingSecretStatus`; у Socket Mode - потрібною парою є `botTokenStatus` + `appTokenStatus`. + обов’язковою парою є `botTokenStatus` + `appTokenStatus`. -Для дій/читання директорій за наявності налаштування може використовуватися токен користувача. Для запису пріоритетним лишається токен бота; запис через токен користувача дозволяється лише коли `userTokenReadOnly: false` і токен бота недоступний. +Для читання дій/каталогів перевага може надаватися токену користувача, якщо його налаштовано. Для запису пріоритет зберігається за bot token; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і bot token недоступний. ## Дії та обмеження -Дії Slack керуються через `channels.slack.actions.*`. +Діями Slack керує `channels.slack.actions.*`. Доступні групи дій у поточному інструментарії Slack: @@ -352,32 +350,32 @@ openclaw gateway Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. -## Контроль доступу та маршрутизація +## Керування доступом і маршрутизація - - `channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` керує доступом до особистих повідомлень (застаріле: `channels.slack.dm.policy`): - `pairing` (типово) - `allowlist` - - `open` (потрібно, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) + - `open` (вимагає, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) - `disabled` - Прапорці DM: + Прапорці особистих повідомлень: - `dm.enabled` (типово true) - `channels.slack.allowFrom` (рекомендовано) - `dm.allowFrom` (застаріле) - - `dm.groupEnabled` (групові DM типово false) + - `dm.groupEnabled` (групові особисті повідомлення типово false) - `dm.groupChannels` (необов’язковий allowlist MPIM) - Пріоритет для кількох облікових записів: + Пріоритет для багатьох облікових записів: - `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. + - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не заданий. - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. - Пейринг у DM використовує `openclaw pairing approve slack `. + Зіставлення в особистих повідомленнях використовує `openclaw pairing approve slack `. @@ -388,28 +386,28 @@ openclaw gateway - `allowlist` - `disabled` - Allowlist каналів зберігається в `channels.slack.channels` і має використовувати стабільні ID каналів. + Allowlist каналів міститься в `channels.slack.channels` і має використовувати стабільні ID каналів. - Примітка про виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в лог (навіть якщо встановлено `channels.defaults.groupPolicy`). + Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується `groupPolicy="allowlist"` і записується попередження (навіть якщо задано `channels.defaults.groupPolicy`). - Визначення імен/ID: + Визначення імені/ID: - - записи allowlist каналів і записи allowlist DM визначаються під час запуску, якщо доступ токена це дозволяє - - невизначені записи імен каналів зберігаються як налаштовано, але типово ігноруються для маршрутизації - - вхідна авторизація та маршрутизація каналів типово працюють за принципом ID-first; пряме зіставлення імен користувачів/slugs потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи allowlist каналів і allowlist особистих повідомлень визначаються під час запуску, якщо доступ токена це дозволяє + - нерозв’язані записи імен каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації + - авторизація вхідних подій і маршрутизація каналів типово орієнтовані на ID; пряме зіставлення за ім’ям користувача/slug вимагає `channels.slack.dangerouslyAllowNameMatching: true` - Повідомлення каналів типово обмежуються згадками. + Повідомлення в каналах типово обмежуються згадками. Джерела згадок: - явна згадка застосунку (`<@botId>`) - - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) - - неявна поведінка reply-to-bot у треді + - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) + - неявна поведінка відповіді в ланцюжку боту - Керування для окремого каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): + Керування на рівні каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - `users` (allowlist) @@ -417,33 +415,33 @@ openclaw gateway - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"` + - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` (застарілі ключі без префікса, як і раніше, зіставляються лише з `id:`) -## Треди, сесії та теги відповідей +## Ланцюжки, сесії та теги відповіді -- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. -- За типового `session.dmScope=main` DM у Slack зводяться до основної сесії агента. +- Особисті повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. +- З типовим `session.dmScope=main` особисті повідомлення Slack згортаються в основну сесію агента. - Сесії каналів: `agent::slack:channel:`. -- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:`) за потреби. +- Відповіді в ланцюжках можуть створювати суфікси сесій ланцюжків (`:thread:`), де це застосовно. - Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`. -- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень треду отримується при старті нової сесії треду (типово `20`; установіть `0`, щоб вимкнути). +- `channels.slack.thread.initialHistoryLimit` керує тим, скільки наявних повідомлень ланцюжка отримується під час запуску нової сесії ланцюжка (типово `20`; задайте `0`, щоб вимкнути). -Керування тредами відповідей: +Параметри ланцюжків відповідей: - `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`) - `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel` - застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode` -Підтримуються ручні теги відповідей: +Підтримуються ручні теги відповіді: - `[[reply_to_current]]` - `[[reply_to:]]` -Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів платформ: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді лишаються видимими в основному потоці чату. +Примітка: `replyToMode="off"` вимикає **усі** ланцюжки відповідей у Slack, зокрема явні теги `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі ланцюжків на платформах: ланцюжки Slack приховують повідомлення з каналу, тоді як відповіді Telegram лишаються видимими в основному потоці чату. ## Реакції підтвердження @@ -458,25 +456,25 @@ openclaw gateway Примітки: -- Slack очікує shortcodes (наприклад `"eyes"`). +- Slack очікує shortcodes (наприклад, `"eyes"`). - Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально. -## Потокова передача тексту +## Потокове передавання тексту -`channels.slack.streaming` керує поведінкою живого попереднього перегляду: +`channels.slack.streaming` керує поведінкою попереднього перегляду в реальному часі: -- `off`: вимкнути потоковий живий попередній перегляд. -- `partial` (типово): замінювати текст попереднього перегляду найновішим частковим виводом. -- `block`: додавати шматки оновлень попереднього перегляду. -- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати фінальний текст. +- `off`: вимкнути потоковий попередній перегляд у реальному часі. +- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом. +- `block`: додавати порційні оновлення попереднього перегляду. +- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати остаточний текст. -`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`). +`channels.slack.nativeStreaming` керує нативним потоковим передаванням тексту Slack, коли `streaming` має значення `partial` (типово: `true`). -- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду й надалі визначається `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд. -- Медіа та нетекстові payload повертаються до звичайної доставки. -- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти payload. +- Щоб відображалося нативне потокове передавання тексту, має бути доступний ланцюжок відповіді. Вибір ланцюжка все одно підпорядковується `replyToMode`. Без нього використовується звичайний чорновий попередній перегляд. +- Для медіа та нетекстових payload використовується звичайна доставка. +- Якщо потокове передавання переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload. -Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack: +Використовуйте чорновий попередній перегляд замість нативного потокового передавання тексту Slack: ```json5 { @@ -491,12 +489,12 @@ openclaw gateway Застарілі ключі: -- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming`. -- булеве `channels.slack.streaming` автоматично мігрує до `channels.slack.nativeStreaming`. +- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується в `channels.slack.streaming`. +- булеве `channels.slack.streaming` автоматично мігрується в `channels.slack.nativeStreaming`. -## Резервна реакція введення +## Резервна реакція друку -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в треді, де використовується типовий індикатор статусу "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а після завершення виконання прибирає її. Це найкорисніше поза відповідями в ланцюжках, де використовується типовий індикатор стану "is typing...". Порядок визначення: @@ -505,52 +503,52 @@ openclaw gateway Примітки: -- Slack очікує shortcodes (наприклад `"hourglass_flowing_sand"`). -- Реакція виконується за принципом best-effort, і після завершення відповіді або сценарію помилки автоматично робиться спроба очищення. +- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). +- Реакція надсилається за принципом best-effort, а очищення автоматично намагається виконатися після завершення відповіді або сценарію помилки. -## Медіа, чанкування та доставка +## Медіа, розбиття на частини та доставка - Вкладені файли Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне й дозволяють обмеження розміру. + Вкладення файлів Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються в сховище медіа, якщо отримання успішне та дозволяють обмеження розміру. - Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. + Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`. - - текстові чанки використовують `channels.slack.textChunkLimit` (типово 4000) - - `channels.slack.chunkMode="newline"` вмикає розбиття з пріоритетом абзаців - - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`) - - обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо налаштовано; інакше для надсилання в канали використовуються типові MIME-kind значення з медіапайплайна + - текстові частини використовують `channels.slack.textChunkLimit` (типово 4000) + - `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами + - надсилання файлів використовує API завантаження Slack і може включати відповіді в ланцюжках (`thread_ts`) + - обмеження вихідних медіа задається `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канал використовує типові значення kind MIME з конвеєра медіа Бажані явні цілі: - - `user:` для DM + - `user:` для особистих повідомлень - `channel:` для каналів - DM у Slack відкриваються через API розмов Slack при надсиланні до цілей користувача. + Особисті повідомлення Slack відкриваються через API розмов Slack під час надсилання до цілей користувача. ## Команди та поведінка слеш-команд -- Нативний автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack). +- Автоматичний режим нативних команд **вимкнений** для Slack (`commands.native: "auto"` не вмикає нативні команди Slack). - Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). -- Коли нативні команди увімкнені, зареєструйте відповідні слеш-команди у Slack (імена `/`), з одним винятком: +- Коли нативні команди ввімкнені, зареєструйте відповідні слеш-команди в Slack (імена `/`), з одним винятком: - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`) -- Якщо нативні команди не увімкнені, можна виконувати одну налаштовану слеш-команду через `channels.slack.slashCommand`. -- Нативні меню аргументів тепер адаптують стратегію рендерингу: +- Якщо нативні команди не ввімкнені, ви можете запускати одну налаштовану слеш-команду через `channels.slack.slashCommand`. +- Нативні меню аргументів тепер адаптують свою стратегію відображення: - до 5 варіантів: блоки кнопок - 6-100 варіантів: статичне меню вибору - - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity + - понад 100 варіантів: зовнішній вибір з асинхронним фільтруванням варіантів, якщо доступні обробники опцій interactivity - якщо закодовані значення варіантів перевищують обмеження Slack, потік повертається до кнопок -- Для довгих payload варіантів меню аргументів слеш-команд використовують діалог підтвердження перед передаванням вибраного значення. +- Для довгих payload варіантів меню аргументів слеш-команд використовують діалог підтвердження перед відправленням вибраного значення. -Типові налаштування слеш-команд: +Типові параметри слеш-команд: - `enabled: false` - `name: "openclaw"` @@ -561,13 +559,13 @@ openclaw gateway - `agent::slack:slash:` -і, як і раніше, маршрутизують виконання команди до цільової сесії розмови (`CommandTargetSessionKey`). +і все одно маршрутизують виконання команди до цільової сесії розмови (`CommandTargetSessionKey`). ## Інтерактивні відповіді -Slack може відображати інтерактивні елементи відповіді, створені агентом, але цю функцію типово вимкнено. +Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але ця функція типово вимкнена. -Увімкнути глобально: +Увімкніть її глобально: ```json5 { @@ -581,7 +579,7 @@ Slack може відображати інтерактивні елементи } ``` -Або ввімкнути лише для одного облікового запису Slack: +Або увімкніть її лише для одного облікового запису Slack: ```json5 { @@ -599,44 +597,43 @@ Slack може відображати інтерактивні елементи } ``` -Коли функцію ввімкнено, агенти можуть виводити директиви відповіді лише для Slack: +Коли це ввімкнено, агенти можуть виводити директиви відповіді лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Ці директиви компілюються в Slack Block Kit і маршрутизують кліки або вибір назад через наявний шлях подій взаємодії Slack. +Ці директиви компілюються в Slack Block Kit і маршрутизують натискання або вибір назад через наявний шлях подій взаємодії Slack. Примітки: -- Це UI, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок. +- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. - Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищують ліміти Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload блоків. +- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload blocks. -## Погодження exec у Slack +## Exec approvals у Slack -Slack може виступати нативним клієнтом погодження з інтерактивними кнопками та взаємодіями, замість повернення до Web UI або термінала. +Slack може працювати як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. -- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналів. -- Погодження plugin також можуть визначатися через ту саму нативну поверхню кнопок Slack, коли запит уже надходить у Slack і тип id погодження — `plugin:`. -- Авторизація того, хто погоджує, як і раніше, примусово перевіряється: лише користувачі, визначені як ті, хто погоджує, можуть схвалювати або відхиляти запити через Slack. +- Для нативної маршрутизації в особисті повідомлення/канали використовуються `channels.slack.execApprovals.*`. +- Погодження plugin також можуть визначатися через ту саму Slack-native поверхню кнопок, коли запит уже потрапляє в Slack і тип id погодження — `plugin:`. +- Авторизація погоджувача все одно застосовується: лише користувачі, визначені як approvers, можуть погоджувати або відхиляти запити через Slack. -Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли в налаштуваннях вашого застосунку Slack увімкнено `interactivity`, запити на погодження відображаються як кнопки Block Kit безпосередньо в розмові. +Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в розмові. Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw -має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що погодження в чаті -недоступні або ручне погодження є єдиним шляхом. +має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що погодження в чаті недоступні або ручне погодження — єдиний шлях. Шлях конфігурації: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервне значення `commands.ownerAllowFrom`) +- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервне значення з `commands.ownerAllowFrom`) - `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter` -Slack автоматично вмикає нативні погодження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один -користувач, що погоджує. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження. -Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли користувачі, що погоджують, визначені. +Slack автоматично вмикає нативні exec approvals, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один +approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження. +Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли approvers визначаються. -Типова поведінка без явної конфігурації погодження exec для Slack: +Типова поведінка без явної конфігурації Slack exec approval: ```json5 { @@ -646,8 +643,8 @@ Slack автоматично вмикає нативні погодження ex } ``` -Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити список користувачів, що погоджують, додати фільтри або -вибрати доставку до чату-джерела: +Явна конфігурація Slack-native потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або +увімкнути доставку до початкового чату: ```json5 { @@ -663,24 +660,24 @@ Slack автоматично вмикає нативні погодження ex } ``` -Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на погодження exec також мають -маршрутизуватися до інших чатів або явно заданих позасмугових цілей. Спільне переспрямування `approvals.plugin` також -налаштовується окремо; нативні кнопки Slack все одно можуть обробляти погодження plugin, коли такі запити вже надходять -у Slack. +Спільне переспрямування `approvals.exec` — окреме. Використовуйте його лише тоді, коли запити на exec approval також мають +маршрутизуватися до інших чатів або явно позасмугових цілей. Спільне переспрямування `approvals.plugin` також +окреме; Slack-native кнопки все одно можуть визначати plugin approvals, коли ці запити вже потрапляють +до Slack. -Команда `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Повну модель переспрямування погоджень див. у [Погодження exec](/uk/tools/exec-approvals). +`/approve` у тому самому чаті також працює в каналах і особистих повідомленнях Slack, які вже підтримують команди. Повну модель переспрямування погоджень див. у [Exec approvals](/uk/tools/exec-approvals). ## Події та операційна поведінка -- Редагування/видалення повідомлень/розсилання тредів зіставляються із системними подіями. -- Події додавання/видалення реакцій зіставляються із системними подіями. -- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями. +- Редагування/видалення повідомлень і thread broadcast зіставляються в системні події. +- Події додавання/видалення реакцій зіставляються в системні події. +- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення pin зіставляються в системні події. - `channel_id_changed` може мігрувати ключі конфігурації каналів, коли ввімкнено `configWrites`. -- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути інжектовані в контекст маршрутизації. -- Ініціатор треду та початкове заповнення контексту історії треду фільтруються за налаштованими allowlist відправників, коли це застосовно. -- Дії блоків і взаємодії modal генерують структуровані системні події `Slack interaction: ...` із багатими полями payload: +- Метадані topic/purpose каналу вважаються недовіреним контекстом і можуть бути впроваджені в контекст маршрутизації. +- Початкова історія ланцюжка та заповнення контексту історії на початку ланцюжка фільтруються за налаштованими allowlist відправників, де це застосовно. +- Дії блоків і взаємодії modal створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload: - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` - - події modal `view_submission` і `view_closed` із маршрутними метаданими каналу та введеннями форми + - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми ## Вказівники на довідник конфігурації @@ -689,11 +686,11 @@ Slack автоматично вмикає нативні погодження ex - [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack) Високосигнальні поля Slack: - - режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - - доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` - - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; залишайте вимкненим, якщо немає потреби) + - mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` + - доступ до особистих повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` + - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний режим; тримайте вимкненим, якщо немає потреби) - доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` - - треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` + - ланцюжки/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming` - операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` @@ -706,7 +703,7 @@ Slack автоматично вмикає нативні погодження ex - `groupPolicy` - allowlist каналів (`channels.slack.channels`) - `requireMention` - - allowlist `users` для окремого каналу + - allowlist `users` для конкретного каналу Корисні команди: @@ -718,12 +715,12 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - погодження пейрингу / записи allowlist + - погодження зіставлення / записи allowlist ```bash openclaw pairing list slack @@ -732,12 +729,12 @@ openclaw pairing list slack - Перевірте bot + app tokens і увімкнення Socket Mode в налаштуваннях застосунку Slack. + Перевірте bot token + app token і ввімкнення Socket Mode в налаштуваннях застосунку Slack. Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або `appTokenStatus: "configured_unavailable"`, обліковий запис Slack налаштовано, але поточне середовище виконання не змогло визначити значення, - яке використовує SecretRef. + яке зберігається через SecretRef. @@ -749,26 +746,26 @@ openclaw pairing list slack - Slack Request URLs (Events + Interactivity + Slash Commands) - унікальний `webhookPath` для кожного HTTP-облікового запису - Якщо `signingSecretStatus: "configured_unavailable"` з’являється в знімках + Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло - визначити signing secret, який використовує SecretRef. + визначити signing secret, який зберігається через SecretRef. - + Перевірте, що саме ви мали на увазі: - - режим нативних команд (`channels.slack.commands.native: true`) з відповідними слеш-командами, зареєстрованими у Slack + - режим нативних команд (`channels.slack.commands.native: true`) з реєстрацією відповідних слеш-команд у Slack - або режим однієї слеш-команди (`channels.slack.slashCommand.enabled: true`) - Також перевірте `commands.useAccessGroups` та allowlist каналів/користувачів. + Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. -## Пов’язане +## Пов’язані матеріали -- [Пейринг](/uk/channels/pairing) +- [Зіставлення](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Безпека](/uk/gateway/security) - [Маршрутизація каналів](/uk/channels/channel-routing)