알림톡 플로우
1. 카카오 비즈니스 계정 / 채널 등록.
2. 템플릿 등록
3. Ncloud 알림 서비스 설정 (서비스아이디, accessKey, secretKey, plusfriendId)
4. 서버에서 알림톡 발송 API 호출
5. 응답 처리 & 실패 대비
알림톡 API
https://api.ncloud-docs.com/docs/ko/ai-application-service-sens-alimtalkv2
알림톡 API
api.ncloud-docs.com
해당 링크에서 알림톡에 필요한 오픈 API 가 있는데, 필자는 해당 가이드 참고하여 개발하였음.
먼저 개발하기 위한 조건이 있다.
위의 알림톡 플로우에 3번까지는 되어있어야 알림톡을 발송할 수 있다.
그리고 해당 API 가이드 문서가 많아 보이지만, 실제로 개발해보면 공통적인 요소들 즉, HtttpHeader 값이나, 전체적인 구조들이 상당히 비슷하다.
구현 과정
1. Ncloud API 에 나와있는 암호화 encoding 코드 가져오기
- Ncloud 에서 발급받은 secretKey 를 HmacSHA256 방식으로 signature 을 만들고(HMAC 알고리즘 키를 만든다) , Base64 로 인코딩 하는 작업을 한다.
해당 메서드는 알림톡 API 요청 시 signature 헤더로 사용된다.
// Ncloud API 참조
private String makeSignature(String method, String requestUri, String timestamp, String accessKey, String secretKey ) throws NoSuchAlgorithmException, InvalidKeyException {
String space=" ";
String newLine = "\n";
String message = method + space + requestUri + newLine + timestamp + newLine + accessKey;
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8),"HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(rawHmac);
}
2. apiUri 및 HttpHeader 설정
- apiUri 는 각각 사용하고자 하는 API 가이드에 맞게 사용하면 된다.
- api 가이드에 맞는 헤더를 보내준다.
// http 헤더
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("x-ncp-apigw-timestamp", timestamp);
headers.set("x-ncp-iam-access-key", ACCESS_KEY);
headers.set("x-ncp-apigw-signature-v2", signature);
3. restTemplate 을 통한 요청
- apiuri 는 내가 사용하고자 하는 api
- method 는 httpMethod 인지
- httprequest 는 앞서 설정한 httpheader
- CParam.class 는 서버로부터 올 응답을 어떤 타입의 데이터로 받을건지
HttpEntity<CParam> entity = restTemplate.exchange(apiUri, method, httpRequest, CParam.class);
4. 실제 템플릿에 맞게 요청 해보기 (성공했다면 이런 식으로 옴)
'JAVA (SPRING)' 카테고리의 다른 글
[JAVA] Spring WebFlux 에서 FCM(FireBase Cloud Messaging) 보내기 (1) | 2025.04.17 |
---|---|
[JAVA] ObjectUtils, CollectionUtils (3) | 2025.03.06 |
[JAVA] LinkedHashSet (0) | 2025.03.05 |
IP-PBX 와 IP-Centrex 방식의 차이 (0) | 2025.02.18 |
OSI 7 Layer, TCP/IP 4Layer (0) | 2025.02.17 |