Slack
Подключение PRX к Slack с помощью бота с OAuth-токенами, Socket Mode для событий в реальном времени и поддержкой треддированных разговоров.
Предварительные требования
- Рабочая область Slack, где у вас есть разрешение на установку приложений
- Приложение Slack, созданное на api.slack.com/apps
- Токен бота (
xoxb-...) и, опционально, токен уровня приложения (xapp-...) для Socket Mode
Быстрая настройка
1. Создание приложения Slack
- Перейдите на api.slack.com/apps и нажмите «Create New App»
- Выберите «From scratch» и укажите рабочую область
- В разделе «OAuth & Permissions» добавьте области бота:
chat:write,channels:history,groups:history,im:history,mpim:historyfiles:read,files:write,reactions:write,users:read
- Установите приложение в рабочую область и скопируйте Bot User OAuth Token (
xoxb-...)
2. Включение Socket Mode (рекомендуется)
- В разделе «Socket Mode» включите его и сгенерируйте токен уровня приложения (
xapp-...) с областьюconnections:write - В разделе «Event Subscriptions» подпишитесь на:
message.channels,message.groups,message.im,message.mpim
3. Конфигурация
toml
[channels_config.slack]
bot_token = "xoxb-your-bot-token-here"
app_token = "xapp-your-app-token-here"
allowed_users = ["U01ABCDEF"]4. Проверка
bash
prx channel doctor slackСправочник конфигурации
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
bot_token | String | обязательный | OAuth-токен Slack-бота (xoxb-...) |
app_token | String | null | Токен уровня приложения (xapp-...) для Socket Mode. Без него откатывается к опросу |
channel_id | String | null | Ограничить бота одним каналом. Пропустите или задайте "*" для прослушивания всех каналов |
allowed_users | [String] | [] | Slack user ID. Пусто = запрещено всем. "*" = разрешить всем |
interrupt_on_new_message | bool | false | Если true, новое сообщение от того же отправителя отменяет текущий запрос |
thread_replies | bool | true | Если true, ответы остаются в исходном треде. Если false, ответы идут в корень канала |
mention_only | bool | false | Если true, отвечать только на @-упоминания. ЛС обрабатываются всегда |
Возможности
- Socket Mode — доставка событий в реальном времени без публичного URL (требуется
app_token) - Ответы в тредах — автоматически отвечает в исходном треде
- Файловые вложения — загружает и встраивает текстовые файлы; обрабатывает изображения до 5 МБ
- Отображаемые имена — разрешает Slack user ID в отображаемые имена с кэшированием (TTL 6 часов)
- Поддержка нескольких каналов — прослушивание нескольких каналов или ограничение одним
- Индикаторы набора — показывает статус набора при генерации ответов
- Поддержка прерываний — отмена текущих запросов при отправке пользователем нового сообщения
Ограничения
- Сообщения Slack ограничены 40 000 символами (редко является проблемой)
- Загрузка файлов ограничена 256 КБ для текста и 5 МБ для изображений
- Максимум 8 файловых вложений обрабатываются в одном сообщении
- Socket Mode требует области
connections:writeна токене уровня приложения - Без Socket Mode (
app_token) канал откатывается к опросу с большей задержкой
Устранение неполадок
Бот не получает сообщения
- Убедитесь, что Socket Mode включён и
app_tokenкорректен - Проверьте, что «Event Subscriptions» включают необходимые события
message.* - Убедитесь, что бот приглашён в канал (
/invite @botname)
Ответы идут в канал вместо треда
- Проверьте, что
thread_repliesне установлен вfalse - Ответы в треде требуют наличия
thread_tsу исходного сообщения
Файловые вложения не обрабатываются
- Убедитесь, что бот имеет область
files:read - Поддерживаются только MIME-типы
text/*и распространённые типы изображений - Файлы, превышающие лимиты размера, молча пропускаются