프레임워크/Spring
RestTemplate를 사용한 슬랙봇으로 메세지 보내보기
병훈1234
2022. 10. 20. 18:50
워크스페이스 생성~슬랙 봇 생성
1. Slack에 MOMO라는 워크스페이스를 따로 만들어 두었습니다.
2. https://api.slack.com/apps 에 접속합니다.
3. OAuth & Permissions에서 봇에게 권한을 부여합니다.
4. 상단의 Install to Workspace 버튼을 누르면 슬랙 봇이 추가됩니다.
5. 이후 다시 OAuth & Permissions로 가면 봇의 OAuth Token이 발급됩니다.
슬랙 메세지 전송
- 슬랙 봇도 만들고 OAuth Token도 발급받았으니 본격적으로 슬랙 메세지를 전송해 봅시다.
- 슬랙 메세지 전송 API는 다음과 같습니다.
- 언뜻 살펴보기에.. Authorization 헤더에 위에서 받아온 토큰을 입력해 주고, channel에 채널ID 라는걸 넣어주면 잘 동작할 것 같습니다. 그렇다면 ChannelID는 뭘까요? 맨 아래에 채널 ID라는게 따로 존재하는 모습을 볼 수 있습니다. 이제 전달해주기 위한 모든 데이터들을 다 얻었으니 본격적으로 슬랙에 메시지를 던져보기 위한 코드를 작성해 보겠습니다. 외부 API를 호출하므로 RestTemplate를 통해 Api를 사용하겠습니다.
- https://www.baeldung.com/rest-template
public void index() throws JsonProcessingException {
final var token = "슬랙봇_토큰";
final var url = "https://slack.com/api/chat.postMessage";
final var channelID = "채널아이디";
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer " + token);
SlackMessage slackMessage = new SlackMessage(channelID, "hello world!");
ObjectMapper objectMapper = new ObjectMapper();
String jsonData = objectMapper.writeValueAsString(slackMessage);
HttpEntity<String> request = new HttpEntity<>(jsonData, httpHeaders);
String response = restTemplate.postForObject(url, request, String.class);
System.out.println(response);
}
사실 위 방식을 그대로 잘 따라했다면 에러가 뜹니다..ㅎ 코드를 짜고 요청을 계속해서 날려보아도 봇이 채널에 존재하지 않는다는 에러가 발생하였습니다. 구글링 결과 봇 권한을 더 주어야 한다고 슬랙 봇 권한을 보니 채널에 참여하는것도 권한을 줘야 한다고 합니다. 따로 권한을 부여하여 주고 채널을 새롭게 파서 채널에 봇을 입장시켜 줍시다~
/invite @봇_이름
이후, 다시 로직을 실행해 보니 정상적으로 메시지가 가는 모습을 볼 수 있습니다ㅎㅎ