Amazon Connect를 이용한
Outbound Call 서비스 개발하기
현창훈
발표자 소개
• 현창훈
• 조직, 생산성, 자동화 등에 관심이 많습니다.
• 경력
• HBSmith 개발자
• 모두 컴퍼니 DevOps
• 지피지시 개발팀장
• 씨퓨처 개발자
• 발표 순서
• Outbound Call 서비스가 필요한 이유
• PagerDuty 내재화
• Architecture 설계
• Amazon Connect
• 유의사항
• 개발 후기
• Q&A
Outbound Call 서비스가
필요한 이유
Outbound Call 서비스가 필요한 이유
• HBSmith는 QA를 자동화 하고 테스트가 실패하면 연락을 드리는 서비스 입니다.
• hbsmith.io
• QA 자동화
• End To End Test
Outbound Call 서비스가 필요한 이유
• 연락 방법
QA
실패
pagerduty alert.
you have one triggered
#$%^$…
안녕하세요.
n번 테스트가 실패하는데
확인 부탁드려요.
HBSmith User
[AS-IS]
Pagerduty call을 받으면 개발자가 수동으로 연락
Outbound Call 서비스가 필요한 이유
• 연락 방법
[TO-BE]
문제가 생기면 on-call 담당자들에게 전화가 가도록 자동화
QA
실패
안녕하세요.
n번 테스트가 실패 했습니다.
확인 하셨으면 n번, …
User
내재화
서비스
내재화
pagerduty 내재화
내재화 하게 된 이유
• 비싸다.
• 39$ - (platform business, per user / month)
• Outbound Call 기능만 필요하다.
• 한국어를 지원하지 않는다.
• 새벽에 알람이 왔는데 영어로 말하면 인지하기 힘듦..
pagerduty 내재화
요구사항
• On Call 담당자에게 outbound call을 걸어줘야 한다.
• TTS로 한국어를 읽어줘야 한다.
• On Call 담당자의 Action
• resolve
• escalate
• snooze
• 받을때까지 계속 걸어준다.
Architecture 설계
내재화를 위한 도구 선택
Architecture 설계
Amazon
Connect
VS
Architecture 설계 - 도구 선택
• 콜 센터를 구축할 수 있는 AWS의 managed service
• 장점
• managed service라서 개발과 관리가 편하다.
• polly와 쉽게 연동된다.
• 단점
• IaC를 지원하지 않는다.
• 지원 안되는 action, event가 많다.
• 전화 미수신, 중간에 끊는 경우 등
Architecture 설계 - 도구 선택
• 전화, SMS 등을 가능하게 해주는 서비스
• 장점
• IaC가 가능하다.
• 다양한 API와 event를 지원한다.
• 단점
• 구현해야 할 코드가 상대적으로 많아진다.
• 추가적인 인프라 관리가 필요하다.
Architecture 설계 - 도구 선택
• 최대한 단순하고 빠르게 개발 / 배포 하는게 중요하다.
• AWS에 대한 기술적 경험을 축적할 수 있는 좋은 기회
Amazon
Connect
선택 -
Architecture에 대한 고민
Architecture 설계
Architecture 설계
[기존]
• API 서버에서 pagerduty로 trigger할 message를 sqs에
전달
• sqs의 event trigger를 이용해서 lambda에서 pagerduty
호출
Architecture 설계
[1안]
• lambda에서 호출하는 서비스를 Pagerduty -> Connect
로 변경
• 변경을 최소화 하고 서비스간 독립성을 유지
Architecture 설계
[1안의 문제점]
• Outbound call을 단순히 걸고 끝나는게 아니라 실시간으
로 다양한 동작에 의해서 상태가 변경돼야 한다.
• 웹 또는 전화를 받고 resolve, snooze 등의 action
=> Queue로 pub/sub 해서 Message에만 의존적인 구조는
불가능
Architecture 설계
[2안]
• SQS 대신 상태 관리를 위해서 DynamoDB 또는 Aurora
Serverless를 사용
• DB에 event trigger 또는 polling을 이용해서 대기중인
alarm 호출
Architecture 설계
• DynamoDB
• Managed service
• Key - Value 기반으로 관리할 수 있는 심플한 쿼리에 적합
• 예측 가능한 수준의 WCU / RCU
• 프리티어로 커버 가능할 것으로 예상됨.
Architecture 설계
• Aurora serverless
• Managed service
• Connection의 scale out에 제약이 있지만 해당 워크로드
에는 해당되지 않을 것으로 판단
• 심플한 테이블 / 쿼리
• Polling 구조라서 급격한 scale out이 필요하지 않음.
Architecture 설계
• Aurora serverless
• 새로운 AWS 기술 경험 축적
사실 그냥 궁금하다..
써보고 싶다..
Architecture 설계
[결정된 안]
• 기존 서비스와 의존성이 생기지만 그래도 최대한 단순하게 해서 빨리
배포 하자고 해서... 🙂
Amazon Connect
Amazon Connect
• 콜 센터 구축 서비스
• inbound, outbound 통화 흐름을 정의할 수 있다.
• 상담원을 관리할 수 있다.
• cloudwatch logs를 통한 log 관리
• polly, lex 등과 쉬운 연동
• 통화 대기중인 queue, 통화 관련 metric 관리 가능
Amazon Connect
• 다양한 국가의 번호를 on-demand 로 관리
Amazon Connect
• Contact flow를 통한 통화 흐름 제어
• Polly를 통한 TTS, mp3 등 prompt 재생 가능
• 사용자에게 입력 받기 가능
• Lambda와 Integration 가능
• 드래그 앤 드롭으로 셋팅
Amazon Connect
Amazon Connect
cloudwatch logs
boto3 api
start_outbound_voice_contact
유의사항
유의사항
국제번호 표준 준수
• request
• response
{
"InstanceId": "089d382c-9a74-4af4-b1f7-xxxxxxxxxxx",
"ContactFlowId": “edc50c16-5795-xxxx-9378-xxxxxx",
"SourcePhoneNumber": “+16502260000",
"DestinationPhoneNumber": "+8201000000000",
}
{
"ResponseMetadata": {
"RequestId": "fc46b5d5-8e49-11e9-91fd-6773747eab60",
"HTTPStatusCode": 200,
…
}
}
+821043997881
Connect는 비동기적으로 동작하기 때문에 전화 요청을
정상적으로 보냈다면 성공 했다는 결과값을 리턴한다.
유의사항
• 한국 리전에는 Connect가 없다.
• Outbound call을 한국 번호로 걸기 위해서는 Amazon
Connect Instance를 생성하고 특정 instance에 support
ticket을 열어서 whitelist에 KR을 추가해야 한다.
• 전화를 안받으면 자동으로 한번 더 걸어준다.
• IaC가 되지 않는것이 운영에 부담이 될 수 있다.
개발 후기
• 더 저렴하게 운영 중 입니다.
• 기존
• pagerduty - 78$
• 현재
• connect, polly 등 - 0$,
• contact center 10.15$ (전화 회선 2개 점유 비용)
• Managed service를 사용해서 빠르게 개발 했습니다.
• 1 sprint(2 weeks) 개발 후 배포
개발 후기
• 내부 on call 담당자들에게 전화를 잘 걸어주고 있습니다.
• 비지니스 문제로 고객들에게 직접 outbound call을 보내고
있지 않습니다.
• 한국어 지원 때문에 outbound call 서비스만 따로 이용할 수
있는지 문의하는 고객들이 생기고 있습니다.
• IaC가 안되면 관리가 힘들어요.
• blog version
Q&A
감사합니다.

