본문 바로가기
프로젝트

[twilio] 스트림릿으로 문자 발송 구현하기 - 최종편

by 포 키 2023. 11. 20.
728x90

먼저 이번 포스팅에서 다룰 부분은 이전 포스팅에서 언급된 부분에서 동의하기 버튼이 달라진 것밖에 없다.

해당 포스팅에서는 내용이 이전 포스팅에서 다뤘던 부분은 크게 다루지 않을 예정이다.

문자 발송을 구현하고자 또는 개인적으로 공부하려고 보는 사람이라면, 앞의 포스팅을 먼저 보고오길 권한다.

2023.11.17 - [프로젝트] - [twilio] 무료 크레딧으로 파이썬 문자 발송하고 스트림릿 배포하기!

 

[twilio] 무료 크레딧으로 파이썬 문자 발송하고 스트림릿 배포하기!

오늘은 프로젝트에서 진행할 스트림릿에서 문자 발송하기를 구현해봤다. 먼저 twilio가 잘 되는지 확인하는 것은 간단했다. 회원가입을 하면 15 달러의 크레딧을 주는데 무료로 테스트 해볼 사람

forky-develop.tistory.com

 

 

지난 문제점

지난번의 문제점은 문자가 발송은 되지만, main 함수 안에서 이루어진게 아니어서 발생했다.

결론만 말하자면, main 함수안에서 전송하기 버튼을 세팅한게 아니라서 전송도 안되고, 자꾸 초기 화면으로만 돌아갔다.

그 당시에는 이쪽으로 연결지어서 생각하지 못했는데 오늘 코드를 다시 보다보니 마지막 if 함수가 main으로 세팅됐다.

main으로 세팅이 된게 잘못된게 아니라 내가 하고싶은 기능을 main 안에 넣어야 하는구나 하고 깨닫게 됐다.

그 덕분에 이 문제는 해결됐다!

 

 

추가된 기능

지난번에는 동의하기를 버튼으로 사용했으면, 이번에는 체크박스를 통해 하는 것으로 구현해봤다.

체크박스를 이용해서 체크를 해야지만 메세지를 전송할 수 있도록 해뒀다.

그리고 사용자가 직접 번호를 입력할 수 있도록 초기 번호 (010 부분만) 세팅을 해뒀다.

여기서 우리는 해외 api를 사용하는 것이다 보니, 국가 번호가 붙기에 위에 힌트를 사용해서 예시를 들어놨다.

 

 

결과물

첫 로딩되는 메인 화면

 

체크박스를 누를 경우

 

여기서 힌트를 참고해서 전화번호를 입력하면 문자 메세지가 정상적으로 발송 된다!

문자 문구는 지난번과 다른점이 없기 때문에 따로 첨부하지 않고, 오늘 했다는 의미로 받은 문자를 첨부하겠다.

** 중간에 국외발신 부분으로 온 것은 메세지 내용이 길어서 코드 부분에 집중하기 위해 잠시 '메시지 내용' 이라고만 작성했기 때문이다.

 

이렇게 오늘은 얼마 걸리지 않고 이전의 문제였던 부분을 해결할 수 있게돼서 마음이 편해졌다!

지금 상태를 그대로 쓰진 않을 것 같아서 글자라던가 살짝 다듬을 부분만 조정하면 될 것 같다.

 

 

사용한 코드

사용한 코드를 추가로 첨부하겠다.

참고로 이전에는 두개의 파일로 나눠서 진행했다면, 이번에는 main 안에 넣기위해서 하나로 합쳤다.

 

total.py

import streamlit as st
import requests
from PIL import Image
from twilio.rest import Client

def send_twilio_message(message_body, to_phone_number):
    account_sid = '본인이 부여받은 시드 번호'
    auth_token = '본인이 부여받은 토큰 번호'
    twilio_client = Client(account_sid, auth_token)

    try:
        message = twilio_client.messages.create(
            from_='본인이 부여받은 번호',
            body=message_body,
            to=to_phone_number
        )
        st.success("메시지가 성공적으로 전송되었습니다. SID: {}".format(message.sid))
    except Exception as e:
        st.error("메시지 전송 중 오류가 발생했습니다: {}".format(str(e)))

# Twilio 메시지 전송 함수
def send_twilio_message(message_body, to_phone_number):
    account_sid = 'AC6ace276241c9dc6937210cc98a449a68'
    auth_token = 'a7d90f3377cfc6e62c1af55a784b0359'
    twilio_client = Client(account_sid, auth_token)

    try:
        message = twilio_client.messages.create(
            from_='본인이 부여받은 번호',
            body=message_body,
            to=to_phone_number
        )
        st.success("메시지가 성공적으로 전송되었습니다. SID: {}".format(message.sid))
    except Exception as e:
        st.error("메시지 전송 중 오류가 발생했습니다: {}".format(str(e)))

# 메인 페이지의 내용
def main():
    st.markdown("""
        <h1 style='text-align: center;'>개인정보 처리방침 동의서</h1>
    """, unsafe_allow_html=True)

    image_url = "https://github.com/HaJeong-K/Multi-Telecom/raw/main/twilio/개인정보처리방침.png"
    response = requests.get(image_url)
    
    if response.status_code == 200:
        with open("temp_image.png", "wb") as f:
            f.write(response.content)

        image = Image.open("temp_image.png")
        st.image(image, caption="이미지", use_column_width=True)
    else:
        st.error("이미지를 불러올 수 없습니다.")


    st.header("Twilio를 통한 메시지 발송 시 유의사항")
    st.markdown("""
        - 목적 제한: 개인정보는 명시된 목적 이외에 사용되지 않음.
        - 안전한 전송: Twilio를 통한 메시지 전송 시 암호화 및 보안 프로토콜 사용.
        - 동의 절차: 개인정보를 Twilio를 통해 처리 전, 사용자 동의 얻어야 함.
        - 접근 제어: Twilio 계정에 접근 권한을 제한하여 불법 접근 방지.
        - 보안 업데이트: Twilio 및 관련 서비스의 보안 업데이트 주기적으로 확인.
    """)

    # 동의하기 버튼
    agreed = st.checkbox("개인정보 처리방침에 동의합니다.")

    if agreed:
        # 전화번호 입력
        to_phone_number = st.text_input("수신자 전화번호", "+8210", help="예: +821012345678")

        # 전송 버튼
        if st.button("전송하기"):

            message_body = '''
    메세지 내용 추가하기
        '''
            send_twilio_message(message_body, to_phone_number)

if __name__ == "__main__":
    main()

 

 

728x90