Amazon ConnectでLambdaから電話をかける

Amazon Connectはコールセンター業務代替のためのプロダクトです。

電話番号の取得、応答フロー、音声読み上げによる応答などをGUIコンソールから設定でき、LambdaなどのAWSプロダクトとの連携も可能です。


電話を一方的に発信する用途にも使えるため、よくデータセンターや運用部隊からかかってくるような、システム障害時の電話連絡網をLambdaと組み合わせて代替できないか試してみます。

Amazon Connectの設定

先ずは、Amazon Connect側の設定からやっていきます。

インスタンスを作成する

まずは、コールセンターとしてのインスタンスを作成するところから始まります。
インスタンスに属するユーザーを管理する方法が3種類あります。

手っ取り早い「Amazon Connect 内にユーザーを保存」を選びます。
URLには任意の文字列を設定します。

次のステップの「管理者の作成」はスキップできるので飛ばします。

「テレフォニーオプション」は、発信しかしないので「発信通話」だけをオンにします。

「データストレージ」はデフォルトでインスタンスを作成します。

Amazon Connect のセットアップが始まり、少し待つとインスタンスが出来上がります。

できあがったインスタンスはAmazon Connectのダッシュボードから確認できます。
ユーザーを作ってなくても「管理者としてログイン」ボタンを押せばインスタンスにログインできます。

電話番号の取得

まずは、発信者として使う電話番号を取得します。
「電話番号の取得」から電話番号が取得できます。
使える電話番号がプルダウンに出てくるので、好きなものを使いましょう。

問い合わせフローの作成

電話をかけるためのフローを作成します。
左のタブから項目をドラッグドロップし、フローを作っていきます。

フローの要素には色々なものが設定できますが、
このフローの内容は機械音声を設定し、テキストを読み上げるだけです。

フローを作成し、保存、更新、公開すると使えるようになります。
この画面でARNを取得できるので控えておきます。
この次のLambdaの設定に使います。

Lambda関数の作成

Amazon Connectを呼び出すLambda関数を作成します。

Lambda実行ロールにはAmazon Connectの権限を割当てておきます。
import boto3
import logging

def lambda_handler(event, context):
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    logger.info(event)
    
    client = boto3.client('connect')

    result = client.start_outbound_voice_contact(
        InstanceId='************************************',
        ContactFlowId='************************************',
        SourcePhoneNumber='+8150********',
        DestinationPhoneNumber=event['phone_number'],
    )

    return {
        'result': result['ResponseMetadata'],
    }
InstanceIdとContactFlowIdは先ほどコピーしたARNに書いてあります。
SourcePhoneNumberは取得した電話番号を設定しましょう。

パラメーターに電話番号を渡すとそこに電話がかかってきて、機械音声の読み上げが始まります。
電話番号は先頭に「+81」の国番号を付けて、先頭のゼロを取り、ハイフンなしで渡しましょう。
簡単に電話をかける処理を実装することができました。
ここから、API Gatewayなどのイベントトリガーを設定し、連絡リストを読み込むようにしてやれば障害連絡の発報が実装できそうです。