В большинстве (если не во всех) рабочих средах используется центральный инструмент коммуникации. Сотрудники могут использовать его, чтобы говорить о различных проектах, обсуждать проблемы компании или даже говорить о личных вещах. Для связи с ней нам могут потребоваться другие приложения и службы, которые являются частью среды.

В нашем случае мы используем Slack, и в этой истории мы покажем, как создать и опубликовать сообщение с помощью его API двумя разными подходами.

Предпосылки

Для запросов к API необходимо иметь действующий token. Для этого token у вас должно быть Slack App (пользователь бота). После создания вы можете получить token в разделе OAuth & Permissions на странице управления приложением. Если вы не настроили указанную среду, воспользуйтесь следующим руководством.

Первый подход: Attachments с устаревшими полями

Это быстрое, но ограниченное решение. Сообщение Slack можно определить с помощью ограниченного количества полей с префиксом (заголовок, текст, имя автора и т. Д.), Которые теперь считаются устаревшими. По этой причине этот подход не позволяет использовать определенные функции, такие как взаимодействие с сообщениями.

В следующем примере мы отправляем сообщение, используя устаревшие поля и стандартный метод выборки (с использованием библиотеки node-fetch).

Выполняя приведенный выше код, мы получаем такое сообщение:

В приведенном выше коде мы можем выделить следующие части:

  • Полезная нагрузка: имеет два свойства: channel, куда вы хотите отправить сообщение, и attachments.
  • Fetch метод: для отправки сообщения делается POST запрос к конечной точке Slack API chat.postMessage. Чтобы запрос заработал, вы должны передать token приложения Slack через Заголовок авторизации.

Обратите внимание, что Attachments теперь считаются устаревшими. Эти старые функции будут продолжать работать, но приложения, использующие их, упустят улучшения, предоставляемые недавно доступным API: blocks.

Второй подход: блоки

Blocks - это компоненты, которые пользователь может комбинировать для создания насыщенных интерактивных сообщений.

В следующем примере показан только объект полезной нагрузки, поскольку это единственное, что отличается от предыдущего кода. Деталь fetch такая же, никаких модификаций не претерпевала.

Применение изменений к payload приведет к примерно следующему:

Существуют разные типы blocks, которые можно вкладывать и комбинировать для создания желаемого сообщения. Также текст, содержащийся в некоторых blocks, может быть отформатирован с помощью Markdown.

Чтобы упростить использование blocks, на веб-сайте Slack есть приложение под названием Block Kit Builder. Это приложение можно использовать для создания прототипов сообщений или для проверки действительности блоков JSON.

Цветовое решение: вложения + блоки

Blocks имеют некоторые ограничения: мы не можем определить цвет сообщения, как это было с attachments. Чтобы решить эту проблему, мы можем смешать оба подхода, используя blocks внутри attachments.

В следующем примере мы видим изменения в payload, чтобы разрешить использование поля color и blocks.

И это окончательный вид: настроенное сообщение, структурированное с помощью блоков и желаемого цвета.

Подводя итоги

Есть два способа форматирования и отправки сообщений в Slack. Первый не рекомендуется, но все еще действует. Если это то, что вы используете, вы можете проверить это руководство, чтобы перейти на blocks. Рекомендуемый способ - использовать blocks (второй подход), и если вы хотите применить цвет к сообщениям, используйте обходной путь.

В нашем случае, используя GitHub Actions, мы уведомляем события Git (pull request, push и т. Д.) В один из наших каналов Slack. На следующем изображении вы можете увидеть, как выглядит одно из наших уведомлений.

Blocks API - это улучшение по сравнению с attachments. Хотя по сравнению с этим он может быть более сложным, он гораздо более гибкий. Кроме того, он позволяет использовать новые функции, такие как добавление интерактивных функций к сообщениям.