이 방법은 하나의 예시입니다.
import hashlib import hmac import base64 import requests import time import json import os def make_signature(uri, access_key, timestamp): secret_key = os.environ['NBP_SECRET_KEY'] 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 def lambda_handler(event, context): # TODO implement timestamp = int(time.time() * 1000) timestamp = str(timestamp) url = "https://sens.apigw.ntruss.com" requestUrl = "/sms/v2/services/" requestUrl2 = "/messages" serviceId = os.environ['NBP_SERVICE_ID'] access_key = os.environ['NBP_ACCESS_KEY'] uri = requestUrl + serviceId + requestUrl2 apiUrl = url + uri messages = { "to" : os.environ['RECV_PHONE_NUMBER'] } body = { "type" : "SMS", "contentType" : "COMM", "from" : os.environ['SEND_PHONE_NUMBER'], "subject" : "제목은 SMS에서는 안가요.", "content" : "내용이 전달됩니다. 하하하.", "messages" : [messages] } body2 = json.dumps(body) 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': make_signature(uri, access_key, timestamp) } res = requests.post(apiUrl, headers=headers, data=body2) return { 'statusCode': res.status_code, 'body': res.json() } |
반복 호출 방지, 안전한 환경 변수 보관(AWS Secrets Manager) 등을 고려하면 좋습니다.
Amazon Pinpoint의 커스텀 채널로 국가별로 SNS 채널을 확장할때 활용할 수 있습니다.