๐Ÿ’ป ๊ฐœ๋ฐœ ์ผ์ง€/SpringBoot

SpringBoot - Slack Bot ์—ฐ๋™ํ•˜๊ธฐ

์ ์ด 2022. 4. 5. 16:02
๋ฐ˜์‘ํ˜•

๊ธฐ๋Šฅ ์ •์˜

  • ๊ทธ๋ฃน์ด ์Šฌ๋ž™๊ณผ ์—ฐ๋™ํ•  ๊ฒฝ์šฐ, ๊ทธ๋ฃน ์›๋“ค์˜ ์ƒํƒœ๊ฐ€ Slack Bot์„ ํ†ตํ•ด ํ‘œ์‹œ๋œ๋‹ค!

1. Slack App ๋งŒ๋“ค๊ธฐ

https://api.slack.com/ ์—์„œ Slack Bot ๋งŒ๋“ค๊ธฐ

Create New App → From scratch

  • App Name๊ณผ workspace ์„ ํƒ
    • AppName์˜ ๊ฒฝ์šฐ ์ถ”ํ›„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • workspace๊ฐ€ ์—†์œผ๋ฉด app ์ƒ์„ฑ ๋ถˆ๊ฐ€! → ์—ฌ๋Ÿฌ workspace์—์„œ ์‚ฌ์šฉํ•˜๋Š” bot๊ฐœ๋ฐœ ์‹œ, ์ƒ์„ฑ ํ›„ distribution ์„ค์ • ํ•ด์•ผ ํ•จ

์ƒ์„ฑ ํ›„ Bots ์„ ํƒ!

Scope ์ ์šฉ

Review Scopes to Add ํ›„, ์›ํ•˜๋Š” Scope๋“ค์„ ์„ ํƒ!

  • ํ•ด๋‹น ์•ฑ์˜ ๊ฒฝ์šฐ, ๋‹จ์ˆœํžˆ ์ฑ„๋„์— ๋ฉ”์„ธ์ง€๋งŒ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ Bot Token Scopes ์— chat:write ๋งŒ ์„ค์ •
  • https://api.slack.com/scopes ← scope์— ๋Œ€ํ•œ ์„ค๋ช…

Workspace์— ์„ค์น˜

  • Scope์„ค์ • ์™„๋ฃŒ๋˜๋ฉด Install to Workspace๊ฐ€ ํ™œ์„ฑํ™”๋œ๋‹ค.
  • ์„ค์น˜๋ฅผ ๋งˆ์น˜๋ฉด ํ† ํฐ์ด ์ ํ˜€์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

2. Spring Boot ์„ค์ •

https://slack.dev/java-slack-sdk/guides/getting-started-with-bolt#gradle ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Gradle ํ™˜๊ฒฝ ์„ธํŒ…

build.gradle

dependencies {
	implementation("com.slack.api:bolt:1.18.0")
	implementation("com.slack.api:bolt-servlet:1.18.0")
	implementation("com.slack.api:bolt-jetty:1.18.0")
}

application.yml

slack:
	token: 'xoxb-๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ'
	channel: '#์ฑ„๋„๋ช…'

NotificationService

import org.springframework.beans.factory.annotation.Value;

@Value(value = "${slack.token}")
String token;
@Value(value = "${slack.channel}")
String channel;
private void sendSlackMessage(String username, Boolean activate) {
        String message = (activate)? "> :writing_hand: *["+username+"]* ๋‹˜์ด ์—…๋ฌด ์ง‘์ค‘์„ ์‹œ์ž‘ํ–ˆ์–ด์š”!"
                                    : "> :raised_hands: *["+username+"]* ๋‹˜์ด ์‰ฌ๊ณ  ์žˆ์–ด์š”!";
        try{

            MethodsClient methods = Slack.getInstance().methods(token);
            ChatPostMessageRequest request = ChatPostMessageRequest.builder()
                    .channel(channel)
                    .text(message)
                    .build();

            methods.chatPostMessage(request);

        }catch (Exception e){
            throw new CustomException(ErrorCode.FAIL_SEND_SLACK);
        }
    }
  • Slack Message๋Š” ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๋ฏ€๋กœ, ํ…์ŠคํŠธ์— ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!
    ( ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋ฏ€๋กœ ๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ๊ผญ ํ™•์ธ..! )
  • https://api.slack.com/methods/chat.postMessage/test ์‹ค์ œ ๋ฉ”์„ธ์ง€ ํ˜•์‹์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•