AWS Connect를 활용하여 Call-Based 알림 서비스 구현

김대유·2023년 4월 17일
1

AWS

목록 보기
2/3
post-thumbnail

안정적으로 서비스를 운영하기 위해서는 여러 지표에 대해 알림을 설정하고 모니터링 업무를 수행하여야 합니다.

이미 많은 분들이 Slack이나 Teams등 메신저 기반의 솔루션을 통하여 알림을 받고 계시는데 메신저 기반의 알림 서비스에는 아래와 같은 몇가지 단점이 존재 합니다.

  • 메신저에 집중 하지 않으면 알림을 놓치는 경우가 발생
  • 심야 시간이나 취침중에는 알림에 대한 인지가 어려움

이번 포스팅에서는 기존 메신저 기반의 알림 서비스 단점을 보안한 AWS Connect를 활용한 전화 기반의 알림 서비스를 구현하는 방법에 대해 소개하고자 합니다.

1. AWS Connect Instance 생성

1) Access URL 설정

  • AWS Connect 인스턴스에 접속 할 URL를 생성해 줍니다.

2) 사용자 정보 입력

  • AWS Connect 인스턴스에 접속 할 때 사용할 사용자 정보를 입력 합니다.

3) 전화 방식(telephony) 설정

  • AWS Connect를 통해서 알림을 받기 위하여 AWS Connect의 outgoing call을 허용해 줍니다.

4) 고객 프로파일 비활성화(Optional)

  • 고객 프로파일을 사용하지 않을 예정이므로 비활성화여 생성합니다

2. Contact Flow 생성

1) Contance Flow 생성

  • AWS Connect 인스턴스에 접속 후 contact flow를 생성 합니다.

2) Flow Designer를 활용하여 Contact Flow 생성

  • AWS Connect flow block을 생성 합니다.

3) Set voice, Wait 및 Play prompt Block 설정

3.1) Set voice 설정

  • Set voice : 통화 알림 시 사용할 목소리를 지정하는 블럭입니다. 현재 한국어는 seoyeon의 음성만 지원합니다.

3.2) Wait 설정

  • Wait : 통화 연결 후 실제 음성이 나오기 전까지의 대기 시간을 설정합니다.

3.3) Play prompt 설정

  • Play prompt : 통화 연결 후 전달(Speak) 할 메시지를 설정 하는 부분으로 호출 시 넘어 오는 값을 참조하기 위하여 사용자 변수로 지정을 합니다.

4) Contact Flow Publish

  • 생성 된 Contact Flow를 Publish 하여 생성 단계를 마무리 합니다.

3. Phone Number 생성

  • 통화 시 사용 할 번호를 생성합니다. 한국 번호의 경우 AWS Support case open을 하시면 지정이 가능하십니다.

2. Cloudwatch Alarm 생성

  • 인스턴스의 CPU 사용률이 90이 넘으면 Alarm 발생 되게 설정을 합니다.
  • description에는 AWS Connect에서 TTS(Text-To-Speech) 할 문구를 입력 해 줍니다.

3. Outboud Call을 위한 Lambda 생성

  • Alarm 발생 시 AWS Connect를 이용해 알림을 서비스를 제공하기 위하여 Lambda 함수를 생성 합니다.
  • Lambda에서 사용하는 role에 AWS Connect 사용 권한을 할당 합니다.
import boto3


def lambda_handler(event, context):
    # Get the Amazon Connect instance ID and the phone number of the caller
    instance_id = "AWS Connect Instance ID"
    caller_phone_number = "phone number of the caller"
    print(event)
    # Connect to Amazon Connect
    connect = boto3.client('connect')
    
    # Make a call When state is ALARM
    if event['detail']['state']['value'] == 'ALARM' :
        response = connect.start_outbound_voice_contact(   
            DestinationPhoneNumber="phone nubmer of system manager", InstanceId=instance_id , 
            ContactFlowId="ContactFlow Id", 
            SourcePhoneNumber=caller_phone_number,
            # Set the mention as Cloudwatch description
            Attributes={
                    'mention' : event['detail']['configuration']['description']
                }
            )
    return {             
        'statusCode': 200           
    }

4. 전화 알림 확인

  • CloudWatch Alarm의 임계값을 변경하여 알람 상태일 때 전화가 오는 지 확인 합니다.

# 적용 사례

  • 상황실 근무 대체

별도의 상황실이나 당직 근무자를 운영하고 있지 않는 조직의 경우 야간에 서비스 알람이 발생이 될 경우 인지가 불가능하였습니다. 하지만 위 아키텍처를 활용하면 별도의 야간 근무자 없이 알람 상황이 발생되었을 경우 전화로 알림을 받아 즉각적인 대응이 가능하게 됩니다.

0개의 댓글