Slack
Статус: готово к работе в продакшене для личных сообщений и каналов через интеграции приложения Slack. Режим по умолчанию — Socket Mode; также поддерживается режим HTTP Events API.
Связывание
Личные сообщения Slack по умолчанию используют режим связывания.
Слэш-команды
Поведение нативных команд и каталог команд.
Диагностика каналов
Межканальная диагностика и сценарии восстановления.
Быстрая настройка
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}Модель токенов
- Для Socket Mode требуются
botToken+appToken. - Для HTTP режима требуются
botToken+signingSecret. - Токены из конфигурации переопределяют значения из переменных окружения.
- Переменные окружения
SLACK_BOT_TOKEN/SLACK_APP_TOKENиспользуются только для аккаунта по умолчанию. userToken(xoxp-...) задаётся только в конфигурации (без переменной окружения) и по умолчанию работает в режиме только для чтения (userTokenReadOnly: true).- Опционально: добавьте
chat:write.customize, если хотите, чтобы исходящие сообщения использовали идентификатор активного агента (пользовательскиеusernameи иконка). Дляicon_emojiиспользуется синтаксис:emoji_name:.
💡 Для действий/чтения директории может быть предпочтительным использование пользовательского токена, если он настроен. Для записи предпочтительным остаётся токен бота; запись с пользовательским токеном разрешена только при
userTokenReadOnly: falseи недоступности токена бота.
Контроль доступа и маршрутизация
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(опциональный разрешительный список MPIM)
Приоритет для нескольких аккаунтов:
channels.slack.accounts.default.allowFromприменяется только к аккаунтуdefault.- Именованные аккаунты наследуют
channels.slack.allowFrom, если их собственныйallowFromне задан. - Именованные аккаунты не наследуют
channels.slack.accounts.default.allowFrom.
Связывание в личных сообщениях использует команду openclaw pairing approve slack <code>.
Команды и поведение слэш-команд
- Автоматический режим нативных команд отключён для Slack (
commands.native: "auto"не включает нативные команды Slack). - Включите обработчики нативных команд Slack с помощью
channels.slack.commands.native: true(или глобальноcommands.native: true). - Когда нативные команды включены, зарегистрируйте соответствующие слэш-команды в Slack (имена
/<command>), за одним исключением:- зарегистрируйте
/agentstatusдля команды статуса (Slack резервирует/status)
- зарегистрируйте
- Если нативные команды не включены, вы можете выполнить одну настроенную слэш-команду через
channels.slack.slashCommand. - Меню аргументов нативных команд теперь адаптируют свою стратегию отображения:
- до 5 вариантов: блоки кнопок
- 6-100 вариантов: статическое выпадающее меню
- более 100 вариантов: внешнее выпадающее меню с асинхронной фильтрацией вариантов, когда доступны обработчики опций интерактивности
- если закодированные значения вариантов превышают лимиты Slack, процесс возвращается к кнопкам
- Для длинных полезных нагрузок опций меню аргументов слэш-команд используют диалог подтверждения перед отправкой выбранного значения.
Настройки слэш-команды по умолчанию:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
Сессии слэш-команд используют изолированные ключи:
agent:<agentId>:slack:slash:<userId>
и всё ещё направляют выполнение команды в сессию целевого разговора (CommandTargetSessionKey).
Ветки обсуждений, сессии и теги ответов
- Личные сообщения маршрутизируются как
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(по умолчанию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 остаются видимыми в основном потоке чата.
Медиа, разбиение на части и доставка
Действия и шлюзы
Действия Slack контролируются channels.slack.actions.*. Доступные группы действий в текущем инструментарии Slack:
| Группа | По умолчанию |
|---|---|
| messages | включено |
| reactions | включено |
| pins | включено |
| memberInfo | включено |
| emojiList | включено |
События и операционное поведение
- Редактирование/удаление сообщений и широковещательные рассылки в ветках преобразуются в системные события.
- События добавления/удаления реакции преобразуются в системные события.
- События присоединения/выхода участника, создания/переименования канала и добавления/удаления закрепления преобразуются в системные события.
- Обновления статуса ветки ассистента (для индикаторов "печатает..." в ветках) используют
assistant.threads.setStatusи требуют области видимости ботаassistant:write. channel_id_changedможет переносить ключи конфигурации канала при включённомconfigWrites.- Метаданные темы/цели канала рассматриваются как ненадёжный контекст и могут быть внедрены в контекст маршрутизации.
- Действия с блоками и модальные взаимодействия генерируют структурированные системные события
Slack interaction: ...с богатыми полями полезной нагрузки:- действия с блоками: выбранные значения, метки, значения средства выбора и метаданные
workflow_* - события модального окна
view_submissionиview_closedс метаданными маршрутизированного канала и вводами формы
- действия с блоками: выбранные значения, метки, значения средства выбора и метаданные
Реакции подтверждения
ackReaction отправляет эмодзи подтверждения, пока OpenClaw обрабатывает входящее сообщение. Порядок разрешения:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- резервный вариант эмодзи идентификатора агента (
agents.list[].identity.emoji, иначе ”👀”)
Примечания:
- Slack ожидает короткие коды (например,
"eyes"). - Используйте
"", чтобы отключить реакцию для аккаунта Slack или глобально.
Резервный вариант реакции "печатает"
typingReaction добавляет временную реакцию к входящему сообщению Slack, пока OpenClaw обрабатывает ответ, а затем удаляет её по завершении выполнения. Это полезный резервный вариант, когда нативная индикация печати ассистента Slack недоступна, особенно в личных сообщениях. Порядок разрешения:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
Примечания:
- Slack ожидает короткие коды (например,
"hourglass_flowing_sand"). - Реакция выполняется по принципу best-effort, и очистка автоматически предпринимается после завершения ответа или пути сбоя.
Манифест и контрольный список областей видимости
Диагностика проблем
Потоковая передача текста
OpenClaw поддерживает нативную потоковую передачу текста Slack через API Agents and AI Apps. channels.slack.streaming управляет поведением живого предпросмотра:
off: отключить потоковую передачу живого предпросмотра.partial(по умолчанию): заменять текст предпросмотра последним частичным выводом.block: добавлять обновления предпросмотра частями.progress: показывать текст статуса выполнения во время генерации, затем отправлять окончательный текст.
channels.slack.nativeStreaming управляет нативным потоковым API Slack (chat.startStream / chat.appendStream / chat.stopStream), когда streaming установлен в partial (по умолчанию: true). Отключите нативную потоковую передачу Slack (сохраните поведение черновика предпросмотра):
channels:
slack:
streaming: partial
nativeStreaming: false
Устаревшие ключи:
channels.slack.streamMode(replace | status_final | append) автоматически мигрирует вchannels.slack.streaming.- булево значение
channels.slack.streamingавтоматически мигрирует вchannels.slack.nativeStreaming.
Требования
- Включите Agents and AI Apps в настройках вашего приложения Slack.
- Убедитесь, что у приложения есть область видимости
assistant:write. - Для этого сообщения должна быть доступна ветка ответов. Выбор ветки всё ещё следует
replyToMode.
Поведение
- Первая часть текста запускает поток (
chat.startStream). - Последующие части текста добавляются в тот же поток (
chat.appendStream). - Конец ответа завершает поток (
chat.stopStream). - Медиа и полезные нагрузки, не являющиеся текстом, возвращаются к обычной доставке.
- Если потоковая передача прерывается в середине ответа, OpenClaw возвращается к обычной доставке для оставшихся полезных нагрузок.
Указатели на справочник конфигурации
Основной справочник:
- Справочник по конфигурации - Slack Важные поля Slack:
- режим/аутентификация:
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
- режим/аутентификация: