programming/python

(python) SMS 보내기(with SENS)

limmmmm 2023. 3. 30. 17:11
반응형

파이썬에서 문자메시지 보내는 법에 대해서 알아보겠습니다. twilio도 사용해 보았는데 그것도 편리하긴 하지만 보낼 수 있는 사람이 한정적이고 아직까지는 한국에서 사용할 때 불편한점이 있어서 네이버 클라우드 플랫폼의 서비스를 이용해보았습니다.

1. SENS 이용 신청

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](https://www.ncloud.com/product/applicationService/sens)

  • 결제수단 등록해야 사용 가능

2. 프로젝트 생성

  • 이건 어렵지 않으니 패스

3. 생성 후 서비스ID의 키 모양 클릭 → service_key

4. calling number 탭에서 발신번호 등록 (SMS 인증)

  • 2개의 인증방법 중 1개만 해도 가능하니 좀 더 쉬운 문자인증으로 하세요

5. API 키 생성

6. 전체코드

import hmac, hashlib, base64
import time, requests, json

def make_signature(secret_key, access_key, timestamp, uri):
    secret_key = bytes(secret_key, 'UTF-8')
    method = "POST"
    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

access_key = "9gllXXXXXXXXXXXXXXXX"
secret_key = "fqAfXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
service_key = "ncp:sms:kr:XXXXXXXXXXXXXX:YYYYYYYYYY"

# <https://api.ncloud-docs.com/docs/ko/ai-application-service-sens-smsv2>
url = "<https://sens.apigw.ntruss.com>"
uri = f"/sms/v2/services/{service_key}/messages"

timestamp = int(time.time() * 1000)
timestamp = str(timestamp)

# 받는 상대방
number = "01000000000"

# message 내용
contents = "test sms"

header = {
    "Content-Type": "application/json; charset=utf-8",
    "x-ncp-apigw-timestamp": timestamp,
    "x-ncp-iam-access-key": access_key,
    "x-ncp-apigw-signature-v2": make_signature(secret_key, access_key, timestamp, uri)
}

# from : SMS 인증한 사용자만 가능
data = {
    "type":"SMS",
    "from":"01000000000",
    "content":contents,
    "subject":"SENS",
    "messages":[
        {
            "to":number,
        }
    ]
}

res = requests.post(url+uri,headers=header,data=json.dumps(data))
datas = json.loads(res.text)
reid = datas['requestId']

print("메시지 전송 상태")
print(res.text+"\\n")

주의사항

  • 23년 3월 기준, 1달 50건 까지 무료 이후 추가요금 발생할 수 있으니 맞춰서 사용하세요
  • 작성할 때 아래 포스팅을 참고했어요

https://blog.naver.com/PostView.naver?blogId=kimnr123&logNo=222329335568&categoryNo=20&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView 

 

[파이썬] 문자발송 API 완벽이해하기 ( feat. SENS, ncloud API)

문자 발송 서비스인 SENS API를 활용하기전에 사전 지식이 필요합니다. 1. HTTP 요청을 보내는 ...

blog.naver.com

 

반응형