Slack
Статус: готовий до використання у production для особистих повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; режим HTTP Events API також підтримується.Сполучення
Особисті повідомлення Slack типово використовують режим сполучення.
Slash-команди
Вбудована поведінка команд і каталог команд.
Усунення проблем із каналами
Міжканальна діагностика та сценарії відновлення.
Швидке налаштування
- Socket Mode (типово)
- Режим HTTP Events API
Створіть застосунок Slack і токени
У налаштуваннях застосунку Slack:
- увімкніть Socket Mode
- створіть App Token (
xapp-...) зconnections:write - установіть застосунок і скопіюйте Bot Token (
xoxb-...)
Підпишіть події застосунку
Підпишіть події бота для:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Контрольний список маніфесту та scope
Приклад маніфесту застосунку Slack
Приклад маніфесту застосунку Slack
Необов'язкові scope токена користувача (операції читання)
Необов'язкові scope токена користувача (операції читання)
Якщо ви налаштовуєте
channels.slack.userToken, типовими scope для читання є:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(якщо ви залежите від читання пошуку Slack)
Модель токенів
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).- Необов’язково: додайте
chat:write.customize, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власніusernameта icon). Дляicon_emojiвикористовується синтаксис:emoji_name:.
- Перевірка облікового запису Slack відстежує поля
*Sourceі*Statusдля кожних облікових даних (botToken,appToken,signingSecret,userToken). - Статус може бути
available,configured_unavailableабоmissing. configured_unavailableозначає, що обліковий запис налаштовано через SecretRef або інше не-inline джерело секретів, але поточний шлях команди/виконання не зміг визначити фактичне значення.- У 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>.Треди, сесії та теги відповідей
- Особисті повідомлення маршрутизуються як
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.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 відповіді лишаються видимими в основному потоці чату.
Реакції-підтвердження
ackReaction надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- резервне значення emoji ідентичності агента (
agents.list[].identity.emoji, інакше ”👀”)
- Slack очікує короткі коди (наприклад,
"eyes"). - Використовуйте
"", щоб вимкнути реакцію для облікового запису Slack або глобально.
Потокова передача тексту
channels.slack.streaming контролює поведінку попереднього перегляду в реальному часі:
off: вимкнути потоковий попередній перегляд у реальному часі.partial(типово): замінювати текст попереднього перегляду останнім частковим результатом.block: додавати фрагментовані оновлення попереднього перегляду.progress: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
channels.slack.nativeStreaming контролює вбудовану потокову передачу тексту Slack, коли streaming має значення partial (типово: true).
- Щоб з’явилася вбудована потокова передача тексту, має бути доступний тред відповіді. Вибір треду й далі визначається
replyToMode. Без нього використовується звичайний чернетковий попередній перегляд. - Для медіа та нетекстових payload використовується звичайна доставка.
- Якщо потокова передача переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload.
channels.slack.streamMode(replace | status_final | append) автоматично мігрується доchannels.slack.streaming.- булеве значення
channels.slack.streamingавтоматично мігрується доchannels.slack.nativeStreaming.
Резервна реакція друку
typingReaction додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це особливо корисно поза відповідями в тредах, де використовується типовий індикатор стану “друкує…”.
Порядок визначення:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack очікує короткі коди (наприклад,
"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-обмеження з медіаконвеєра
Цілі доставки
Цілі доставки
Рекомендовані явні цілі:
user:<id>для особистих повідомленьchannel:<id>для каналів
Команди та поведінка slash-команд
- Вбудований автоматичний режим команд для Slack вимкнено (
commands.native: "auto"не вмикає вбудовані команди Slack). - Увімкніть вбудовані обробники команд Slack через
channels.slack.commands.native: true(або глобальноcommands.native: true). - Коли вбудовані команди ввімкнено, зареєструйте відповідні slash-команди в Slack (імена
/<command>), з одним винятком:- зареєструйте
/agentstatusдля команди стану (Slack резервує/status)
- зареєструйте
- Якщо вбудовані команди не ввімкнено, ви можете виконувати одну налаштовану slash-команду через
channels.slack.slashCommand. - Вбудовані меню аргументів тепер адаптують свою стратегію відображення:
- до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- більше 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
- якщо закодовані значення варіантів перевищують ліміти Slack, потік повертається до кнопок
- Для довгих payload варіантів меню аргументів 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 повертається до початкової текстової відповіді замість надсилання невалідного payload blocks.
Підтвердження exec у Slack
Slack може виступати як вбудований клієнт підтвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.- Підтвердження exec використовують
channels.slack.execApprovals.*для вбудованої маршрутизації в особисті повідомлення/канали. - Підтвердження plugin також можуть визначатися через ту саму вбудовану поверхню кнопок Slack, коли запит уже надходить у Slack, а тип ідентифікатора підтвердження —
plugin:. - Авторизація затверджувачів і далі примусово застосовується: лише користувачі, визначені як затверджувачі, можуть схвалювати або відхиляти запити через Slack.
interactivity, запити на підтвердження відображаються як кнопки 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" і визначається принаймні один
затверджувач. Установіть enabled: false, щоб явно вимкнути Slack як вбудований клієнт підтвердження.
Установіть enabled: true, щоб примусово ввімкнути вбудовані підтвердження, коли затверджувачі визначаються.
Типова поведінка без явної конфігурації підтверджень exec для Slack:
approvals.exec є окремим. Використовуйте його лише тоді, коли запити на підтвердження exec також мають
маршрутизуватися до інших чатів або явно позасмугових цілей. Спільне переспрямування approvals.plugin також є
окремим; вбудовані кнопки Slack все одно можуть визначати підтвердження plugin, коли ці запити вже надходять
у Slack.
У Slack-каналах і особистих повідомленнях, які вже підтримують команди, також працює /approve у тому самому чаті. Повну модель переспрямування підтверджень див. у Підтвердження exec.
Події та поведінка під час роботи
- Редагування/видалення повідомлень і thread broadcast відображаються в системні події.
- Події додавання/видалення реакцій відображаються в системні події.
- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень відображаються в системні події.
channel_id_changedможе мігрувати ключі конфігурації каналу, якщо ввімкненоconfigWrites.- Метадані topic/purpose каналу вважаються недовіреним контекстом і можуть бути впроваджені в контекст маршрутизації.
- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються за налаштованими allowlist відправників, якщо це застосовно.
- Дії блоків і взаємодії модальних вікон створюють структуровані системні події
Slack interaction: ...із розширеними полями payload:- дії блоків: вибрані значення, мітки, значення picker і метадані
workflow_* - події модальних вікон
view_submissionіview_closedз маршрутованими метаданими каналу та полями форм
- дії блоків: вибрані значення, мітки, значення 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 не підключається
Перевірте токени бота й застосунку та увімкнення Socket Mode в налаштуваннях застосунку Slack.Якщо
openclaw channels status --probe --json показує botTokenStatus або
appTokenStatus: "configured_unavailable", обліковий запис Slack
налаштовано, але поточне середовище виконання не змогло визначити значення,
що зберігається через SecretRef.HTTP-режим не отримує події
HTTP-режим не отримує події
Перевірте:
- signing secret
- шлях webhook
- Slack Request URL (Events + Interactivity + Slash Commands)
- унікальний
webhookPathдля кожного HTTP-облікового запису
signingSecretStatus: "configured_unavailable" з’являється у знімках
облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло
визначити signing secret, що зберігається через SecretRef.Вбудовані/slash-команди не спрацьовують
Вбудовані/slash-команди не спрацьовують
Перевірте, що саме ви мали на увазі:
- режим вбудованих команд (
channels.slack.commands.native: true) з відповідними зареєстрованими в Slack slash-командами - або режим однієї slash-команди (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups і allowlist каналів/користувачів.