Post

Twillio와 Flask를 활용해 간단한 콜 서비스 만들기

콜봇 서비스를 개발하면서 Twillio란 플랫폼에 대해 알게되어 이렇게 정리해 보았습니다.

Twilio는 클라우드 통신 플랫폼으로, 개발자들이 다양한 통신 기능을 애플리케이션에 쉽게 통합할 수 있게 해주는 서비스입니다.

어떻게 작동하는지, 번호 구매부터 Flask app과의 연동까지 함께 알아보도록 합시다.



번호 구매

DFS_example

홈페이지에서 좌측 사이드바에서 Develop -> United States -> # Phone Numbers -> Manage -> Buy a number로 들어갑니다.

DFS_example

“Voice”에 체크하고, 아무 번호나 구매합니다.

trial 계정의 경우 무료로 제공되는 15$가 있으므로 따로 비용이 들진 않습니다.

DFS_example

번호를 구매하면 사이드바에 “Active numbers”에 구입한 번호가 뜹니다.

DFS_example

Active Numbers에서 번호를 클릭하면 다음과 같이 Vocie Configuration이 뜨는데, 앞으로 구축할 앱의 배포 url을 여기에 입력하게 됩니다.

url은 일단 그대로 두고 앱 구축으로 넘어가도록 하겠습니다.



Flask app 구축

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@app.route("/voice", methods=['GET', 'POST'])
def voice():
    try :
        response = VoiceResponse()
        gather = Gather(input='speech', language='en-US', timeout=3, action='/process_speech')
        gather.say("Hello, this is Hello World!, Your counselor for foreign workers!! How can I help you?"
                   , language="en-US")
        response.append(gather)
        
        return str(response)
    
    except Exception as e:
        app.logger.error(f"An error occurred: {str(e)}")

        return "An error occurred", 500

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)

제가 작성한 Flask app 코드의 일부입니다.

  1. @app.route(“/voice”, methods=[‘GET’, ‘POST’])
    • ‘/voice’ URL로 오는 GET과 POST 요청을 처리하는 라우트를 정의
  2. VoiceResponse()
    • twilio의 VoiceResponse 객체를 생성
    • 음성 통화에 대한 TwiML 응답을 구성
  3. Gather(input=’speech’, language=’en-US’, timeout=3, action=’/process_speech’)
    • 사용자의 음성 입력 수집
  4. gather.say(“Hello, this is Hello World!, Your counselor for foreign workers!! How can I help you?”, language=”en-US”)
    • 텍스트를 사용자에게 음성으로 변환해 재생시켜준다.

이처럼 여러분들 입맛대로 코드를 작성해주시면 됩니다.

추가적인 twillio 함수 관련해서는 래퍼런스를 참조하시면 좋을 것 같습니다.

출처: Twillio Doc



배포 및 연동

DFS_example

테스트를 위해 임시로 ngrok 로컬 서버를 통해 배포를 했는데, 배포 방식은 자유입니다.

자 이제 배포된 url을 위 사진처럼 Webhook으로 넣어줍니다.

Webhook은 실시간 이벤트 알림을 위한 HTTP 콜백으로 특정 이벤트가 발생했을 때, 지정된 URL로 HTTP POST 요청을 보낸다고 합니다.

이제 밑의 Save configuration을 눌러 설정을 저장하면 끝입니다.



Test

서비스의 전체적인 동작 방식에 대해 설명드리겠습니다.

  1. 구매한 번호로 사용자가 전화를 건다.
  2. Twillio 시스템에서 전화를 감지하고 미리 지정된 webhook URL로 HTTP POST를 보낸다.
  3. 작성해둔 코드로 수신 통화에 대응한다.




마지막으로 현재 진행중인 서비스의 Twillio를 활용한 간단한 시연 영상 소개하면서 글 마치겠습니다.

This post is licensed under CC BY 4.0 by the author.