Amazon Connectを使ったCloudWatchアラームの電話通知で指定した担当者への通知を番号入力で判定してみた

Amazon Connectを使ったCloudWatchアラームの電話通知で指定した担当者への通知を番号入力で判定してみた

Clock Icon2024.10.31

こんにちは。
繁松です。

はじめに

前回のブログでAmazon Connectを使ったCloudWatchアラームの電話通知で次の担当者への通知を番号入力で判定してみたについて紹介しました。
前回は順番にリストの次の電話番号に通知を行う設定でしたが、今回は電話通知を指定した担当者へ通知する構成を考えてみました。

shapes-1730385349229

アラート発報後の架電時に「Aさん通知する場合は1を、Bさんに通知する場合は2を、Cさんに通知する場合は3を入力してください。」と案内し、入力された番号でどの担当者に電話通知を行うか指定します。
1~3以外の番号が押された場合には次の担当者への通知は行わずに終了する内容になっています。

やってみた

前提条件

  • Amazon Connect
    • 構築済みであること
    • 電話番号を取得済みであること

Amazon Connect

Amazon Connectコンタクトフローの作成

以下のようなフローを作成します。

2024-10-31_22h18_20

①入力を取得するブロック

CloudWatchアラーム名とAさんに通知する場合は1を、Bさんに通知する場合は2を、Cさんに通知する場合は3を入力してくださいという案内を設定します。
オプションに1、2、3を設定し、番号が入力された場合の分岐を設定します。

クラウドウォッチアラームの通知です。 $.Attributes.alarmName のアラームが発生しています。
Aさんに通知する場合は1を
Bさんに通知する場合は2を
Cさんに通知する場合は3を
通知を終了する場合は9を入力してください。

2024-10-31_22h25_46

②コンタクト属性の設定ブロック

顧客の入力した値は保存することができないので、コンタクト属性の設定ブロックで入力値を保存して、保存した値をLambda関数のパラメータに渡します。

以下の値を入力し保存します。

名前空間:ユーザー定義済み
キー:CustomerInput
値:顧客の入力と合わせた数値(1の入力では1を設定する)

2024-10-31_22h29_58

③AWS Lambda関数を呼び出すブロック

この時点ではLambdaの作成が完了していないので、関数のARNは空のまま保存してください。
関数入力パラメータは、次の担当者に通知する際に必要となるalarmNameとcurrentIndexを設定します。
currentIndexにはコンタクト属性の設定ブロックで設定した値を設定します。

2024-10-31_22h35_41

Lambda

Lambda関数の作成

Python 3.12でLambdaを作成します。

2024-10-29_23h52_32

ロールのポリシー追加

LambdaのロールにAmazon Connectの発信に必要な以下のポリシーを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "connect:StartOutboundVoiceContact",
            "Resource": "*"
        }
    ]
}

CloudWatchアラーム用のポリシー追加

LambdaにCloudWatchのリソースベースポリシーを追加します。
Lambda→アクセス権限→リソースベースのポリシーステートメントで「アクセス権限を追加」を選択します。

以下の値を入力し保存します。

ステートメントID:任意の値
プリンシパル:lambda.alarms.cloudwatch.amazonaws.com
アクション:lambda:InvokeFunction

2024-10-30_00h29_11

コード

Amazon ConnectのインスタンスID、コンタクトフローID、Amazon Connectで取得した電話番号、通知先の電話番号を設定します。
通知先の電話番号は入力した数値とリストのインデックスが一致するように、インデックス0は空にしています。
電話番号は「E.164」形式(例:+815011111111)を設定する必要があります。
今回「EC2_CPU使用率80%超過」というアラート名を読み上げて通知したいのですが、EC2を「イーシー二」と呼んでしまうのでコードの中で「イーシーツー」に変換しています。

import boto3

def lambda_handler(event, context):
    connect = boto3.client('connect')

    instance_id = 'Amazon ConnectインスタンスID'
    contact_flow_id = 'コンタクトフローID'
    source_phone_number = 'Amazon Connectで取得した電話番号'

    # 担当者リスト
    phone_numbers = ['', 'Aさんの電話番号', 'Bさんの電話番号', 'Cさんの電話番号']

    # イベントから現在の担当者のインデックスを取得、初回は1
    current_index = int(event.get('Details', {}).get('Parameters', {}).get('currentIndex', 1))

    # アラーム名を取得
    if 'alarmData' in event:
        alarmName = event['alarmData']['alarmName']
        alarmName_replace = alarmName.replace("EC2", "イーシーツー")
    else:
        alarmName_replace = event['Details']['Parameters'].get('alarmName', '')

    # 担当者に電話をかける
    destination_phone_number = phone_numbers[current_index]

    response = connect.start_outbound_voice_contact(
        DestinationPhoneNumber=destination_phone_number,
        ContactFlowId=contact_flow_id,
        InstanceId=instance_id,
        SourcePhoneNumber=source_phone_number,
        Attributes={
            'alarmName': alarmName_replace,
        }
    )

通知先の電話番号を携帯電話宛(070,080,090)に設定したい場合はAWSサポートへの申請が必要になります。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/country-code-allow-list.html

Amazon Connect

Lambda関数の追加

作成したLambda関数をAmazon Connectに追加します。
AWSコンソール→Amazon Connect(対象のインスタンス)→問い合わせフローを開きます。
AWS Lambdaの項目で作成したLambda関数を選択し「+Add Lambda Function」を選択します。
2024-10-31_01h35_01

コンタクトフローのLambdaブロックに設定

先ほどの手順で関数のARNを空で保存した「AWS Lambda関数を呼び出す」ブロックを開き、追加したLambda関数を設定します。

2024-10-31_22h43_31

CloudWatch

CloudWatch Alarmの作成

EC2のCPU使用率が80%を超えた場合のアクションに電話通知用のLambdaを設定してみます。

2024-10-30_00h12_48
2024-10-30_00h13_16

Lambdaアクションに先ほど作成した関数を設定します。

2024-10-30_00h14_52

アラーム名に「EC2_CPU使用率80%超過」を設定します。
2024-10-30_00h16_22

動作確認

動作確認のためAmazon Connect宛の番号をLambdaに設定し電話通知を行いました。

https://www.youtube.com/watch?v=8Z9eRaZ1ZGQ

さいごに

Amazon ConnectとLambdaを使用して、通知を行いたい担当者を指定する方法を紹介しました。
これまでに紹介した通知以外にもフローとLambdaを組み合わせることで、より便利な使い方ができると考えられます。

参考情報

https://dev.classmethod.jp/articles/amazon-connect-get-customer-input/
https://dev.classmethod.jp/articles/cloudwatch-alarm-phone-notification-amazon-connect/
https://dev.classmethod.jp/articles/cloudwatch-alarm-phone-notification-amazon-connect-2/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.