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
내재화
서비스
9. pagerduty 내재화
내재화 하게 된 이유
• 비싸다.
• 39$ - (platform business, per user / month)
• Outbound Call 기능만 필요하다.
• 한국어를 지원하지 않는다.
• 새벽에 알람이 왔는데 영어로 말하면 인지하기 힘듦..
10. pagerduty 내재화
요구사항
• On Call 담당자에게 outbound call을 걸어줘야 한다.
• TTS로 한국어를 읽어줘야 한다.
• On Call 담당자의 Action
• resolve
• escalate
• snooze
• 받을때까지 계속 걸어준다.
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
선택 -
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 설계
• Aurora serverless
• Managed service
• Connection의 scale out에 제약이 있지만 해당 워크로드
에는 해당되지 않을 것으로 판단
• 심플한 테이블 / 쿼리
• Polling 구조라서 급격한 scale out이 필요하지 않음.
26. Amazon Connect
• 콜 센터 구축 서비스
• inbound, outbound 통화 흐름을 정의할 수 있다.
• 상담원을 관리할 수 있다.
• cloudwatch logs를 통한 log 관리
• polly, lex 등과 쉬운 연동
• 통화 대기중인 queue, 통화 관련 metric 관리 가능
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