깃허브 프로젝트 링크를 들어가서 확인하면 코드를 볼 수 있습니다.


프로젝트를 선택한 이유

작년 3월부터 멋쟁이사자처럼 8기 멤버 모집을 하게 되었다.

당시 지원자 수는 약 90명 이상 되는 상황 이였으며,
신청 폼에는 연락처를 입력받아 서류 합격, 면접 안내 등

 

여러가지 내용에 대해서 문자로 안내를 했어야 했다.

운영진은 총 4명으로 여러가지 방법을 생각해보았지만

결국 최선의 방법은.. 인원수 대로 n분 하는 뿐 이였습니다.

 

중간에 연락처 적으면서 꺼버린 실수로 자주 일어나서 정신나갔다.

그리고 무엇보다 연락처를 하나하나 저장해서 전달하는 자체가
너무도 번거로웠고, 카카오톡 친구로도 떠서 불편했다...

탈락자분들도 많은데.. 애매모한 상황..

그래서 작년 2020년 3월때를 생각하여,
이번에는 어느 정도 비용을 지불 하여도 돈을 써서 손이 편해지는 방법을 찾았다.


SMS 문자서비스 API

여러 문자서비스 서비스를 찾으면서 발견한 사이트이다.

대부분의** 문자서비스는 유료로 되어있어서 어느 정도 감안했다.**
외국사이트로 Twilio 라는 사이트이다.

선택한 이유를 간단히 나열 해본다.

  1. API 사용법이 매우 간단.
  2. 개인 번호 유출할 일이 없이** 서버에서 제공해주는 번호를 사용**
  3. 결제 최소 금액이 가장 쌌다. (20달러 정도)

그렇게 가입을 하고나서 *API KEY + AUTH_TOKEN *값을 발급받았고,
Python을 기반으로 해서 간단하게 구현해보았다.

프로그래밍 과정

from twilio.rest import Client

# 문자 API id + token
account_sid = <API_ID>
auth_token  = <TWILIO_TOKEN>
client = Client(account_sid, auth_token)

 # 걸러진 전화번호를 저장하여 message API 사용
 message = client.messages.create(
         to='+82'+ PHONE_NUMBER, 
         from_="<SERVER_PHONE_NUMBER>",
         body="<메세지 내용>"
)

Python기반 API 호출 과정

  1. API 키값, 인증토큰을 전달하여 인증을 한다.
  2. message에 보내는 사람(from_)에 서버에서 제공하는 전화번호 값을 입력한다.
  3. 받는 사람(to)에 "국번"을 포함한 전화번호를 입력한다.
    한국의 경우 +82 붙혀주어서 전송하면 된다.
  4. 메세지 내용에(body) 메세지 내용을 추가해서 전송하면 된다.

이런 방식으로 전송 할 수 있다.

단, 주의 할 점

제대로 사용하기 위해서 유료버전을 사용해야한다.
무료로 사용 할 시, 발신 번호가 서버로부터 인증되어 있는 상태여야한다.

이 인증은 단순하게 번호 저장이 아닌, ARS인증 까지 거쳐야되서
사실 상, 전화번호만 아는 상대에게 메세지를 보내기 위해서는
유료 버전을 구매 해야한다는 점이다!

나같은 경우, 저번 해커톤에서 사용하기 위해 구매한 팀원이 있어서
커피 하나 사드리고 아이디를 빌려 받아서 사용했다. ^-^


사용하기 위한 커스텀 코드

지금 현재 같은 경우,
일일클래스 지원서를 통해 받은 인원들에게 안내 메세지를 보내야한다.

일일클래스 지원서는 구글 스프레드시트에 저장되게 만들어져서
csv파일 형식으로 받을 수 있었다.

그렇게 csv 파일 형식으로 내보내기 하여,
파이썬 코드로 원하는 값인 전화 번호를 뽑아야 했다.

그런데 전화번호 포맷팅을 설정을 안해주어서 2가지 전화번호 포맷이 보였다.

  • 번호만 입력 한 경우 ( 00011114444)
  • bar와 함께 입력한 경우 (000-1111-4444)

이 부분을 고려해서 파일을 읽고 슬라이싱해서 값을 저장해보았다.

# CSV 데이터열기

data_file = open('test.csv', 'r', encoding='utf-8')
reader = csv.reader(data_file)
for line in reader:
    # 단순하게 길이로 비교하여 나누었다.
    if len(line[4]) > 12:
        # split으로 '-'를 기준하여 나눠 리스트에 저장.
        temp = line[4].split('-')
        # 분리된 리스트를 공백없이 합쳐서 number_array에 저장
        number_array.append(''.join(temp))
    else:
        # 정상적인 입력 시, 바로 number_array에 저장
        number_array.append(line[4])

두 가지 포맷의 경우로만 걸러져서 전화번호 값이 배열에 저장되는 형식.


API_ID와 AUTH_TOKEN 숨기기

이 두 가지가 유출된다면, 다른 사람들이 마음대로 사용 할 수 있게 된다.
깃허브나 따로 유출 될만하게 사용하지 않을거라면 그냥 하면 되지만..

난 올릴 예정이기 때문에, 따로 빼서 저장해보았다.

{ 
  "auth_token":"<token 키>",
  "my_phone_number":"<서버 전화번호>"
}

위 코드는 secretkey.json 파일이다.

# Secret.json 읽기
with open('secretkey.json') as token:
    json_data = json.loads(token.read())
    TWILIO_TOKEN = json_data["auth_token"] 
    # 토큰 값 가져와서 저장
    MY_PHONE_NUMBER = json_data["my_phone_number"] 
    # 보내는 전화번호 저장(내전번)

그렇게 json파일로 받아온 값을 가져 옵니다.

이렇게 만들게 되면 키 값을 숨겨서, 로직을 공개 할 수 있게 됩니다.


워낙 간단한 토이프로젝트로 한 게시글로 마무리를 할 수 있었다.

최대 단점이란 역시 유료 서비스라는 것이 아닐까! 라고 생각한다.
무료서비스가 있으면 좋겠다만.. 없어서 아쉬울 뿐이다...

추가적으로 이를 이용해, 간단한 토이 프로젝트를 구성 해볼 생각이다.

복사했습니다!