Сполучення
DM Slack за замовчуванням використовують режим сполучення.
Slash-команди
Нативна поведінка команд і каталог команд.
Усунення несправностей каналів
Діагностика між каналами й інструкції з відновлення.
Вибір Socket Mode або URL-адрес HTTP-запитів
Обидва транспорти готові до використання в продакшені та мають паритет функцій для повідомлень, slash-команд, App Home й інтерактивності. Обирайте за формою розгортання, а не за функціями.| Аспект | Socket Mode (за замовчуванням) | URL-адреси HTTP-запитів |
|---|---|---|
| Публічна URL-адреса Gateway | Не потрібна | Потрібна (DNS, TLS, зворотний проксі або тунель) |
| Вихідна мережа | Має бути доступний вихідний WSS до wss-primary.slack.com | Без вихідного WS; лише вхідний HTTPS |
| Потрібні токени | Токен бота + App-Level Token із connections:write | Токен бота + Signing Secret |
| Ноутбук розробника / за firewall | Працює як є | Потрібен публічний тунель (ngrok, Cloudflare Tunnel, Tailscale Funnel) або staging Gateway |
| Горизонтальне масштабування | Один сеанс Socket Mode на застосунок на хост; кільком Gateway потрібні окремі застосунки Slack | Stateless POST-обробник; кілька реплік Gateway можуть спільно використовувати один застосунок за load balancer |
| Кілька облікових записів на одному Gateway | Підтримується; кожен обліковий запис відкриває власний WS | Підтримується; кожному обліковому запису потрібен унікальний webhookPath (за замовчуванням /slack/events), щоб реєстрації не конфліктували |
| Транспорт slash-команд | Доставляються через WS-з’єднання; slash_commands[].url ігнорується | Slack надсилає POST на slash_commands[].url; поле потрібне для виконання команди |
| Підписування запитів | Не використовується (автентифікація — це App-Level Token) | Slack підписує кожен запит; OpenClaw перевіряє через signingSecret |
| Відновлення після розриву з’єднання | Автоматичне повторне підключення Slack SDK увімкнено; OpenClaw також перезапускає невдалі сеанси Socket Mode з обмеженим backoff. Застосовується налаштування транспорту для pong-timeout. | Немає постійного з’єднання, яке може розірватися; повторні спроби виконуються Slack для кожного запиту |
Обирайте Socket Mode для хостів з одним Gateway, ноутбуків розробників і on-prem мереж, які можуть встановлювати вихідні з’єднання до
*.slack.com, але не можуть приймати вхідний HTTPS.Обирайте URL-адреси HTTP-запитів, коли запускаєте кілька реплік Gateway за load balancer, коли вихідний WSS заблоковано, але вхідний HTTPS дозволено, або коли ви вже завершуєте Webhook-и Slack на зворотному проксі.Режим ретрансляції
Режим ретрансляції відокремлює вхідний трафік Slack від Gateway OpenClaw. Довірений маршрутизатор утримує єдине з’єднання Slack Socket Mode, обирає цільовий Gateway і пересилає типізовану подію через автентифікований websocket. Gateway продовжує використовувати свій токен бота для вихідних викликів Slack Web API.wss://, якщо вона не спрямована на localhost. Розглядайте bearer-токен і
таблицю маршрутів маршрутизатора як частину межі авторизації Slack: маршрутизовані події входять у
звичайний обробник повідомлень Slack як авторизовані активації. Надана маршрутизатором slack_identity
у websocket-фреймі hello може задати стандартне вихідне ім’я користувача й іконку; явна
ідентичність, надана викликачем, усе одно має пріоритет. З’єднання ретрансляції повторно підключається з тим самим
обмеженим backoff-таймінгом, що використовується Socket Mode, і очищає надану маршрутизатором ідентичність щоразу,
коли від’єднується.
Встановлення
Встановіть Slack перед налаштуванням каналу:plugins install реєструє та вмикає plugin. Plugin усе ще нічого не робить, доки ви не налаштуєте застосунок Slack і параметри каналу нижче. Див. Plugins щодо загальної поведінки plugin і правил встановлення.
Швидке налаштування
- Socket Mode (за замовчуванням)
- HTTP Request URLs
Створіть новий застосунок Slack
Відкрийте api.slack.com/apps → Create New App → From a manifest → виберіть свій workspace → вставте один із наведених нижче маніфестів → Next → Create.Після створення застосунку Slack:
Recommended відповідає повному набору функцій Slack plugin: App Home, slash-команди, файли, реакції, закріплення, групові DM і читання emoji/usergroup. Обирайте Minimal, коли політика workspace обмежує scopes — він покриває DM, історію каналів/груп, згадки та slash-команди, але вилучає файли, реакції, закріплення, групові DM (
mpim:*), emoji:read і usergroups:read. Див. контрольний список маніфесту та scopes для обґрунтування кожного scope і додаткових параметрів, як-от додаткові slash-команди.- Basic Information -> App-Level Tokens -> Generate Token and Scopes: додайте
connections:write, збережіть, скопіюйте App-Level Token. - Install App -> Install to Workspace: скопіюйте Bot User OAuth Token.
Налаштуйте OpenClaw
Рекомендоване налаштування SecretRef:Fallback через env (лише стандартний обліковий запис):
Налаштування транспорту Socket Mode
OpenClaw типово встановлює для клієнта Slack SDK час очікування pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування для конкретного робочого простору або хоста:clientPingTimeout — це очікування pong після того, як SDK надсилає клієнтський ping; serverPingTimeout — це очікування ping від сервера Slack. Повідомлення та події застосунку залишаються станом застосунку, а не сигналами життєздатності транспорту.
Примітки:
socketModeігнорується в режимі HTTP Request URL.- Базові налаштування
channels.slack.socketModeзастосовуються до всіх облікових записів Slack, якщо їх не перевизначено. Перевизначення для окремого облікового запису використовуютьchannels.slack.accounts.<accountId>.socketMode; оскільки це перевизначення об’єкта, включіть кожне поле налаштування сокета, яке потрібно для цього облікового запису. - Лише
clientPingTimeoutмає типове значення OpenClaw (15000).serverPingTimeoutіpingPongLoggingEnabledпередаються до Slack SDK лише тоді, коли їх налаштовано. - Затримка перезапуску Socket Mode починається приблизно з 2 секунд і обмежується приблизно 30 секундами. Відновлювані збої запуску, очікування запуску та від’єднання повторюються, доки канал не зупиниться. Постійні помилки облікового запису й облікових даних, як-от недійсна автентифікація, відкликані токени або відсутні області доступу, швидко завершуються помилкою замість нескінченних повторів.
Контрольний список маніфесту та областей доступу
Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блокsettings (і url команди slash).
Базовий маніфест (типово для Socket Mode):
settings на варіант HTTP і додайте url до кожної команди slash. Потрібна публічна URL-адреса:
Додаткові налаштування маніфесту
Показуйте різні функції, що розширюють наведені вище типові значення. Стандартний маніфест вмикає вкладку Головна Slack App Home і підписується наapp_home_opened. Коли учасник робочого простору відкриває вкладку «Головна», OpenClaw публікує безпечний типовий вигляд Home через views.publish; жодне корисне навантаження розмови або приватна конфігурація не включаються. Вкладка Повідомлення залишається ввімкненою для Slack DM. Маніфест також вмикає потоки Slack assistant через features.assistant_view, assistant:write, assistant_thread_started і assistant_thread_context_changed; потоки assistant маршрутизуються до власних сеансів потоків OpenClaw і зберігають наданий Slack контекст потоку доступним для агента.
Необов’язкові нативні slash-команди
Необов’язкові нативні slash-команди
Кілька нативних slash-команд можна використовувати замість однієї налаштованої команди з такими нюансами:
- Використовуйте
/agentstatusзамість/status, оскільки команда/statusзарезервована. - Одночасно може бути доступно не більше 25 slash-команд.
features.slash_commands підмножиною доступних команд:- Режим Socket (типово)
- URL-адреси HTTP-запитів
Необов’язкові області авторства (операції запису)
Необов’язкові області авторства (операції запису)
Додайте область бота
chat:write.customize, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (користувацьке ім’я користувача та піктограму) замість типової ідентичності застосунку Slack.Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис :emoji_name:.Необов’язкові області user-token (операції читання)
Необов’язкові області user-token (операції читання)
Якщо ви налаштовуєте
channels.slack.userToken, типовими областями читання є:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(якщо ви залежите від читання пошуку Slack)
Модель токенів
botToken+appTokenпотрібні для режиму Socket.- Режим HTTP потребує
botToken+signingSecret. - Режим relay потребує
botToken, а такожrelay.url,relay.authTokenіrelay.gatewayId; він не використовує app token або signing secret. botToken,appToken,signingSecret,relay.authTokenіuserTokenприймають відкриті текстові рядки або об’єкти SecretRef.- Токени конфігурації перевизначають резервний варіант env.
- Резервний варіант env
SLACK_BOT_TOKEN/SLACK_APP_TOKENзастосовується лише до типового облікового запису. userTokenдоступний лише в конфігурації (без резервного варіанта env) і типово використовує поведінку лише для читання (userTokenReadOnly: true).
- Інспекція облікового запису Slack відстежує для кожних облікових даних поля
*Sourceі*Status(botToken,appToken,signingSecret,userToken). - Стан може бути
available,configured_unavailableабоmissing. configured_unavailableозначає, що обліковий запис налаштовано через SecretRef або інше неінлайнове джерело секретів, але поточний шлях команди/середовища виконання не зміг отримати фактичне значення.- У режимі HTTP включається
signingSecretStatus; у режимі Socket потрібною парою єbotTokenStatus+appTokenStatus.
Дії та шлюзи
Дії Slack керуютьсяchannels.slack.actions.*.
Доступні групи дій у поточних інструментах Slack:
| Група | Типово |
|---|---|
| messages | увімкнено |
| reactions | увімкнено |
| pins | увімкнено |
| memberInfo | увімкнено |
| emojiList | увімкнено |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info і emoji-list. download-file приймає ідентифікатори файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередній перегляд зображень для зображень або метадані локального файлу для інших типів файлів.
Контроль доступу та маршрутизація
- Політика DM
- Політика каналів
- Згадки та користувачі каналів
channels.slack.dmPolicy керує доступом до DM. channels.slack.allowFrom — канонічний список дозволених для DM.pairing(за замовчуванням)allowlistopen(вимагає, щобchannels.slack.allowFromмістив"*")disabled
dm.enabled(за замовчуванням true)channels.slack.allowFromdm.allowFrom(застаріле)dm.groupEnabled(групові DM за замовчуванням false)dm.groupChannels(необов’язковий список дозволених MPIM)
channels.slack.accounts.default.allowFromзастосовується лише до облікового записуdefault.- Іменовані облікові записи успадковують
channels.slack.allowFrom, коли їхній власнийallowFromне задано. - Іменовані облікові записи не успадковують
channels.slack.accounts.default.allowFrom.
channels.slack.dm.policy і channels.slack.dm.allowFrom досі читаються для сумісності. openclaw doctor --fix переносить їх у dmPolicy і allowFrom, коли це можна зробити без зміни доступу.Сполучення в DM використовує openclaw pairing approve slack <code>.Потоки, сесії та теги відповідей
- DM маршрутизуються як
direct; канали якchannel; MPIM якgroup. - Прив’язки маршрутів Slack приймають сирі ID співрозмовників, а також форми цілей Slack, як-от
channel:C12345678,user:U12345678і<@U12345678>. - За стандартного
session.dmScope=mainDM Slack згортаються в головну сесію агента. - Сесії каналів:
agent:<agentId>:slack:channel:<channelId>. - Звичайні повідомлення верхнього рівня в каналі залишаються в сесії окремого каналу, навіть коли
replyToModeне єoff. - Відповіді в потоках Slack використовують батьківський Slack
thread_tsдля суфіксів сесій (:thread:<threadTs>), навіть коли вихідні відповіді в потоках вимкнено черезreplyToMode="off". - OpenClaw засіває придатний корінь каналу верхнього рівня в
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>, коли очікується, що цей корінь почне видимий потік Slack, щоб корінь і подальші відповіді в потоці спільно використовували одну сесію OpenClaw. Це застосовується до подійapp_mention, явних збігів із ботом або налаштованим шаблоном згадки, а також каналів ізrequireMention: falseі не-offreplyToMode. - Стандартне значення
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.replyToModeByChatType: окремо дляdirect|group|channel- застарілий fallback для прямих чатів:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
message задайте replyBroadcast: true з action: "send" і threadId або replyTo, щоб попросити Slack також транслювати відповідь у потоці в батьківський канал. Це відображається на прапорець Slack chat.postMessage reply_broadcast і підтримується лише для текстових надсилань або надсилань Block Kit, а не для завантажень медіа.
Коли виклик інструмента message виконується всередині потоку Slack і націлений на той самий канал, OpenClaw зазвичай успадковує поточний потік Slack відповідно до replyToMode. Задайте topLevel: true для action: "send" або action: "upload-file", щоб примусово створити нове повідомлення в батьківському каналі. threadId: null приймається як такий самий opt-out верхнього рівня.
replyToMode="off" вимикає вихідні відповіді Slack у потоках, зокрема явні теги [[reply_to_*]]. Це не вирівнює вхідні сесії потоків Slack: повідомлення, уже опубліковані всередині потоку Slack, усе одно маршрутизуються до сесії :thread:<threadTs>. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі "off". Потоки Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими inline.Реакції підтвердження
ackReaction надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення. ackReactionScope вирішує, коли це емодзі фактично надсилається.
Емодзі (ackReaction)
Порядок визначення:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback емодзі ідентичності агента (
agents.list[].identity.emoji, інакше"eyes"/ 👀)
- Slack очікує shortcodes (наприклад
"eyes"). - Використовуйте
"", щоб вимкнути реакцію для облікового запису Slack або глобально.
Область дії (messages.ackReactionScope)
Провайдер Slack читає область дії з messages.ackReactionScope (стандартно "group-mentions"). Наразі немає перевизначення на рівні облікового запису Slack або каналу Slack; значення є глобальним для Gateway.
Значення:
"all": реагувати в DM і групах."direct": реагувати лише в DM."group-all": реагувати на кожне групове повідомлення (без DM)."group-mentions"(стандартно): реагувати в групах, але лише коли бота згадано (або в групових mentionables, які opted in). DM виключено."off"/"none": ніколи не реагувати.
Стандартна область дії (
"group-mentions") не запускає реакції підтвердження в прямих повідомленнях. Щоб бачити налаштований ackReaction (наприклад "eyes") у вхідних DM Slack, задайте messages.ackReactionScope як "direct" або "all". messages.ackReactionScope читається під час запуску провайдера Slack, тому для набуття зміною чинності потрібен перезапуск gateway.Текстове потокове передавання
channels.slack.streaming керує поведінкою live preview:
off: вимкнути потокове передавання live preview.partial(стандартно): замінювати текст попереднього перегляду найновішим частковим виводом.block: додавати фрагментовані оновлення попереднього перегляду.progress: показувати текст статусу прогресу під час генерації, а потім надіслати фінальний текст.streaming.preview.toolProgress: коли чернетковий попередній перегляд активний, маршрутизувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (стандартно:true). Задайтеfalse, щоб зберігати окремі повідомлення інструментів/прогресу.streaming.preview.commandText/streaming.progress.commandText: задайтеstatus, щоб залишити компактні рядки прогресу інструментів, приховуючи сирий текст команд/exec (стандартно:raw).
channels.slack.streaming.nativeTransport керує нативним текстовим потоковим передаванням Slack, коли channels.slack.streaming.mode дорівнює partial (стандартно: true).
Нативні картки завдань прогресу Slack є opt-in для режиму прогресу. Задайте channels.slack.streaming.progress.nativeTaskCards як true з channels.slack.streaming.mode="progress", щоб надсилати нативну для Slack картку плану/завдання під час виконання роботи, а потім оновити ту саму картку завдання після завершення. Без цього прапорця режим прогресу зберігає портативну поведінку чернеткового попереднього перегляду.
- Щоб з’явилися нативне текстове потокове передавання та статус потоку асистента Slack, має бути доступний потік відповідей. Вибір потоку все ще відповідає
replyToMode. - Корені каналів, групових чатів і DM верхнього рівня все ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативне потокове передавання недоступне або потоку відповідей немає.
- DM Slack верхнього рівня стандартно залишаються поза потоком, тому вони не показують нативний stream/status preview Slack у стилі потоку; натомість OpenClaw публікує та редагує чернетковий попередній перегляд у DM.
- Медіа та нетекстові payload-и повертаються до звичайної доставки.
- Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні фінальні текстові/block повідомлення flush only when they can edit the preview in place.
- Якщо потокове передавання завершується помилкою посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload-ів.
channels.slack.streamMode(replace | status_final | append) є застарілим runtime-аліасом дляchannels.slack.streaming.mode.- boolean
channels.slack.streamingє застарілим runtime-аліасом дляchannels.slack.streaming.modeіchannels.slack.streaming.nativeTransport. - застарілий
channels.slack.nativeStreamingє runtime-аліасом дляchannels.slack.streaming.nativeTransport. - Запустіть
openclaw doctor --fix, щоб переписати збережену конфігурацію потокового передавання Slack до канонічних ключів.
Fallback реакції набору тексту
typingReaction додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в потоках, які використовують стандартний індикатор статусу “is typing…”.
Порядок визначення:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack очікує shortcodes (наприклад
"hourglass_flowing_sand"). - Реакція виконується best-effort, а очищення автоматично виконується після завершення шляху відповіді або помилки.
Медіа, поділ на фрагменти та доставка
Вхідні вкладення
Вхідні вкладення
Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й дозволяють обмеження розміру. Заповнювачі файлів містять Slack
fileId, щоб агенти могли отримати оригінальний файл через download-file.Завантаження використовують обмежені idle і total timeouts. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення й повертається до заповнювача файлу.Runtime-обмеження розміру вхідних даних стандартно дорівнює 20MB, якщо його не перевизначено через channels.slack.mediaMaxMb.Вихідний текст і файли
Вихідний текст і файли
- текстові фрагменти використовують
channels.slack.textChunkLimit(стандартно 4000) channels.slack.chunkMode="newline"вмикає поділ із пріоритетом абзаців- надсилання файлів використовує API завантаження Slack і може містити відповіді в потоках (
thread_ts) - обмеження вихідних медіа відповідає
channels.slack.mediaMaxMb, коли налаштовано; інакше надсилання каналом використовує стандартні значення MIME-kind із media pipeline
Цілі доставки
Цілі доставки
Бажані явні цілі:
user:<id>для DMchannel:<id>для каналів
Команди та поведінка slash
Slash-команди з’являються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйтеchannels.slack.slashCommand, щоб змінити стандартні параметри команд:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true або commands.native: true у глобальних конфігураціях.
- Автоматичний режим нативних команд вимкнено для Slack, тому
commands.native: "auto"не вмикає нативні команди Slack.
- до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники параметрів інтерактивності
- перевищено ліміти Slack: закодовані значення варіантів повертаються до кнопок
agent:<agentId>:slack:slash:<userId> і все одно маршрутизують виконання команд до цільової сесії розмови за допомогою CommandTargetSessionKey.
Інтерактивні відповіді
Slack може рендерити створені агентом інтерактивні елементи керування відповідями, але ця функція за замовчуванням вимкнена. Для нового виводу агента, CLI і Plugin віддавайте перевагу спільним кнопкамpresentation або блокам вибору. Вони використовують той самий шлях
взаємодії Slack і водночас деградують в інших каналах.
Увімкніть глобально:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
presentation і buildSlackPresentationBlocks(...) для нових
елементів керування, що рендеряться у Slack.
Примітки:
- Це застарілий UI, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок.
- Значення інтерактивних callback-ів є непрозорими токенами, згенерованими OpenClaw, а не сирими значеннями, створеними агентом.
- Якщо згенеровані інтерактивні блоки перевищили б обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload-а блоків.
Подання модальних вікон, якими володіє Plugin
Slack Plugin-и, які реєструють інтерактивний handler, також можуть отримувати події життєвого циклу модального вікнаview_submission і view_closed до того, як OpenClaw стисне
payload для видимої агенту системної події. Використовуйте один із цих шаблонів
маршрутизації під час відкриття модального вікна Slack:
- Установіть
callback_idуopenclaw:<namespace>:<payload>. - Або збережіть наявний
callback_idі помістітьpluginInteractiveData: "<namespace>:<payload>"уprivate_metadataмодального вікна.
ctx.interaction.kind як view_submission або
view_closed, нормалізовані inputs і повний сирий об’єкт stateValues від
Slack. Маршрутизації лише за callback-id достатньо, щоб викликати handler Plugin; додайте
наявні поля маршрутизації користувача/сесії з private_metadata модального вікна, коли
модальне вікно також має створити видиму агенту системну подію. Агент отримує
компактну, відредаговану системну подію Slack interaction: .... Якщо handler повертає
systemEvent.summary, systemEvent.reference або systemEvent.data, ці
поля включаються до цієї компактної події, щоб агент міг посилатися на
сховище, яким володіє Plugin, не бачачи повного payload-а форми.
Нативні схвалення у Slack
Slack може діяти як нативний клієнт схвалень з інтерактивними кнопками та взаємодіями, замість fallback до вебінтерфейсу або термінала.- Схвалення exec і Plugin можуть рендеритися як нативні підказки Slack Block Kit.
channels.slack.execApprovals.*залишається конфігурацією ввімкнення нативного клієнта схвалень exec і маршрутизації DM/каналу.- DM для схвалень exec використовують
channels.slack.execApprovals.approversабоcommands.ownerAllowFrom. - Схвалення Plugin використовують нативні кнопки Slack, коли Slack увімкнено як нативний клієнт схвалень для вихідної сесії або коли
approvals.pluginмаршрутизує до вихідної Slack-сесії чи цілі Slack. - DM для схвалень Plugin використовують approver-ів Slack Plugin із
channels.slack.allowFrom,allowFromіменованого облікового запису або маршруту облікового запису за замовчуванням. - Авторизація approver-а все ще застосовується: approver-и лише для exec не можуть схвалювати запити Plugin, якщо вони також не є approver-ами Plugin.
interactivity увімкнено в налаштуваннях вашого Slack app, підказки схвалення рендеряться як кнопки Block Kit безпосередньо в розмові.
Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw
має включати ручну команду /approve лише тоді, коли результат інструмента каже, що схвалення в чаті
недоступні або ручне схвалення є єдиним шляхом.
Шлях конфігурації:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(необов’язково; за можливості fallback доcommands.ownerAllowFrom)channels.slack.execApprovals.target(dm|channel|both, за замовчуванням:dm)agentFilter,sessionFilter
enabled не встановлено або дорівнює "auto" і
визначається принаймні один approver exec. Slack також може обробляти нативні схвалення Plugin через цей шлях
нативного клієнта, коли визначаються approver-и Slack Plugin і запит відповідає фільтрам нативного клієнта. Установіть
enabled: false, щоб явно вимкнути Slack як нативний клієнт схвалень. Установіть enabled: true, щоб
примусово ввімкнути нативні схвалення, коли approver-и визначаються. Вимкнення схвалень Slack exec не вимикає
нативну доставку схвалень Slack Plugin, увімкнену через approvals.plugin; доставка схвалень Plugin
натомість використовує approver-ів Slack Plugin.
Поведінка за замовчуванням без явної конфігурації схвалень Slack exec:
approvals.exec є окремим. Використовуйте його лише тоді, коли підказки схвалення exec також мають
маршрутизуватися до інших чатів або явних позаканальних цілей. Спільне переспрямування approvals.plugin також
є окремим; нативна доставка Slack пригнічує цей fallback лише тоді, коли Slack може обробити запит схвалення Plugin
нативно.
Same-chat /approve також працює в каналах Slack і DM, які вже підтримують команди. Див. Схвалення exec для повної моделі переспрямування схвалень.
Події та операційна поведінка
- Редагування/видалення повідомлень відображаються в системні події.
- Трансляції тредів (відповіді в треді “Also send to channel”) обробляються як звичайні повідомлення користувача.
- Події додавання/видалення реакцій відображаються в системні події.
- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення закріплення відображаються в системні події.
channel_id_changedможе мігрувати ключі конфігурації каналу, колиconfigWritesувімкнено.- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути вставлені в контекст маршрутизації.
- Початкове повідомлення треду та первинне засівання контексту історії треду фільтруються налаштованими allowlist-ами відправників, коли це застосовно.
- Дії блоків, shortcuts і модальні взаємодії видають структуровані системні події
Slack interaction: ...з багатими полями payload-а:- дії блоків: вибрані значення, мітки, значення picker-ів і метадані
workflow_* - глобальні shortcuts: метадані callback-а й актора, маршрутизовані до прямої сесії актора
- shortcuts повідомлень: callback, актор, канал, тред і контекст вибраного повідомлення
- події модального вікна
view_submissionіview_closedз маршрутизованими метаданими каналу та введеннями форми
- дії блоків: вибрані значення, мітки, значення picker-ів і метадані
Довідник конфігурації
Основний довідник: Довідник конфігурації - Slack.Високосигнальні поля Slack
Високосигнальні поля Slack
- mode/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - доступ до DM:
dm.enabled,dmPolicy,allowFrom(застаріле:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - перемикач сумісності:
dangerouslyAllowNameMatching(break-glass; залишайте вимкненим, якщо не потрібно) - доступ до каналів:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - треди/історія:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - доставка:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - unfurls:
unfurlLinks(за замовчуванням:false),unfurlMediaдля керування попереднім переглядом посилань/медіа вchat.postMessage; установітьunfurlLinks: true, щоб знову ввімкнути попередній перегляд посилань - ops/features:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
Усунення несправностей
Немає відповідей у каналах
Немає відповідей у каналах
Перевірте по порядку:Корисні команди:
groupPolicy- allowlist каналів (
channels.slack.channels) — ключі мають бути ID каналів (C12345678), а не імена (#channel-name). Ключі на основі імен мовчки не спрацьовують заgroupPolicy: "allowlist", бо маршрутизація каналів за замовчуванням насамперед використовує ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → Copy link — значенняC...наприкінці URL є ID каналу. requireMention- allowlist
usersдля окремого каналу messages.groupChat.visibleReplies: звичайні запити групи/каналу за замовчуванням мають"automatic". Якщо ви ввімкнули"message_tool"і логи показують текст assistant без викликуmessage(action=send), модель пропустила видимий шлях message-tool. У цьому режимі фінальний текст залишається приватним; перегляньте докладний log Gateway щодо метаданих пригніченого payload-а або встановіть"automatic", якщо хочете, щоб кожна звичайна фінальна відповідь assistant публікувалася через застарілий шлях.messages.groupChat.unmentionedInbound: якщо це"room_event", незгадана дозволена розмова в каналі є фоновим контекстом і залишається беззвучною, якщо агент не викличе інструментmessage. Див. Фонові події кімнати.
Повідомлення DM ігноруються
Повідомлення DM ігноруються
Перевірте:
channels.slack.dm.enabledchannels.slack.dmPolicy(або застарілеchannels.slack.dm.policy)- схвалення pairing / записи allowlist (
dmPolicy: "open"все одно потребуєchannels.slack.allowFrom: ["*"]) - групові DM використовують обробку MPIM; увімкніть
channels.slack.dm.groupEnabledі, якщо налаштовано, включіть MPIM уchannels.slack.dm.groupChannels - події Slack Assistant DM: докладні логи зі згадкою
drop message_changedзазвичай означають, що Slack надіслав відредаговану подію Assistant-треду без відновлюваного людського відправника в метаданих повідомлення
Socket mode не підключається
Socket mode не підключається
Перевірте bot + app token-и та ввімкнення Socket Mode у налаштуваннях Slack app.
App-Level Token потребує
connections:write, а Bot User OAuth Token
bot token має належати тому самому Slack app/workspace, що й app token.Якщо openclaw channels status --probe --json показує botTokenStatus або
appTokenStatus: "configured_unavailable", обліковий запис Slack
налаштовано, але поточний runtime не зміг визначити значення, підкріплене SecretRef.Журнали на кшталт slack socket mode failed to start; retry ... є відновлюваними
помилками запуску. Відсутні scopes, відкликані токени та недійсна автентифікація натомість завершуються швидкою помилкою.
Журнал slack token mismatch ... означає, що токен бота й токен застосунку,
схоже, належать різним застосункам Slack; виправте облікові дані застосунку Slack.HTTP mode not receiving events
HTTP mode not receiving events
Перевірте:
- signing secret
- шлях webhook
- Slack Request URLs (Events + Interactivity + Slash Commands)
- унікальний
webhookPathдля кожного HTTP-акаунта - публічна URL-адреса завершує TLS і пересилає запити до шляху Gateway
- шлях
request_urlзастосунку Slack точно збігається зchannels.slack.webhookPath(типово/slack/events)
signingSecretStatus: "configured_unavailable" з’являється у знімках
акаунта, HTTP-акаунт налаштовано, але поточне середовище виконання не змогло
розв’язати signing secret на основі SecretRef.Повторюваний журнал slack: webhook path ... already registered означає, що два HTTP
акаунти використовують той самий webhookPath; надайте кожному акаунту окремий шлях.Native/slash commands not firing
Native/slash commands not firing
Перевірте, що саме ви планували використовувати:
- режим нативних команд (
channels.slack.commands.native: true) з відповідними slash commands, зареєстрованими в Slack - або режим однієї slash command (
channels.slack.slashCommand.enabled: true)
commands.native: "auto" не вмикає нативні команди Slack; використовуйте true і створіть відповідні команди в застосунку Slack. У режимі HTTP кожна slash command Slack має містити URL-адресу Gateway. У Socket Mode корисні навантаження команд надходять через websocket, а Slack ігнорує slash_commands[].url.Також перевірте commands.useAccessGroups, авторизацію DM, allowlists каналів
і allowlists users для окремих каналів. Slack повертає ефемерні помилки для
заблокованих відправників slash-command, зокрема:This channel is not allowed.You are not authorized to use this command here.
Довідник із vision для вкладень
Slack може додавати завантажені медіа до ходу агента, коли завантаження файлів Slack успішне й обмеження розміру це дозволяють. Файли зображень можна передавати через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою vision; інші файли зберігаються як завантажуваний файловий контекст, а не обробляються як вхідні зображення.Підтримувані типи медіа
| Тип медіа | Джерело | Поточна поведінка | Примітки |
|---|---|---|---|
| Зображення JPEG / PNG / GIF / WebP | URL файлу Slack | Завантажуються й додаються до ходу для обробки з підтримкою vision | Обмеження на файл: channels.slack.mediaMaxMb (типово 20 MB) |
| PDF-файли | URL файлу Slack | Завантажуються й надаються як файловий контекст для інструментів на кшталт download-file або pdf | Вхідні дані Slack не перетворюють PDF автоматично на вхід image-vision |
| Інші файли | URL файлу Slack | Завантажуються, коли це можливо, і надаються як файловий контекст | Бінарні файли не обробляються як вхідні зображення |
| Відповіді в тредах | Файли початкового повідомлення треду | Файли кореневого повідомлення можуть бути гідратовані як контекст, коли відповідь не має власних медіа | Для початкових повідомлень лише з файлами використовується placeholder вкладення |
| Повідомлення з кількома зображеннями | Кілька файлів Slack | Кожен файл оцінюється незалежно | Обробка Slack обмежена вісьмома файлами на повідомлення |
Вхідний конвеєр
Коли надходить повідомлення Slack із файловими вкладеннями:- OpenClaw завантажує файл із приватної URL-адреси Slack за допомогою токена бота.
- У разі успіху файл записується до сховища медіа.
- Шляхи завантажених медіа й типи вмісту додаються до вхідного контексту.
- Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту.
- Файли, що не є зображеннями, залишаються доступними як файлові метадані або медіапосилання для інструментів, які можуть їх обробляти.
Успадкування вкладень із кореня треду
Коли повідомлення надходить у треді (має батьківськийthread_ts):
- Якщо сама відповідь не має власних медіа, а включене кореневе повідомлення має файли, Slack може гідратувати кореневі файли як контекст початкового повідомлення треду.
- Прямі вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
- Кореневе повідомлення, яке має лише файли й не має тексту, представляється placeholder вкладення, щоб fallback усе одно міг включити його файли.
Обробка кількох вкладень
Коли одне повідомлення Slack містить кілька файлових вкладень:- Кожне вкладення обробляється незалежно через медіаконвеєр.
- Посилання на завантажені медіа агрегуються в контекст повідомлення.
- Порядок обробки відповідає порядку файлів Slack у корисному навантаженні події.
- Помилка завантаження одного вкладення не блокує інші.
Обмеження розміру, завантаження та моделі
- Обмеження розміру: типово 20 MB на файл. Налаштовується через
channels.slack.mediaMaxMb. - Помилки завантаження: файли, які Slack не може надати, прострочені URL-адреси, недоступні файли, надто великі файли та HTML-відповіді автентифікації/входу Slack пропускаються, а не повідомляються як непідтримувані формати.
- Модель vision: аналіз зображень використовує активну модель відповіді, коли вона підтримує vision, або модель зображень, налаштовану в
agents.defaults.imageModel.
Відомі обмеження
| Сценарій | Поточна поведінка | Обхідний шлях |
|---|---|---|
| Прострочена URL-адреса файлу Slack | Файл пропущено; помилка не показується | Повторно завантажте файл у Slack |
| Модель vision не налаштована | Вкладення зображень зберігаються як медіапосилання, але не аналізуються як зображення | Налаштуйте agents.defaults.imageModel або використайте модель відповіді з підтримкою vision |
| Дуже великі зображення (> 20 MB типово) | Пропускаються відповідно до обмеження розміру | Збільште channels.slack.mediaMaxMb, якщо Slack дозволяє |
| Переслані/поширені вкладення | Текст і розміщені в Slack медіа зображень/файлів обробляються за принципом best-effort | Поділіться ними повторно безпосередньо в треді OpenClaw |
| PDF-вкладення | Зберігаються як файловий/медіаконтекст, не маршрутизуються автоматично через image vision | Використовуйте download-file для файлових метаданих або інструмент pdf для аналізу PDF |
Пов’язана документація
- Конвеєр розуміння медіа
- Інструмент PDF
- Епік: #51349 — увімкнення vision для вкладень Slack
- Регресійні тести: #51353
- Live-перевірка: #51354
Пов’язане
Pairing
Зіставте користувача Slack із gateway.
Groups
Поведінка каналів і групових DM.
Channel routing
Маршрутизуйте вхідні повідомлення до агентів.
Security
Модель загроз і посилення захисту.
Configuration
Структура конфігурації та пріоритет.
Slash commands
Каталог команд і поведінка.