[이렇게 사용하세요!] SMS 문자 메시지 발송 앱 사용하기 (SENS API 활용법)

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM
10 min readAug 20, 2021

네이버클라우드 개발자가 직접 알려드리는 클라우드 활용법 [이렇게 사용하세요] 시리즈.​

오늘은 네이버 클라우드 플랫폼의 Simple & Easy Notification Service 서비스를 활용하여 만든 SMS 메시징 앱으로 문자 메시지 발송 방법을 알려드리겠습니다.

Simple & Easy Notification Service (SENS) 서비스 소개

비즈니스 운영에 꼭 필요한 메시지 및 알람 전송 기능을 간편하게 구현해 주는 서비스입니다. 메시지 전송 현황을 실시간으로 확인하고, 전송 이력을 특정 기간 별로 조회할 수 있어 효율적인 서비스 운영이 가능합니다.​

👉SENS 소개 페이지 : https://www.ncloud.com/product/applicationService/sens

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

SENS의 기본적인 사용법은 아래 가이드 문서를 통해 확인하실 수 있습니다.

서비스 사용을 위해선 사용 등록과 프로젝트 생성이 필요합니다.

https://guide.ncloud-docs.com/docs/sens-sens-1-2

그럼 본격적으로 메시징 APP 사용 방법을 알아보겠습니다.

  1. 샘플 APP 사용에 앞서 Access Key ID와 Secret Key 정보를 확인합니다.

👉인증키 관리 : 네이버 클라우드 플랫폼 메인 페이지 > 마이페이지 > 인증키 관리

* ncloud.com 로그인이 필요합니다.

2. 콘솔 > SENS 메뉴에서 프로젝트 생성 후, 우측 열쇠 아이콘을 클릭합니다.

3. 서비스 ID 확인 창에서 ‘ServiceId’를 확인합니다.

​​

4. 아래는 샘플로 제작한 메시징 APP입니다. 본인의 목적에 맞게 수정하여 활용하실 수 있습니다.​

https://github.com/Planet15/ncloud_infra_example/tree/master/ncloud_sne_ncp

config.ini 진입 후 화면

config.ini 진입 후 아래 항목을 수정합니다.​

📍 server_ip : 운영하고 싶은 서버 IP를 지정합니다. (테스트 용도로 0.0.0.0 을 지정했습니다.)

📍 server_port : REST API를 받기 위해 열어두는 포트입니다. (저는 9981 포트를 지정했습니다.)

📍 sms_url : Open API 사용과 전송을 위한 페이지 URL을 지정합니다.

여기서 중요한 부분은 sms_uri 를 공통으로 사용해야 한다는 점인데요.

sms_uri은 기본적으로 /sms/v2/services/”serviceId”/messages 조합으로 만들어집니다.​

예를 들어, serviceIdncp:sms:kr:25711212129846:test 인 경우 /sms/v2/services/ncp:sms:kr:25711212129846:test/messages 로 사용 하시면 됩니다.​

그래서 전체 sms_url는 아래와 같이 구성됩니다.

https://sens.apigw.ntruss.com/sms/v2/services/ncp:sms:kr:25711212129846:test/messages

📍 sms_type : 메시지 타입으로, 단문은 SMS, 장문은 LMS입니다.

📍 sms_from_countryCode : 국가 번호를 뜻하며, 저는 한국에 있으니 82를 입력했습니다.

📍 sms_from_number : 발신 번호입니다. 발신용 번호는 콘솔에서 미리 등록되어 있어야 합니다.

* 발신번호 등록 방법은 가이드(링크)를 참고해 주세요.

* 미등록 시 문자 메시지 서비스 사용이 불가하니, 이 점 유의해 주세요.​

위의 과정을 통해 아래와 같이 config.ini 파일이 완성됩니다.

[server]
server_ip = 서버아이피
server_port = 서버포트번호
[sms]
sms_url = https://sens.apigw.ntruss.com"sms_uri"
sms_access_key = Access Key ID
sms_secret_key = Secret Key
sms_uri = /sms/v2/services/" serviceId"/messages
sms_type = LMS sms_from_countryCode = 국가번호
sms_from_number = 등록된 보내는 전화번호
sms_to_number = 받는 전화번호

아래는 x-ncp-apigw-signature-v2 를 만들기 위한 python 함수를 구현한 내용입니다.

...
def make_signature(access_key, secret_key, method, uri, timestmap):
timestamp = str(int(time.time() * 1000))
secret_key = bytes(secret_key, 'UTF-8')
message = method + " " + uri + "\n" + timestamp + "\n" + access_key
message = bytes(message, 'UTF-8')
signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
return signingKey
...

그리고 Open API 사용을 위해 아래 코드를 구현하였습니다.

...
def send_sms(phone_number, subject, message):
# URL
url = sms_url
# access key
access_key = sms_access_key
# secret key
secret_key = sms_secret_key
# uri
uri = sms_uri
timestamp = str(int(time.time() * 1000))
body = {
"type":sms_type,
"contentType":"COMM",
"countryCode":sms_from_countryCode,
"from":sms_from_number,
"content": message,
"messages":[
{
"to": phone_number,
"subject": subject,
"content": message
}
]
}
key = HelloWorld.make_signature(access_key, secret_key, 'POST', uri, timestamp)
headers = {
'Content-Type': 'application/json; charset=utf-8',
'x-ncp-apigw-timestamp': timestamp,
'x-ncp-iam-access-key': access_key,
'x-ncp-apigw-signature-v2': key
}
res = requests.post(url, json=body, headers=headers)
print(res.json())
return res.json()
...

5. python3에서 필수 모듈에 대해 패키지 리스트(requirements.txt)를 맞추고, main.py를 실행합니다.

  • python 버전 3.6.8 을 활용했습니다.
# git clone git@github.com:Planet15/ncloud_infra_example.git
# cd ./ncloud_infra_example/ncloud_sne_ncp/
# pip3 install -r requirements.txt
# python3 main.py
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:9981/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 773-397-042

컨테이너 형태로 구동 시 아래 방법을 참고합니다. 저는 9981 포트를 사용했기 때문에, 9981 포트를 포워딩하였습니다.

# docker build --tag python-docker .
# docker images
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python-docker latest 8fed40d4dd70 3 hours ago 184 MB
# docker run -d -p 9981:9981 python-docker:latest

6. REST API 관련 테스트 툴을 이용하여 메시지를 호출해 보았습니다.

7. 문자 메시지 발송 내용을 확인합니다.

위 구현 원리를 이해하시면, 이를 응용하여 원하는 샘플을 구성하실 수 있습니다.

자세한 가이드는 아래 문서를 참고해 주세요.​

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

작년 10월, 유사한 내용으로 진행했던 웨비나 영상도 함께 공유드립니다.

ncloud.com 웹 콘솔, Swagger, 그리고 PHP 프로그램을 활용한 문자 전송 방법을 데모로 보여드립니다.

​관련하여 궁금하신 사항은 언제든 아래 댓글 또는 페이스북 유저 그룹에 남겨주세요.

* 본 포스팅은 네이버클라우드 Cloud Advocate 송창안 님이 작성해 주셨습니다.
누구나 쉽게 시작하는 클라우드 — ncloud.com

--

--

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM

We provide cloud-based information technology services for industry leaders from startups to enterprises.