장교 휴대폰 메시지 발송

손성수·2023년 7월 6일
0
post-thumbnail

사용 목적

안내 메시지 및 인증 번호 발송


API

  • Simple & Easy Notification Service
  • 선정 이유 : 저렴하고, 공식문서가 잘 나와 있어 개발이 쉽다.

프로젝트 등록 하기

네이버 클라우드 플랫폼

  • 클라우드 플랫폼 콘솔 입장


  • 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 발송

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)
        )
profile
더 노력하겠습니다

0개의 댓글