흰 스타렉스에서 내가 내리지

프로젝트에 슬랙 봇 투입! 본문

모니터링

프로젝트에 슬랙 봇 투입!

주씨. 2023. 12. 22. 02:28
728x90

# 1. 슬랙에서 할 것

 

https://api.slack.com/

 

Slack은 생산성 플랫폼입니다

Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

- [Your apps] 버튼 클릭!

 

 

- [Create New App] 누르고 [From scratch]

 

 

- [App Name] 에는 Bot의 이름

- 그 아래에는 봇이 생성될 우리 워크스페이스를 골라주면 된다

 

 

- [Bots] 눌러

 

 

 - 페이지가 이동되었을 것입니다. 좌측 메뉴에서 [OAuth & Permissions] 눌러줘요

 

 

- 페이지를 내리다 보면, [Scopes] 가 있다. 

- [Add an OAuth Scope] 를 누르고 슬랙 봇이 가질 권한을 선택해주자. 

- 우선 아래아래 사진처럼 두가지를 추가했다. 

 

 

 

- 이제 토큰을 발급받아 봅시다. 다시 페이지 위로 올라가서 [Install to Workspace] 클릭

 

 

- 아니 근데 이게 뭐지?

-> 좌측 메뉴의 [App Home]에서 [App Display Name] → [Edit] 하고 [Display Name], [Default username] 설정해주고 오면 됨.

 

 

- 다시 돌아와서 [Install to Workspace]

 

 

- 그럼 이렇게 토큰을 발급해 줍니다!

 

 

 

 

- 슬랙으로 돌아가 워크스페이스에 채널을 하나 만들고, 설정에 들어가!

- 앱 섹션의 [앱 추가]를 눌러준다.

 

- 근데 나는 여기서 안떠서, 그 직접 찾아가서 추가해줬다. 아래 사진처럼

 

 

 

이제 슬랙에서 설정할 건 끝났고, 스프링부트 프로젝트로 가봅시다!

 


 

# 2. 코드에서 할 것

* build.gradle 추가

implementation 'com.slack.api:bolt:1.36.1'
implementation 'com.slack.api:bolt-servlet:1.36.1'
implementation 'com.slack.api:bolt-jetty:1.36.1'
implementation 'org.slf4j:slf4j-simple:1.7.36'

 

- 최신 버전은 아래 링크에서 확인!

https://slack.dev/java-slack-sdk/guides/getting-started-with-bolt#gradle

 

 

 

* application.yml

- 토큰을 환경변수로 빼서 설정합시다

 

 

* 채널 명 저장 - SlackChannels.java

- 꼭 이렇게 안해도 돼요!

public class SlackChannels {
    public static final String COMMAND_CHANNEL_EMERGENCY = "#0-사령관이전파한다-긴급";
    public static final String COMMAND_CHANNEL_INFO = "#0-사령관이전파한다-정보";
    // 다른 채널 추가
}

 

 

* SlackService.java

@Service
@Slf4j
public class SlackService {
    @Value("${slack.token}")
    private String SLACK_TOKEN;

    public void sendSlackMessage(String message, String channel){
        String channelName;

        if(channel.equals("emergency")){
            channelName = SlackChannels.COMMAND_CHANNEL_EMERGENCY;
        }else{
            channelName = SlackChannels.COMMAND_CHANNEL_INFO;
        }

        try{
            MethodsClient methods = Slack.getInstance().methods(SLACK_TOKEN);

            ChatPostMessageRequest request = ChatPostMessageRequest.builder()
                    .channel(channelName)
                    .text(message)
                    .build();

            methods.chatPostMessage(request);

            log.info("Slack Message Send Succeed");
        }catch (SlackApiException | IOException e) {
            log.error(e.getMessage());
        }
    }
}

 

 

* SlackController.java

@RestController
@RequiredArgsConstructor
@Slf4j
public class SlackController {
    private final SlackService slackService;

    @GetMapping("/slack/{channel}")
    public String sendSlackMessage(@RequestParam("message") String message, @PathVariable String channel){
        slackService.sendSlackMessage(message, "");
        return channel + "채널에 " + "메시지 전송 성공 : " + message;
    }
}

 

 

 

# 완성!