-
[Spring] Spring + Slack 연동해서 알림받기(2)카테고리 없음 2023. 9. 18. 20:02
저번에 Slack bot을 설정하고 추가하는 단계까지 진행했다!
2023.09.05 - [Spring] - [Spring] Spring + Slack 연동해서 알림받기(1)
[Spring] Spring + Slack 연동해서 알림받기(1)
사용자가 불편신고를 등록하면 슬랙으로 불편신고 알림을 받는 기능을 구현해야 한다. 스프링부트와 슬랙을 연동하는 법을 알아보자! 크게 두 단계로 나눠지는데 1. SlackAPI 설정 2.스프링부트 Sla
yellog03.tistory.com
이제 스프링부트 설정하고 개발해보자
1. Gradle 설정
슬랙 api를 사용하기 위해 dependency를 추가해주자
코드는 하단 링크를 참고했다.
https://slack.dev/java-slack-sdk/guides/getting-started-with-bolt#gradle
Getting Started with Bolt | Slack SDK for Java
SLACK_SIGNING_SECRET The secret value shared only with the Slack Platform. It is used for verifying incoming requests from Slack. Request verification is crucial for security as Slack apps have internet-facing endpoints. To know the value, visit the Slack
slack.dev
[build.gradle]
dependencies { implementation("com.slack.api:bolt:1.31.0") implementation("com.slack.api:bolt-servlet:1.31.0") implementation("com.slack.api:bolt-jetty:1.31.0") implementation("org.slf4j:slf4j-simple:1.7.36") }
2. .yml 파일 설정
위에서 발급받았던 토큰을 yml이 관리하도록 하자!
일단 코드를 추가한다.
slack: bot-token: ${SLACK_BOT_TOKEN} postMessageUrl : "https://slack.com/api/chat.postMessage" channel: monitor: "#불편신고"
* postMessageUrl : slack api의 chat.postMessage메서드를 호출하기 위한 endpoint를 나타낸다.
상기 url은 slack공식 API endpoint이다.
* monitor : slack의 특정 채널 이름
환경변수를 설정해주자
상단바의 [Run] > [Edit Configurations]
저 버튼을 클릭한 다음
[+] 버튼을 눌러서 발급 받은 token을 저장한다.
3. DTO 생성하기
슬랙에게 보낼 dto를 작성한다.
package com.tago.api.infra.slack.dto; import lombok.Builder; import lombok.Data; import lombok.Getter; @Data @Getter @Builder public class SlackMessageDto { private String type; private String detail; }
나는 불편신고의 유형, 그리고 세부사항을 전달해야 하므로 저렇게 2개를 넣었다.
4. 서비스 메서드 작성하기
package com.tago.api.infra.slack.application; @Service @RequiredArgsConstructor public class SlackService{ private final MemberService memberService; @Value(value = "${slack.bot-token}") private String token; @Value(value="${slack.channel.monitor}") private String channel; public void sendMessageToSlack(Long memberId,IssueDto issueDto){ MemberGetResponse member = memberService.get(memberId); String issueDescription = IssueType.getDescriptionByType(issueDto.getType()); List<TextObject> textObjects = new ArrayList<>(); textObjects.add(markdownText("*문의자 전화번호:*\n" + member.getNumber())); textObjects.add(markdownText("*문의 제목:*\n"+ issueDescription)); textObjects.add(markdownText("*문의 내용:*\n" + issueDto.getDetail())); MethodsClient methods = Slack.getInstance().methods(token); ChatPostMessageRequest request = ChatPostMessageRequest.builder() .channel(channel) .blocks(asBlocks( header(header -> header.text(plainText(member.getName()+ "님이 문의를 남겨주셨습니다!"))), divider(), section(section -> section.fields(textObjects) ))).build(); try { methods.chatPostMessage(request); } catch (Exception e) { throw new RuntimeException("Failed to send message to Slack", e); } } }
나는 textObjects라는 텍스트 객체들의 리스트를 생성해서 메세지로 보냈다.
memberId를 이용해 전화번호를 가져오고, 문의 제목, 문의 내용 등을 가져온다.
5. 불편신고 서비스 메서드에 슬랙기능 추가하기
@Service @RequiredArgsConstructor public class IssueReportService { private final IssueCommandService issueCommandService; private final IssueCreateService issueCreateService; private final SlackService slackService; @Transactional public Issue reportIssue(Long memberId, IssueDto issueDto){ Issue issue = issueCreateService.createIssue(memberId, issueDto); slackService.sendMessageToSlack(memberId, issueDto); return issueCommandService.save(issue); } }
내 기존 불편신고 등록 메서드에 만든 sendMessageToSlack을 추가하였다.
실행해보면
슬랙 알림이 정상적으로 오는 것을 확인할 수 있다 !