Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Serverless Programmable Voice

12월 20일 AWSKRUG (AWS 한국 사용자 모임) 서버리스 모임에서 발표한 "Serverless Programmable Voice" 발표 슬라이드입니다.

Serverless Programmable Voice

  1. 1. Serverless
 Programmable Voice MooYeol Prescott Lee Software Engineer @ Vingle, Inc.
  2. 2. Speaker • Serverless Lover • Loves building all kinds of multimedia services • Software Engineer @ Vingle • Freelancer Software Engineer @ Artistscard • Software Engineer @ Law&Company • https://github.com/mooyoul • https://mooyoul.github.io
  3. 3. 오늘 다룰 내용 • Serverless 기반 Programmable Voice 구축 경험 • 2018년 현재는?
  4. 4. 때는 2016년…
  5. 5. 사무실 전화로 법률상담 관련 문의가 계속 들어옴
  6. 6. 사무실 번호 노출을 최대한 줄이고,
 ARS 서비스 번호를 대외에 노출하자!
  7. 7. 그런데 어떻게 만들지???
  8. 8. VoIP는 처음이지?
  9. 9. VoIP를 위해 
 공부해야 할 것
  10. 10. • PSTN • VoIP Gateway • PBX / IP-PBX • FXO/FXS • SIP Trunking • SIP Protocol • G.711 / G.722 Audio Codec • …
  11. 11. AWS 환경에 연동하려면?
  12. 12. • IDC에 Voice Gateway / IP-PBX 장비 설치, 구성 • Direct Connect 연동, 구성 • IVR 소프트웨어 작성
  13. 13. Source: https://www.3cx.com/global/kr/voip-sip-webrtc/ip-pbx-overview/
  14. 14. 🤯
  15. 15. 내가 원했던 것 • 안내멘트 재생 • 전화해주셔서 감사합니다 • 법률상담 관련 문의는 1번을, 일반적인 서비스 문의는 2번을 눌러 주세요 • 키패드 입력 감지 • 1번 누르면 홈페이지 주소를 문자로 전송 • 2번 누르면 사무실 연결 • 엄청 간단한 IVR 시스템
  16. 16. 다른 방법이 없을까?
  17. 17. AWS엔 있겠지?
  18. 18. 없다 (2018년 현재는 있음)
  19. 19. 하지만 운 좋게
 두 서비스 발견
  20. 20. • Nexmo • VoIP 서비스 제공자인 Vonage에서 운영 • 국내 070 / 050 번호 서비스 제공 • Twilio • 최근에 Sendgrid를 인수한 그 회사 • 당시 국내 번호 서비스 제공이 되지 않았었음
  21. 21. • Nexmo (Winner) • VoIP 서비스 제공자인 Vonage에서 운영 • 국내 070 / 050 번호 서비스 제공 • Twilio • 최근에 Sendgrid를 인수한 그 회사 • 당시 국내 번호 서비스 제공이 되지 않았었음
  22. 22. 번호 구입
  23. 23. 설정
  24. 24. Application 생성
  25. 25. Application 생성 IVR Endpoint
 (전화가 걸려오면 호출할 API Endpoint) Event Endpoint (connect / hangup 과 같은 이벤트 통지)
  26. 26. 번호에 Application 연결
  27. 27. IVR Application 작성
  28. 28. 필요한 모든 제어를 
 HTTP API를 통해 제어
  29. 29. NCCO • Nexmo Call Control Object • JSON / XML 기반
  30. 30. NCCO • Nexmo Call Control Object • JSON / XML 기반
  31. 31. 내가 원했던 것 • ✅ 안내멘트 재생 • ✅ 키패드 입력 감지
  32. 32. 내가 집중하면 되는것
  33. 33. API 작성
  34. 34. 어라? 이거 Lambda랑
 잘 어울리겠는데?
  35. 35. Lambda 경험도 쌓을 겸,
 한번 Lambda로 구현해보 자!
  36. 36. 제어 흐름 정리
  37. 37. API 작성
  38. 38. 배포
  39. 39. 항상 첫 버전은 
 말썽을 부린다…
  40. 40. 한국어 TTS 지원 부재
  41. 41. 한국어 TTS • 보이스웨어 • 네이버 TTS API • 기타
  42. 42. 한국어 TTS • 보이스웨어 • 익히 알려진 명성대로 품질은 좋음 • Pay-as-you-go 과금정책 없음 • 엄청 비쌈 • 네이버 TTS API • 품질 괜찮음 • 공짜 • 기타
  43. 43. 한국어 TTS • 네이버 TTS API • 품질 괜찮음 • 공짜, 하지만 Rate lImit 걸려있음 (100 call / day)
  44. 44. Rate Limit을 극복하자!
  45. 45. 정적인 TTS 음성을 재사용
  46. 46. 전화번호를 읽어주는건
 어떻게하지?
  47. 47. 전화전호 조합 • SMS 발송시 입력한 전화번호를 확인하기 위해, “입력하신 번호가 010- 1234-1234 가 맞으면 1번을, 틀리면 2번을 눌러주세요” 처럼 동적으 로 TTS 음성을 생성해야 함 • 미리 TTS 음성을 만들어서, runtime에서 동적으로 합성 (음성 합치기) • 입력하신 번호가 • 영 + 일 + 영 + 일 + 이 + 삼 + 사 + 오 + 육 + 칠 + 팔 • 번이 맞으면 1번을, 틀리면 2번을 눌러주세요 • 음성을 합치는건 sox 라는 프로그램을 쓰면 되네, 근데 이거 Lambda에 서 어떻게 돌리지?
  48. 48. Building binary for Lambda Environment
  49. 49. Lambda-runtime compatible build • Lambda execution runtime is based on Amazon Linux AMI (amzn-ami- hvm-2017.03.1.20170812-x86_64-gp2) • Instead of using build instance, just make build image which is based on amazon linux docker image • docker pull amazonlinux:2017.03.1.20170812 • vim Dockerfile # Be careful updating openssl. it can make incompatible shared library issue • docker build . -t my-awesome-lambda-build-env • docker run --rm -v $PWD:/workspace my-awesome-lambda-build-env /workspace/ build.sh • Test built binaries or libraries using lambci lambda image • docker pull lambci/lambda:nodejs8.10 • docker run --rm -v $PWD:/workspace --entrypoint bash lambci/lambda:nodejs8.10 / workspace/test.sh
  50. 50. 잘 동작하는것을 
 확인하고 새 버전 배포
  51. 51. Cold-start issue
  52. 52. Cold-start issue • VPC 구성으로 인해 Cold start시 높은 latency 발생 • Nexmo에서는 API 응답이 일정 시간동안 오지 않자, 그 냥 통화를 끊어버림 • warm up 적용 • 근본적인 문제 해결 방법이 아님 • concurrent invocation이 발생하는 상황에서는 무 용지물
  53. 53. Cold-start issue • 정말 필요한 상황이 아니면 VPC 구성 제거 • 작은 함수들을 하나의 큰 함수로 합쳐서 컨테이너 재사 용 확률을 더 끌어올리기 • Node.js runtime의 경우 Webpack으로 코드를 번들 링하면 cold start 시간 단축에 추가적인 도움을 줄 수 있음 (3008MB Memory 기준 aws-sdk 패키지 로드 가 250ms정도)
  54. 54. 2018년, 지금은?
  55. 55. • 2017, 03 - Amazon Connect 출시 • 2017, 11 - AWS Polly 한국어 지원 추가 • Nexmo - 한국어 번호 서비스 사라짐, 한국어 TTS 추 가 • Twilio - 한국어 번호 서비스 추가, 한국어 TTS 추가 (070/030 번호)
  56. 56. Amazon Connect • 완전 관리형 AWS 제품, 전화 수/발신 모두 가능 • 사용한 만큼 과금 (통화시간 및 번호 대여요금만 지불, 별도의 인 스턴스 비용 과금 없음) • Amazon 고객센터에서 사용하는 기술 기반 • S3, Polly, Lex, Lambda 등 기존 AWS 제품들과 완벽하게 연동 • AWS Connect 전용 콘솔 제공 및 브라우저 기반 소프트폰 제공 • CS 업무 지원에 특화된 기능 제공 (녹음, 대기열, 에이전트 등)
  57. 57. GUI 기반 
 제어 흐름 편집도구 제공
  58. 58. = 제어 흐름을 위한
 별도의 API 조차 필요하지 않 음
  59. 59. 우체국택배 운송장 조회 현재시간 출력
  60. 60. 브라우저에서 
 Agent의 통화 가능
  61. 61. = 별도의 키폰 설정
 및 회선 설치가 필요없다!
  62. 62. 하지만 단점도 있다
  63. 63. • 아직까지 한국 전화번호를 제공하지 않음 • 수신자 부담 전화번호는 국제전화 수신이 안되는 것 같 음 (한국에서 일본 수신자부담 전화번호로 전화를 걸면 받지 않음) • Lambda Trigger가 가능한데, 권한 모델 설정이 CLI를 통해야 해서 불편함 • 전화 발신 (Outgoing call)의 경우 일부 화이트리스트 국가를 제외하고 국제전화 발신이 제한되어 있음. 제한 을 풀려면 따로 서포트를 통해서 제한을 풀어야 함
  64. 64. 세가지 데모
  65. 65. 간단한 IVR 애플리케이션
 (일반적인 ARS 서비스)
  66. 66. https://youtu.be/3ENtYK443Tk
  67. 67. 간단한 Agent 통화 (상담원 연결)
  68. 68. https://youtu.be/T023EsFqMNI
  69. 69. 간단한 Outbound call
  70. 70. https://youtu.be/5M7AUvacAQM
  71. 71. 감사합니다

×