chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-03 22:51:36 +00:00
parent b3dfa43cdd
commit 6231ccb011
2 changed files with 277 additions and 262 deletions

View File

@ -4,34 +4,34 @@ read_when:
- Налагодження багатоагентних відповідей у WhatsApp
sidebarTitle: Broadcast groups
status: experimental
summary: Розішліть повідомлення WhatsApp кільком агентам
title: Групи розсилки
summary: Розіслати повідомлення WhatsApp кільком агентам
title: Групи трансляції
x-i18n:
generated_at: "2026-04-28T11:04:01Z"
generated_at: "2026-05-03T22:49:33Z"
model: gpt-5.5
provider: openai
source_hash: b0de4ccc85bf79e2ceb1dddd60db067309b15b7f876c92e7d591ff0b4b4315ec
source_hash: eab43d3c3ffddb360340469433d74a380fbab98e662b2463a54f62eafc375b55
source_path: channels/broadcast-groups.md
workflow: 16
---
<Note>
**Стан:** Експериментально. Додано у 2026.1.9.
**Статус:** Експериментально. Додано у 2026.1.9.
</Note>
## Огляд
Групи трансляції дають змогу кільком агентам одночасно обробляти те саме повідомлення й відповідати на нього. Це дає змогу створювати спеціалізовані команди агентів, які працюють разом в одній групі WhatsApp або DMі все це з використанням одного номера телефону.
Групи трансляції дають змогу кільком агентам обробляти одне й те саме повідомлення та відповідати на нього одночасно. Це дає змогу створювати спеціалізовані команди агентів, які працюють разом в одній групі WhatsApp або особистому чатіі все це з використанням одного номера телефону.
Поточний обсяг: **лише WhatsApp** (вебканал).
Поточна область застосування: **лише WhatsApp** (вебканал).
Групи трансляції оцінюються після списків дозволених каналів і правил активації груп. У групах WhatsApp це означає, що трансляції відбуваються тоді, коли OpenClaw зазвичай відповідав би (наприклад: під час згадки, залежно від налаштувань вашої групи).
Групи трансляції оцінюються після списків дозволених каналів і правил активації груп. У групах WhatsApp це означає, що трансляції відбуваються тоді, коли OpenClaw зазвичай відповідав би (наприклад, за згадкою, залежно від налаштувань вашої групи).
## Сценарії використання
<AccordionGroup>
<Accordion title="1. Спеціалізовані команди агентів">
Розгортайте кількох агентів з атомарними, сфокусованими обов’язками:
Розгорніть кількох агентів з атомарними, сфокусованими обов’язками:
```
Group: "Development Team"
@ -42,7 +42,7 @@ x-i18n:
- TestGenerator (suggests test cases)
```
Кожен агент обробляє те саме повідомлення й надає свій спеціалізований погляд.
Кожен агент обробляє одне й те саме повідомлення та надає свою спеціалізовану перспективу.
</Accordion>
<Accordion title="2. Багатомовна підтримка">
@ -54,7 +54,7 @@ x-i18n:
- Agent_ES (responds in Spanish)
```
</Accordion>
<Accordion title="3. Робочі процеси забезпечення якості">
<Accordion title="3. Робочі процеси контролю якості">
```
Group: "Customer Support"
Agents:
@ -80,7 +80,7 @@ x-i18n:
Додайте розділ верхнього рівня `broadcast` (поруч із `bindings`). Ключі — це ідентифікатори peer WhatsApp:
- групові чати: JID групи (наприклад, `120363403215116621@g.us`)
- DM: номер телефону у форматі E.164 (наприклад, `+15551234567`)
- особисті чати: номер телефону E.164 (наприклад, `+15551234567`)
```json
{
@ -111,7 +111,7 @@ x-i18n:
</Tab>
<Tab title="sequential">
Агенти обробляють по черзі (кожен чекає, доки попередній завершить):
Агенти обробляють по черзі (кожен чекає завершення попереднього):
```json
{
@ -166,7 +166,7 @@ x-i18n:
<Steps>
<Step title="Надходить вхідне повідомлення">
Надходить повідомлення групи WhatsApp або DM.
Надходить повідомлення з групи WhatsApp або особистого чату.
</Step>
<Step title="Перевірка трансляції">
Система перевіряє, чи є ідентифікатор peer у `broadcast`.
@ -183,7 +183,7 @@ x-i18n:
</Steps>
<Note>
Групи трансляції не обходять списки дозволених каналів або правила активації груп (згадки/команди тощо). Вони лише змінюють _які агенти запускаються_, коли повідомлення придатне для обробки.
Групи трансляції не обходять списки дозволених каналів або правила активації груп (згадки/команди тощо). Вони лише змінюють, _які агенти запускаються_, коли повідомлення придатне для обробки.
</Note>
### Ізоляція сесій
@ -195,12 +195,12 @@ x-i18n:
- **Робочий простір** (окремі пісочниці, якщо налаштовано)
- **Доступ до інструментів** (різні списки дозволу/заборони)
- **Пам’ять/контекст** (окремі IDENTITY.md, SOUL.md тощо)
- **Буфер контексту групи** (нещодавні повідомлення групи, використані для контексту) спільний для кожного peer, тож усі агенти трансляції бачать той самий контекст під час запуску
- **Буфер групового контексту** (нещодавні повідомлення групи, що використовуються як контекст) спільний для кожного peer, тому всі агенти трансляції бачать один і той самий контекст під час запуску
Це дає змогу кожному агенту мати:
- Різні особистості
- Різний доступ до інструментів (наприклад, лише читання проти читання-запису)
- Різні персоналії
- Різний доступ до інструментів (наприклад, лише читання або читання-запис)
- Різні моделі (наприклад, opus проти sonnet)
- Різні встановлені Skills
@ -241,7 +241,7 @@ x-i18n:
}
```
**Добре:** Кожен агент має одне завдання. ❌ **Погано:** Один універсальний агент "dev-helper".
**Добре:** Кожен агент має одне завдання. ❌ **Погано:** Один загальний агент "dev-helper".
</Accordion>
<Accordion title="2. Використовуйте описові назви">
@ -258,22 +258,24 @@ x-i18n:
```
</Accordion>
<Accordion title="3. Налаштуйте різний доступ до інструментів">
Надавайте агентам лише ті інструменти, які їм потрібні:
<Accordion title="3. Налаштовуйте різний доступ до інструментів">
Надавайте агентам лише потрібні їм інструменти:
```json
{
"agents": {
"reviewer": {
"tools": { "allow": ["read", "exec"] } // Read-only
"tools": { "allow": ["read", "exec"] }
},
"fixer": {
"tools": { "allow": ["read", "write", "edit", "exec"] } // Read-write
"tools": { "allow": ["read", "write", "edit", "exec"] }
}
}
}
```
`reviewer` має доступ лише для читання. `fixer` може читати й писати.
</Accordion>
<Accordion title="4. Відстежуйте продуктивність">
За великої кількості агентів врахуйте:
@ -284,7 +286,7 @@ x-i18n:
</Accordion>
<Accordion title="5. Обробляйте збої коректно">
Агенти можуть зазнавати збоїв незалежно. Помилка одного агента не блокує інших:
Агенти зазнають збоїв незалежно. Помилка одного агента не блокує інших:
```
Message → [Agent A ✓, Agent B ✗ error, Agent C ✓]
@ -307,7 +309,7 @@ x-i18n:
### Маршрутизація
Групи трансляції працюють поряд з наявною маршрутизацією:
Групи трансляції працюють разом з наявною маршрутизацією:
```json
{
@ -323,8 +325,8 @@ x-i18n:
}
```
- `GROUP_A`: Відповідає лише alfred (звичайна маршрутизація).
- `GROUP_B`: Відповідають agent1 І agent2 (трансляція).
- `GROUP_A`: відповідає лише alfred (звичайна маршрутизація).
- `GROUP_B`: відповідають agent1 І agent2 (трансляція).
<Note>
**Пріоритет:** `broadcast` має пріоритет над `bindings`.
@ -338,7 +340,7 @@ x-i18n:
1. Ідентифікатори агентів існують у `agents.list`.
2. Формат ідентифікатора peer правильний (наприклад, `120363403215116621@g.us`).
3. Агенти не перебувають у списках заборони.
3. Агентів немає у списках заборони.
**Налагодження:**
@ -350,13 +352,13 @@ x-i18n:
<Accordion title="Відповідає лише один агент">
**Причина:** Ідентифікатор peer може бути в `bindings`, але не в `broadcast`.
**Виправлення:** Додайте до конфігурації трансляції або видаліть із bindings.
**Виправлення:** Додайте до конфігурації трансляції або видаліть із прив’язувань.
</Accordion>
<Accordion title="Проблеми з продуктивністю">
Якщо повільно з багатьма агентами:
- Зменште кількість агентів на групу.
- Зменште кількість агентів у групі.
- Використовуйте легші моделі (sonnet замість opus).
- Перевірте час запуску пісочниці.
@ -366,7 +368,7 @@ x-i18n:
## Приклади
<AccordionGroup>
<Accordion title="Приклад 1: Команда перевірки коду">
<Accordion title="Приклад 1: Команда рев’ю коду">
```json
{
"broadcast": {
@ -405,10 +407,10 @@ x-i18n:
**Відповіді:**
- code-formatter: "Виправлено відступи й додано підказки типів"
- security-scanner: "⚠️ Уразливість SQL-ін’єкції в рядку 12"
- test-coverage: "Покриття становить 45%, бракує тестів для випадків помилок"
- docs-checker: "Бракує docstring для функції `process_data`"
- code-formatter: "Fixed indentation and added type hints"
- security-scanner: "⚠️ SQL injection vulnerability in line 12"
- test-coverage: "Coverage is 45%, missing tests for error cases"
- docs-checker: "Missing docstring for function `process_data`"
</Accordion>
<Accordion title="Приклад 2: Багатомовна підтримка">
@ -449,22 +451,22 @@ interface OpenClawConfig {
Як обробляти агентів. `parallel` запускає всіх агентів одночасно; `sequential` запускає їх у порядку масиву.
</ParamField>
<ParamField path="[peerId]" type="string[]">
JID групи WhatsApp, номер E.164 або інший ідентифікатор peer. Значення — масив ідентифікаторів агентів, які мають обробляти повідомлення.
JID групи WhatsApp, номер E.164 або інший ідентифікатор peer. Значення — це масив ідентифікаторів агентів, які мають обробляти повідомлення.
</ParamField>
## Обмеження
1. **Максимум агентів:** Жорсткого ліміту немає, але 10+ агентів можуть працювати повільно.
2. **Спільний контекст:** Агенти не бачать відповідей одне одного (за задумом).
1. **Максимум агентів:** Жорсткого обмеження немає, але 10+ агентів можуть працювати повільно.
2. **Спільний контекст:** Агенти не бачать відповіді один одного (за задумом).
3. **Порядок повідомлень:** Паралельні відповіді можуть надходити в будь-якому порядку.
4. **Ліміти частоти:** Усі агенти враховуються в лімітах частоти WhatsApp.
4. **Обмеження частоти:** Усі агенти враховуються в обмеженнях частоти WhatsApp.
## Майбутні покращення
Заплановані функції:
- [ ] Режим спільного контексту (агенти бачать відповіді одне одного)
- [ ] Координація агентів (агенти можуть сигналізувати одне одному)
- [ ] Режим спільного контексту (агенти бачать відповіді один одного)
- [ ] Координація агентів (агенти можуть сигналізувати один одному)
- [ ] Динамічний вибір агентів (вибір агентів на основі вмісту повідомлення)
- [ ] Пріоритети агентів (деякі агенти відповідають раніше за інших)
@ -472,6 +474,6 @@ interface OpenClawConfig {
- [Маршрутизація каналів](/uk/channels/channel-routing)
- [Групи](/uk/channels/groups)
- [Інструменти мультиагентної пісочниці](/uk/tools/multi-agent-sandbox-tools)
- [Інструменти пісочниці для кількох агентів](/uk/tools/multi-agent-sandbox-tools)
- [Сполучення](/uk/channels/pairing)
- [Керування сеансами](/uk/concepts/session)

View File

@ -1,47 +1,47 @@
---
read_when:
- Налаштування Slack або налагодження сокетного/HTTP-режиму Slack
summary: Налаштування Slack і поведінка під час виконання (сокетний режим + URL-адреси HTTP-запитів)
- Налаштування Slack або налагодження режиму сокета/HTTP для Slack
summary: Налаштування Slack і поведінка під час виконання (режим сокетів + URL-адреси HTTP-запитів)
title: Slack
x-i18n:
generated_at: "2026-05-03T22:33:21Z"
generated_at: "2026-05-03T22:49:31Z"
model: gpt-5.5
provider: openai
source_hash: 72fecf4371107e2a0685886ef9f9d24cfd9cc59fdce69e36e85dac985cbd3fe4
source_hash: 2be45f03511a64373b1f4316c59800eeeef8baccb4c00454b49999258b2e546b
source_path: channels/slack.md
workflow: 16
---
Готовий до production-використання для DM і каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються.
Готово до production-використання для DM і каналів через інтеграції Slack app. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються.
<CardGroup cols={3}>
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
DM у Slack за замовчуванням використовують режим сполучення.
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Slack DM за замовчуванням використовують режим сполучення.
</Card>
<Card title="Slash commands" icon="terminal" href="/uk/tools/slash-commands">
<Card title="Slash-команди" icon="terminal" href="/uk/tools/slash-commands">
Нативна поведінка команд і каталог команд.
</Card>
<Card title="Channel troubleshooting" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та інструкції з усунення несправностей.
<Card title="Усунення несправностей каналів" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика й інструкції з відновлення.
</Card>
</CardGroup>
## Швидке налаштування
<Tabs>
<Tab title="Socket Mode (default)">
<Tab title="Socket Mode (за замовчуванням)">
<Steps>
<Step title="Create a new Slack app">
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
<Step title="Створіть новий Slack app">
У налаштуваннях Slack app натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- виберіть **from a manifest** і виберіть робочий простір для свого застосунку
- виберіть **from a manifest** і виберіть робочий простір для свого app
- вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче й продовжте створення
- згенеруйте **App-Level Token** (`xapp-...`) із `connections:write`
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
- згенеруйте **App-Level Token** (`xapp-...`) з `connections:write`
- установіть app і скопіюйте показаний **Bot Token** (`xoxb-...`)
</Step>
<Step title="Configure OpenClaw">
<Step title="Налаштуйте OpenClaw">
Рекомендоване налаштування SecretRef:
@ -73,7 +73,7 @@ SLACK_BOT_TOKEN=xoxb-...
</Step>
<Step title="Start gateway">
<Step title="Запустіть Gateway">
```bash
openclaw gateway
@ -86,17 +86,17 @@ openclaw gateway
<Tab title="HTTP Request URLs">
<Steps>
<Step title="Create a new Slack app">
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
<Step title="Створіть новий Slack app">
У налаштуваннях Slack app натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- виберіть **from a manifest** і виберіть робочий простір для свого застосунку
- виберіть **from a manifest** і виберіть робочий простір для свого app
- вставте [приклад маніфесту](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням
- збережіть **Signing Secret** для перевірки запитів
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
- установіть app і скопіюйте показаний **Bot Token** (`xoxb-...`)
</Step>
<Step title="Configure OpenClaw">
<Step title="Налаштуйте OpenClaw">
Рекомендоване налаштування SecretRef:
@ -121,14 +121,14 @@ openclaw config patch --file ./slack.http.patch.json5
```
<Note>
Використовуйте унікальні шляхи Webhook для HTTP із кількома обліковими записами
Використовуйте унікальні шляхи Webhook для HTTP з кількома обліковими записами
Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували.
</Note>
</Step>
<Step title="Start gateway">
<Step title="Запустіть Gateway">
```bash
openclaw gateway
@ -142,7 +142,7 @@ openclaw gateway
## Налаштування транспорту Socket Mode
OpenClaw за замовчуванням установлює для клієнта Slack SDK тайм-аут pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування під конкретний робочий простір або хост:
OpenClaw за замовчуванням установлює час очікування pong для клієнта Slack SDK у 15 секунд для Socket Mode. Перевизначайте параметри транспорту лише тоді, коли потрібне налаштування для конкретного робочого простору або хоста:
```json5
{
@ -159,11 +159,11 @@ OpenClaw за замовчуванням установлює для клієн
}
```
Використовуйте це лише для робочих просторів Socket Mode, які журналюють тайм-аути Slack websocket pong/server-ping, або працюють на хостах із відомим блокуванням циклу подій. `clientPingTimeout` — це очікування pong після того, як SDK надсилає client ping; `serverPingTimeout` — це очікування ping від сервера Slack. Повідомлення й події застосунку залишаються станом застосунку, а не сигналами життєздатності транспорту.
Використовуйте це лише для робочих просторів Socket Mode, які журналюють тайм-аути Slack websocket pong/server-ping, або для хостів із відомим виснаженням циклу подій. `clientPingTimeout` — це очікування pong після того, як SDK надсилає клієнтський ping; `serverPingTimeout` — це очікування ping від сервера Slack. Повідомлення app і події залишаються станом застосунку, а не сигналами працездатності транспорту.
## Контрольний список маніфесту та областей доступу
## Контрольний список маніфесту й scope
Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` для slash-команди).
Базовий маніфест Slack app однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок `settings` (і `url` для slash-команди).
Базовий маніфест (Socket Mode за замовчуванням):
@ -258,7 +258,19 @@ OpenClaw за замовчуванням установлює для клієн
"event_subscriptions": {
"request_url": "https://gateway-host.example.com/slack/events",
"bot_events": [
/* same as Socket Mode */
"app_home_opened",
"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": {
@ -272,14 +284,14 @@ OpenClaw за замовчуванням установлює для клієн
### Додаткові налаштування маніфесту
Увімкніть інші функції, що розширюють наведені вище стандартні значення.
Увімкніть інші функції, які розширюють наведені вище значення за замовчуванням.
Маніфест за замовчуванням вмикає вкладку **Home** у Slack App Home і підписується на `app_home_opened`. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечне подання Home за замовчуванням через `views.publish`; дані розмови або приватна конфігурація не включаються. Вкладка **Messages** залишається ввімкненою для DM у Slack.
Маніфест за замовчуванням вмикає вкладку **Home** у Slack App Home і підписується на `app_home_opened`. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечне подання Home за замовчуванням через `views.publish`; жодне корисне навантаження розмови або приватна конфігурація не включається. Вкладка **Messages** залишається ввімкненою для Slack DM.
<AccordionGroup>
<Accordion title="Optional native slash commands">
<Accordion title="Необов’язкові нативні slash-команди">
Замість однієї налаштованої команди можна використовувати кілька [нативних slash-команд](#commands-and-slash-behavior) з такими нюансами:
Кілька [нативних slash-команд](#commands-and-slash-behavior) можна використовувати замість однієї налаштованої команди з певними нюансами:
- Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована.
- Одночасно можна зробити доступними не більше 25 slash-команд.
@ -287,7 +299,7 @@ OpenClaw за замовчуванням установлює для клієн
Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list):
<Tabs>
<Tab title="Socket Mode (default)">
<Tab title="Socket Mode (за замовчуванням)">
```json
{
@ -427,23 +439,24 @@ OpenClaw за замовчуванням установлює для клієн
"description": "Show the short help summary",
"url": "https://gateway-host.example.com/slack/events"
}
// ...repeat for every command with the same `url` value
]
}
```
Повторіть це значення `url` для кожної команди в списку.
</Tab>
</Tabs>
</Accordion>
<Accordion title="Optional authorship scopes (write operations)">
Додайте область доступу бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача й іконку) замість стандартної ідентичності застосунку Slack.
Додайте scope бота `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власне ім’я користувача та іконку) замість стандартної ідентичності застосунку Slack.
Якщо ви використовуєте emoji-іконку, Slack очікує синтаксис `:emoji_name:`.
Якщо ви використовуєте іконку emoji, Slack очікує синтаксис `:emoji_name:`.
</Accordion>
<Accordion title="Optional user-token scopes (read operations)">
Якщо ви налаштовуєте `channels.slack.userToken`, типовими областями доступу для читання є:
Якщо ви налаштовуєте `channels.slack.userToken`, типові scope для читання:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@ -451,7 +464,7 @@ OpenClaw за замовчуванням установлює для клієн
- `reactions:read`
- `pins:read`
- `emoji:read`
- `search:read` (якщо ви покладаєтеся на читання пошуку Slack)
- `search:read` (якщо ви покладаєтеся на читання через пошук Slack)
</Accordion>
</AccordionGroup>
@ -459,35 +472,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`.
для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Стан: `available`, `configured_unavailable` або `missing`.
- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
або інше неінлайнове джерело секретів, але поточна команда/шлях виконання
або інше неінлайнове джерело секретів, але поточний шлях команди/середовища виконання
не зміг отримати фактичне значення.
- У HTTP-режимі включено `signingSecretStatus`; у Socket Mode
обов’язкова пара — `botTokenStatus` + `appTokenStatus`.
- У режимі HTTP включено `signingSecretStatus`; у Socket Mode
потрібна пара — `botTokenStatus` + `appTokenStatus`.
<Tip>
Для дій/читання каталогу можна надавати перевагу токену користувача, якщо його налаштовано. Для запису токен бота залишається пріоритетним; записи токеном користувача дозволені лише коли `userTokenReadOnly: false` і токен бота недоступний.
Для дій/читання каталогу токен користувача може мати пріоритет, якщо його налаштовано. Для запису токен бота лишається пріоритетним; записи через токен користувача дозволені лише коли `userTokenReadOnly: false` і токен бота недоступний.
</Tip>
## Дії та шлюзи
Дії Slack керуються `channels.slack.actions.*`.
Дії Slack контролюються через `channels.slack.actions.*`.
Доступні групи дій у поточних інструментах Slack:
| Група | За замовчуванням |
| Група | Типово |
| ---------- | ------- |
| messages | увімкнено |
| reactions | увімкнено |
@ -495,60 +508,60 @@ 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` — канонічний список дозволених DM.
<Tab title="DM policy">
`channels.slack.dmPolicy` керує доступом до DM. `channels.slack.allowFrom` — канонічний список дозволених для DM.
- `pairing` (за замовчуванням)
- `pairing` (типово)
- `allowlist`
- `open` (потребує, щоб `channels.slack.allowFrom` включав `"*"`)
- `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`)
- `disabled`
Прапорці DM:
- `dm.enabled` (за замовчуванням true)
- `dm.enabled` (типово true)
- `channels.slack.allowFrom`
- `dm.allowFrom` (застаріле)
- `dm.groupEnabled` (групові DM за замовчуванням false)
- `dm.groupEnabled` (групові DM типово false)
- `dm.groupChannels` (необов’язковий список дозволених MPIM)
Пріоритет для кількох облікових записів:
Пріоритетність для кількох облікових записів:
- `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- Іменовані облікові записи успадковують `channels.slack.allowFrom`, коли їхній власний `allowFrom` не задано.
- Іменовані облікові записи успадковують `channels.slack.allowFrom`, коли власний `allowFrom` не задано.
- Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`.
Застарілі `channels.slack.dm.policy` і `channels.slack.dm.allowFrom` усе ще читаються для сумісності. `openclaw doctor --fix` переносить їх у `dmPolicy` і `allowFrom`, коли може зробити це без зміни доступу.
Застарілі `channels.slack.dm.policy` і `channels.slack.dm.allowFrom` досі читаються для сумісності. `openclaw doctor --fix` мігрує їх до `dmPolicy` і `allowFrom`, коли може зробити це без зміни доступу.
Сполучення в DM використовує `openclaw pairing approve slack <code>`.
</Tab>
<Tab title="Політика каналів">
<Tab title="Channel policy">
`channels.slack.groupPolicy` керує обробкою каналів:
- `open`
- `allowlist`
- `disabled`
Список дозволених каналів міститься в `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:
Розв’язання назви/ID:
- записи списку дозволених каналів і записи списку дозволених DM розпізнаються під час запуску, коли доступ токена це дозволяє
- нерозпізнані записи імен каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації
- вхідна авторизація та маршрутизація каналів за замовчуванням працюють передусім за ID; пряме зіставлення імен користувачів/слагів потребує `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.
Правильно:
@ -565,7 +578,7 @@ OpenClaw за замовчуванням установлює для клієн
}
```
Неправильно (тихо блокується під `groupPolicy: "allowlist"`):
Неправильно (тихо блокується за `groupPolicy: "allowlist"`):
```json5
{
@ -583,17 +596,17 @@ OpenClaw за замовчуванням установлює для клієн
</Tab>
<Tab title="Згадки та користувачі каналу">
Повідомлення каналів за замовчуванням обмежені згадками.
<Tab title="Mentions and channel users">
Повідомлення каналів типово обмежуються згадками.
Джерела згадок:
- явна згадка застосунку (`<@botId>`)
- згадка групи користувачів Slack (`<!subteam^S...>`), коли користувач-бот є учасником цієї групи користувачів; потребує `usergroups:read`
- regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`)
- неявна поведінка відповіді в гілці на повідомлення бота (вимкнено, коли `thread.requireExplicitMention` дорівнює `true`)
- regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`)
- неявна поведінка відповіді на потік бота (вимкнена, коли `thread.requireExplicitMention` має значення `true`)
Налаштування для кожного каналу (`channels.slack.channels.<id>`; імена лише через зіставлення під час запуску або `dangerouslyAllowNameMatching`):
Поканальні елементи керування (`channels.slack.channels.<id>`; назви лише через розв’язання під час запуску або `dangerouslyAllowNameMatching`):
- `requireMention`
- `users` (список дозволених)
@ -604,73 +617,73 @@ OpenClaw за замовчуванням установлює для клієн
- формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"`
(застарілі ключі без префікса досі зіставляються лише з `id:`)
`allowBots` є консервативним для каналів і приватних каналів: повідомлення кімнати, створені ботом, приймаються лише тоді, коли бот-відправник явно вказаний у списку дозволених `users` цієї кімнати, або коли принаймні один явний ID власника Slack із `channels.slack.allowFrom` зараз є учасником кімнати. Wildcard-и та записи власників за відображуваним ім’ям не задовольняють наявність власника. Наявність власника використовує Slack `conversations.members`; переконайтеся, що застосунок має відповідний read scope для типу кімнати (`channels:read` для публічних каналів, `groups:read` для приватних каналів). Якщо пошук учасників завершується невдало, OpenClaw відкидає повідомлення кімнати, створене ботом.
`allowBots` є консервативним для каналів і приватних каналів: повідомлення кімнати, створені ботом, приймаються лише коли бот-відправник явно вказаний у списку дозволених `users` цієї кімнати або коли принаймні один явний ID власника Slack з `channels.slack.allowFrom` наразі є учасником кімнати. Wildcard і записи власників за відображуваним іменем не задовольняють присутність власника. Присутність власника використовує Slack `conversations.members`; переконайтеся, що застосунок має відповідний scope читання для типу кімнати (`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 згортаються до головної сесії агента.
- Сесії каналів: `agent:<agentId>:slack:channel:<channelId>`.
- Відповіді в гілках можуть створювати суфікси сесій гілок (`:thread:<threadTs>`), коли це застосовно.
- DM маршрутизуються як `direct`; канали як `channel`; MPIM як `group`.
- Прив’язки маршрутів Slack приймають необроблені ID учасників, а також форми цілей Slack, як-от `channel:C12345678`, `user:U12345678` і `<@U12345678>`.
- Із типовим `session.dmScope=main` DM Slack згортаються до головного сеансу агента.
- Сеанси каналів: `agent:<agentId>:slack:channel:<channelId>`.
- Відповіді в потоках можуть створювати суфікси сеансу потоку (`: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.dm.replyToMode`
- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode`
Підтримуються ручні теги відповідей:
Підтримуються ручні теги відповіді:
- `[[reply_to_current]]`
- `[[reply_to:<id>]]`
<Note>
`replyToMode="off"` вимикає **всі** гілки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Гілки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими inline.
`replyToMode="off"` вимикає **всі** потоки відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Потоки Slack приховують повідомлення з каналу, тоді як відповіді Telegram лишаються видимими inline.
</Note>
## Реакції підтвердження
`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
Порядок розв’язання:
- `channels.slack.accounts.<accountId>.ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
- резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
- резервне emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
- Slack очікує shortcodes (наприклад, `"eyes"`).
- Slack очікує shortcodes (наприклад `"eyes"`).
- Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально.
## Потокове передавання тексту
## Текстове потокове передавання
`channels.slack.streaming` керує поведінкою live preview:
`channels.slack.streaming` керує поведінкою живого попереднього перегляду:
- `off`: вимкнути потокове передавання live preview.
- `off`: вимкнути потокове передавання живого попереднього перегляду.
- `partial` (типово): замінювати текст попереднього перегляду найновішим частковим виводом.
- `block`: додавати фрагментовані оновлення попереднього перегляду.
- `progress`: показувати текст статусу прогресу під час генерації, а потім надіслати фінальний текст.
- `streaming.preview.toolProgress`: коли чернетковий попередній перегляд активний, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Установіть `false`, щоб зберігати окремі повідомлення інструментів/прогресу.
- `block`: додавати chunked-оновлення попереднього перегляду.
- `progress`: показувати текст стану прогресу під час генерування, а потім надіслати фінальний текст.
- `streaming.preview.toolProgress`: коли чернетка попереднього перегляду активна, маршрутизувати оновлення інструментів/прогресу в те саме відредаговане повідомлення попереднього перегляду (типово: `true`). Задайте `false`, щоб зберігати окремі повідомлення інструментів/прогресу.
`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 верхнього рівня типово залишаються поза гілками, тому вони не показують нативний stream/status preview у стилі гілок Slack; натомість OpenClaw публікує й редагує чернетковий попередній перегляд у DM.
- Медіа та нетекстові payload повертаються до звичайної доставки.
- Фінали медіа/помилок скасовують очікувані редагування попереднього перегляду; придатні фінали тексту/блоків скидаються лише тоді, коли можуть відредагувати попередній перегляд на місці.
- Якщо потокове передавання завершується невдало посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload-ів.
- Потік відповіді має бути доступний, щоб з’являлися нативне текстове потокове передавання й стан потоку асистента Slack. Вибір потоку все одно відповідає `replyToMode`.
- Канали, групові чати й корені DM верхнього рівня досі можуть використовувати звичайну чернетку попереднього перегляду, коли нативне потокове передавання недоступне або потоку відповіді немає.
- DM Slack верхнього рівня типово лишаються поза потоком, тому вони не показують thread-style нативний stream/status попередній перегляд Slack; натомість OpenClaw публікує й редагує чернетку попереднього перегляду в DM.
- Медіа та нетекстові payload повертаються до звичайної доставки.
- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні текстові/block фінали flush лише тоді, коли можуть відредагувати попередній перегляд на місці.
- Якщо потокове передавання переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload.
Використовуйте чернетковий попередній перегляд замість нативного потокового передавання тексту Slack:
Використовуйте чернетку попереднього перегляду замість нативного текстового потокового передавання Slack:
```json5
{
@ -688,57 +701,57 @@ OpenClaw за замовчуванням установлює для клієн
Застарілі ключі:
- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`.
- булевий `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
- boolean `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="Вхідні вкладення">
Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запиту з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й обмеження розміру це дозволяють. Плейсхолдери файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл за допомогою `download-file`.
Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне та обмеження розміру це дозволяють. Заповнювачі файлів містять Slack `fileId`, щоб агенти могли отримати оригінальний файл за допомогою `download-file`.
Завантаження використовують обмежені тайм-аути бездіяльності та загального часу. Якщо отримання файла Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файла.
Завантаження використовують обмежені таймаути простою та загального часу. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу.
Обмеження розміру вхідних даних під час виконання за замовчуванням становить `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
Стандартне обмеження розміру вхідних даних під час виконання становить `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
</Accordion>
<Accordion title="Вихідний текст і файли">
- текстові фрагменти використовують `channels.slack.textChunkLimit` (за замовчуванням 4000)
- `channels.slack.chunkMode="newline"` вмикає розбиття з пріоритетом абзаців
- надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
- обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, коли це налаштовано; інакше надсилання в канали використовує стандартні значення MIME-типів із медіаконвеєра
- текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000)
- `channels.slack.chunkMode="newline"` вмикає поділ із пріоритетом абзаців
- надсилання файлів використовує API завантаження Slack і може включати відповіді в гілках (`thread_ts`)
- обмеження вихідних медіа відповідає `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канал використовує типові значення за MIME-типом із медіаконвеєра
</Accordion>
<Accordion title="Цілі доставки">
<Accordion title="Цілі доставлення">
Бажані явні цілі:
- `user:<id>` для DM
- `channel:<id>` для каналів
Текстові або лише блочні Slack DM можуть публікуватися безпосередньо в ідентифікатори користувачів; завантаження файлів і надсилання в треди спочатку відкривають DM через API розмов Slack, оскільки ці шляхи потребують конкретного ідентифікатора розмови.
Текстові або лише блокові Slack DM можуть публікуватися безпосередньо за ID користувачів; завантаження файлів і надсилання в гілках спочатку відкривають DM через API розмов Slack, бо ці шляхи потребують конкретного ID розмови.
</Accordion>
</AccordionGroup>
## Команди та поведінка slash-команд
## Команди та поведінка slash
Slash-команди з'являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити стандартні параметри команд:
Команди slash з’являються у Slack як одна налаштована команда або кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команд:
- `enabled: false`
- `name: "openclaw"`
@ -757,22 +770,22 @@ Slash-команди з'являються в Slack або як одна нал
/help
```
Меню нативних аргументів використовують адаптивну стратегію відображення, яка показує модальне підтвердження перед передаванням вибраного значення параметра:
Меню нативних аргументів використовують адаптивну стратегію рендерингу, яка показує модальне підтвердження перед надсиланням вибраного значення опції:
- до 5 параметрів: блоки кнопок
- 6-100 параметрів: статичне меню вибору
- понад 100 параметрів: зовнішній вибір з асинхронною фільтрацією параметрів, коли доступні обробники параметрів інтерактивності
- перевищено обмеження Slack: закодовані значення параметрів повертаються до кнопок
- до 5 опцій: блоки кнопок
- 6-100 опцій: статичне меню вибору
- понад 100 опцій: зовнішній список вибору з асинхронною фільтрацією опцій, коли доступні обробники параметрів інтерактивності
- перевищено обмеження Slack: закодовані значення опцій повертаються до кнопок
```txt
/think
```
Slash-сеанси використовують ізольовані ключі на кшталт `agent:<agentId>:slack:slash:<userId>` і все одно спрямовують виконання команд до цільового сеансу розмови за допомогою `CommandTargetSessionKey`.
Сесії slash використовують ізольовані ключі, як-от `agent:<agentId>:slack:slash:<userId>`, і все одно спрямовують виконання команд до цільової сесії розмови за допомогою `CommandTargetSessionKey`.
## Інтерактивні відповіді
Slack може відображати створені агентом інтерактивні елементи керування відповідями, але ця функція за замовчуванням вимкнена.
Slack може рендерити створені агентом інтерактивні елементи керування відповіддю, але ця функція типово вимкнена.
Увімкніть її глобально:
@ -806,44 +819,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.
Примітки:
- Це UI, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок.
- Значення інтерактивних callback-ів є непрозорими токенами, згенерованими OpenClaw, а не сирими значеннями, створеними агентом.
- Значення інтерактивних callback є непрозорими токенами, згенерованими OpenClaw, а не необробленими значеннями, створеними агентом.
- Якщо згенеровані інтерактивні блоки перевищили б обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload блоків.
## Схвалення виконання в Slack
## Затвердження Exec у Slack
Slack може діяти як нативний клієнт схвалення з інтерактивними кнопками та взаємодіями замість повернення до веб-UI або термінала.
Slack може діяти як нативний клієнт затвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
- Схвалення виконання використовують `channels.slack.execApprovals.*` для нативного маршрутування DM/каналу.
- Схвалення Plugin все одно можуть розв'язуватися через ту саму нативну для Slack поверхню кнопок, коли запит уже потрапляє в Slack, а тип ідентифікатора схвалення — `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` лише тоді, коли результат інструмента каже, що
затвердження через чат недоступні або ручне затвердження є єдиним шляхом.
Шлях конфігурації:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers` (необов'язково; за можливості повертається до `commands.ownerAllowFrom`)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`)
- `channels.slack.execApprovals.approvers` (необовязково; за можливості повертається до `commands.ownerAllowFrom`)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
- `agentFilter`, `sessionFilter`
Slack автоматично вмикає нативні схвалення виконання, коли `enabled` не задано або має значення `"auto"`, і щонайменше один
схвалювач розв'язується. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт схвалення.
Установіть `enabled: true`, щоб примусово ввімкнути нативні схвалення, коли схвалювачі розв'язуються.
Slack автоматично вмикає нативні затвердження Exec, коли `enabled` не задано або має значення `"auto"` і принаймні один
затверджувач визначається. Задайте `enabled: false`, щоб явно вимкнути Slack як нативний клієнт затвердження.
Задайте `enabled: true`, щоб примусово ввімкнути нативні затвердження, коли затверджувачі визначаються.
Стандартна поведінка без явної конфігурації схвалення виконання Slack:
Типова поведінка без явної конфігурації затвердження Exec для Slack:
```json5
{
@ -853,8 +866,8 @@ Slack автоматично вмикає нативні схвалення ви
}
```
Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити схвалювачів, додати фільтри або
увімкнути доставку в початковий чат:
Явна нативна конфігурація Slack потрібна лише тоді, коли потрібно перевизначити затверджувачів, додати фільтри або
увімкнути доставлення до початкового чату:
```json5
{
@ -870,25 +883,25 @@ Slack автоматично вмикає нативні схвалення ви
}
```
Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити схвалення виконання також мають
спрямовуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
окреме; нативні кнопки Slack усе одно можуть розв'язувати схвалення Plugin, коли ці запити вже потрапляють
Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на затвердження Exec також мають
маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
окреме; нативні кнопки Slack усе ще можуть розв’язувати затвердження Plugin, коли ці запити вже потрапляють
у Slack.
Одночатова команда `/approve` також працює в каналах Slack і DM, які вже підтримують команди. Див. [Схвалення виконання](/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_*`
- події модальних `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми
- Редагування й видалення повідомлень відображаються у системні події.
- Трансляції гілок (відповіді в гілках «Також надіслати до каналу») обробляються як звичайні повідомлення користувача.
- Події додавання/видалення реакцій відображаються у системні події.
- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення закріплення відображаються у системні події.
- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли `configWrites` увімкнено.
- Метадані теми/призначення каналу розглядаються як недовірений контекст і можуть вводитися в контекст маршрутизації.
- Початкове повідомлення гілки та засівання початкового контексту історії гілки фільтруються налаштованими списками дозволених відправників, коли застосовно.
- Дії блоків і модальні взаємодії створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload:
- дії блоків: вибрані значення, мітки, значення засобів вибору та метадані `workflow_*`
- події модальних `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеннями форми
## Довідник конфігурації
@ -898,10 +911,10 @@ Slack автоматично вмикає нативні схвалення ви
- режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- доступ до 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`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
- перемикач сумісності: `dangerouslyAllowNameMatching` (break-glass; тримайте вимкненим, якщо не потрібно)
- доступ до каналу: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- гілки/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- доставлення: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
- операції/функції: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
</Accordion>
@ -910,12 +923,12 @@ Slack автоматично вмикає нативні схвалення ви
<AccordionGroup>
<Accordion title="Немає відповідей у каналах">
Перевірте по черзі:
Перевірте за порядком:
- `groupPolicy`
- allowlist каналу (`channels.slack.channels`) — **ключі мають бути ідентифікаторами каналів** (`C12345678`), а не назвами (`#channel-name`). Ключі на основі назв непомітно не спрацьовують із `groupPolicy: "allowlist"`, оскільки маршрутизація каналів за замовчуванням спершу використовує ідентифікатори. Щоб знайти ідентифікатор: клацніть канал у Slack правою кнопкою → **Copy link** — значення `C...` наприкінці URL є ідентифікатором каналу.
- список дозволених каналів (`channels.slack.channels`) — **ключі мають бути ID каналів** (`C12345678`), а не назвами (`#channel-name`). Ключі на основі назв тихо не спрацьовують за `groupPolicy: "allowlist"`, бо маршрутизація каналів типово насамперед спирається на ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → **Копіювати посилання** — значення `C...` у кінці URL є ID каналу.
- `requireMention`
- поканальний allowlist `users`
- поканальний список дозволених `users`
Корисні команди:
@ -932,9 +945,9 @@ openclaw doctor
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
- схвалення спарювання / записи allowlist
- затвердження сполучення / записи списку дозволених
- події DM Slack Assistant: докладні журнали зі згадкою `drop message_changed`
зазвичай означають, що Slack надіслав відредаговану подію треду Assistant без
зазвичай означають, що Slack надіслав відредаговану подію гілки Assistant без
відновлюваного людського відправника в метаданих повідомлення
```bash
@ -944,102 +957,102 @@ openclaw pairing list slack
</Accordion>
<Accordion title="Socket mode не підключається">
Перевірте токени бота й програми, а також увімкнення Socket Mode у налаштуваннях програми Slack.
Перевірте токени бота й програми та ввімкнення Socket Mode у налаштуваннях програми Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
налаштований, але поточне середовище виконання не змогло розв'язати значення,
налаштовано, але поточне середовище виконання не змогло визначити значення,
підкріплене SecretRef.
</Accordion>
<Accordion title="HTTP mode не отримує події">
<Accordion title="Режим HTTP не отримує події">
Перевірте:
- signing secret
- секрет підпису
- шлях Webhook
- Slack Request URLs (Events + Interactivity + Slash Commands)
- унікальний `webhookPath` для кожного HTTP-облікового запису
- URL запитів Slack (події + інтерактивність + команди slash)
- унікальний `webhookPath` для кожного облікового запису HTTP
Якщо `signingSecretStatus: "configured_unavailable"` з'являється у знімках
облікових записів, HTTP-обліковий запис налаштований, але поточне середовище виконання не змогло
розв'язати signing secret, підкріплений SecretRef.
Якщо `signingSecretStatus: "configured_unavailable"` зявляється у знімках
облікового запису, обліковий запис HTTP налаштовано, але поточне середовище виконання не змогло
визначити секрет підпису, підкріплений SecretRef.
</Accordion>
<Accordion title="Нативні/slash-команди не спрацьовують">
Перевірте, що саме ви мали на увазі:
<Accordion title="Нативні команди / команди slash не спрацьовують">
Перевірте, що саме ви мали на меті:
- режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
- режим нативних команд (`channels.slack.commands.native: true`) з відповідними командами slash, зареєстрованими у Slack
- або режим однієї команди slash (`channels.slack.slashCommand.enabled: true`)
Також перевірте `commands.useAccessGroups` і allowlist-и каналів/користувачів.
Також перевірте `commands.useAccessGroups` і списки дозволених каналів/користувачів.
</Accordion>
</AccordionGroup>
## Довідник зору для вкладень
Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішні й обмеження розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою зору; інші файли зберігаються як контекст завантажуваних файлів, а не обробляються як вхідні зображення.
Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішне та обмеження розміру це дозволяють. Файли зображень можуть передаватися через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою зору; інші файли зберігаються як контекст файлу, доступний для завантаження, а не трактуються як вхідні зображення.
### Підтримувані типи медіа
| Тип медіа | Джерело | Поточна поведінка | Примітки |
| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й прикріплюються до ходу для обробки з підтримкою бачення | Обмеження на файл: `channels.slack.mediaMaxMb` (типово 20 MB) |
| PDF-файли | URL файлу Slack | Завантажуються й надаються як файловий контекст для інструментів, таких як `download-file` або `pdf` | Вхідний Slack не перетворює PDF на вхідні дані для бачення зображень автоматично |
| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й додаються до ходу для обробки з підтримкою зору | Обмеження на файл: `channels.slack.mediaMaxMb` (типово 20 MB) |
| PDF-файли | URL файлу Slack | Завантажуються й надаються як файловий контекст для інструментів, як-от `download-file` або `pdf` | Вхідні дані Slack не перетворюють PDF на вхідні дані зображень для зору автоматично |
| Інші файли | URL файлу Slack | Завантажуються, коли це можливо, і надаються як файловий контекст | Двійкові файли не обробляються як вхідні зображення |
| Відповіді в треді | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути гідровані як контекст, коли відповідь не має безпосередніх медіа | Початкові повідомлення лише з файлами використовують заповнювач вкладення |
| Відповіді в тредах | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути гідратовані як контекст, коли відповідь не має прямих медіа | Початкові повідомлення лише з файлами використовують заповнювач вкладення |
| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення |
### Вхідний конвеєр
Коли надходить повідомлення Slack із файловими вкладеннями:
Коли надходить повідомлення Slack із вкладеними файлами:
1. OpenClaw завантажує файл із приватного URL Slack, використовуючи токен бота (`xoxb-...`).
2. Після успіху файл записується до сховища медіа.
3. Шляхи завантажених медіа та типи вмісту додаються до вхідного контексту.
4. Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту.
1. OpenClaw завантажує файл із приватної URL-адреси Slack за допомогою токена бота (`xoxb-...`).
2. У разі успіху файл записується до сховища медіа.
3. Шляхи завантажених медіа й типи вмісту додаються до вхідного контексту.
4. Шляхи моделей/інструментів із підтримкою зору можуть використовувати вкладені зображення з цього контексту.
5. Файли, що не є зображеннями, залишаються доступними як файлові метадані або посилання на медіа для інструментів, які можуть їх обробляти.
### Наслідування вкладень кореня треду
### Успадкування вкладень кореня треду
Коли повідомлення надходить у тред (має батьківський `thread_ts`):
Коли повідомлення надходить у треді (має батьківський `thread_ts`):
- Якщо сама відповідь не має безпосередніх медіа, а включене кореневе повідомлення має файли, Slack може гідрувати кореневі файли як контекст початкового повідомлення треду.
- Безпосередні вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
- Кореневе повідомлення, яке має лише файли й не має тексту, представляється заповнювачем вкладення, щоб резервний варіант усе одно міг включити його файли.
- Якщо сама відповідь не має прямих медіа, а включене кореневе повідомлення має файли, Slack може гідратувати кореневі файли як контекст початкового повідомлення треду.
- Прямі вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
- Кореневе повідомлення, яке має лише файли й не має тексту, представляється заповнювачем вкладення, щоб резервний механізм усе одно міг включити його файли.
### Обробка кількох вкладень
Коли одне повідомлення Slack містить кілька файлових вкладень:
Коли одне повідомлення Slack містить кілька вкладених файлів:
- Кожне вкладення обробляється незалежно через медіаконвеєр.
- Посилання на завантажені медіа агрегуються в контекст повідомлення.
- Порядок обробки відповідає порядку файлів Slack у корисному навантаженні події.
- Помилка завантаження одного вкладення не блокує інші.
### Обмеження розміру, завантаження та моделі
### Обмеження розміру, завантаження й моделі
- **Обмеження розміру**: типово 20 MB на файл. Налаштовується через `channels.slack.mediaMaxMb`.
- **Помилки завантаження**: файли, які Slack не може надати, протерміновані URL, недоступні файли, завеликі файли та HTML-відповіді автентифікації/входу Slack пропускаються, а не повідомляються як непідтримувані формати.
- **Модель бачення**: аналіз зображень використовує активну модель відповіді, коли вона підтримує бачення, або модель зображень, налаштовану в `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, обробляються за принципом найкращого зусилля | Поділіться ними напряму в треді OpenClaw |
| PDF-вкладення | Зберігаються як файловий/медійний контекст, не маршрутизуються автоматично через зір для зображень | Використайте `download-file` для файлових метаданих або інструмент `pdf` для аналізу PDF |
### Пов’язана документація
- [Конвеєр розуміння медіа](/uk/nodes/media-understanding)
- [Інструмент PDF](/uk/tools/pdf)
- Епік: [#51349](https://github.com/openclaw/openclaw/issues/51349) — увімкнення бачення вкладень Slack
- Епік: [#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)
@ -1047,10 +1060,10 @@ Slack може прикріплювати завантажені медіа до
<CardGroup cols={2}>
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
З’єднайте користувача Slack із gateway.
Зв’яжіть користувача Slack із Gateway.
</Card>
<Card title="Groups" icon="users" href="/uk/channels/groups">
Поведінка каналу та групових DM.
Поведінка каналів і групових особистих повідомлень.
</Card>
<Card title="Channel routing" icon="route" href="/uk/channels/channel-routing">
Маршрутизуйте вхідні повідомлення до агентів.