프로젝트에 슬랙 봇 투입!
# 1. 슬랙에서 할 것
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;
}
}