diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 7bb6e222a..7d59ff1ba 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,29 +1,29 @@ --- read_when: - Налаштування Slack або налагодження режиму socket/HTTP у Slack -summary: Налаштування Slack і поведінка під час роботи (Socket Mode + URL-адреси HTTP Request) +summary: Налаштування Slack і поведінка під час виконання (Socket Mode + URL-адреси HTTP-запитів) title: Slack x-i18n: - generated_at: "2026-04-06T06:59:24Z" + generated_at: "2026-04-06T07:21:13Z" model: gpt-5.4 provider: openai - source_hash: 471421a34e5ff20dfc46dab85422d2e814524068c8466d0738448cd5d64d415b + source_hash: f324c1b203146b8b885179e9f76cd6883cedf96a87df1d9642626d8e7fb392a7 source_path: channels/slack.md workflow: 15 --- # Slack -Статус: готово до використання в production для приватних повідомлень + каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; URL-адреси HTTP Request також підтримуються. +Стан: готовий до production для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; URL-адреси HTTP-запитів також підтримуються. - - Приватні повідомлення Slack за замовчуванням використовують режим підключення. + + За замовчуванням Slack DM працюють у режимі пейрингу. - Вбудована поведінка команд і каталог команд. + Нативна поведінка команд і каталог команд. - + Міжканальна діагностика та сценарії відновлення. @@ -31,7 +31,7 @@ x-i18n: ## Швидке налаштування - + У налаштуваннях застосунку Slack: @@ -56,7 +56,7 @@ x-i18n: } ``` - Резервне значення з env (лише для облікового запису за замовчуванням): + Резервне значення з env (лише для типового акаунта): ```bash SLACK_APP_TOKEN=xapp-... @@ -75,10 +75,10 @@ SLACK_BOT_TOKEN=xoxb-... - `channel_rename` - `pin_added`, `pin_removed` - Також увімкніть **Messages Tab** у App Home для приватних повідомлень. + Також увімкніть **Messages Tab** у App Home для DM. - + ```bash openclaw gateway @@ -89,13 +89,13 @@ openclaw gateway - + - - встановіть режим HTTP (`channels.slack.mode="http"`) + - установіть режим HTTP (`channels.slack.mode="http"`) - скопіюйте **Signing Secret** Slack - - встановіть однаковий Request URL для Event Subscriptions, Interactivity і Slash command на той самий шлях webhook (типово `/slack/events`) + - установіть однаковий URL запиту для Event Subscriptions + Interactivity + Slash command на той самий шлях webhook (типово `/slack/events`) @@ -117,10 +117,10 @@ openclaw gateway - - Підтримується HTTP-режим для кожного облікового запису окремо. + + Підтримується HTTP-режим для кожного акаунта окремо. - Призначте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували. + Надайте кожному акаунту окремий `webhookPath`, щоб реєстрації не конфліктували. @@ -129,8 +129,8 @@ openclaw gateway ## Контрольний список маніфесту та scope - - + + ```json { @@ -205,10 +205,95 @@ openclaw gateway } ``` - + + + +```json +{ + "display_information": { + "name": "OpenClaw", + "description": "Slack connector for OpenClaw" + }, + "features": { + "bot_user": { + "display_name": "OpenClaw", + "always_online": true + }, + "app_home": { + "messages_tab_enabled": true, + "messages_tab_read_only_enabled": false + }, + "slash_commands": [ + { + "command": "/openclaw", + "description": "Send a message to OpenClaw", + "should_escape": false, + "url": "https://gateway-host.example.com/slack/events" + } + ] + }, + "oauth_config": { + "scopes": { + "bot": [ + "app_mentions:read", + "assistant:write", + "channels:history", + "channels:read", + "chat:write", + "commands", + "emoji:read", + "files:read", + "files:write", + "groups:history", + "groups:read", + "im:history", + "im:read", + "im:write", + "mpim:history", + "mpim:read", + "mpim:write", + "pins:read", + "pins:write", + "reactions:read", + "reactions:write", + "users:read" + ] + } + }, + "settings": { + "event_subscriptions": { + "request_url": "https://gateway-host.example.com/slack/events", + "bot_events": [ + "app_mention", + "channel_rename", + "member_joined_channel", + "member_left_channel", + "message.channels", + "message.groups", + "message.im", + "message.mpim", + "pin_added", + "pin_removed", + "reaction_added", + "reaction_removed" + ] + }, + "interactivity": { + "is_enabled": true, + "request_url": "https://gateway-host.example.com/slack/events", + "message_menu_options_url": "https://gateway-host.example.com/slack/events" + } + } +} +``` + + + + + - Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope для читання є: + Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -223,28 +308,28 @@ openclaw gateway ## Модель токенів -- `botToken` + `appToken` обов'язкові для Socket Mode. +- `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`). -- Необов'язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні `username` та icon). `icon_emoji` використовує синтаксис `:emoji_name:`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті + рядки або об’єкти SecretRef. +- Токени в конфігурації мають пріоритет над резервними значеннями з env. +- Резервне значення з env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового акаунта. +- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення з env) і за замовчуванням працює лише для читання (`userTokenReadOnly: true`). +- Необов’язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні `username` та іконку). `icon_emoji` використовує синтаксис `:emoji_name:`. -Поведінка знімка статусу: +Поведінка знімка стану: -- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` - для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`). -- Статус може бути `available`, `configured_unavailable` або `missing`. -- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше не-inline джерело секретів, але поточна команда/шлях виконання - не змогли визначити фактичне значення. +- Перевірка акаунта Slack відстежує поля `*Source` і `*Status` + для кожного облікового даного (`botToken`, `appToken`, `signingSecret`, `userToken`). +- Стан може бути `available`, `configured_unavailable` або `missing`. +- `configured_unavailable` означає, що акаунт налаштований через SecretRef + або інше не-inline джерело секрету, але поточна команда/шлях виконання + не змогли отримати фактичне значення. - У HTTP-режимі включається `signingSecretStatus`; у Socket Mode - потрібною парою є `botTokenStatus` + `appTokenStatus`. + обов’язковою парою є `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогів за наявності конфігурації може віддаватися перевага токену користувача. Для запису пріоритетним залишається токен бота; запис через токен користувача дозволяється лише коли `userTokenReadOnly: false` і токен бота недоступний. +Для читання дій/каталогів токен користувача може бути пріоритетним, якщо його налаштовано. Для запису пріоритетним залишається токен бота; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і токен бота недоступний. ## Дії та обмеження @@ -253,74 +338,74 @@ openclaw gateway Доступні групи дій у поточному інструментарії Slack: -| Group | Default | +| Група | Типово | | ---------- | ------- | -| messages | enabled | -| reactions | enabled | -| pins | enabled | -| memberInfo | enabled | -| emojiList | enabled | +| messages | увімкнено | +| reactions | увімкнено | +| pins | увімкнено | +| memberInfo | увімкнено | +| emojiList | увімкнено | -Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. +Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. ## Керування доступом і маршрутизація - - `channels.slack.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`): - - `pairing` (за замовчуванням) + - `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` (групові приватні повідомлення типово false) - - `dm.groupChannels` (необов'язковий allowlist MPIM) + - `dm.groupEnabled` (для групових DM типово false) + - `dm.groupChannels` (необов’язковий allowlist MPIM) - Пріоритет для кількох облікових записів: + Пріоритет для кількох акаунтів: - - `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. - - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. + - `channels.slack.accounts.default.allowFrom` застосовується лише до акаунта `default`. + - Іменовані акаунти успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. + - Іменовані акаунти не успадковують `channels.slack.accounts.default.allowFrom`. - Підключення в приватних повідомленнях використовує `openclaw pairing approve slack `. + Пейринг у DM використовує `openclaw pairing approve slack `. - + `channels.slack.groupPolicy` керує обробкою каналів: - `open` - `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 приватних повідомлень визначаються під час запуску, коли доступ токена це дозволяє - - записи з невизначеними назвами каналів зберігаються в конфігурації, але типово ігноруються для маршрутизації - - вхідна авторизація і маршрутизація каналів типово працюють за ID; пряме зіставлення імені користувача/sluга потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи allowlist каналів і DM allowlist розв’язуються під час запуску, якщо доступ токена це дозволяє + - нерозв’язані записи імен каналів зберігаються як налаштовані, але типово ігноруються під час маршрутизації + - вхідна авторизація та маршрутизація каналів типово працюють за ID; пряме зіставлення за username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - Повідомлення в каналах типово обмежені згадками. + Повідомлення каналів типово обмежуються згадками. Джерела згадок: - явна згадка застосунку (`<@botId>`) - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) - - неявна поведінка відповідей у гілці на бота + - неявна поведінка відповіді в треді на бота - Керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): + Керування для кожного каналу (`channels.slack.channels.`; імена лише через розв’язання під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - `users` (allowlist) @@ -329,38 +414,38 @@ openclaw gateway - `systemPrompt` - `tools`, `toolsBySender` - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` - (застарілі ключі без префікса досі зіставляються лише з `id:`) + (застарілі ключі без префікса все ще зіставляються лише з `id:`) -## Гілки, сесії та теги відповідей +## Треди, сесії та теги відповіді -- Приватні повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. -- Із типовим `session.dmScope=main` приватні повідомлення Slack згортаються в основну сесію агента. +- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. +- З типовим `session.dmScope=main` Slack DM згортаються в основну сесію агента. - Сесії каналів: `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.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` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. -Порядок визначення: +Порядок розв’язання: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` @@ -369,25 +454,25 @@ openclaw gateway Примітки: -- Slack очікує shortcode (наприклад `"eyes"`). -- Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально. +- Slack очікує shortcodes (наприклад, `"eyes"`). +- Використовуйте `""`, щоб вимкнути реакцію для акаунта Slack або глобально. -## Потокове передавання тексту +## Потокова передача тексту -`channels.slack.streaming` керує поведінкою попереднього перегляду в реальному часі: +`channels.slack.streaming` керує поведінкою live preview: -- `off`: вимкнути потоковий попередній перегляд. -- `partial` (за замовчуванням): замінювати текст попереднього перегляду останнім частковим виводом. -- `block`: додавати оновлення попереднього перегляду частинами. -- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати фінальний текст. +- `off`: вимкнути потокове live preview. +- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом. +- `block`: додавати порційні оновлення попереднього перегляду. +- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст. -`channels.slack.nativeStreaming` керує вбудованим потоковим передаванням тексту Slack, коли `streaming` має значення `partial` (типово: `true`). +`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`). -- Щоб з'явилося вбудоване потокове передавання тексту, має бути доступна гілка відповіді. Вибір гілки й надалі визначається `replyToMode`. Без неї використовується звичайний чернетковий попередній перегляд. -- Медіа та не текстові payload повертаються до звичайної доставки. -- Якщо потокове передавання зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти payload. +- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду все одно підпорядковується `replyToMode`. Без нього використовується звичайний чорновий попередній перегляд. +- Для медіа та нетекстових корисних навантажень використовується звичайна доставка. +- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти корисних навантажень. -Використовуйте чернетковий попередній перегляд замість вбудованого потокового передавання тексту Slack: +Використовуйте чорновий попередній перегляд замість нативної потокової передачі тексту Slack: ```json5 { @@ -403,63 +488,63 @@ openclaw gateway Застарілі ключі: - `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming`. -- булеве значення `channels.slack.streaming` автоматично мігрує до `channels.slack.nativeStreaming`. +- булеве `channels.slack.streaming` автоматично мігрує до `channels.slack.nativeStreaming`. -## Резервна реакція набору тексту +## Резервний варіант реакції друку -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це особливо корисно поза відповідями в гілках, які використовують типовий індикатор статусу "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це найкорисніше поза відповідями в треді, де використовується типовий індикатор стану "is typing...". -Порядок визначення: +Порядок розв’язання: - `channels.slack.accounts..typingReaction` - `channels.slack.typingReaction` Примітки: -- Slack очікує shortcode (наприклад `"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`, якщо налаштовано; інакше надсилання каналу використовує типові значення MIME-kind із конвеєра медіа Бажані явні цілі: - - `user:` для приватних повідомлень + - `user:` для DM - `channel:` для каналів - Приватні повідомлення Slack відкриваються через API conversations Slack під час надсилання до цілей користувача. + Slack DM відкриваються через API розмов Slack під час надсилання в цілі користувача. ## Команди та поведінка слеш-команд -- Вбудований автоматичний режим команд **вимкнено** для Slack (`commands.native: "auto"` не вмикає вбудовані команди Slack). -- Увімкніть вбудовані обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). -- Коли вбудовані команди ввімкнено, зареєструйте відповідні слеш-команди в Slack (імена `/`), за одним винятком: - - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`) -- Якщо вбудовані команди не ввімкнено, ви можете запускати одну налаштовану слеш-команду через `channels.slack.slashCommand`. -- Вбудовані меню аргументів тепер адаптують свою стратегію відображення: +- Автоматичний нативний режим команд для Slack **вимкнений** (`commands.native: "auto"` не вмикає нативні команди Slack). +- Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). +- Коли нативні команди ввімкнені, зареєструйте відповідні слеш-команди в Slack (імена `/`), з одним винятком: + - зареєструйте `/agentstatus` для команди стану (Slack резервує `/status`) +- Якщо нативні команди не ввімкнені, ви можете запускати одну налаштовану слеш-команду через `channels.slack.slashCommand`. +- Нативні меню аргументів тепер адаптують свою стратегію рендерингу: - до 5 варіантів: блоки кнопок - 6-100 варіантів: статичне меню вибору - - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники інтерактивних параметрів - - якщо закодовані значення варіантів перевищують ліміти Slack, потік повертається до кнопок -- Для довгих payload параметрів меню аргументів слеш-команд використовують діалог підтвердження перед відправленням вибраного значення. + - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity + - якщо закодовані значення варіантів перевищують ліміти Slack, процес повертається до кнопок +- Для довгих корисних навантажень варіантів меню аргументів слеш-команд використовують діалог підтвердження перед відправленням вибраного значення. Типові налаштування слеш-команд: @@ -472,13 +557,13 @@ openclaw gateway - `agent::slack:slash:` -і все одно маршрутизують виконання команди щодо цільової сесії розмови (`CommandTargetSessionKey`). +і все ще маршрутизують виконання команди до сесії цільової розмови (`CommandTargetSessionKey`). ## Інтерактивні відповіді -Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але ця функція за замовчуванням вимкнена. +Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але ця функція типово вимкнена. -Увімкнути глобально: +Увімкніть її глобально: ```json5 { @@ -492,7 +577,7 @@ Slack може відображати інтерактивні елементи } ``` -Або увімкнути лише для одного облікового запису Slack: +Або увімкніть лише для одного акаунта Slack: ```json5 { @@ -510,43 +595,44 @@ 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 UI. Інші канали не перетворюють директиви Slack Block Kit у власні системи кнопок. -- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не вихідні значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищать ліміти Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного payload blocks. +- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. +- Значення інтерактивного зворотного виклику — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом. +- Якщо згенеровані інтерактивні блоки перевищують ліміти Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного корисного навантаження blocks. ## Підтвердження exec у Slack -Slack може працювати як вбудований клієнт підтвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. +Slack може виступати як нативний клієнт підтвердження з інтерактивними кнопками та взаємодіями замість резервного переходу до Web UI або термінала. -- Підтвердження exec використовують `channels.slack.execApprovals.*` для вбудованої маршрутизації приватних повідомлень/каналів. -- Підтвердження plugin також можуть визначатися через ту саму вбудовану поверхню кнопок Slack, коли запит уже потрапляє в Slack і тип id підтвердження — `plugin:`. -- Авторизація того, хто підтверджує, і далі застосовується: лише користувачі, визначені як approvers, можуть підтверджувати або відхиляти запити через Slack. +- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації в DM/канал. +- Підтвердження плагінів також можуть розв’язуватися через ту саму нативну поверхню кнопок Slack, коли запит уже надходить у Slack, а тип id підтвердження — `plugin:`. +- Авторизація затверджувачів усе ще застосовується: лише користувачі, визначені як затверджувачі, можуть схвалювати або відхиляти запити через 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"` і визначається принаймні один -approver. Установіть `enabled: false`, щоб явно вимкнути Slack як вбудований клієнт підтвердження. -Установіть `enabled: true`, щоб примусово ввімкнути вбудовані підтвердження, коли approvers визначаються. +Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"` і розв’язується принаймні один +затверджувач. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтвердження. +Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли затверджувачі розв’язуються. -Типова поведінка без явної конфігурації підтвердження exec для Slack: +Типова поведінка без явної конфігурації підтверджень exec для Slack: ```json5 { @@ -556,8 +642,8 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Явна вбудована конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або -увімкнути доставку до початкового чату: +Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити затверджувачів, додати фільтри або +увімкнути доставку до чату-джерела: ```json5 { @@ -574,23 +660,23 @@ approver. Установіть `enabled: false`, щоб явно вимкнут ``` Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на підтвердження exec також мають -маршрутизуватися до інших чатів або явно заданих зовнішніх цілей. Спільне переспрямування `approvals.plugin` також є -окремим; вбудовані кнопки Slack усе одно можуть визначати підтвердження plugin, коли ці запити вже надходять +маршрутизуватися в інші чати або до явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також є +окремим; нативні кнопки Slack все одно можуть розв’язувати підтвердження плагінів, коли ці запити вже надходять у Slack. -Команда `/approve` у тому ж чаті також працює в каналах і приватних повідомленнях Slack, які вже підтримують команди. Див. [Exec approvals](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування підтверджень. +`/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Див. [Підтвердження exec](/uk/tools/exec-approvals) для повної моделі переспрямування підтверджень. -## Події та поведінка під час роботи +## Події та операційна поведінка -- Редагування/видалення повідомлень і трансляції гілок перетворюються на системні події. -- Події додавання/видалення реакцій перетворюються на системні події. -- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень перетворюються на системні події. +- Редагування/видалення повідомлень і broadсast тредів зіставляються із системними подіями. +- Події додавання/видалення реакцій зіставляються із системними подіями. +- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень зіставляються із системними подіями. - `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`. -- Метадані теми/призначення каналу вважаються ненадійним контекстом і можуть бути вставлені в контекст маршрутизації. -- Ініціатор гілки та початкове заповнення контексту історії гілки фільтруються за налаштованими allowlist відправників, коли це застосовно. -- Дії блоків і взаємодії з модальними вікнами породжують структуровані системні події `Slack interaction: ...` з насиченими полями payload: +- Метадані topic/purpose каналу розглядаються як недовірений контекст і можуть бути впроваджені в контекст маршрутизації. +- Ініціатор треду та початкове наповнення контексту історії треду фільтруються за налаштованими allowlist відправників, коли це застосовно. +- Дії блоків і взаємодії з modal створюють структуровані системні події `Slack interaction: ...` з розширеними полями корисного навантаження: - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` - - події модальних вікон `view_submission` і `view_closed` з маршрутизованими метаданими каналу та полями форми + - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введенням форми ## Вказівники на довідник конфігурації @@ -598,20 +684,20 @@ approver. Установіть `enabled: false`, щоб явно вимкнут - [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack) - Важливі поля Slack: + Високосигнальні поля Slack: - режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - - доступ до приватних повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` + - доступ до DM: `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` + - операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Усунення несправностей - Перевірте по черзі: + Перевірте в такому порядку: - `groupPolicy` - allowlist каналів (`channels.slack.channels`) @@ -628,12 +714,12 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - підтвердження підключення / записи allowlist + - підтвердження пейрингу / записи allowlist ```bash openclaw pairing list slack @@ -641,34 +727,34 @@ openclaw pairing list slack - - Перевірте дійсність токенів бота + застосунку та те, що Socket Mode увімкнено в налаштуваннях застосунку Slack. + + Перевірте токени бота й застосунку та ввімкнення Socket Mode в налаштуваннях застосунку Slack. Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або - `appTokenStatus: "configured_unavailable"`, обліковий запис Slack - налаштовано, але поточне середовище виконання не змогло визначити значення, - що зберігається через SecretRef. + `appTokenStatus: "configured_unavailable"`, акаунт Slack + налаштований, але поточне середовище виконання не змогло розв’язати значення, + що підтримується SecretRef. - + Перевірте: - signing secret - шлях webhook - - URL-адреси Request URL у Slack (Events + Interactivity + Slash Commands) - - унікальний `webhookPath` для кожного HTTP-облікового запису + - URL-адреси запитів Slack (Events + Interactivity + Slash Commands) + - унікальний `webhookPath` для кожного HTTP-акаунта - Якщо `signingSecretStatus: "configured_unavailable"` з'являється у знімках - облікових записів, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло - визначити signing secret, що зберігається через SecretRef. + Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках + акаунта, HTTP-акаунт налаштований, але поточне середовище виконання не змогло + розв’язати signing secret, що підтримується SecretRef. - - Переконайтеся, що ви мали на увазі: + + Перевірте, що саме ви планували: - - режим вбудованих команд (`channels.slack.commands.native: true`) з відповідними слеш-командами, зареєстрованими в Slack + - нативний режим команд (`channels.slack.commands.native: true`) з відповідними слеш-командами, зареєстрованими в Slack - або режим однієї слеш-команди (`channels.slack.slashCommand.enabled: true`) Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. @@ -676,9 +762,9 @@ openclaw pairing list slack -## Пов'язане +## Пов’язане -- [Підключення](/uk/channels/pairing) +- [Пейринг](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Безпека](/uk/gateway/security) - [Маршрутизація каналів](/uk/channels/channel-routing)