-
Slack Bot으로 Slack Channel에 메세지 보내기(Java)Etc 2023. 4. 2. 16:47
Slack Bot으로 아주 멋지게, Slack Channel에 메세지를 보내려고 작성된 게시물이 아닙니다.
고급 기술과 같은, 메세지를 아주 멋지게 꾸며주는 내용은 해당 게시물에 없다는 걸 알아주세요.이 게시물의 목표는,
아주 빠른 시간에, 삽질 없이 Slack 설정을 마치고, 아주 간단한 코드로
Slack Bot으로 Slack Channel에 메세지를 보내기 위함입니다.시작하겠습니다!
https://api.slack.com/apps 페이지로 이동 합니다.
여기서 Create New App을 클릭합니다.
그러면 아래 와 같은 창이 하나 더 뜰텐데,
저는 여기서 FromScratch를 선택했습니다.다음과 같은 화면이 나오면
App Name을 입력하고
이미 만들어둔 Slack Workspace를 선택합니다.
그리고 Create App 버튼을 클릭합니다.그러면 다음과 화면이 나오는 페이지로 이동하게 됩니다.
여기서 Bots 를 선택해 줍니다.그러면, OAuth & Permissions 화면이 나옵니다.
아래로 스크롤을 내려 보시면 Scopes 라는 화면이 나타납니다.
여기서 Bot Token Scopes 에 Add on OAuth Scope 버튼을 클릭해서
권한을 추가해 보겠습니다.
메시지만 보내 볼 것이므로 chat:wirte를 추가하겠습니다.권한을 추가한 후, 다시 스크롤을 맨 위로 올려 보겠습니다.
OAuth Tokens for Your Workspace 가 보이실 겁니다.
여기서 Install to Workspace 버튼을 클릭 합니다.그러면 다음과 같은 유효하지 않은 페이지로 이동하며, 진행되지 않습니다.
그러면 봇 사용자를 만들러 가보겠습니다.
테스트 용 슬랙 앱으로 돌아가기를 클릭합니다.여기서 왼쪽 사이드 메뉴를 보면, App Home이 보이실 겁니다.
App Home을 클릭해서 App Home 메뉴로 이동합니다.그러면 다음과 같은 화면이 보이실텐데, 여기서 Your App`s Presence in Slack 에 보시면
Edit 버튼이 보이실 겁니다.
여기서 Edit 버튼을 클릭해 주세요.그러면 다음과 같은 창이 하나 뜨게 됩니다.
여기서 Display Name(Bot Nmae) 과 Default username 을 입력해 주세요.
그리고 Add 버튼을 클릭해서 추가해 줍니다.
저는 다음과 같이 입력했습니다.
- Display Nmae : test bot
- Default username : slacktest그러면 다시 좌측 메뉴에 보이는 OAuth & Permissions 메뉴로 이동합니다.
메뉴로 이동했으면 여기서 OAuth Tokens for Your Workspace 아래에 있는
Install to Workspace 버튼을 클릭해 주세요.그러면 아까와는 다른 다음과 같은 화면을 보실 수 있습니다.
여기서 허용 버튼을 클릭해 줍니다.허용 버튼을 클릭하면 다음과 같이 OAuth Tokens for Your Workspace 에
Bot User OAuth Token 이 생성된 걸 확인하실 수 있습니다.이제 기본적인 설정이 끝났습니다.
다음으로 할 일은, 채널을 만들어서, 채널에 우리가 만든 슬랙 봇을 초대하는 일을 해야 합니다.저는 아래와 같이, 테스트 채널에 방금 만든 테스트 용 슬랙(우리가 만든 App Name 입니다.) 을 초대 했습니다.
> /invite @테스트 용 슬랙그리고 또 하나, 채널에 슬랙 메세지를 보내기 위해서는 채널 ID를 알아야 합니다.
좌측에 있는 채널 # 테스트 를 우클릭해서 채널 세부정보 보기 를 클릭 합니다.
그러면 다음과 같은 화면이 나오는데, 맨 아래에 채널 ID가 있는 것을 확인할 수 있습니다.Slack 채널에 메세지를 보내기 위한 모든 준비는 끝났습니다.
이제, 코드를 작성해 보겠습니다.우선 Slack API가 필요합니다. https://github.com/slackapi/java-slack-sdk
Maven Central Repository에 가보시면, Slack API Client를 확인하실 수 있습니다.
저는 여기서 현재 제가 작성하고 있는 시점의 최신 버전인 1.28.1 버전의 라이브러리를 사용했습니다.의존성 관리 도구인 Mavne이나, Gradle에 추가해 주시거나
의존성 관리 도구를 사용하고 있지 않으시다면 직접 다운받아서 jar 파일로 추가하셔도 됩니다.그러면 이제 코드를 작성해서 슬랙 채널에 메세지를 보내보겠습니다.
public class SlackChatSender { public static void main(String[] args) throws SlackApiException, IOException { // Slack API token 입력 String slackToken = "OAuth Tokens for Your Workspace의 Bot User OAuth Token 입니다. xoxb로 시작합니다."; // Slack 객체 생성 Slack slack = Slack.getInstance(); // ChatPostMessageRequest 생성 ChatPostMessageRequest request = ChatPostMessageRequest.builder() .channel("C051DJ8SCJE") // 채널 ID .text("Hello, Slack!! :smile:") // 보낼 메시지 입력 .build(); // ChatPostMessage API 호출 ChatPostMessageResponse response = slack.methods(slackToken) .chatPostMessage(request); // API 호출 결과 확인 if (response.isOk()) { System.out.println("Message sent successfully!"); } else { System.out.println("Failed to send message. Error: " + response.getError()); } } }
이렇게 코드 작성 후 코드를 실행해 보시고 문제가 없다면,
다음과 같이 "Message sent successfully!" 가 출력 될 것입니다.그리고, 아래와 같이 Slack 채널에 Slack Bot이 보낸 메세지를 확인하실 수 있습니다.
End..!
추가
import static com.slack.api.model.block.Blocks.*; import static com.slack.api.model.block.composition.BlockCompositions.plainText; import static com.slack.api.model.block.element.BlockElements.asElements; import static com.slack.api.model.block.element.BlockElements.button; public class SlackChatSender { public static void main(String[] args) throws SlackApiException, IOException { // Slack API token 입력 String slackToken = "OAuth Tokens for Your Workspace의 Bot User OAuth Token 입니다. xoxb로 시작합니다."; // Slack 객체 생성 Slack slack = Slack.getInstance(); String slackChannel = "C051DJ8SCJE"; // Slack 메세지 발송 ChatPostMessageResponse response = slack.methods(slackToken).chatPostMessage(req -> req .channel(slackChannel) .blocks(asBlocks( header(header -> header.text(plainText(":mega: 안녕 Slack!!", true))), divider(), section(section -> section.text(plainText("반가워!"))), actions(actions -> actions .elements(asElements( button(b -> b.text(plainText(pt -> pt.emoji(true).text("데모1"))) .url("https://demo.com")), button(b -> b.text(plainText(pt -> pt.emoji(true).text("데모2"))) .url("https://demo2.com")) )) ) )) ); // API 호출 결과 확인 if (response.isOk()) { System.out.println("Message sent successfully!"); } else { System.out.println("Failed to send message. Error: " + response.getError()); } } }
위와 같이 코드를 작성해서 보내면 다음과 같이 메세지를 받을 수 있습니다.
진짜 End..!
'Etc' 카테고리의 다른 글
WebSocket 이란? WebSocket Best Practice! (0) 2025.04.05 AWS에서 Redis Master Slave 설정 (0) 2024.07.15 rfc7231 - 4.2 Common Method Properties (일부-멱등성) (0) 2022.08.18 수년 전 공부했던 TDD의 기억 (0) 2021.07.14 Visual Studio Code 에서 Git 사용법 (0) 2021.06.25