Slack
Статус: готово до продакшну для приватних повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються.Сполучення
Приватні повідомлення Slack типово працюють у режимі сполучення.
Slash-команди
Нативна поведінка команд і каталог команд.
Усунення проблем із каналами
Міжканальна діагностика та сценарії відновлення.
Швидке налаштування
- Socket Mode (типово)
- HTTP Request URLs
Створіть новий застосунок Slack
У налаштуваннях застосунку Slack натисніть кнопку Create New App:
- виберіть from a manifest і виберіть робочий простір для вашого застосунку
- вставте приклад manifest нижче та продовжте створення
- згенеруйте App-Level Token (
xapp-...) зconnections:write - установіть застосунок і скопіюйте показаний Bot Token (
xoxb-...)
Контрольний список manifest і scope
- Socket Mode (типово)
- HTTP Request URLs
Необов’язкові scopes авторства (операції запису)
Необов’язкові scopes авторства (операції запису)
Додайте bot scope
chat:write.customize, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та значок) замість типової ідентичності застосунку Slack.Якщо ви використовуєте значок emoji, Slack очікує синтаксис :emoji_name:.Необов’язкові scopes user token (операції читання)
Необов’язкові scopes user token (операції читання)
Якщо ви налаштовуєте
channels.slack.userToken, типовими scopes для читання є:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(якщо ви залежите від читання через Slack search)
Модель токенів
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).
- Перевірка облікового запису Slack відстежує поля
*Sourceі*Statusдля кожного облікового запису (botToken,appToken,signingSecret,userToken). - Статус може бути
available,configured_unavailableабоmissing. configured_unavailableозначає, що обліковий запис налаштовано через SecretRef або інше не вбудоване джерело секрету, але поточна команда/шлях виконання не зміг визначити фактичне значення.- У режимі HTTP включається
signingSecretStatus; у Socket Mode обов’язковою парою є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.
Керування доступом і маршрутизація
- Політика приватних повідомлень
- Політика каналів
- Згадки та користувачі каналів
channels.slack.dmPolicy керує доступом до приватних повідомлень (застаріле: channels.slack.dm.policy):pairing(типово)allowlistopen(потрібно, щобchannels.slack.allowFromмістив"*"; застаріле:channels.slack.dm.allowFrom)disabled
dm.enabled(типово true)channels.slack.allowFrom(рекомендовано)dm.allowFrom(застаріле)dm.groupEnabled(групові приватні повідомлення типово 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>.Треди, сесії та теги reply
- Приватні повідомлення маршрутизуються як
direct; канали — якchannel; MPIM — якgroup. - Із типовим
session.dmScope=mainприватні повідомлення 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.replyToMode:off|first|all|batched(типовоoff)channels.slack.replyToModeByChatType: для кожногоdirect|group|channel- застаріле резервне значення для прямих чатів:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" вимикає усі треди відповідей у Slack, включно з явними тегами [[reply_to_*]]. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі "off". Різниця відображає моделі тредів платформ: у Slack треди приховують повідомлення з каналу, тоді як у Telegram replies залишаються видимими в основному потоці чату.
Ack-реакції
ackReaction надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- резервне значення emoji з ідентичності агента (
agents.list[].identity.emoji, інакше ”👀”)
- Slack очікує shortcodes (наприклад,
"eyes"). - Використовуйте
"", щоб вимкнути реакцію для облікового запису Slack або глобально.
Потокова передача тексту
channels.slack.streaming керує поведінкою live preview:
off: вимкнути live preview streaming.partial(типово): замінювати текст попереднього перегляду останнім частковим виводом.block: додавати фрагментовані оновлення попереднього перегляду.progress: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
channels.slack.nativeStreaming керує нативною потоковою передачею тексту Slack, коли streaming має значення partial (типово: true).
- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується
replyToMode. Без нього використовується звичайний чернетковий попередній перегляд. - Медіа та нетекстові корисні навантаження повертаються до звичайної доставки.
- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти корисних навантажень.
channels.slack.streamMode(replace | status_final | append) автоматично мігрує доchannels.slack.streaming.- булевий
channels.slack.streamingавтоматично мігрує доchannels.slack.nativeStreaming.
Резервний варіант з typing reaction
typingReaction додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану “is typing…”.
Порядок визначення:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack очікує shortcodes (наприклад,
"hourglass_flowing_sand"). - Реакція надсилається за принципом best-effort, а очищення автоматично намагається виконатися після відповіді або завершення шляху помилки.
Медіа, розбиття на частини та доставка
Вхідні вкладення
Вхідні вкладення
Файлові вкладення Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру.Типове обмеження розміру вхідних даних під час виконання —
20MB, якщо не перевизначено через channels.slack.mediaMaxMb.Вихідний текст і файли
Вихідний текст і файли
- текстові фрагменти використовують
channels.slack.textChunkLimit(типово 4000) channels.slack.chunkMode="newline"вмикає розбиття спочатку за абзацами- надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (
thread_ts) - обмеження вихідних медіа дотримується
channels.slack.mediaMaxMb, якщо налаштовано; інакше надсилання в канали використовують типові значення MIME-kind із конвеєра медіа
Цілі доставки
Цілі доставки
Бажані явні цілі:
user:<id>для приватних повідомленьchannel:<id>для каналів
Команди та поведінка slash
- Нативний автоматичний режим команд для 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. - Нативні меню аргументів тепер адаптують свою стратегію відображення:
- до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
- якщо закодовані значення варіантів перевищують обмеження Slack, потік повертається до кнопок
- Для довгих корисних навантажень варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Інтерактивні відповіді
Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю функцію типово вимкнено. Увімкніть її глобально:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом.
- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного корисного навантаження blocks.
Погодження exec у Slack
Slack може діяти як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.- Погодження exec використовують
channels.slack.execApprovals.*для нативної маршрутизації до приватних повідомлень/каналів. - Погодження plugin також можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack, а тип ID погодження —
plugin:. - Авторизація того, хто погоджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть погоджувати або відхиляти запити через Slack.
interactivity увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в бесіді.
Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw
має включати ручну команду /approve лише тоді, коли результат інструмента вказує, що
погодження в чаті недоступні або ручне погодження є єдиним шляхом.
Шлях конфігурації:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(необов’язково; за можливості повертається доcommands.ownerAllowFrom)channels.slack.execApprovals.target(dm|channel|both, типово:dm)agentFilter,sessionFilter
enabled не задано або має значення "auto" і визначається принаймні один
approver. Установіть enabled: false, щоб явно вимкнути Slack як нативний клієнт погодження.
Установіть enabled: true, щоб примусово ввімкнути нативні погодження, коли approvers визначаються.
Типова поведінка без явної конфігурації погодження exec для Slack:
approvals.exec є окремим. Використовуйте його лише тоді, коли запити на погодження exec також мають
маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне переспрямування approvals.plugin також є
окремим; нативні кнопки Slack усе ще можуть визначати погодження plugin, коли ці запити вже надходять
у Slack.
Команда /approve у тому самому чаті також працює в каналах і приватних повідомленнях Slack, які вже підтримують команди. Див. Погодження exec, щоб ознайомитися з повною моделлю переспрямування погоджень.
Події та операційна поведінка
- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями.
- Події додавання/видалення реакцій зіставляються із системними подіями.
- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями.
channel_id_changedможе мігрувати ключі конфігурації каналу, коли ввімкненоconfigWrites.- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути ін’єктовані в контекст маршрутизації.
- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, де це застосовно.
- Дії block і взаємодії modal створюють структуровані системні події
Slack interaction: ...із насиченими полями корисного навантаження:- дії block: вибрані значення, мітки, значення picker і метадані
workflow_* - події modal
view_submissionіview_closedз маршрутизованими метаданими каналу та введеними значеннями форми
- дії block: вибрані значення, мітки, значення picker і метадані
Вказівники на довідкову конфігурацію
Основне посилання:-
Довідник конфігурації - Slack
Високосигнальні поля Slack:
- mode/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - доступ до приватних повідомлень:
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 - операції/можливості:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- mode/auth:
Усунення проблем
Немає відповідей у каналах
Немає відповідей у каналах
Перевірте в такому порядку:
groupPolicy- allowlist каналів (
channels.slack.channels) requireMention- allowlist
usersдля конкретного каналу
Повідомлення в приватних повідомленнях ігноруються
Повідомлення в приватних повідомленнях ігноруються
Перевірте:
channels.slack.dm.enabledchannels.slack.dmPolicy(або застарілеchannels.slack.dm.policy)- дозволи сполучення / записи allowlist
Режим socket не підключається
Режим socket не підключається
Перевірте bot token + app token і ввімкнення Socket Mode в налаштуваннях застосунку Slack.Якщо
openclaw channels status --probe --json показує botTokenStatus або
appTokenStatus: "configured_unavailable", обліковий запис Slack
налаштовано, але поточне середовище виконання не змогло визначити значення,
що підтримується SecretRef.Режим HTTP не отримує події
Режим HTTP не отримує події
Перевірте:
- signing secret
- шлях webhook
- Slack Request URLs (Events + Interactivity + Slash Commands)
- унікальний
webhookPathдля кожного HTTP-облікового запису
signingSecretStatus: "configured_unavailable" з’являється у знімках
облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло
визначити signing secret, що підтримується SecretRef.Нативні/slash-команди не спрацьовують
Нативні/slash-команди не спрацьовують
Перевірте, чи ви справді мали на увазі:
- режим нативних команд (
channels.slack.commands.native: true) з відповідними slash-командами, зареєстрованими у Slack - або режим однієї slash-команди (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups і allowlist каналів/користувачів.