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
'Spring Advanced' 카테고리의 다른 글
Synchronized를 사용하면 안되는 케이스 (0) | 2025.04.25 |
---|---|
스프링 AOP Part.4 실무 주의사항 (0) | 2025.01.12 |
TestContainer를 이용한 Spring Boot 테스트 (2) | 2024.10.03 |
Redis를 사용해서 캐싱하기 (0) | 2024.10.02 |
Mockito를 사용한 스프링 프로젝트 단위 테스트 (4) | 2024.09.29 |