티스토리 뷰

개발/API

네이버 SMS API

Dallaenae 2022. 4. 11. 20:39

네이버 SMS API 연동하기

 

https://www.ncloud.com/product/applicationService/sens

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

 

Simple & Easy Notification Service  이용 신청하기 > "+ 프로젝트 생성하기"

프로젝트 이름은 생성되면 수정할 수 없고 나머지는 변경할 수 있다.

우선 문자서비스 연동이므로 SMS 체크

 

 

 

아래와 같이 생성이 되고 서비스 ID 버튼을 눌러 소스코드에 넣을 "serviceid" 복사하여 개발할 소스에 붙여넣자

 

그리고 Access Key ID, Secret Key도 복사하여 소스에 붙여넣자

마이페이지 > 인증키 관리에서 확인할 수 있다.

이번에는 Calling Number 페이지로 이동하여 발신번호를 등록해야합니다.

 

빠른 테스트를 위해 유선번호는 사용하지 않고 핸드폰번호로 인증 받고 진행하였습니다.

 

 

인증키와 발신번호가 준비되었으니 이제 코드를 작성하자

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

 

SMS API - SENS

 

api.ncloud-docs.com

가이드를 보고 작성하면 된다.

참고로 가이드에 나와있는 중괄호는 당연히 빼야한다.

한참을 고생한 것 같다.;;

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

 

아래와 같이 Javascript 함수를 만들었다.

var sms_auth = {
  // 콘솔 > Simple & Easy Notification Service > Project > 서비스 ID
  serviceid : "serviceId",
  // 마이페이지 > 인증키 관리 > API 인증키 관리 > Access Key ID
  access_key : "Access Key ID",
  // 마이페이지 > 인증키 관리 > API 인증키 관리 > Secret Key
  secret_key : "Secret Key",
}

var body = {
  // 발신번호	사전 등록된 발신번호만 사용 가능
  from : "발신번호",
  // 수신번호	-를 제외한 숫자만 입력 가능
  to: "수신번호",
  subject : "테스트제목",
  content : "테스트내용",
  message : "테스트메시지"
}


function req_sms(sms_auth, body) {

  var headers = {
    method: "POST",
    // 콘솔 > Simple & Easy Notification Service > Project > 서비스 ID
    uri: "/sms/v2/services/"+`${sms_auth.serviceid}`+"/messages",
    // API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
    timestamp: new Date().getTime(),
    // 마이페이지 > 인증키 관리 > API 인증키 관리 > Access Key ID
    access_key: `${sms_auth.access_key}`,
  }
  
  // Signature 생성하기
  // 개행문자는 \n을 사용합니다.
  // 요청에 맞게 StringToSign을 생성하고 SecretKey로 HmacSHA256 알고리즘으로 암호화한 후 Base64로 인코딩합니다.
  // 이 값을 x-ncp-apigw-signature-v2로 사용합니다.
  // 주의
  // 요청 헤더의 x-ncp-apigw-timestamp 값과 StringToSign의 timestamp는 반드시 같은 값이여야 합니다.
  var signaturebuild = headers.method + " " + headers.uri + "\n" + headers.timestamp + "\n" + headers.access_key
  signaturebuild = Buffer.from(signaturebuild, 'utf8')

  // 마이페이지 > 인증키 관리 > API 인증키 관리 > Secret Key
  var hmac = crypto.createHmac('sha256', `${sms_auth.secret_key}`);
  hmac.write(signaturebuild);
  hmac.end();
  var signature = hmac.read().toString('base64')

  
  const options = {
    uri:'https://sens.apigw.ntruss.com'+`${headers.uri}`, 
    method: `${headers.method}`,
    headers: { 
      'Content-Type': 'application/json; charset=utf-8',
      'x-ncp-apigw-timestamp': `${headers.timestamp}`,
      'x-ncp-iam-access-key': `${headers.access_key}`,
      'x-ncp-apigw-signature-v2': `${signature}`
    },
    json:true,
    body: {
      "type":"MMS",
      "contentType":"COMM",
      "countryCode":"82",
      "from":`${body.from}`,
      "subject":`${body.subject}`,
      "content":`${body.content}`,
      "messages":[
          {
              "to":`${body.to}`,
              "subject":`${body.subject}`,
              "content":`${body.message}`
          }
      ]

    }
  }

  request.post(options, function(error, response, body){

    if( error != null ) {
      console.log('err:', error)
    }
    console.log('body:', body)

  })
}

반응형

'개발 > API' 카테고리의 다른 글

네이버 Short URL API  (0) 2022.04.08