Slack 봇으로 사용자에게 DM 보내는 방법: Java + Spring 기반 구현

Kim jisu·2025년 3월 24일

TIL

목록 보기
23/43

Slack은 팀 커뮤니케이션 도구일 뿐 아니라, 다양한 자동화와 알림 시스템을 연동할 수 있는 강력한 API를 제공합니다. 이 글에서는 Java(Spring) 기반 서버에서 Slack 봇을 활용해 사용자에게 DM(Direct Message)을 보내는 과정을 소개합니다.

✅ 목표

Slack 앱을 생성하고, 적절한 권한과 Webhook을 설정한 뒤, 서버 코드에서 특정 사용자에게 메시지를 전송합니다.


1️⃣ Slack 앱 생성 및 설정


슬랙 앱 -> 워크스페이스 -> 더보기 -> 앱 -> slack marketplace -> slack 페이지 접속


우측 상단 구축 -> slack api 접속

🔨 Step 1: Slack 앱 생성

  1. Slack API 페이지 접속

  2. 우측 상단 Your Apps 클릭

  3. Create New App 클릭 → From scratch 선택

🧾 Step 2: App 권한 설정

  • 좌측 메뉴에서 OAuth & Permissions로 이동
  • Bot Token Scopes에서 chat:write 추가
    👉 채널에 메시지를 보낼 수 있는 권한입니다.

🔗 Step 3: Webhook 설정 (선택)

  • Incoming Webhooks 활성화
    webhook 설정
  • Webhook URL을 이용하면 간단한 메시지 전송이 가능합니다.

2️⃣ 앱 설치 및 토큰 발급

  • 좌측 메뉴 Install App 클릭 → 워크스페이스에 설치
  • 설치 후 Bot User OAuth Token을 복사합니다.
  • 이 토큰은 API 호출 시 인증용으로 사용됩니다.

3️⃣ Java 코드로 메시지 전송하기

이제 Spring 기반 Java 서버에서 Slack API를 호출해봅시다.

public void sendDirectMessage(String userId, String message) throws Exception {
    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.setBearerAuth(slackToken); // 발급받은 Bot 토큰 사용

    Map<String, Object> requestBody = new HashMap<>();
    requestBody.put("channel", userId); // Slack의 사용자 ID
    requestBody.put("text", message);   // 전송할 메시지

    HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers);
    String response = restTemplate.postForObject(slackUrl, request, String.class);

    ObjectMapper mapper = new ObjectMapper();
    JsonNode jsonNode = mapper.readTree(response);
    if (!jsonNode.path("ok").asBoolean()) {
        throw new BaseException(Code.SLACK_SEND_FAIL); // 커스텀 예외 처리
    }
}
  • slackUrl: https://slack.com/api/chat.postMessage
  • userId: UXXXXXXXX 형식의 Slack 사용자 ID
    👉 사용자 ID는 [Users API]로 조회 가능

📌 참고: Slack 앱을 채널 또는 사용자에게 추가하기

Slack 앱이 메시지를 보내려면 대상 채널 또는 사용자와 연결되어 있어야 합니다. 앱을 추가하려면 Slack의 앱 디렉토리 또는 사이드바의 앱 메뉴에서 직접 추가 가능합니다.


✅ 마무리

Slack API는 비교적 직관적이고, chat.postMessage 하나로 봇 메시지를 전송할 수 있습니다.

profile
Dreamer

0개의 댓글