Amazon Connect를 이용한 outbound call 서비스 개발하기

  • 1.
    Amazon Connect를 이용한 OutboundCall 서비스 개발하기 현창훈
  • 2.
    발표자 소개 • 현창훈 •조직, 생산성, 자동화 등에 관심이 많습니다. • 경력 • HBSmith 개발자 • 모두 컴퍼니 DevOps • 지피지시 개발팀장 • 씨퓨처 개발자
  • 3.
    • 발표 순서 •Outbound Call 서비스가 필요한 이유 • PagerDuty 내재화 • Architecture 설계 • Amazon Connect • 유의사항 • 개발 후기 • Q&A
  • 4.
  • 5.
    Outbound Call 서비스가필요한 이유 • HBSmith는 QA를 자동화 하고 테스트가 실패하면 연락을 드리는 서비스 입니다. • hbsmith.io • QA 자동화 • End To End Test
  • 6.
    Outbound Call 서비스가필요한 이유 • 연락 방법 QA 실패 pagerduty alert. you have one triggered #$%^$… 안녕하세요. n번 테스트가 실패하는데 확인 부탁드려요. HBSmith User [AS-IS] Pagerduty call을 받으면 개발자가 수동으로 연락
  • 7.
    Outbound Call 서비스가필요한 이유 • 연락 방법 [TO-BE] 문제가 생기면 on-call 담당자들에게 전화가 가도록 자동화 QA 실패 안녕하세요. n번 테스트가 실패 했습니다. 확인 하셨으면 n번, … User 내재화 서비스
  • 8.
  • 9.
    pagerduty 내재화 내재화 하게된 이유 • 비싸다. • 39$ - (platform business, per user / month) • Outbound Call 기능만 필요하다. • 한국어를 지원하지 않는다. • 새벽에 알람이 왔는데 영어로 말하면 인지하기 힘듦..
  • 10.
    pagerduty 내재화 요구사항 • OnCall 담당자에게 outbound call을 걸어줘야 한다. • TTS로 한국어를 읽어줘야 한다. • On Call 담당자의 Action • resolve • escalate • snooze • 받을때까지 계속 걸어준다.
  • 11.
  • 12.
    내재화를 위한 도구선택 Architecture 설계 Amazon Connect VS
  • 13.
    Architecture 설계 -도구 선택 • 콜 센터를 구축할 수 있는 AWS의 managed service • 장점 • managed service라서 개발과 관리가 편하다. • polly와 쉽게 연동된다. • 단점 • IaC를 지원하지 않는다. • 지원 안되는 action, event가 많다. • 전화 미수신, 중간에 끊는 경우 등
  • 14.
    Architecture 설계 -도구 선택 • 전화, SMS 등을 가능하게 해주는 서비스 • 장점 • IaC가 가능하다. • 다양한 API와 event를 지원한다. • 단점 • 구현해야 할 코드가 상대적으로 많아진다. • 추가적인 인프라 관리가 필요하다.
  • 15.
    Architecture 설계 -도구 선택 • 최대한 단순하고 빠르게 개발 / 배포 하는게 중요하다. • AWS에 대한 기술적 경험을 축적할 수 있는 좋은 기회 Amazon Connect 선택 -
  • 16.
  • 17.
    Architecture 설계 [기존] • API서버에서 pagerduty로 trigger할 message를 sqs에 전달 • sqs의 event trigger를 이용해서 lambda에서 pagerduty 호출
  • 18.
    Architecture 설계 [1안] • lambda에서호출하는 서비스를 Pagerduty -> Connect 로 변경 • 변경을 최소화 하고 서비스간 독립성을 유지
  • 19.
    Architecture 설계 [1안의 문제점] •Outbound call을 단순히 걸고 끝나는게 아니라 실시간으 로 다양한 동작에 의해서 상태가 변경돼야 한다. • 웹 또는 전화를 받고 resolve, snooze 등의 action => Queue로 pub/sub 해서 Message에만 의존적인 구조는 불가능
  • 20.
    Architecture 설계 [2안] • SQS대신 상태 관리를 위해서 DynamoDB 또는 Aurora Serverless를 사용 • DB에 event trigger 또는 polling을 이용해서 대기중인 alarm 호출
  • 21.
    Architecture 설계 • DynamoDB •Managed service • Key - Value 기반으로 관리할 수 있는 심플한 쿼리에 적합 • 예측 가능한 수준의 WCU / RCU • 프리티어로 커버 가능할 것으로 예상됨.
  • 22.
    Architecture 설계 • Auroraserverless • Managed service • Connection의 scale out에 제약이 있지만 해당 워크로드 에는 해당되지 않을 것으로 판단 • 심플한 테이블 / 쿼리 • Polling 구조라서 급격한 scale out이 필요하지 않음.
  • 23.
    Architecture 설계 • Auroraserverless • 새로운 AWS 기술 경험 축적 사실 그냥 궁금하다.. 써보고 싶다..
  • 24.
    Architecture 설계 [결정된 안] •기존 서비스와 의존성이 생기지만 그래도 최대한 단순하게 해서 빨리 배포 하자고 해서... 🙂
  • 25.
  • 26.
    Amazon Connect • 콜센터 구축 서비스 • inbound, outbound 통화 흐름을 정의할 수 있다. • 상담원을 관리할 수 있다. • cloudwatch logs를 통한 log 관리 • polly, lex 등과 쉬운 연동 • 통화 대기중인 queue, 통화 관련 metric 관리 가능
  • 27.
    Amazon Connect • 다양한국가의 번호를 on-demand 로 관리
  • 28.
    Amazon Connect • Contactflow를 통한 통화 흐름 제어 • Polly를 통한 TTS, mp3 등 prompt 재생 가능 • 사용자에게 입력 받기 가능 • Lambda와 Integration 가능 • 드래그 앤 드롭으로 셋팅
  • 29.
  • 30.
    Amazon Connect cloudwatch logs boto3api start_outbound_voice_contact
  • 31.
  • 32.
    유의사항 국제번호 표준 준수 •request • response { "InstanceId": "089d382c-9a74-4af4-b1f7-xxxxxxxxxxx", "ContactFlowId": “edc50c16-5795-xxxx-9378-xxxxxx", "SourcePhoneNumber": “+16502260000", "DestinationPhoneNumber": "+8201000000000", } { "ResponseMetadata": { "RequestId": "fc46b5d5-8e49-11e9-91fd-6773747eab60", "HTTPStatusCode": 200, … } } +821043997881 Connect는 비동기적으로 동작하기 때문에 전화 요청을 정상적으로 보냈다면 성공 했다는 결과값을 리턴한다.
  • 33.
    유의사항 • 한국 리전에는Connect가 없다. • Outbound call을 한국 번호로 걸기 위해서는 Amazon Connect Instance를 생성하고 특정 instance에 support ticket을 열어서 whitelist에 KR을 추가해야 한다. • 전화를 안받으면 자동으로 한번 더 걸어준다. • IaC가 되지 않는것이 운영에 부담이 될 수 있다.
  • 34.
    개발 후기 • 더저렴하게 운영 중 입니다. • 기존 • pagerduty - 78$ • 현재 • connect, polly 등 - 0$, • contact center 10.15$ (전화 회선 2개 점유 비용) • Managed service를 사용해서 빠르게 개발 했습니다. • 1 sprint(2 weeks) 개발 후 배포
  • 35.
    개발 후기 • 내부on call 담당자들에게 전화를 잘 걸어주고 있습니다. • 비지니스 문제로 고객들에게 직접 outbound call을 보내고 있지 않습니다. • 한국어 지원 때문에 outbound call 서비스만 따로 이용할 수 있는지 문의하는 고객들이 생기고 있습니다. • IaC가 안되면 관리가 힘들어요. • blog version
  • 36.
  • 37.