728x90
반응형
SMALL

Slack App 설정

 

AI 업무 관리 및 생산성 도구

업무가 이루어지는 새로운 세상, Slack 전 세계에서 가장 사랑받는 업무용 운영 체제에 인력, 프로젝트, 도구, AI를 한데 모아보세요

slack.com

 

슬랙 API 사이트로 접속해서,  [Your Apps] 클릭 후 새 앱을 만든다.

 

만들때 슬랙 메시지가 보내질 WorkSpace를 잘 지정해야 한다.

 

App Settings 에 들어와서, OAuth & Permissions 탭에 들어가면 Bot User OAuth Token을 생성하면 된다. 생성할 때 하단에 권한을 설정해주면 되는데, 원하는 권한을 부여하면 된다.

 

본인은 다음과 같이 설정했다.

 

 

Spring Boot에서 슬랙 연동

implementation 'com.slack.api:bolt:1.44.0'
implementation 'com.slack.api:bolt-servlet:1.40.2'
implementation 'com.slack.api:bolt-jetty:1.44.0'
  • 우선 이 세가지 의존성을 추가한다.

SlackMessageRequest

package cwchoiit.board.service.request;

import lombok.*;

@Getter
@ToString
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SlackMessageRequest {
    private String message;
    private Channel channel;

    public static SlackMessageRequest of(String message, Channel channel) {
        SlackMessageRequest slackMessageRequest = new SlackMessageRequest();
        slackMessageRequest.message = message;
        slackMessageRequest.channel = channel;
        return slackMessageRequest;
    }

    @Getter
    @RequiredArgsConstructor
    public enum Channel {
        ERROR("#board-alarm"),
        INFO("#all-slack-api-alarm"),
        NEW_FEATURE("#social");

        private final String channelName;
    }
}
  • 슬랙 서비스에서 사용할 DTO 클래스이다.
  • 나의 경우, 채널명을 위 코드와 같이 ENUM 으로 관리했다.

 

SlackService

package cwchoiit.board.service.impl;

import com.slack.api.Slack;
import com.slack.api.methods.MethodsClient;
import com.slack.api.methods.SlackApiException;
import com.slack.api.methods.request.chat.ChatPostMessageRequest;
import com.slack.api.methods.response.chat.ChatPostMessageResponse;
import cwchoiit.board.exception.SlackSnsException;
import cwchoiit.board.service.request.SlackMessageRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Slf4j
@Service
@RequiredArgsConstructor
public class SlackService {

    @Value("${slack.bot.user.oauth.token}")
    private String oauthToken;

    public boolean sendSlackMessage(SlackMessageRequest request) {
        MethodsClient client = Slack.getInstance().methods(oauthToken);

        try {
            ChatPostMessageResponse chatPostMessageResponse = client.chatPostMessage(
                    ChatPostMessageRequest.builder()
                            .channel(request.getChannel().getChannelName())
                            .text(request.getMessage())
                            .build()
            );

            if (!chatPostMessageResponse.isOk()) {
                throw new SlackSnsException(
                        "Send slack message is not OK. error: " + chatPostMessageResponse.getError() +
                                ", request message " + request.getMessage() +
                                ", request channel " + request.getChannel().getChannelName()
                );
            }

            return chatPostMessageResponse.isOk();
        } catch (IOException | SlackApiException e) {
            log.warn("[sendSlackMessage] Send slack message error, message = {}, channel = {}",
                    request.getMessage(), request.getChannel().getChannelName());
            throw new SlackSnsException(e);
        }
    }
}
  • 위에서 받은 Bot User OAuth Token을 외부로 노출시키지 말고, Spring Boot 프로젝트에 잘 저장해둔다.
  • 그리고 위 코드처럼 메시지를 간단하게 보내면 끝난다.

 

테스트 코드로 메시지 확인

SlackServiceTest

...

@Test
@DisplayName("슬랙 메시지 - 전송 성공")
void send_message() {
    boolean isOK = slackService.sendSlackMessage(
            SlackMessageRequest.of("Board Message\n\nHello Slack?!", SlackMessageRequest.Channel.ERROR)
    );

    assertThat(isOK).isTrue();
}

...

 

결과

 

 

메시지가 잘 오지 않는 경우엔...

 

  • 메시지를 받을 채널의 세팅에서 [Apps]에 내 App이 추가된 상태인지 확인해보자.
728x90
반응형
LIST

+ Recent posts