Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений

RedDeveloper
04.01.2023 16:49
Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений

Как отправлять сообщения в slack с помощью spring boot легко и без зависимостей.

Что такое Slack и как работает API Slack?

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

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

Создайте приложение Slack и получите маркер доступа к API.

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

Затем найдите входящее приложение webhook.

Затем найдите входящее приложение webhook

Нажмите на карточку и добавьте ее в slack в рабочем пространстве.

Нажмите на карточку и добавьте ее в slack в рабочем пространстве

Выберите канал, на который вы хотите опубликовать свои сообщения.

Выберите канал на который вы хотите опубликовать свои сообщения

Скопируйте ссылку api, которую мы будем использовать для подключения нашего api rest в spring boot для отправки сообщений.

Скопируйте ссылку api которую мы будем использовать для подключения нашего api rest в

3. Установите зависимость Slack в ваш проект Spring Boot.

Зависимости приложения, нам понадобится только зависимость Spring web и devtools, нам не нужно добавлять сторонние зависимости.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <scope>runtime</scope>
   <optional>true</optional>
 </dependency>

В качестве следующего шага мы должны добавить url webhook в наш application.properties.

В качестве следующего шага мы должны добавить url webhook в наш applicationproperties

Создайте DTO со следующими свойствами.

public class SlackMessage implements Serializable {

 private static final long serialVersionUID = 1L;
 private String username; //usuario directo al que enviaras el mensaje
 private String text; //mensaje
 private String icon_emoji; //icono parametrizable del boot slack
 private String channel; //channel a enviar el message

}

4.Создание компонента Spring для отправки сообщений в Slack.

Для этого шага мы создадим компонент в пакете услуг, который будет использовать RestTemplate для обработки запроса на отправку сообщений в Slack.

@Component
public class SlackComponent {

 @Value("${slack.bot.token}")
 private String slackWebhookUrl;

 public Object sendMessageNative(SlackMessage message) {
  RestTemplate restTemplate = new RestTemplate();

  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_JSON);

  HttpEntity<SlackMessage> request = new HttpEntity<>(message, headers);

  return restTemplate.postForObject(slackWebhookUrl, request, String.class);
 }

}
Обратите внимание, что slackWebhookUrl использует значение, определенное выше в файле свойств нашего приложения.

С помощью этого мы должны быть в состоянии выполнить модульный тест для проверки правильности работы нашего компонента. Давайте определим наш простой тест.

@SpringBootTest
class SlackMessagingSpringbootApplicationTests {

 @Autowired
 private SlackComponent slackUtils;

 @Test
 void testSendMessage() {
  var message="Hola mundo desde junit :heart: :smile:";
  SlackMessage slackMessage = new SlackMessage();
  slackMessage.setText(message);
  slackMessage.setChannel("varios");
  // slackMessage.setIcon_emoji(":smiley:");
  var response = slackUtils.sendMessageNative(slackMessage);
  assertEquals("ok", response);
 }
}

При выполнении нашего теста мы получаем сообщение на канал miscellaneous.

При выполнении нашего теста мы получаем сообщение на канал miscellaneous

Внедрение компонента Slack, в который необходимо отправлять сообщения.

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

@RestController
public class SlackController {

 @Autowired
 private SlackComponent slackComponent;

 @PostMapping("/send")
 public ResponseEntity<?> sendMesssage(@RequestBody SlackMessage slackRequest) {
  return ResponseEntity.ok(slackComponent.sendMessageNative(slackRequest));
 }

}

В качестве последнего шага мы протестируем его из postman.

В качестве последнего шага мы протестируем его из postman

И это будет результатом.

И это будет результатом

6.Отправка сообщений с эмодзи и изображениями, прикрепленными в Slack.

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

Чтобы включить эмодзи в текст сообщения, необходимо использовать следующий формат:

:nombre_del_emoji:

Пример:

Пример

И это будет результатом.

И это будет результатом

Мы также могли бы добавить поле emoji_message в наш DTO и затем конкатенировать его с сообщением для лучшей сегментации, но в данном примере в этом нет необходимости.

Да, можно включать изображения непосредственно в текст сообщения, используя формат разметки Slack, который позволяет добавлять ссылки и форматировать текст различными способами.

Чтобы включить изображение в текст сообщения, необходимо использовать следующий формат:

![título de la imagen](url de la imagen)

Пример:

Пример

Результат.

Результат

На этом мы завершаем наше руководство о том, как легко интегрировать Slack API в приложение Spring Boot. Также можно выполнить эту интеграцию с помощью OpenFeign или Web Client. Если у вас возникнут вопросы, не стесняйтесь обращаться ко мне, или если вам нужен учебник по использованию этих библиотек, дайте мне знать.

Repositorio en Github: https://github.com/danielangel22/slack-messaging-springboot

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.