관리 메뉴

피터의 개발이야기

[SpringBoot] SpringBoot 슬랙 연동하기 본문

Programming/Spring

[SpringBoot] SpringBoot 슬랙 연동하기

기록하는 백앤드개발자 2021. 1. 9. 08:00
반응형

오늘은 Slack과 연동하는 방법에 대해서 포스팅해보도록 하겠습니다.

 

고객에게 푸시를 통해 알람을 보낼 수 있지만, 어드민을 사용하는 영업팀에서는
자체 어플이 있지 않는한 Slack의 알림을 통해 상황을 빠르게 확인 할 수 있다.

 

 

https://slack.com/intl/en-kr/

 

슬랙연동에는 여러 방법이 있다.

크게 프론트앤드에서 연동하는 방법이 있다. 

프론트 개발자 분이 설명해 주시는 참조할만한 블러그가 있다.
[API] 슬랙(Slack) API 완벽 정리하기

 

백엔드에서 연동하는 방법에는
별다른 SDK없이 프론트와 마찬가지로 RestTemplate로 통신하는 방법과

slack에서 제공되는 SDK를 이용하는 방법이 있다.

자세한 내용은 slack의 개발자 가이드를 참조하면 좋다.
Slack SDK for Java

 

우선 RestTemplate로 구현한 소스를 정리하였다.

 

gradle

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'

 

application.properties

notification.slack.enabled=true
notification.slack.webhook.url=https://hooks.slack.com/services/T038XXXXX/BCFXXXXXX/w7mXXXXXXXXXXXXXXXXXXXXX
notification.slack.channel=#random
notification.slack.botName=OTR-API
notification.slack.icon.emoji=
notification.slack.icon.url=

 

SlackSenderUtil

package com.peterica.swagger.util.slack;

import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Slf4j
@Component
public class SlackSenderUtil {
    @Value("${notification.slack.enabled}")
    private boolean slackEnabled;
    @Value("${notification.slack.webhook.url}")
    private String webhookUrl;
    @Value("${notification.slack.channel}")
    private String channel;
    @Value("${notification.slack.botName}")
    private String botName;
    @Value("${notification.slack.icon.emoji}")
    private String iconEmoji;
    @Value("${notification.slack.icon.url}")
    private String iconUrl;

    public void sendSlack(String contents) {
        if (slackEnabled) {
            try {
                // create slack Message
                SlackMessage slackMessage = new SlackMessage(contents, channel, botName, iconEmoji, iconUrl);
                String payload = new Gson().toJson(slackMessage);

                log.info(channel);

                RestTemplate restTemplate = new RestTemplate();
                HttpHeaders headers = new HttpHeaders();
                headers.set("Content-Type", MediaType.APPLICATION_JSON_VALUE);

                // send the post request
                HttpEntity<String> entity = new HttpEntity<>(payload, headers);
                restTemplate.postForEntity(webhookUrl, entity, String.class);
            } catch (Exception e) {
                log.error("Unhandled Exception occurred while send slack. [Reason] : ", e);
            }
        }
    }
}

 

SlackMessage

package com.peterica.swagger.util.slack;

import com.google.gson.annotations.SerializedName;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.StringUtils;


@Getter
@Setter
public class SlackMessage {
    @SerializedName("text")
    private String text;
    @SerializedName("channel")
    private String channel;
    @SerializedName("username")
    private String botName;
    @SerializedName("icon_emoji")
    private String iconEmoji;
    @SerializedName("icon_url")
    private String iconUrl;

    public SlackMessage(String text, String channel, String botName, String iconEmoji, String iconUrl) {
        this.text = text;
        this.channel = channel;
        this.botName = botName;
        if (!StringUtils.isEmpty(iconEmoji)) {
            this.iconEmoji = iconEmoji;
        }
        if (!StringUtils.isEmpty(iconUrl)) {
            this.iconUrl = iconUrl;
        }
    }

}

 

Test

@Test
public void sendSlackNotiByRest(){
    StringBuilder sb = new StringBuilder();
    sb.append("[Notification]")
            .append(System.getProperty("line.separator"))
            .append("[Name] : ").append("Tester")
            .append(System.getProperty("line.separator"))
            .append("[Message] : ")
            .append("테스트 메시지 !!");
    String contents = sb.toString();
    SlackSenderUtil slackSenderUtil = new SlackSenderUtil();
    slackSenderUtil.sendSlack(contents);
}

 

테스트 결과캡쳐

 

소스는 여기에 있습니다.

 

참조할만한 페이지

SimpleSlackAPI를 이용한  간단한 슬랙 봇 메시지 보내기

 

블럭을 디자인할 수 있는 곳

Building with block kit

 

참조페이지

java Slack webhook 연동

반응형
Comments