카테고리 없음
카카오워크 api 사용해보기
유정♡
2025. 6. 17. 11:11
참고 문서 : https://docs.kakaoi.ai/kakao_work/
[ 봇(Bot) 설정 ]
1. test 용 워크스페이스 생성 -> 카카오워크 홈페이지 관리자로 로그인
2. 알림 메세지 보낼 봇(Bot) 관리할 개발자 등록
봇(Bot) 관리 -> 봇(Bot) 개발자 관리 -> 개발자 추가 등록 -> 권한 부여할 멤버 이름 검색 후 추가
3. 알림 메세지 보낼 봇(Bot) 생성
봇(Bot) 관리 -> 봇(Bot) 개발 -> 봇(Bot) 생성하기 -> 이름 & 한 줄 설명 & 문의 설정 후 생성
생성한 봇 관리에 왼쪽 연필 아이콘 클릭(봇 수정가능) -> App Key 확인
이때, App Key를 하드코딩 하여 토큰이 외부에 노출되면 누구나 내 워크스페이스 사용자에게 메시지를 전송할 수 있음
실수로 GitHub 등 외부 저장소에 올라가면 위험도가 매우 큼
application.properties 또는 application.yml에 분리해서 관리
[ 게시글 등록 완료 시 카카오워크 알림 자동 발송하기 (Java + Spring) ]
✅ DB에 저장된 이메일 주소와 카카오워크 워크스페이스 유저 이메일을 비교하여 해당 사용자에게 게시글 등록 완료 알림을 자동으로 보내는 기능을 구현
1. DB에 저장된 이메일 주소 조회 -> 카카오워크 API로 해당 유저 존재 여부 확인 -> 메시지 종류 선택 (예: BOARD_REGISTER) -> 메시지 전송
package com.example.service;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.HashMap;
import java.util.Map;
public class KakaoWorkService {
private static final String API_SEND_URL = "https://api.kakaowork.com/v1/messages.send_by_email";
private static final String API_FIND_USER_URL = "https://api.kakaowork.com/v1/users.find_by_email";
private static final String KAKAOWORK_BOT_TOKEN = "봇_토큰"; // 실제 발급받은 토큰으로 대체
private final RestTemplate restTemplate = new RestTemplate();
// 메인 메서드: 이메일로 카카오워크 메시지 전송
public void sendMessage(String email, String type) {
if (email == null || !checkUserExists(email)) {
System.out.println("[카카오워크] 유저를 찾을 수 없음: " + email);
return;
}
KakaoMessageType messageType = KakaoMessageType.from(type);
Map<String, Object> body = new HashMap<>();
body.put("email", email);
body.put("text", messageType.getMessage());
HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, createHeaders());
try {
ResponseEntity<String> response = restTemplate.postForEntity(API_SEND_URL, request, String.class);
System.out.println("[카카오워크] 메시지 전송 결과: " + response.getBody());
} catch (Exception e) {
System.err.println("[카카오워크] 메시지 전송 실패: " + e.getMessage());
}
}
// 유저 존재 여부 확인
private boolean checkUserExists(String email) {
try {
String url = UriComponentsBuilder
.fromHttpUrl(API_FIND_USER_URL)
.queryParam("email", email)
.build()
.toUriString();
HttpEntity<String> request = new HttpEntity<>(createHeaders());
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
String responseBody = response.getBody();
return responseBody != null && responseBody.contains("\"success\":true");
} catch (Exception e) {
System.err.println("[카카오워크] 사용자 확인 실패: " + e.getMessage());
return false;
}
}
// 인증 헤더 생성
private HttpHeaders createHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + KAKAOWORK_BOT_TOKEN);
return headers;
}
// 메시지 종류 enum 정의
public enum KakaoMessageType {
BOARD_REGISTER("✅ 게시글 등록이 완료되었습니다."),
INCOMING_CALL("📞 전화가 왔습니다."),
DEFAULT("🔔 알림이 도착했습니다.");
private final String message;
KakaoMessageType(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public static KakaoMessageType from(String type) {
for (KakaoMessageType t : values()) {
if (t.name().equalsIgnoreCase(type)) {
return t;
}
}
return DEFAULT;
}
}
}
// 1. DB에서 account_id로 이메일 조회
String email = accountMapper.selectEmailByAccountId(accountId);
// 2. 조회된 이메일로 메시지 전송
kakaoWorkService.sendMessage(email, "BOARD_REGISTER");
<select id="selectEmailByAccountId">
SELECT email
FROM account
WHERE account_id = #{ACCOUNT_ID}
</select>
- BOARD_REGISTER 같은 타입을 enum으로 관리하면 확장/유지보수가 쉬워지게 작성
- checkUserExists()로 반드시 유저 존재를 확인하고 보내야 오류를 방지함
728x90