YUDA't

Python으로 SMS를 보내는 방법을 3가지로 추려보았다.


- AWS SMS

- Twilio

- 국내 서비스(쿨SMS)




AWS SMS


기본 개념

주제: 주제는 메시지 전송 및 알림 구독을 위한 커뮤니케이션 채널

구독: 구독 대상자는 HTTP/HTTPS, Email, SMS, Amazon SQS, Lambda 등이 될 수 있다. 이 구독 시스템을 통해 한 주제를 전체 구독자에게 배포할 수 있다.

key-value 형식으로 메시지 커스터마이징이 가능함


주의

서울 리전은 SMS 메시징이 지원되지 않음. 지원되는 리전 참고.


설정

SNS에서 문자 메시지(SMS) 카테고리 선택 후 문자 메시지 기본 설정 업데이트

- 유형에 따라 요금이 다를수도 있음(프로모션-중요도가 덜한 메시지 / 트랜잭션-중요한 메시지)

- 지출한도는 기본 월 1달러

- 로그 추적을 위해 IAM 역할 생성

- Default sender ID를 입력할 수 있으나 한국은 ID 지원이 안 됨

- 일일사용보고서를 저장하려면 S3 버킷 지정


Python 예시

다음 코드를 실행하면 특정 주제를 구독한 구독자들에게 메시지가 전송됨 publish() 속성 확인

import boto3

client = boto3.client(
    "sns",
    aws_access_key_id="",
    aws_secret_access_key="",
    region_name="ap-northeast-1" # 도쿄
)

# 주제에 대한 구독자 추가
topic_arn = 'arn:aws:sns:ap-northeast-1:xxxxxxxx:My-Alert'
client.subscribe(
    TopicArn=topic_arn,
    Protocol='sms',
    Endpoint='+8201012345678'
)

#  주제를 구독한 사람들에게 메시지 보내기
client.publish(
    TopicArn=topic_arn ,
    Message="파이썬 코드로 문자 보내기"
)

# 주제나 구독자를 정하지 않으면 다음과 같이 간단하게 구현 가능
client.publish(
    PhoneNumber="+8201011112222",
    Message="AWS SMS 파이썬 테스트"
)



Twilio


Twilio는 SMS, 음성, 어플리케이션 메시징 API를 지원하는 클라우드 커뮤니케이션 플랫폼이다.


개요

첫 가입 시 13달러 정도 줌

Trial 계정의 경우 API 사용에 제약은 없지만 메시지에 ‘sent from your twilio trial account’ 가 붙여 나옴


비고

가입 후 Twilio 전화번호를 발급받을 수 있는데, 미국 전화번호는 1달러, 한국 전화번호는 25달러

한국 전화번호는 SMS 서비스가 안 됨(음성메시지, 팩스만 가능)


Python 예시

먼저 twilio 모듈을 설치해야 함

from twilio.rest import Client

TWILIO_ACCOUNT_SID = ''
TWILIO_AUTH_TOKEN = ''
client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)

client.messages.create(
    to="+8201012345678",
    from_="+1511112222",  # twilio에서 발급받은 미국 전화번호
    body="트윌리오 테스트"
)



국내 서비스(쿨SMS)


국내 SMS API 서비스를 제공하는 업체 중 하나로, REST API 및 Python SDK로 구현가능하다.

참고: https://www.coolsms.co.kr/Python_SDK_Start_here


Step 1. Python SDK를 설치한다.

$ pip install coolsms_python_sdk


Step 2. CoolSMS에 회원가입한다.

가입을 하면 300 포인트를 무료로 받을 수 있다.


Step 3. API 키를 발급받는다.


Step 4. Python에서 발신번호를 등록한다.

테스트를 하기 위해서는 발신번호를 등록해야 한다. 발신번호 등록에는 1)Python으로 등록 2)웹에서 등록 두 가지 방법이 있다.

웹으로 발신번호를 등록하려면 전화인증 혹은 서류인증이 필요하며 전화인증은 6개월, 서류인증은 1년마다 갱신해야 한다. 참고로 전화인증이 훨씬 간단하다.


Step 5. Python에서 단문 메시지 보내기

import sys
from sdk.api.message import Message
from sdk.exceptions import CoolsmsException

##  @brief This sample code demonstrate how to send sms through CoolSMS Rest API PHP
if __name__ == "__main__":

    # set api key, api secret
    api_key = "#ENTER_YOUR_OWN#"
    api_secret = "#ENTER_YOUR_OWN#"

    ## 4 params(to, from, type, text) are mandatory. must be filled
    params = dict()
    params['type'] = 'sms' # Message type ( sms, lms, mms, ata )
    params['to'] = '01000000000' # Recipients Number '01000000000,01000000001'
    params['from'] = '01000000000' # Sender number
    params['text'] = 'Test Message' # Message

    cool = Message(api_key, api_secret)
    try:
        response = cool.send(params)
        print("Success Count : %s" % response['success_count'])
        print("Error Count : %s" % response['error_count'])
        print("Group ID : %s" % response['group_id'])

        if "error_list" in response:
            print("Error List : %s" % response['error_list'])

    except CoolsmsException as e:
        print("Error Code : %s" % e.code)
        print("Error Message : %s" % e.msg)

    sys.exit()




가장 사용하고 싶은 건 Twilio.


AWS를 정리할 때까지만 해도, 지금 사용하고 있는 AWS에서 SMS 서비스를 제공한다는데 굳이 다른 API를 찾을 필요가 있을까 싶었는데 Twilio를 테스트해보고는 생각이 바뀌었다. 정말 직관적이고 신뢰 가는 API였고, 특히 사이트 관리가 정말 잘 되어있어서 좋았다. 지금 순위를 정하라면 Twilio > AWS > 국내서비스 순.


다만, AWS와 Twilio는 국내 SMS 전화번호를 지원하지 않아 문자에 <국제발신>이라는 글자가 붙어버린다.