Сообщения, связанные с потоком, и избегайте автоматических спамеров.

В первой части я писал о том, зачем и как мы создали Slack-бота. Мы используем нашего бота в качестве промежуточного программного обеспечения для отправки уведомлений из браузерного приложения. Бот предоставляет конечные точки, сопоставленные с такими методами, как chat.postMessage в веб-API Slack. Мы отправляем в конечную точку сообщение в формате block-kit-builder. Каждое сообщение в Slack возвращает идентификатор сообщения (ts), который мы используем для цепочки связанных сообщений. Это отличный способ избежать спама на наших каналах.

Пилоты дронов используют наше приложение для загрузки изображений в наши сервисы. Мы хотим уведомить канал, когда:

  • загрузка началась
  • каждые 25% достигнут прогресс
  • пилот приостанавливает, возобновляет или отменяет загрузку
  • файл не загружается

В этом посте я расскажу, как мы реализовали этот поток уведомлений.

Настройка

Чтобы отправлять сообщения в Slack, мне нужно:

  • Идентификатор канала
  • URL-адрес функции GCP, на которой размещается бот
  • Способ кэширования идентификаторов сообщений, чтобы они сохранялись при обновлении страницы.

Вы можете получить идентификатор канала, щелкнув правой кнопкой мыши название вашего канала, «затем скопируйте ссылку». Вставьте его куда угодно, ID — это символы в конце. Что-то вроде этого: C21S4MN6C4(👈🏻 Не настоящее удостоверение личности). Убедитесь, что вы также добавили своего бота на этот канал.

Чтобы найти URL-адрес функции Cloud, перейдите в консоль GCP и посмотрите на вкладку TRIGGER. Это будет выглядеть примерно так: https://europe-west1-[project-name].cloudfunctions.net/slack-bot. Имя в конце совпадает с именем, которое мы использовали при развертывании бота в части 1.

Для кэширования ключа ts я использую локальное хранилище. Здесь нет ничего необычного. Обычно в любой точке есть один или два ключа. Я использую идентификатор загрузки для области ключей в кеше.

Отправка первого сообщения

Я структурировал свои уведомления как серию асинхронных функций. Я использую основную функцию notifySlack, которая делает запрос. Другие специальные функции уведомлений с такими именами, как notifySlackUploadInit и notifySlackUploadComplete, вызывают его. notifySlack использует выборку для отправки сообщения боту с идентификатором канала и телом сообщения. Он возвращает ключ ts, который я буду использовать позже для передачи сообщений.

Эти две функции отправят сообщение в Slack, которое выглядит следующим образом:

Block Kit Builder — отличный инструмент для создания сообщений. Скопируйте JSON и используйте его непосредственно в функции запроса.

Моя функция storeUploadNotificationTs добавляет ключ ts в локальное хранилище. Он использует идентификатор загрузки, чтобы ограничить его, если пользователь инициирует другие загрузки с другой вкладки.

Цепочки сообщений

Чтобы отправить сообщение как поток другого сообщения, мы добавим в запрос ключ ts. Эта функция отправляет сообщение «Загрузка завершена»:

Я извлекаю ключ ts из локального хранилища и добавляю его в свойство thread_ts запроса. Поскольку это конец очереди, я очищаю локальное хранилище. Результирующее цепочка сообщений теперь выглядит так:

Вот и все. Самое сложное — настроить и запустить бота Slack. Затем с помощью этой конечной точки я могу отправлять сообщения на любой канал в нашей рабочей области из любого клиентского приложения.