기타

네이버 클라우드 SENS(Simple & Easy Notification Service) api와 node.js 연동하여 문자 서비스 이용하기

각 api 코드에 대한 자세한 내용은 다음 주소를 참고.

https://api.ncloud-docs.com/docs/ai-application-service-sens-smsv2

 

 

뼈대 코드

function send_message(phone) {
  var user_phone_number = phone;//수신 전화번호 기입
  var resultCode = 404;
  const date = Date.now().toString();
  const uri = ; //서비스 ID
  const secretKey = ;// Secret Key
  const accessKey = ;//Access Key
  const method = "POST";
  const space = " ";
  const newLine = "\n";
  const url = `https://sens.apigw.ntruss.com/sms/v2/services/${uri}/messages`;
  const url2 = `/sms/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: {
      api 요청 URL 부분 코드를 참고하여 작성
    },
    body: {
      요청 Body 부분 코드를 참고하여 작성
  },
    function (err, res, html) {
      if (err) console.log(err);
      else { resultCode = 200; console.log(html); } // console.log(html)는 요청 상태를 반환한다.
    }
  );
  return resultCode;
}

 

 

 

api 코드

요청 URL
POST https://sens.apigw.ntruss.com/sms/v2/services/{serviceId}/messages

요청 헤더에 넣는 코드
Content-Type: application/json; charset=utf-8
x-ncp-apigw-timestamp: {Timestamp}
x-ncp-iam-access-key: {Sub Account Access Key}
x-ncp-apigw-signature-v2: {API Gateway Signature}

요청 바디에 넣는 코드
{
    "type":"(SMS | LMS | MMS)",
    "contentType":"(COMM | AD)",
    "countryCode":"string",
    "from":"string",
    "subject":"string",
    "content":"string",
    "messages":[
        {
            "to":"string",
            "subject":"string",
            "content":"string"
        }
    ],
    "files":[
        {
            "name":"string",
            "body":"string"
        }
    ],
    "reserveTime": "yyyy-MM-dd HH:mm",
    "reserveTimeZone": "string",
    "scheduleCode": "string"
}

 

 

 

 

문자 보내기 완성 코드

모듈 설정 코드

const express = require("express");
const CryptoJS = require("crypto-js");
const request = require("request");
const app = express();
const port = 3000;

메시지를 보내는 함수

function send_message(phone) {
  var user_phone_number = phone;//수신 전화번호 기입
  var resultCode = 404;
  const date = Date.now().toString();
  const uri = process.env.SERVICE_ID; //서비스 ID
  const secretKey = process.env.NCP_SECRET_KEY;// Secret Key
  const accessKey = process.env.NCP_KEY;//Access Key
  const method = "POST";
  const space = " ";
  const newLine = "\n";
  const url = `https://sens.apigw.ntruss.com/sms/v2/services/${uri}/messages`;
  const url2 = `/sms/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: {
      "Contenc-type": "application/json; charset=utf-8",
      "x-ncp-iam-access-key": accessKey,
      "x-ncp-apigw-timestamp": date,
      "x-ncp-apigw-signature-v2": signature,
    },
    body: {
      type: "SMS",
      countryCode: "82",
      from: //"발신번호기입",
      content: //문자내용 기입,
      messages: [
        { to: `${user_phone_number}`, },],
    },
  },
    function (err, res, html) {
      if (err) console.log(err);
      else { resultCode = 200; console.log(html); }
    }
  );
  return resultCode;
}

서버 통신 코드

app.get('/sms/:phone', (req, res) => {
  const paramObj = req.params;
  send_message(paramObj.phone);
  res.send("complete!");
});