Pairing
Личные сообщения Slack по умолчанию используют режим сопряжения.
Slash commands
Нативное поведение команд и каталог команд.
Channel troubleshooting
Межканальная диагностика и инструкции по восстановлению.
Выбор 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) или промежуточный Gateway |
| Горизонтальное масштабирование | Один сеанс Socket Mode на приложение на хост; нескольким Gateway нужны отдельные приложения Slack | Stateless-обработчик POST; несколько реплик Gateway могут использовать одно приложение за балансировщиком нагрузки |
| Несколько аккаунтов на одном 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 за балансировщиком нагрузки, когда исходящий WSS заблокирован, но входящий HTTPS разрешен, или когда Slack Webhook уже завершаются на обратном прокси.Режим ретрансляции
Режим ретрансляции отделяет входящий трафик Slack от Gateway OpenClaw. Доверенный маршрутизатор владеет единственным соединением Slack Socket Mode, выбирает целевой Gateway и пересылает типизированное событие через аутентифицированный websocket. Gateway продолжает использовать свой токен бота для исходящих вызовов Slack Web API.wss://, если только он не указывает на localhost. Рассматривайте bearer-токен и
таблицу маршрутов маршрутизатора как часть границы авторизации Slack: маршрутизированные события попадают в
обычный обработчик сообщений Slack как авторизованные активации. Предоставленный маршрутизатором slack_identity
в websocket-фрейме hello может задать исходящие имя пользователя и значок по умолчанию; явно
переданная вызывающей стороной identity по-прежнему имеет приоритет. Соединение ретрансляции переподключается с теми же
ограниченными интервалами backoff, что и Socket Mode, и очищает предоставленную маршрутизатором identity при каждом
отключении.
Установка
Установите Slack перед настройкой канала:plugins install регистрирует и включает Plugin. Plugin по-прежнему ничего не делает, пока вы не настроите Slack app и параметры канала ниже. См. Plugins для общего поведения Plugin и правил установки.
Быстрая настройка
- Socket Mode (default)
- HTTP Request URLs
Create a new Slack app
Откройте api.slack.com/apps → Create New App → From a manifest → выберите рабочую область → вставьте один из манифестов ниже → Next → Create.После того как Slack создаст приложение:
Recommended соответствует полному набору функций Slack Plugin: App Home, slash-команды, файлы, реакции, закрепления, групповые личные сообщения и чтение emoji/usergroup. Выберите Minimal, когда политика рабочей области ограничивает scopes — он покрывает личные сообщения, историю каналов/групп, упоминания и slash-команды, но исключает файлы, реакции, закрепления, групповые личные сообщения (
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.
Configure OpenClaw
Рекомендуемая настройка SecretRef:Резервный вариант через 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 только при явной настройке. - Backoff перезапуска Socket Mode начинается примерно с 2 секунд и ограничивается примерно 30 секундами. Восстановимые сбои запуска, ожидания запуска и отключения повторяются, пока канал не остановится. Постоянные ошибки учетной записи и учетных данных, такие как недействительная аутентификация, отозванные токены или отсутствующие scope, завершаются быстро вместо бесконечных повторов.
Контрольный список манифеста и scope
Базовый манифест приложения Slack одинаков для Socket Mode и HTTP Request URLs. Отличается только блокsettings (и url slash-команды).
Базовый манифест (Socket Mode по умолчанию):
settings на HTTP-вариант и добавьте url в каждую slash-команду. Требуется публичный URL:
Дополнительные настройки манифеста
Предоставьте другие функции, расширяющие приведенные выше значения по умолчанию. Манифест по умолчанию включает вкладку Slack App Home Home и подписывается наapp_home_opened. Когда участник рабочей области открывает вкладку Home, OpenClaw публикует безопасное представление Home по умолчанию с помощью views.publish; полезная нагрузка беседы или приватная конфигурация не включаются. Вкладка Messages остается включенной для Slack DM. Манифест также включает потоки Slack assistant с features.assistant_view, assistant:write, assistant_thread_started и assistant_thread_context_changed; потоки assistant направляются в собственные сеансы потоков OpenClaw и сохраняют предоставленный Slack контекст потока доступным для агента.
Необязательные собственные слеш-команды
Необязательные собственные слеш-команды
Несколько собственных слеш-команд можно использовать вместо одной настроенной команды с учетом нюансов:
- Используйте
/agentstatusвместо/status, потому что команда/statusзарезервирована. - Одновременно можно сделать доступными не более 25 слеш-команд.
features.slash_commands подмножеством доступных команд:- Socket Mode (по умолчанию)
- URL HTTP-запросов
Необязательные области авторства (операции записи)
Необязательные области авторства (операции записи)
Добавьте область бота
chat:write.customize, если хотите, чтобы исходящие сообщения использовали идентификатор активного агента (настраиваемое имя пользователя и значок) вместо идентификатора приложения Slack по умолчанию.Если вы используете значок emoji, Slack ожидает синтаксис :emoji_name:.Необязательные области пользовательского токена (операции чтения)
Необязательные области пользовательского токена (операции чтения)
Если вы настраиваете
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 Mode.- Для режима HTTP требуются
botToken+signingSecret. - Для режима Relay требуются
botToken, а такжеrelay.url,relay.authTokenиrelay.gatewayId; он не использует токен приложения или секрет подписи. 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 или другой не 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. 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 по умолчанию отключены)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>.Потоки, сессии и теги ответов
- Личные сообщения маршрутизируются как
direct; каналы какchannel; MPIM какgroup. - Привязки маршрутов Slack принимают необработанные ID собеседников, а также формы целей Slack, например
channel:C12345678,user:U12345678и<@U12345678>. - При значении по умолчанию
session.dmScope=mainличные сообщения 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иreplyToMode, отличным отoff. - Значение по умолчанию для
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 принимается как тот же отказ от потока верхнего уровня.
replyToMode="off" отключает исходящие ответы Slack в потоках, включая явные теги [[reply_to_*]]. Это не выравнивает входящие сессии потоков Slack: сообщения, уже опубликованные внутри потока Slack, все равно маршрутизируются в сессию :thread:<threadTs>. Это отличается от Telegram, где явные теги по-прежнему учитываются в режиме "off". Потоки Slack скрывают сообщения из канала, а ответы Telegram остаются видимыми встроенно.Реакции подтверждения
ackReaction отправляет emoji подтверждения, пока OpenClaw обрабатывает входящее сообщение. ackReactionScope определяет, когда этот emoji фактически отправляется.
Emoji (ackReaction)
Порядок разрешения:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback на emoji идентичности агента (
agents.list[].identity.emoji, иначе"eyes"/ 👀)
- Slack ожидает shortcodes (например,
"eyes"). - Используйте
"", чтобы отключить реакцию для аккаунта Slack или глобально.
Область (messages.ackReactionScope)
Провайдер Slack читает область из messages.ackReactionScope (по умолчанию "group-mentions"). На сегодня нет переопределения на уровне аккаунта Slack или канала Slack; значение глобально для gateway.
Значения:
"all": реагировать в личных сообщениях и группах."direct": реагировать только в личных сообщениях."group-all": реагировать на каждое групповое сообщение (без личных сообщений)."group-mentions"(по умолчанию): реагировать в группах, но только когда бот упомянут (или в групповых mentionables, которые включили это). Личные сообщения исключены."off"/"none": никогда не реагировать.
Область по умолчанию (
"group-mentions") не запускает реакции подтверждения в прямых сообщениях. Чтобы видеть настроенный ackReaction (например, "eyes") во входящих личных сообщениях 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 включаются явно для режима прогресса. Задайте channels.slack.streaming.progress.nativeTaskCards как true вместе с channels.slack.streaming.mode="progress", чтобы отправлять нативную для Slack карточку плана/задачи, пока работа выполняется, а затем обновлять ту же карточку задачи при завершении. Без этого флага режим прогресса сохраняет переносимое поведение чернового предварительного просмотра.
- Для появления нативной потоковой передачи текста и статуса потока ассистента Slack должен быть доступен поток ответов. Выбор потока по-прежнему следует
replyToMode. - Корни каналов, групповых чатов и личных сообщений верхнего уровня все равно могут использовать обычный черновой предварительный просмотр, когда нативная потоковая передача недоступна или нет потока ответов.
- Личные сообщения Slack верхнего уровня по умолчанию остаются вне потока, поэтому они не показывают нативный предварительный просмотр потока/статуса Slack в стиле thread; вместо этого OpenClaw публикует и редактирует черновой предварительный просмотр в личном сообщении.
- Медиа и нетекстовые payloads используют fallback к обычной доставке.
- Финальные медиа/ошибки отменяют ожидающие правки предварительного просмотра; подходящие финальные тексты/блоки сбрасываются только когда они могут редактировать предварительный просмотр на месте.
- Если потоковая передача завершается ошибкой в середине ответа, OpenClaw использует fallback к обычной доставке для оставшихся payloads.
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, а очистка автоматически предпринимается после завершения ответа или пути ошибки.
Медиа, разбиение на фрагменты и доставка
Inbound attachments
Inbound attachments
Файловые вложения Slack скачиваются с приватных URL, размещенных Slack (поток запроса с аутентификацией токеном), и записываются в хранилище медиа, когда получение успешно и лимиты размера позволяют. Заполнители файлов включают Slack
fileId, чтобы агенты могли получить исходный файл через download-file.Скачивания используют ограниченные тайм-ауты простоя и общего времени. Если получение файла Slack зависает или завершается ошибкой, OpenClaw продолжает обработку сообщения и использует fallback к заполнителю файла.Runtime-лимит размера входящих данных по умолчанию равен 20MB, если не переопределен через channels.slack.mediaMaxMb.Outbound text and files
Outbound text and files
- текстовые фрагменты используют
channels.slack.textChunkLimit(по умолчанию 4000) channels.slack.chunkMode="newline"включает разбиение сначала по абзацам- отправка файлов использует API загрузки Slack и может включать ответы в потоках (
thread_ts) - лимит исходящих медиа следует
channels.slack.mediaMaxMb, когда он настроен; иначе отправки канала используют значения по умолчанию по MIME-виду из конвейера медиа
Delivery targets
Delivery targets
Предпочтительные явные цели:
user:<id>для личных сообщенийchannel:<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 опций: внешний select с асинхронной фильтрацией опций, когда доступны обработчики options для интерактивности
- превышены лимиты Slack: закодированные значения опций используют fallback к кнопкам
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 в собственные системы кнопок.
- Значения интерактивных обратных вызовов являются непрозрачными токенами, созданными OpenClaw, а не сырыми значениями, заданными агентом.
- Если созданные интерактивные блоки превысят ограничения Slack Block Kit, OpenClaw вернется к исходному текстовому ответу вместо отправки недопустимой полезной нагрузки блоков.
Отправки модальных окон, принадлежащие Plugin
Plugin Slack, которые регистрируют интерактивный обработчик, также могут получать события жизненного цикла модальных оконview_submission и view_closed до того, как OpenClaw сожмет
полезную нагрузку для видимого агенту системного события. При открытии модального окна 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 достаточно, чтобы вызвать обработчик Plugin; включайте
существующие поля маршрутизации пользователя/сеанса из private_metadata модального окна, когда
модальное окно также должно создать видимое агенту системное событие. Агент получает
компактное, отредактированное системное событие Slack interaction: .... Если обработчик возвращает
systemEvent.summary, systemEvent.reference или systemEvent.data, эти
поля включаются в это компактное событие, чтобы агент мог ссылаться на
хранилище, принадлежащее Plugin, не видя полной полезной нагрузки формы.
Нативные подтверждения в Slack
Slack может работать как нативный клиент подтверждений с интерактивными кнопками и взаимодействиями, вместо отката к Web UI или терминалу.- Подтверждения 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 используют утверждающих Plugin Slack из
channels.slack.allowFrom,allowFromименованной учетной записи или маршрута учетной записи по умолчанию. - Авторизация утверждающих по-прежнему принудительно проверяется: утверждающие только exec не могут подтверждать запросы Plugin, если они также не являются утверждающими Plugin.
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" и разрешается хотя бы один
утверждающий exec. Slack также может обрабатывать нативные подтверждения Plugin через этот путь нативного клиента,
когда разрешаются утверждающие Plugin Slack и запрос соответствует фильтрам нативного клиента. Задайте
enabled: false, чтобы явно отключить Slack как нативный клиент подтверждений. Задайте enabled: true, чтобы
принудительно включить нативные подтверждения, когда разрешаются утверждающие. Отключение подтверждений exec Slack не отключает
доставку нативных подтверждений Plugin Slack, включенную через approvals.plugin; доставка подтверждений Plugin
вместо этого использует утверждающих Plugin Slack.
Поведение по умолчанию без явной конфигурации подтверждений exec Slack:
approvals.exec отделена. Используйте ее только когда подсказки подтверждения exec также должны
направляться в другие чаты или явные внеполосные цели. Общая пересылка approvals.plugin также
отделена; нативная доставка Slack подавляет этот откат только когда Slack может обработать запрос
подтверждения Plugin нативно.
/approve в том же чате также работает в каналах Slack и DM, которые уже поддерживают команды. См. Подтверждения Exec для полной модели пересылки подтверждений.
События и операционное поведение
- Редактирования/удаления сообщений преобразуются в системные события.
- Трансляции тредов (ответы в треде с “Also send to channel”) обрабатываются как обычные сообщения пользователя.
- События добавления/удаления реакций преобразуются в системные события.
- События входа/выхода участника, создания/переименования канала и добавления/удаления закрепления преобразуются в системные события.
channel_id_changedможет мигрировать ключи конфигурации канала, когда включеноconfigWrites.- Метаданные темы/назначения канала считаются недоверенным контекстом и могут быть внедрены в контекст маршрутизации.
- Начальное сообщение треда и первичное заполнение контекста истории треда фильтруются настроенными allowlist отправителей, когда применимо.
- Действия блоков, ярлыки и модальные взаимодействия создают структурированные системные события
Slack interaction: ...с богатыми полями полезной нагрузки:- действия блоков: выбранные значения, метки, значения picker и метаданные
workflow_* - глобальные ярлыки: метаданные callback и участника, направленные в прямой сеанс участника
- ярлыки сообщений: контекст callback, участника, канала, треда и выбранного сообщения
- события модальных окон
view_submissionиview_closedс маршрутизированными метаданными канала и вводом формы
- действия блоков: выбранные значения, метки, значения picker и метаданные
Справочник конфигурации
Основной справочник: Справочник конфигурации - Slack.Высокосигнальные поля Slack
Высокосигнальные поля Slack
- режим/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - доступ к DM:
dm.enabled,dmPolicy,allowFrom(legacy:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - переключатель совместимости:
dangerouslyAllowNameMatching(аварийный режим; держите выключенным, если не требуется) - доступ к каналу:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - треды/история:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - доставка:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - развертки:
unfurlLinks(по умолчанию:false),unfurlMediaдля управления предпросмотром ссылок/медиа вchat.postMessage; задайтеunfurlLinks: true, чтобы снова включить предпросмотр ссылок - операции/функции:
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"и журналы показывают текст ассистента без вызоваmessage(action=send), модель пропустила путь видимого message-tool. В этом режиме финальный текст остается приватным; проверьте подробный журнал Gateway на метаданные подавленной полезной нагрузки или задайте"automatic", если хотите, чтобы каждый обычный финальный ответ ассистента публиковался через legacy-путь.messages.groupChat.unmentionedInbound: если значение равно"room_event", разрешенная беседа канала без упоминания является фоновым контекстом и остается без ответа, если агент не вызовет инструментmessage. См. Фоновые события комнаты.
Сообщения DM игнорируются
Сообщения DM игнорируются
Проверьте:
channels.slack.dm.enabledchannels.slack.dmPolicy(или legacychannels.slack.dm.policy)- подтверждения привязки / записи allowlist (
dmPolicy: "open"все равно требуетchannels.slack.allowFrom: ["*"]) - групповые DM используют обработку MPIM; включите
channels.slack.dm.groupEnabledи, если настроено, включите MPIM вchannels.slack.dm.groupChannels - события DM Slack Assistant: подробные журналы с упоминанием
drop message_changedобычно означают, что Slack отправил отредактированное событие треда Assistant без восстанавливаемого человека-отправителя в метаданных сообщения
Socket mode не подключается
Socket mode не подключается
Проверьте токены бота и приложения, а также включение Socket Mode в настройках приложения Slack.
App-Level Token требует
connections:write, а Bot User OAuth Token
бота должен принадлежать тому же приложению/рабочему пространству Slack, что и токен приложения.Если openclaw channels status --probe --json показывает botTokenStatus или
appTokenStatus: "configured_unavailable", учетная запись Slack
настроена, но текущая среда выполнения не смогла разрешить значение на основе 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-учетная запись настроена, но текущая среда выполнения не смогла
разрешить подписывающий секрет на базе SecretRef.Повторяющийся журнал slack: webhook path ... already registered означает, что две HTTP-
учетные записи используют один и тот же webhookPath; задайте каждой учетной записи отдельный путь.Native/slash commands not firing
Native/slash commands not firing
Проверьте, что именно вы намеревались использовать:
- режим нативных команд (
channels.slack.commands.native: true) с соответствующими slash-командами, зарегистрированными в Slack - или режим одной slash-команды (
channels.slack.slashCommand.enabled: true)
commands.native: "auto" не включает нативные команды Slack; используйте true и создайте соответствующие команды в приложении Slack. В режиме HTTP каждая slash-команда Slack должна включать URL Gateway. В Socket Mode полезные нагрузки команд поступают через websocket, а Slack игнорирует slash_commands[].url.Также проверьте commands.useAccessGroups, авторизацию DM, списки разрешенных каналов
и списки разрешенных users для каждого канала. Slack возвращает эфемерные ошибки для
заблокированных отправителей slash-команд, включая: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 вложения, чтобы резервный путь все равно мог включить его файлы.
Обработка нескольких вложений
Когда одно сообщение Slack содержит несколько файловых вложений:- Каждое вложение обрабатывается независимо через медийный конвейер.
- Ссылки на загруженные медиа агрегируются в контекст сообщения.
- Порядок обработки следует порядку файлов Slack в полезной нагрузке события.
- Сбой загрузки одного вложения не блокирует остальные.
Ограничения размера, загрузки и модели
- Ограничение размера: по умолчанию 20 MB на файл. Настраивается через
channels.slack.mediaMaxMb. - Сбои загрузки: файлы, которые Slack не может отдать, истекшие URL, недоступные файлы, слишком большие файлы и HTML-ответы Slack auth/login пропускаются вместо сообщения о неподдерживаемых форматах.
- Модель vision: анализ изображений использует активную модель ответа, когда она поддерживает vision, или модель изображений, настроенную в
agents.defaults.imageModel.
Известные ограничения
| Сценарий | Текущее поведение | Обходной путь |
|---|---|---|
| Истекший URL файла Slack | Файл пропускается; ошибка не отображается | Загрузите файл в Slack повторно |
| Модель vision не настроена | Вложения изображений сохраняются как ссылки на медиа, но не анализируются как изображения | Настройте agents.defaults.imageModel или используйте модель ответа с поддержкой vision |
| Очень большие изображения (> 20 MB по умолчанию) | Пропускаются согласно ограничению размера | Увеличьте channels.slack.mediaMaxMb, если Slack позволяет |
| Пересланные/общие вложения | Текст и размещенные в Slack медиа изображений/файлов обрабатываются по мере возможности | Повторно поделитесь ими напрямую в треде 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
Каталог команд и поведение.