Сообщения, связанные с потоком, и избегайте автоматических спамеров.
В первой части я писал о том, зачем и как мы создали 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. Затем с помощью этой конечной точки я могу отправлять сообщения на любой канал в нашей рабочей области из любого клиентского приложения.