Slack — подключение и проверка

Бот отвечает в рабочем пространстве Slack: в личных сообщениях приложению и в каналах, куда его позвали.

Что нужно заранее

  • Рабочее пространство Slack, где вы вправе устанавливать приложения.
  • Приложение Slack, созданное на api.slack.com/apps («From scratch»).
  • Роль администратор в проекте ImpactBot: канал подключает только она.
  • Свободный слот канала в тарифе — иначе подключение остановится с сообщением про лимит.

Права и доступы

В разделе OAuth & Permissions приложению выдают Bot Token Scopes:

  • `chat:write` — отправка сообщений. Без него бот подключится, но отвечать не сможет: Slack вернёт `missing_scope`.
  • `channels:read` — список каналов.
  • `im:read` и `im:history` — личные диалоги с приложением.

После установки в рабочее пространство появляется Bot User OAuth Token (`xoxb-…`) — его и вставляют в ImpactBot.

Второе обязательное поле — Signing Secret из Basic Information. Им подписан каждый входящий запрос: ImpactBot пересчитывает HMAC-SHA256 и отвергает событие, если подпись не сходится или отметка времени старше пяти минут. Без Signing Secret подключение не создаётся.

Подключение и вебхук

  1. api.slack.com/apps → Create New App → From scratch.
  2. OAuth & Permissions → добавьте scopes выше → Install to Workspace → скопируйте `xoxb-…`.
  3. Basic Information → скопируйте Signing Secret.
  4. Проект → КаналыSlack → название, Bot User OAuth Token, Signing Secret → «Подключить».

Адрес приёма событий вписывается вручную: Slack принимает Request URL только из своей консоли. После подключения окно показывает готовый адрес вида `/api/webhook/slack/<ID канала>` с кнопкой копирования. Вставьте его в Event Subscriptions → Request URL — Slack сразу пришлёт проверочный запрос `url_verification` и должен показать «Verified». Затем в Subscribe to bot events подпишитесь на `message.im` (личные сообщения), а если бот работает в каналах — на `message.channels` и `app_mention`. Других типов событий приёмник не обрабатывает, подписываться на них незачем.

Проверка

Нажмите «Проверить» на карточке канала. Диагностика Slack показывает: подтверждён ли OAuth-токен и какое это рабочее пространство, сохранён ли Signing Secret, разрешена ли отправка (проба уходит в несуществующий канал, доставки не происходит) и приходили ли входящие.

После этого напишите приложению в Slack — сообщение должно появиться в разделе «Диалоги».

Частые ошибки

  • «Slack Signing Secret is required». Заполнен только токен. Signing Secret обязателен.
  • «Invalid Slack bot token». Вставлен user-токен (`xoxp-…`) вместо бот-токена (`xoxb-…`) либо приложение переустановлено и токен сменился.
  • Slack не верифицирует Request URL. Адрес указан без ID канала или скопирован до создания канала — возьмите готовый адрес из окна подключения.
  • Бот молчит в личке. Не оформлена подписка на событие `message.im`.
  • Диагностика пишет про право на отправку. Приложению не выдан scope `chat:write`; после добавления scope приложение надо переустановить, иначе токен остаётся со старыми правами.
  • События перестали приходить после смены Signing Secret. Подпись считается новым секретом, а в канале лежит прежний — переподключите канал.