chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-05 01:46:52 +00:00
parent 93d7fdaac0
commit c8be6d9023

View File

@ -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 також підтримуються.
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
DM у Slack за замовчуванням використовують режим сполучення.
<Card title="Спарювання" icon="link" href="/uk/channels/pairing">
Slack DM типово використовують режим спарювання.
</Card>
<Card title="Слеш-команди" icon="terminal" href="/uk/tools/slash-commands">
Нативна поведінка команд і каталог команд.
</Card>
<Card title="Усунення проблем із каналами" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії відновлення.
<Card title="Усунення несправностей каналів" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та інструкції з відновлення.
</Card>
</CardGroup>
## Вибір між 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 |
<Note>
**Обирайте Socket Mode** для хостів з одним Gateway, ноутбуків розробників і on-prem мереж, які можуть виходити до `*.slack.com`, але не можуть приймати вхідний HTTPS.
**Обирайте HTTP Request URLs**, коли запускаєте кілька реплік Gateway за балансувальником навантаження, коли вихідний WSS заблокований, але вхідний HTTPS дозволений, або коли ви вже завершуєте Slack webhooks на зворотному проксі.
</Note>
## Швидке налаштування
<Tabs>
<Tab title="Socket Mode (за замовчуванням)">
<Tab title="Socket Mode (типово)">
<Steps>
<Step title="Створіть новий Slack app">
Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App****From a manifest** → виберіть свій робочий простір → вставте один із наведених нижче маніфестів → **Next****Create**.
<Step title="Створіть новий застосунок Slack">
Відкрийте [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App****From a manifest** → виберіть свій workspace → вставте один із маніфестів нижче**Next****Create**.
<CodeGroup>
@ -166,10 +188,10 @@ x-i18n:
</CodeGroup>
<Note>
**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 й додаткових опцій, як-от додаткові слеш-команди.
</Note>
Після того як 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-...
</Step>
<Step title="Запустіть gateway">
<Step title="Запустіть Gateway">
```bash
openclaw gateway
@ -221,8 +243,8 @@ openclaw gateway
<Tab title="HTTP Request URLs">
<Steps>
<Step title="Створіть новий Slack app">
Відкрийте [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**.
<Step title="Створіть новий застосунок Slack">
Відкрийте [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**.
<CodeGroup>
@ -305,7 +327,7 @@ openclaw gateway
}
```
```json Minimal
```json Мінімальний
{
"display_information": {
"name": "OpenClaw",
@ -368,9 +390,13 @@ openclaw gateway
</CodeGroup>
<Note>
**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.
</Note>
<Info>
Усі три поля 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 непомітно не виконуватимуть жодної дії.
</Info>
Після того як Slack створить app:
- **Basic Information → App Credentials**: скопіюйте **Signing Secret** для перевірки запитів.
@ -405,7 +431,7 @@ openclaw config patch --file ./slack.http.patch.json5
<Note>
Використовуйте унікальні шляхи Webhook для HTTP із кількома обліковими записами
Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували.
Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували.
</Note>
</Step>
@ -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.
<AccordionGroup>
<Accordion title="Необов’язкові нативні slash-команди">
Замість однієї налаштованої команди можна використовувати кілька [нативних 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 за замовчуванням встановлює для клієн
</Tab>
<Tab title="HTTP Request URLs">
Використовуйте той самий список `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 за замовчуванням встановлює для клієн
</Tabs>
</Accordion>
<Accordion title="Необов’язкові області авторства (операції запису)">
Додайте область бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість типової ідентичності застосунку Slack.
<Accordion title="Додаткові області авторства (операції запису)">
Додайте область бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (користувацьке ім'я та піктограму) замість стандартної ідентичності застосунку Slack.
Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`.
</Accordion>
<Accordion title="Необов’язкові області токена користувача (операції читання)">
<Accordion title="Додаткові області user-token (операції читання)">
Якщо ви налаштовуєте `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`.
<Tip>
Для дій/читання каталогу токен користувача може мати перевагу, коли його налаштовано. Для записів перевага залишається за токеном бота; записи з токеном користувача дозволені лише коли `userTokenReadOnly: false` і токен бота недоступний.
Для дій/читання каталогу user token може мати перевагу, коли його налаштовано. Для записів bot token залишається пріоритетним; записи через user-token дозволені лише коли `userTokenReadOnly: false` і bot token недоступний.
</Tip>
## Дії та шлюзи
Дії 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, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або метадані локального файла для інших типів файлів.
## Контроль доступу та маршрутизація
## Керування доступом і маршрутизація
<Tabs>
<Tab title="Політика DM">
`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 за замовчуванням встановлює для клієн
</Tab>
<Tab title="Політика каналів">
`channels.slack.groupPolicy` контролює обробку каналів:
<Tab title="Політика каналу">
`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`
<Warning>
Ключі на основі назв (`#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 за замовчуванням встановлює для клієн
</Tab>
<Tab title="Mentions and channel users">
Повідомлення в каналах типово пропускаються лише за наявності згадки.
Повідомлення каналів за замовчуванням обмежені згадками.
Джерела згадок:
- явна згадка застосунку (`<@botId>`)
- згадка групи користувачів Slack (`<!subteam^S...>`), коли користувач бота є учасником цієї групи користувачів; потребує `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.<id>`; назви лише через розпізнавання під час запуску або `dangerouslyAllowNameMatching`):
Поканальні елементи керування (`channels.slack.channels.<id>`; імена лише через розв'язання під час запуску або `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 відкидає повідомлення кімнати, створене ботом.
</Tab>
</Tabs>
## Гілки, сеанси та теги відповіді
## Потоки, сеанси та теги відповідей
- 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:<agentId>:slack:channel:<channelId>`.
- Відповіді в гілках можуть створювати суфікси сеансів гілок (`:thread:<threadTs>`), коли це застосовно.
- Відповіді в потоках можуть створювати суфікси сеансів потоків (`:thread:<threadTs>`), коли це застосовно.
- Типове значення `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:<id>]]`
<Note>
`replyToMode="off"` вимикає **всі** гілки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги досі враховуються в режимі `"off"`. Гілки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими в рядку.
`replyToMode="off"` вимикає **всі** потоки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги й надалі враховуються в режимі `"off"`. Потоки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими в рядку.
</Note>
## Реакції підтвердження
`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок розпізнавання:
Порядок розв'язання:
- `channels.slack.accounts.<accountId>.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.<accountId>.typingReaction`
- `channels.slack.typingReaction`
Примітки:
- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`).
- Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху помилки.
- Slack очікує короткі коди (наприклад `"hourglass_flowing_sand"`).
- Реакція виконується за принципом best-effort, а очищення автоматично пробується після завершення відповіді або шляху помилки.
## Медіа, фрагментація та доставка
<AccordionGroup>
<Accordion title="Inbound attachments">
Файлові вкладення 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`.
</Accordion>
<Accordion title="Outbound text and files">
- текстові фрагменти використовують `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-виду з конвеєра медіа
</Accordion>
@ -1045,14 +1071,14 @@ OpenClaw за замовчуванням встановлює для клієн
- `user:<id>` для DM
- `channel:<id>` для каналів
DM Slack лише з текстом/блоками можуть публікуватися безпосередньо в ID користувачів; завантаження файлів і надсилання в гілках спершу відкривають DM через API розмов Slack, оскільки ці шляхи потребують конкретного ID розмови.
Текстові або лише блокові DM Slack можуть публікуватися безпосередньо за ID користувачів; завантаження файлів і надсилання в гілках спочатку відкривають DM через API розмов Slack, бо ці шляхи потребують конкретного ID розмови.
</Accordion>
</AccordionGroup>
## Команди та поведінка 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:<agentId>:slack:slash:<userId>` і досі маршрутизують виконання команд до цільового сеансу розмови за допомогою `CommandTargetSessionKey`.
Slash-сесії використовують ізольовані ключі на кшталт `agent:<agentId>:slack:slash:<userId>` і все одно спрямовують виконання команд до цільової сесії розмови за допомогою `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).
<Accordion title="Високосигнальні поля Slack">
<Accordion title="High-signal Slack fields">
- режим/автентифікація: `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`
</Accordion>
## Усунення несправностей
<AccordionGroup>
<Accordion title="Немає відповідей у каналах">
Перевірте в такому порядку:
<Accordion title="No replies in channels">
Перевірте по черзі:
- `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
</Accordion>
<Accordion title="Повідомлення DM ігноруються">
<Accordion title="DM messages ignored">
Перевірте:
- `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
</Accordion>
<Accordion title="Socket mode не підключається">
Перевірте bot + app токени та ввімкнення Socket Mode у налаштуваннях застосунку Slack.
<Accordion title="Socket mode not connecting">
Перевірте токени бота й програми та ввімкнення Socket Mode у налаштуваннях програми Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
налаштовано, але поточне середовище виконання не змогло визначити значення,
підтримане SecretRef.
налаштований, але поточне середовище виконання не змогло розв’язати
значення на основі SecretRef.
</Accordion>
<Accordion title="HTTP mode не отримує події">
<Accordion title="HTTP mode not receiving events">
Перевірте:
- 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.
</Accordion>
<Accordion title="Нативні/slash-команди не спрацьовують">
<Accordion title="Native/slash commands not firing">
Перевірте, що саме ви мали на увазі:
- режим нативних команд (`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
</Accordion>
</AccordionGroup>
## Довідник щодо бачення для вкладень
## Довідник 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 може прикріплювати завантажені медіа до
<CardGroup cols={2}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Сполучіть користувача Slack із Gateway.
Зв’яжіть користувача Slack із Gateway.
</Card>
<Card title="Групи" icon="users" href="/uk/channels/groups">
Поведінка каналу та групових DM.
Поведінка каналів і групових DM.
</Card>
<Card title="Маршрутизація каналу" icon="route" href="/uk/channels/channel-routing">
Маршрутизуйте вхідні повідомлення до агентів.
<Card title="Маршрутизація каналів" icon="route" href="/uk/channels/channel-routing">
Спрямовуйте вхідні повідомлення до агентів.
</Card>
<Card title="Безпека" icon="shield" href="/uk/gateway/security">
Модель загроз і посилення захисту.
Модель загроз і зміцнення захисту.
</Card>
<Card title="Конфігурація" icon="sliders" href="/uk/gateway/configuration">
Структура конфігурації та пріоритетність.
Структура конфігурації та пріоритети.
</Card>
<Card title="Слеш-команди" icon="terminal" href="/uk/tools/slash-commands">
<Card title="Slash-команди" icon="terminal" href="/uk/tools/slash-commands">
Каталог команд і поведінка.
</Card>
</CardGroup>