카카오 알림톡 API (네이버 클라우드 플랫폼) 설정법 및 예제 코드
첫 블러그 포스팅입니다!
Ncloud에서는 카카오 알림톡, 친구톡 등을 발송할 때 사용할 수 있는 API를 제공하고 있습니다. 이하 내용은 Ncloud SENS콘솔에서 템플릿 설정 방법과 node.js를 이용해 서버에서 Ncloud API를 통해 카카오톡 알림톡을 전송하는 코드에 대한 설명입니다 :)
필요사항(Requirements)
관리자로 등록되어 있는 카카오톡 채널 // 카카오톡 채널은 사업자등록번호를 사용해 만들 수 있습니다.
Ncloud Simple&Easy Notification Service(SENS)에서 채널 등록
Ncloud 계정
Ncloud API key // 콘솔 우측 상단 프로필 - 계정 관리에서 API키를 복사해 두세요.
Node.js가 설치된 서버
Node 모듈 (crypto-js, request) // npm install [모듈 이름]
템플릿 작성법
간단합니다. 원하는 템플릿 유형을 그대로 적고 변수가 들어가는 부분에서만 #{변수 이름}으로 적으면 됩니다. 단, 광고성 정보 등은 알림톡에서 허용하지 않기 때문에 템플릿 검수 과정에서 반려될 수 있음을 주의하세요.
템플릿 예(기본형 또는 부가 정보형):
오늘의 날씨
#{today}의 날씨는 #{weather}입니다. 좋은 하루 보내세요!
코드에서 API로 값을 넘길 때는 이렇게 적으시면 됩니다. 자바스크립트에서 개행은 \n으로 적어야 정상적으로 처리됩니다.
content: `오늘의 날씨\n\n${today}의 날씨는 ${weather}입니다. 좋은 하루 보내세요!`
사실 변수 부분에는 어떤 글자를 넣어도 상관없습니다. 템플릿에 변수로 설정해 놓았더라도 content값에는 변수 대신 텍스트로 작성하셔도 됩니다. 대신, 다른 부분은 템플릿과 정확히 일치해야 합니다.
content: `오늘의 날씨\n\n${today}의 날씨는 ${weather}입니다. 파이팅!` //에러
content: `오늘의 날씨\n${today}의 날씨는 ${weather}입니다. 좋은 하루 보내세요!`//에러
예제 코드
var CryptoJS = require("crypto-js");
var SHA256 = require("crypto-js/sha256");
var Base64 = require("crypto-js/enc-base64");
const request = require('request');
const receiver = "01012345678"; //수신자 전화번호 설정하세요
//이 부분은 필요에 맞게 변수를 설정하세요
const today = "8월 20일 토요일";
const weather = "맑음";
//원하는 변수를 설정해서 사용하세요!
const date = Date.now().toString();
const uri = "서비스 아이디 입력하세요"; //알림톡 프로젝트에서 표시되는 서비스 ID
const accessKey = "액세스 키 입력하세요"; //API ACESS KEY
const secretKey = "시크릿 키 입력하세요"; //API SECRET KEY
const method = "POST";
const space = " ";
const newLine = "\n";
const url = `https://sens.apigw.ntruss.com/alimtalk/v2/services/${uri}/messages`;
const url2 = `/alimtalk/v2/services/${uri}/messages`;
const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(method);
hmac.update(space);
hmac.update(url2);
hmac.update(newLine);
hmac.update(date);
hmac.update(newLine);
hmac.update(accessKey);
const hash = hmac.finalize();
const signature = hash.toString(CryptoJS.enc.Base64);
request(
{
method: method,
json: true,
uri: url,
headers: {
"Content-type": "application/json; charset=utf-8",
"x-ncp-apigw-timestamp": date,
"x-ncp-iam-access-key": accessKey,
"x-ncp-apigw-signature-v2": signature,
},
body: {
plusFriendId: "@채널 이름", //카카오톡 채널 이름
templateCode: "알림톡 템플릿 코드", //승인된 템플릿의 템플릿 코드
messages: [
{
to: receiver,
content: `오늘의 날씨\n\n${today}의 날씨는 ${weather}입니다. 좋은 하루 보내세요!`,
useSmsFailover: true,
failoverConfig: {
type: "LMS",
from: `발신자번호`, //알림톡전송 실패 시 SMS로 전송 시도
subject: "anything",
content: `오늘의 날씨\n\n${today}의 날씨는 ${weather}입니다. 좋은 하루 보내세요!`
}
},
],
},
},
);
다른 템플릿 유형을 적용할 때 필요한 Request Body 작성법입니다. 자세한 설명은 공식 문서(링크)를 참고하세요!
알림톡 API - Simple & Easy Notification Service
api.ncloud-docs.com
{
plusFriendId:"string",
templateCode:"string",
messages:[
{
countryCode:"string",
to:"string",
title:"string",
content:"string",
headerContent:"string",
itemHighlight:{
title:"string",
description:"string"
},
item:{
list:[
{
title":"string",
description":"string"
}
],
summary:{
title:"string",
description:"string"
}
},
buttons:[
{
type:"string",
name:"string",
linkMobile:"string",
linkPc:"string",
schemeIos:"string",
schemeAndroid:"string"
}
],
useSmsFailover: boolean,
failoverConfig: {
type: "string",
from: "string",
subject: "string",
content: "string"
}
}
],
reserveTime: "yyyy-MM-dd HH:mm",
reserveTimeZone: "string",
scheduleCode: "string"
}