chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-08 05:05:31 +00:00
parent b62b80e7c3
commit fa9e06956e
3 changed files with 831 additions and 863 deletions

View File

@ -1,29 +1,29 @@
---
read_when:
- Налаштування Slack або налагодження режиму Slack socket/HTTP
- Налаштування Slack або налагодження режиму socket/HTTP у Slack
summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Request URLs)
title: Slack
x-i18n:
generated_at: "2026-04-07T00:08:10Z"
generated_at: "2026-04-08T05:00:50Z"
model: gpt-5.4
provider: openai
source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea
source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942
source_path: channels/slack.md
workflow: 15
---
# Slack
Статус: готово до продакшну для приватних повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються.
Статус: готовий до production для DM + каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються.
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Приватні повідомлення Slack типово працюють у режимі сполучення.
Для Slack DM за замовчуванням використовується режим сполучення.
</Card>
<Card title="Slash-команди" 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>
@ -31,15 +31,15 @@ x-i18n:
## Швидке налаштування
<Tabs>
<Tab title="Socket Mode (типово)">
<Tab title="Socket Mode (за замовчуванням)">
<Steps>
<Step title="Створіть новий застосунок Slack">
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
- виберіть **from a manifest** і виберіть workspace для вашого застосунку
- вставте [приклад manifest](#manifest-and-scope-checklist) нижче та продовжте створення
- згенеруйте **App-Level Token** (`xapp-...`) з `connections:write`
- установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
</Step>
<Step title="Налаштуйте OpenClaw">
@ -57,7 +57,7 @@ x-i18n:
}
```
Резервне джерело через env (лише для типового облікового запису):
Резервне значення env (лише для облікового запису за замовчуванням):
```bash
SLACK_APP_TOKEN=xapp-...
@ -82,10 +82,10 @@ openclaw gateway
<Step title="Створіть новий застосунок Slack">
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
- виберіть **from a manifest** і виберіть workspace для вашого застосунку
- вставте [приклад manifest](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням
- збережіть **Signing Secret** для перевірки запитів
- установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
</Step>
@ -106,9 +106,9 @@ openclaw gateway
```
<Note>
Використовуйте унікальні шляхи webhook для багатьох HTTP-облікових записів
Використовуйте унікальні webhook path для багатьох HTTP-облікових записів
Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували.
Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували.
</Note>
</Step>
@ -128,7 +128,7 @@ openclaw gateway
## Контрольний список manifest і scope
<Tabs>
<Tab title="Socket Mode (типово)">
<Tab title="Socket Mode (за замовчуванням)">
```json
{
@ -291,12 +291,12 @@ openclaw gateway
<AccordionGroup>
<Accordion title="Необов’язкові scopes авторства (операції запису)">
Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та значок) замість типової ідентичності застосунку Slack.
Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість стандартної ідентичності застосунку Slack.
Якщо ви використовуєте значок emoji, Slack очікує синтаксис `:emoji_name:`.
Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`.
</Accordion>
<Accordion title="Необов’язкові scopes user token (операції читання)">
Якщо ви налаштовуєте `channels.slack.userToken`, типовими scopes для читання є:
<Accordion title="Необов’язкові scopes токена користувача (операції читання)">
Якщо ви налаштували `channels.slack.userToken`, типовими scopes читання є:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@ -304,44 +304,45 @@ openclaw gateway
- `reactions:read`
- `pins:read`
- `emoji:read`
- `search:read` (якщо ви залежите від читання через Slack search)
- `search:read` (якщо ви залежите від читання пошуку Slack)
</Accordion>
</AccordionGroup>
## Модель токенів
- `botToken` + `appToken` обов’язкові для Socket Mode.
- Для режиму HTTP потрібні `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті
- `botToken` + `appToken` потрібні для Socket Mode.
- Для HTTP mode потрібні `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні
рядки або об’єкти SecretRef.
- Токени в конфігурації мають пріоритет над резервним джерелом через env.
- Резервне джерело через env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового облікового запису.
- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного джерела через env) і типово працює в режимі лише для читання (`userTokenReadOnly: true`).
- Токени конфігурації мають пріоритет над резервними значеннями env.
- Резервні значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням.
- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення env) і за замовчуванням працює в режимі лише для читання (`userTokenReadOnly: true`).
Поведінка знімка статусу:
Поведінка знімка стану:
- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status`
для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Перевірка облікового запису Slack відстежує для кожного облікового
даного поля `*Source` і `*Status`
(`botToken`, `appToken`, `signingSecret`, `userToken`).
- Статус може бути `available`, `configured_unavailable` або `missing`.
- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
або інше не вбудоване джерело секрету, але поточна команда/шлях виконання
- `configured_unavailable` означає, що обліковий запис налаштований через SecretRef
або інше не-inline джерело секретів, але поточний шлях команди/виконання
не зміг визначити фактичне значення.
- У режимі HTTP включається `signingSecretStatus`; у Socket Mode
обов’язковою парою є `botTokenStatus` + `appTokenStatus`.
- У HTTP mode додається `signingSecretStatus`; у Socket Mode
потрібною парою є `botTokenStatus` + `appTokenStatus`.
<Tip>
Для дій/читання каталогу user token може мати пріоритет, якщо його налаштовано. Для запису bot token залишається пріоритетним; запис через user token дозволено лише коли `userTokenReadOnly: false` і bot token недоступний.
Для дій/читання каталогу може надаватися перевага user token, якщо його налаштовано. Для запису перевага зберігається за bot token; запис через user token дозволений лише коли `userTokenReadOnly: false`, а bot token недоступний.
</Tip>
## Дії та обмеження
Дії Slack контролюються через `channels.slack.actions.*`.
Дії Slack керуються через `channels.slack.actions.*`.
Доступні групи дій у поточному інструментарії Slack:
| Група | Типово |
| ---------- | ------- |
| Група | За замовчуванням |
| ---------- | ---------------- |
| messages | увімкнено |
| reactions | увімкнено |
| pins | увімкнено |
@ -350,32 +351,32 @@ openclaw gateway
Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`.
## Керування доступом і маршрутизація
## Контроль доступу та маршрутизація
<Tabs>
<Tab title="Політика приватних повідомлень">
`channels.slack.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.slack.dm.policy`):
<Tab title="Політика DM">
`channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`):
- `pairing` (типово)
- `pairing` (за замовчуванням)
- `allowlist`
- `open` (потрібно, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
- `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
- `disabled`
Прапорці для приватних повідомлень:
Прапорці DM:
- `dm.enabled` (типово true)
- `dm.enabled` (за замовчуванням true)
- `channels.slack.allowFrom` (рекомендовано)
- `dm.allowFrom` (застаріле)
- `dm.groupEnabled` (групові приватні повідомлення типово false)
- `dm.groupEnabled` (групові DM за замовчуванням false)
- `dm.groupChannels` (необов’язковий allowlist MPIM)
Пріоритет для кількох облікових записів:
Пріоритет для багатьох облікових записів:
- `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано.
- Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`.
Для сполучення в приватних повідомленнях використовується `openclaw pairing approve slack <code>`.
Для сполучення в DM використовується `openclaw pairing approve slack <code>`.
</Tab>
@ -388,26 +389,26 @@ openclaw gateway
Allowlist каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів.
Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо встановлено `channels.defaults.groupPolicy`).
Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
Визначення імен/ID:
- записи allowlist каналів і allowlist приватних повідомлень визначаються під час запуску, якщо доступ токена це дозволяє
- записи з невизначеними іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації
- вхідна авторизація та маршрутизація каналів типово орієнтовані на ID; пряме зіставлення за ім’ям користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
- записи allowlist каналів і DM allowlist визначаються під час запуску, якщо доступ токена це дозволяє
- нерозв’язані записи назв каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації
- вхідна авторизація та маршрутизація каналів за замовчуванням орієнтуються на ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
</Tab>
<Tab title="Згадки та користувачі каналів">
Повідомлення в каналах типово обмежуються згадками.
<Tab title="Згадки та користувачі каналу">
Повідомлення в каналах за замовчуванням обмежуються згадками.
Джерела згадок:
- явна згадка застосунку (`<@botId>`)
- шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- неявна поведінка reply-to-bot у тредах (вимикається, коли `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` (allowlist)
@ -415,36 +416,36 @@ openclaw gateway
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"`
- формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"`
(застарілі ключі без префікса все ще зіставляються лише з `id:`)
</Tab>
</Tabs>
## Треди, сесії та теги reply
## Треди, сесії та теги відповіді
- Приватні повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
- Із типовим `session.dmScope=main` приватні повідомлення Slack згортаються в основну сесію агента.
- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
- Із типовим `session.dmScope=main` Slack DM згортаються до основної сесії агента.
- Сесії каналів: `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`.
- Відповіді в треді можуть створювати суфікси сесії треду (`: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.replyToMode`: `off|first|all|batched` (типово `off`)
- `channels.slack.replyToMode`: `off|first|all|batched` (за замовчуванням `off`)
- `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel`
- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode`
Підтримуються ручні теги reply:
Підтримуються ручні теги відповіді:
- `[[reply_to_current]]`
- `[[reply_to:<id>]]`
Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів платформ: у Slack треди приховують повідомлення з каналу, тоді як у Telegram replies залишаються видимими в основному потоці чату.
Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів на цих платформах: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді залишаються видимими в основному потоці чату.
## Ack-реакції
## Реакції підтвердження
`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
@ -453,36 +454,40 @@ openclaw gateway
- `channels.slack.accounts.<accountId>.ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
- резервне значення emoji з ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше `"👀"`)
Примітки:
- Slack очікує shortcodes (наприклад, `"eyes"`).
- Slack очікує короткі коди (наприклад, `"eyes"`).
- Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально.
## Потокова передача тексту
`channels.slack.streaming` керує поведінкою live preview:
- `off`: вимкнути live preview streaming.
- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом.
- `off`: вимкнути потокову live preview.
- `partial` (за замовчуванням): замінювати текст попереднього перегляду останнім частковим виводом.
- `block`: додавати фрагментовані оновлення попереднього перегляду.
- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати остаточний текст.
`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`).
`channels.slack.streaming.nativeTransport` керує нативною потоковою передачею тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (за замовчуванням: `true`).
- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд.
- Медіа та нетекстові корисні навантаження повертаються до звичайної доставки.
- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти корисних навантажень.
- Для нативної потокової передачі тексту та відображення статусу треду Slack assistant має бути доступний тред відповіді. Вибір треду все одно підпорядковується `replyToMode`.
- Кореневі повідомлення каналів і групових чатів усе ще можуть використовувати звичайний чернетковий preview, коли нативна потокова передача недоступна.
- DM у Slack верхнього рівня за замовчуванням залишаються поза тредом, тому не показують preview у стилі треду; використовуйте відповіді в треді або `typingReaction`, якщо хочете бачити прогрес там.
- Для медіа та не текстових payload використовується звичайна доставка.
- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти payload.
Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack:
Використовуйте чернетковий preview замість нативної потокової передачі тексту Slack:
```json5
{
channels: {
slack: {
streaming: "partial",
nativeStreaming: false,
streaming: {
mode: "partial",
nativeTransport: false,
},
},
},
}
@ -490,12 +495,13 @@ openclaw gateway
Застарілі ключі:
- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming`.
- булевий `channels.slack.streaming` автоматично мігрує до `channels.slack.nativeStreaming`.
- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`.
- булеве `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
- застаріле `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`.
## Резервний варіант з typing reaction
## Резервна реакція введення
`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану "is typing...".
`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це особливо корисно поза відповідями в тредах, які використовують типовий індикатор статусу "is typing...".
Порядок визначення:
@ -504,50 +510,50 @@ openclaw gateway
Примітки:
- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`).
- Реакція надсилається за принципом best-effort, а очищення автоматично намагається виконатися після відповіді або завершення шляху помилки.
- Slack очікує короткі коди (наприклад, `"hourglass_flowing_sand"`).
- Реакція є best-effort, а спроба очищення автоматично виконується після завершення відповіді або сценарію помилки.
## Медіа, розбиття на частини та доставка
<AccordionGroup>
<Accordion title="Вхідні вкладення">
Файлові вкладення Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру.
Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру.
Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`.
Обмеження розміру вхідних даних під час виконання за замовчуванням становить `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`.
</Accordion>
<Accordion title="Вихідний текст і файли">
- текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000)
- текстові частини використовують `channels.slack.textChunkLimit` (за замовчуванням 4000)
- `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами
- надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
- обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовують типові значення MIME-kind із конвеєра медіа
- надсилання файлів використовує API завантаження Slack і може включати відповіді в треді (`thread_ts`)
- обмеження вихідних медіа визначається `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує стандартні значення MIME-kind з media pipeline
</Accordion>
<Accordion title="Цілі доставки">
Бажані явні цілі:
Рекомендовані явні цілі:
- `user:<id>` для приватних повідомлень
- `user:<id>` для DM
- `channel:<id>` для каналів
Приватні повідомлення Slack відкриваються через API бесід Slack під час надсилання до цілей користувача.
Slack DM відкриваються через API розмов Slack під час надсилання до цілей користувача.
</Accordion>
</AccordionGroup>
## Команди та поведінка slash
- Нативний автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack).
- Автоматичний режим нативних команд **вимкнено** для Slack (`commands.native: "auto"` не вмикає нативні команди Slack).
- Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`).
- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/<command>`), з одним винятком:
- зареєструйте `/agentstatus` для команди status (Slack резервує `/status`)
- Якщо нативні команди не ввімкнено, можна запускати одну налаштовану slash-команду через `channels.slack.slashCommand`.
- Нативні меню аргументів тепер адаптують свою стратегію відображення:
- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/<command>`), за одним винятком:
- зареєструйте `/agentstatus` для команди статусу (Slack резервує `/status`)
- Якщо нативні команди не ввімкнено, ви можете запускати одну налаштовану slash-команду через `channels.slack.slashCommand`.
- Нативні меню аргументів тепер адаптують свою стратегію рендерингу:
- до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
- понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники параметрів interactivity
- якщо закодовані значення варіантів перевищують обмеження Slack, потік повертається до кнопок
- Для довгих корисних навантажень варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення.
- Для довгих payload варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення.
Типові параметри slash-команд:
@ -560,11 +566,11 @@ openclaw gateway
- `agent:<agentId>:slack:slash:<userId>`
і все ще маршрутизують виконання команд відносно сесії цільової бесіди (`CommandTargetSessionKey`).
і все одно маршрутизують виконання команд до сесії цільової розмови (`CommandTargetSessionKey`).
## Інтерактивні відповіді
Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю функцію типово вимкнено.
Slack може відображати інтерактивні елементи відповіді, створені агентом, але ця можливість за замовчуванням вимкнена.
Увімкніть її глобально:
@ -580,7 +586,7 @@ Slack може відображати інтерактивні елементи
}
```
Або ввімкніть її лише для одного облікового запису Slack:
Або увімкніть її лише для одного облікового запису Slack:
```json5
{
@ -598,7 +604,7 @@ Slack може відображати інтерактивні елементи
}
```
Коли функцію ввімкнено, агенти можуть надсилати директиви відповідей лише для Slack:
Коли можливість увімкнено, агенти можуть виводити директиви відповіді лише для Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
@ -609,33 +615,32 @@ Slack може відображати інтерактивні елементи
- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом.
- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного корисного навантаження blocks.
- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload блоків.
## Погодження exec у Slack
## Exec approvals у Slack
Slack може діяти як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
Slack може діяти як нативний клієнт схвалення з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації до приватних повідомлень/каналів.
- Погодження plugin також можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack, а тип ID погодження — `plugin:`.
- Авторизація того, хто погоджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть погоджувати або відхиляти запити через Slack.
- Для нативної маршрутизації в DM/каналах exec approvals використовують `channels.slack.execApprovals.*`.
- Схвалення плагінів усе ще можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack і вид ID схвалення є `plugin:`.
- Авторизація того, хто схвалює, усе ще примусово застосовується: лише користувачі, визначені як approvers, можуть схвалювати або відхиляти запити через Slack.
Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в бесіді.
Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw
має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що
погодження в чаті недоступні або ручне погодження є єдиним шляхом.
Це використовує ту саму спільну поверхню кнопок схвалення, що й інші канали. Коли у налаштуваннях застосунку Slack увімкнено `interactivity`, запити на схвалення відображаються як кнопки 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 автоматично вмикає нативні погодження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один
approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження.
Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли approvers визначаються.
Slack автоматично вмикає нативні exec approvals, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один
approver. Встановіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт схвалення.
Встановіть `enabled: true`, щоб примусово ввімкнути нативні схвалення, коли визначаються approvers.
Типова поведінка без явної конфігурації погодження exec для Slack:
Поведінка за замовчуванням без явної конфігурації Slack exec approval:
```json5
{
@ -646,7 +651,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
```
Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або
вибрати доставку в чат походження:
використовувати доставку до чату-джерела:
```json5
{
@ -662,38 +667,38 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
}
```
Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на погодження exec також мають
маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне переспрямування `approvals.plugin` також є
окремим; нативні кнопки Slack усе ще можуть визначати погодження plugin, коли ці запити вже надходять
Спільне пересилання `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на exec approval також мають
маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне пересилання `approvals.plugin` також є
окремим; нативні кнопки Slack усе ще можуть визначати схвалення плагінів, коли ці запити вже надходять
у Slack.
Команда `/approve` у тому самому чаті також працює в каналах і приватних повідомленнях Slack, які вже підтримують команди. Див. [Погодження exec](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування погоджень.
Така сама `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Див. [Exec approvals](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю пересилання схвалень.
## Події та операційна поведінка
- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями.
- Редагування/видалення повідомлень і thread broadcast зіставляються із системними подіями.
- Події додавання/видалення реакцій зіставляються із системними подіями.
- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями.
- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення pin зіставляються із системними подіями.
- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`.
- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути ін’єктовані в контекст маршрутизації.
- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, де це застосовно.
- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` із насиченими полями корисного навантаження:
- Метадані topic/purpose каналу вважаються ненадійним контекстом і можуть бути впроваджені в контекст маршрутизації.
- Початок треду й початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, якщо це застосовно.
- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload:
- дії block: вибрані значення, мітки, значення picker і метадані `workflow_*`
- події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними значеннями форми
- події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми
## Вказівники на довідкову конфігурацію
## Вказівники на довідник конфігурації
Основне посилання:
Основний довідник:
- [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack)
Високосигнальні поля Slack:
Основні поля Slack:
- mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- доступ до приватних повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; тримайте вимкненим, якщо не потрібно)
- доступ до 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`, `nativeStreaming`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
- операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
## Усунення проблем
@ -705,7 +710,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
- `groupPolicy`
- allowlist каналів (`channels.slack.channels`)
- `requireMention`
- allowlist `users` для конкретного каналу
- allowlist `users` для кожного каналу
Корисні команди:
@ -717,12 +722,12 @@ openclaw doctor
</Accordion>
<Accordion title="Повідомлення в приватних повідомленнях ігноруються">
<Accordion title="Повідомлення DM ігноруються">
Перевірте:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
- дозволи сполучення / записи allowlist
- схвалення сполучення / записи allowlist
```bash
openclaw pairing list slack
@ -730,32 +735,32 @@ openclaw pairing list slack
</Accordion>
<Accordion title="Режим socket не підключається">
<Accordion title="Socket mode не підключається">
Перевірте bot token + app token і ввімкнення Socket Mode в налаштуваннях застосунку Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
налаштовано, але поточне середовище виконання не змогло визначити значення,
що підтримується SecretRef.
що використовує SecretRef.
</Accordion>
<Accordion title="Режим HTTP не отримує події">
<Accordion title="HTTP mode не отримує події">
Перевірте:
- signing secret
- шлях webhook
- webhook path
- Slack Request URLs (Events + Interactivity + Slash Commands)
- унікальний `webhookPath` для кожного HTTP-облікового запису
Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках
облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло
визначити signing secret, що підтримується SecretRef.
визначити signing secret, що використовує SecretRef.
</Accordion>
<Accordion title="Нативні/slash-команди не спрацьовують">
Перевірте, чи ви справді мали на увазі:
Перевірте, який режим ви мали на увазі:
- режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими у Slack
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
@ -765,7 +770,7 @@ openclaw pairing list slack
</Accordion>
</AccordionGroup>
## Пов’язані розділи
## Пов’язане
- [Сполучення](/uk/channels/pairing)
- [Групи](/uk/channels/groups)

View File

@ -1,34 +1,34 @@
---
read_when:
- Пояснення того, як працює streaming або chunking у каналах
- Зміна поведінки block streaming або channel chunking
- Налагодження дубльованих/передчасних блокових відповідей або preview streaming у каналах
summary: Поведінка streaming + chunking (блокові відповіді, preview-streaming у каналах, зіставлення режимів)
title: Streaming і chunking
- Пояснення того, як потокове передавання або розбиття на частини працює в каналах
- Зміна поведінки потокового передавання блоків або розбиття на частини в каналах
- Налагодження дубльованих/передчасних блокових відповідей або потокового передавання попереднього перегляду в каналах
summary: Поведінка потокового передавання та розбиття на частини (блокові відповіді, потокове передавання попереднього перегляду в каналах, зіставлення режимів)
title: Потокове передавання та розбиття на частини
x-i18n:
generated_at: "2026-04-05T18:02:19Z"
generated_at: "2026-04-08T04:59:57Z"
model: gpt-5.4
provider: openai
source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97
source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000
source_path: concepts/streaming.md
workflow: 15
---
# Streaming + chunking
# Потокове передавання та розбиття на частини
OpenClaw має два окремі шари streaming:
OpenClaw має два окремі шари потокового передавання:
- **Block streaming (канали):** надсилає завершені **блоки**, поки асистент пише. Це звичайні повідомлення каналу (не дельти токенів).
- **Preview streaming (Telegram/Discord/Slack):** оновлює тимчасове **preview message** під час генерації.
- **Потокове передавання блоків (канали):** надсилає завершені **блоки**, поки помічник пише. Це звичайні повідомлення каналу (не дельти токенів).
- **Потокове передавання попереднього перегляду (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації.
Справжнього streaming дельт токенів до повідомлень каналу сьогодні **немає**. Preview streaming працює на рівні повідомлень (надсилання + редагування/додавання).
Справжнього **потокового передавання дельт токенів** у повідомлення каналів наразі **немає**. Потокове передавання попереднього перегляду є повідомлень-орієнтованим (надсилання + редагування/додавання).
## Block streaming (повідомлення каналу)
## Потокове передавання блоків (повідомлення каналів)
Block streaming надсилає вихід асистента грубими фрагментами в міру його появи.
Потокове передавання блоків надсилає вивід помічника великими частинами в міру його появи.
```
Model output
Вивід моделі
└─ text_delta/events
├─ (blockStreamingBreak=text_end)
│ └─ chunker emits blocks as buffer grows
@ -39,130 +39,131 @@ Model output
Легенда:
- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без streaming).
- `chunker`: `EmbeddedBlockChunker`, який застосовує мінімальні/максимальні межі + пріоритет розриву.
- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без потокового передавання).
- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + пріоритет розриву.
- `channel send`: фактичні вихідні повідомлення (блокові відповіді).
**Керування:**
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (типово вимкнено).
- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово задати `"on"`/`"off"` для кожного каналу.
- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
- `agents.defaults.blockStreamingBreak`: `"text_end"` або `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання блоків streaming перед надсиланням).
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання потокових блоків перед надсиланням).
- Жорстке обмеження каналу: `*.textChunkLimit` (наприклад, `channels.whatsapp.textChunkLimit`).
- Режим chunking каналу: `*.chunkMode` (`length` типово, `newline` ділить за порожніми рядками (межами абзаців) перед chunking за довжиною).
- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) ділить високі відповіді, щоб уникнути обрізання в UI.
- Режим розбиття на частини для каналу: `*.chunkMode` (`length` типово, `newline` розбиває за порожніми рядками (межами абзаців) перед розбиттям за довжиною).
- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває високі відповіді, щоб уникнути обрізання в інтерфейсі.
**Семантика меж:**
- `text_end`: передавати блоки в потоці, щойно їх видає chunker; flush на кожному `text_end`.
- `message_end`: чекати, доки повідомлення асистента завершиться, а потім flush буферизований вихід.
- `text_end`: передавати блоки потоком щойно `chunker` їх видає; скидати буфер на кожному `text_end`.
- `message_end`: чекати, доки повідомлення помічника завершиться, а потім скидати буферизований вивід.
`message_end` усе одно використовує chunker, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька chunk.
`message_end` усе одно використовує `chunker`, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька частин.
## Алгоритм chunking (нижня/верхня межі)
## Алгоритм розбиття на частини (нижня/верхня межа)
Block chunking реалізовано через `EmbeddedBlockChunker`:
Розбиття блоків на частини реалізовано в `EmbeddedBlockChunker`:
- **Нижня межа:** не видавати, доки буфер не досягне `minChars` (якщо не примусово).
- **Верхня межа:** намагатися розривати до `maxChars`; якщо примусово, розривати на `maxChars`.
- **Нижня межа:** не видавати нічого, доки буфер не стане >= `minChars` (якщо не примусово).
- **Верхня межа:** намагатися розбивати до `maxChars`; якщо примусово, розбивати на `maxChars`.
- **Пріоритет розриву:** `paragraph``newline``sentence``whitespace` → жорсткий розрив.
- **Code fences:** ніколи не розривати всередині fence; якщо розрив на `maxChars` примусовий, fence закривається й знову відкривається, щоб Markdown залишався коректним.
- **Огородження коду:** ніколи не розбивати всередині огороджень; у разі примусового розриву на `maxChars` огородження закривається й знову відкривається, щоб Markdown залишався коректним.
`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити ліміти каналу не можна.
`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити обмеження для конкретного каналу неможливо.
## Coalescing (об’єднання блоків streaming)
## Об’єднання (злиття потокових блоків)
Коли block streaming увімкнено, OpenClaw може **об’єднувати послідовні блокові chunk**
перед їх надсиланням. Це зменшує «спам з однорядкових повідомлень», водночас
зберігаючи поступовий вивід.
Коли потокове передавання блоків увімкнене, OpenClaw може **об’єднувати послідовні блокові частини**
перед їх надсиланням. Це зменшує «спам з одного рядка», водночас зберігаючи
поступовий вивід.
- Coalescing чекає **пауз без активності** (`idleMs`) перед flush.
- Буфери обмежені `maxChars` і будуть скинуті, якщо перевищать його.
- `minChars` не дає надсилати крихітні фрагменти, доки не накопичиться достатньо тексту
(під час фінального flush залишковий текст надсилається завжди).
- Joiner виводиться з `blockStreamingChunk.breakPreference`
- Об’єднання чекає на **паузи бездіяльності** (`idleMs`) перед скиданням.
- Буфери обмежуються значенням `maxChars` і буде виконано скидання, якщо їх перевищено.
- `minChars` не дає надсилати дрібні фрагменти, доки не накопичиться достатньо тексту
(підсумкове скидання завжди надсилає решту тексту).
- Роздільник визначається з `blockStreamingChunk.breakPreference`
(`paragraph` → `\n\n`, `newline``\n`, `sentence` → пробіл).
- Для каналів доступні перевизначення через `*.blockStreamingCoalesce` (зокрема у конфігураціях для окремих облікових записів).
- Перевизначення для каналів доступні через `*.blockStreamingCoalesce` (зокрема в конфігураціях окремих облікових записів).
- Типове значення coalesce `minChars` підвищується до 1500 для Signal/Slack/Discord, якщо не перевизначено.
## Людиноподібний темп між блоками
Коли block streaming увімкнено, ви можете додати **випадкову паузу** між
блоковими відповідями (після першого блока). Це робить багатобульбашкові відповіді
Коли потокове передавання блоків увімкнене, можна додати **випадкову паузу** між
блоковими відповідями (після першого блоку). Це робить відповіді з кількох бульбашок
природнішими.
- Конфігурація: `agents.defaults.humanDelay` (можна перевизначити для окремого агента через `agents.list[].humanDelay`).
- Режими: `off` (типово), `natural` (8002500 мс), `custom` (`minMs`/`maxMs`).
- Конфігурація: `agents.defaults.humanDelay` (перевизначення для агента через `agents.list[].humanDelay`).
- Режими: `off` (типово), `natural` (8002500ms), `custom` (`minMs`/`maxMs`).
- Застосовується лише до **блокових відповідей**, а не до фінальних відповідей чи підсумків інструментів.
## "Передавати chunk-и чи все одразу"
## «Передавати частинами чи все одразу»
Це зіставляється так:
- **Передавати chunk-и:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (видавати під час генерації). Для каналів, окрім Telegram, також потрібно `*.blockStreaming: true`.
- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразовий flush, можливо з кількома chunk, якщо текст дуже довгий).
- **Без block streaming:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
- **Передавати частинами:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (передавання в міру надходження). Для каналів, крім Telegram, також потрібно `*.blockStreaming: true`.
- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразове скидання, можливо кількома частинами, якщо відповідь дуже довга).
- **Без потокового передавання блоків:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
**Примітка про канал:** Block streaming **вимкнено, якщо тільки**
`*.blockStreaming` явно не задано як `true`. Канали можуть вести live preview streaming
**Примітка щодо каналів:** Потокове передавання блоків **вимкнене, доки**
`*.blockStreaming` явно не встановлено в `true`. Канали можуть передавати живий попередній перегляд
(`channels.<channel>.streaming`) без блокових відповідей.
Нагадування про місце конфігурації: типові значення `blockStreaming*` розміщуються в
Нагадування про розташування конфігурації: типові параметри `blockStreaming*` знаходяться в
`agents.defaults`, а не в корені конфігурації.
## Режими preview streaming
## Режими потокового передавання попереднього перегляду
Канонічний ключ: `channels.<channel>.streaming`
Режими:
- `off`: вимкнути preview streaming.
- `partial`: одне preview, яке замінюється найновішим текстом.
- `block`: preview оновлюється chunk-ами/додаваннями.
- `progress`: preview прогресу/статусу під час генерації, фінальна відповідь після завершення.
- `off`: вимкнути потокове передавання попереднього перегляду.
- `partial`: один попередній перегляд, який замінюється найновішим текстом.
- `block`: оновлення попереднього перегляду поетапно, частинами/додаванням.
- `progress`: попередній перегляд прогресу/стану під час генерації, фінальна відповідь після завершення.
### Зіставлення каналів
| Канал | `off` | `partial` | `block` | `progress` |
| -------- | ----- | --------- | ------- | ----------------- |
| Канал | `off` | `partial` | `block` | `progress` |
| ------- | ----- | --------- | ------- | ----------------- |
| Telegram | ✅ | ✅ | ✅ | зіставляється з `partial` |
| Discord | ✅ | ✅ | ✅ | зіставляється з `partial` |
| Slack | ✅ | ✅ | ✅ | ✅ |
Лише для Slack:
- `channels.slack.nativeStreaming` перемикає нативні виклики API streaming Slack, коли `streaming=partial` (типово: `true`).
- `channels.slack.streaming.nativeTransport` перемикає виклики нативного API потокового передавання Slack, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
- Нативне потокове передавання Slack і статус у потоці помічника Slack вимагають цільового потоку відповіді; DM верхнього рівня не показують такий попередній перегляд у стилі потоку.
Міграція застарілих ключів:
- Telegram: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`.
- Discord: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`.
- Slack: `streamMode` автоматично мігрує до enum `streaming`; булевий `streaming` автоматично мігрує до `nativeStreaming`.
- Telegram: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
- Discord: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
- Slack: `streamMode` автоматично мігрує до `streaming.mode`; булеве `streaming` автоматично мігрує до `streaming.mode` плюс `streaming.nativeTransport`; застаріле `nativeStreaming` автоматично мігрує до `streaming.nativeTransport`.
### Поведінка runtime
### Поведінка під час виконання
Telegram:
- Використовує `sendMessage` + `editMessageText` для оновлення preview у DM і групах/темах.
- Preview streaming пропускається, якщо block streaming Telegram явно увімкнено (щоб уникнути подвійного streaming).
- `/reasoning stream` може записувати міркування в preview.
- Використовує оновлення попереднього перегляду через `sendMessage` + `editMessageText` у DM та групах/темах.
- Потокове передавання попереднього перегляду пропускається, якщо для Telegram явно ввімкнено потокове передавання блоків (щоб уникнути подвійного потокового передавання).
- `/reasoning stream` може записувати міркування в попередній перегляд.
Discord:
- Використовує надсилання + редагування preview message.
- Режим `block` використовує chunking чернетки (`draftChunk`).
- Preview streaming пропускається, якщо block streaming Discord явно увімкнено.
- Використовує надсилання + редагування повідомлень попереднього перегляду.
- Режим `block` використовує чернеткове розбиття на частини (`draftChunk`).
- Потокове передавання попереднього перегляду пропускається, якщо для Discord явно ввімкнено потокове передавання блоків.
Slack:
- `partial` може використовувати нативний streaming Slack (`chat.startStream`/`append`/`stop`), коли доступно.
- `block` використовує preview чернетки у стилі append.
- `progress` використовує preview тексту статусу, а потім фінальну відповідь.
- `partial` може використовувати нативне потокове передавання Slack (`chat.startStream`/`append`/`stop`), коли воно доступне.
- `block` використовує попередні перегляди чернеток у стилі додавання.
- `progress` використовує текст попереднього перегляду стану, а потім фінальну відповідь.
## Пов’язане
- [Повідомлення](/concepts/messages) — життєвий цикл і доставка повідомлень
- [Повторні спроби](/concepts/retry) — поведінка повторних спроб у разі збою доставки
- [Канали](/channels) — підтримка streaming для окремих каналів
- [Повідомлення](/uk/concepts/messages) — життєвий цикл і доставка повідомлень
- [Повторна спроба](/uk/concepts/retry) — поведінка повторних спроб у разі помилки доставки
- [Канали](/uk/channels) — підтримка потокового передавання для кожного каналу

File diff suppressed because it is too large Load Diff