안내 메시지 및 인증 번호 발송
프로젝트 등록 하기
- 클라우드 플랫폼 콘솔 입장
- Simple & Easy Notification Service 클릭
- 사용 목적에 맞춰 프로젝트 생성
- 발신 번호 등록
- 클라우드 플랫폼에서 계정 인증하기
- 개인 access Key ID, Secret Key 저장
네이버 Simple & Easy Notification Service 개발 가이드
환경 변수 및 URI 설정
NAVER_SMS_ACCESS_KEY = os.environ.get('NAVER_SMS_ACCESS_KEY') NAVER_SMS_SECRET_KEY = os.environ.get('NAVER_SMS_SECRET_KEY') NAVER_SMS_PROJECT_ID = os.environ.get('NAVER_SMS_PROJECT_ID') SENDING_URI = f'https://sens.apigw.ntruss.com/sms/v2/services/{NAVER_SMS_PROJECT_ID}/messages' URL = "https://sens.apigw.ntruss.com" URI = f'/sms/v2/services/{NAVER_SMS_PROJECT_ID}/messages' CALLING_NUMBER = os.environ.get('CALLING_NUMBER')
> NAVER_SMS_ACCESS_KEY 클라우드 플랫폼 개인 Access KEY > NAVER_SMS_SECRET_KEY 클라우드 플랫폼 개인 Secret KEY > NAVER_SMS_PROJECT_ID Simple & Easy Notification Service 프로젝트의 ID > CALLING_NUMBER 프로젝트에 등록된 발신 번호
네이버 클라우드 클랫폼 시그니쳐 생성
- 주의사항
공식문서에서는 get 요청으로 되어 있지만
post 요청으로 변경해줘야 한다.
- 이외에는 공식문서가 너무나 잘 나와 있기 때문에
그대로 복사 붙여넣기만 해줘도 구현이 완료 된다.
@classmethod
def make_signature(cls, timestamp):
access_key = 클라우드 플랫폼 개인 Access KEY
secret_key = 클라우드 플랫폼 개인 Secret KEY
secret_key = bytes(secret_key, 'UTF-8')
method = "POST"
uri = URI
message = method + " " + uri + "\n" + timestamp + "\n" + access_key
message = bytes(message, 'UTF-8')
signing_key = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
return signing_key
sms 발송
- 일반 메시지의 JSON 데이터 예시 >> body
- SMS 발송 요청의 헤더 양식 >> header
@classmethod
def send_sms(cls, phone_number, content):
"""
메시지 발송
request
- phone_number : '-'를 제외한 숫자만 입력
- content : 80byte 를 넘지 않는 길이
"""
timestamp = str(int(time.time() * 1000))
header = {
"Content-Type": "application/json; charset=utf-8",
"x-ncp-apigw-timestamp": timestamp,
"x-ncp-iam-access-key": NAVER_SMS_ACCESS_KEY,
"x-ncp-apigw-signature-v2": cls.make_signature(timestamp),
}
body = {
"type": "SMS",
"contentType": "COMM",
"countryCode": "82",
"from": '발신 번호 등록',
"content": content,
"messages": [
{
"to": phone_number,
}
]
}
requests.post(
SENDING_URI,
headers=header,
data=json.dumps(body)
)