워크스페이스 생성~슬랙 봇 생성


1. Slack에 MOMO라는 워크스페이스를 따로 만들어 두었습니다.

2. https://api.slack.com/apps 에 접속합니다.

3. OAuth & Permissions에서 봇에게 권한을 부여합니다.

4. 상단의 Install to Workspace 버튼을 누르면 슬랙 봇이 추가됩니다.

5. 이후 다시 OAuth & Permissions로 가면 봇의 OAuth Token이 발급됩니다.

 

 

슬랙 메세지 전송

  • 슬랙 봇도 만들고 OAuth Token도 발급받았으니 본격적으로 슬랙 메세지를 전송해 봅시다.
  • 슬랙 메세지 전송 API는 다음과 같습니다.

 

채널 ID는 채널 정보의 하단에 존재한다.

 

  • 언뜻 살펴보기에.. 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 @봇_이름

 

이후, 다시 로직을 실행해 보니 정상적으로 메시지가 가는 모습을 볼 수 있습니다ㅎㅎ

 

+ Recent posts