Amazon Connect 1つのコンタクトフローで受付電話番号毎に処理やルーティングを変更する方法 – Amazon Connect アドベントカレンダー 2022

複数の電話番号で同じコンタクトフローを利用する方法
2022.12.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
繁松です。

この記事は「Amazon Connect アドベントカレンダー 2022」の21日目の記事となります。
Amazon Connectアドベントカレンダー2022は、クラスメソッドと株式会社ギークフィードさんの有志が集いチャレンジしている企画です。

はじめに

今日はAWS Black Belt Online Seminarの中でベストプラクティスとして紹介されていた1つのコンタクトフローで受付電話番号毎に処理やルーティングを変更する方法の作成手順についてブログを書きます。

複数の電話番号を取得した際に電話番号毎にコンタクトフローを作成するとメンテナンスの管理運用負荷が上がります。
複数の電話番号で同じコンタクトフローを使うことでメンテナンスの負荷を下げることができます。
こういった設計は構築作業の最初の段階で取り入れて手戻りなどを無くし、メンテナンスの効率性を上げることが推奨されております。

作成手順

Lambda、DynamoDBを使って1つのコンタクトフローで受付電話番号毎に処理やルーティングを変更します。
コールフローの中でDynamoDBからキューやプロンプトの情報を取得し外部属性として利用することで別々の電話番号でも同じコンタクトフローで転送先のキューやガイダンスを動的に変更することができます。

データベース(DynamoDB)を作成

DynamoDBに「電話番号」「キューARN」「プロンプトARN」のデータをもつデータベースを作成します。
パーティションキーを「PhoneNumber」として作成します。
その他はデフォルトのままテーブルを作成します。

作成したらデータを登録します。
PhoneNumber:Amazon Connectの電話番号
QueueARN:キューのARN
PromptARN:音声プロンプトのARN

{  
  "PhoneNumber": {  
    "S": "+1231111XXXX"  
  },  
  "PromptARN": {  
    "S": "音声プロンプトのARN"  
  },  
  "QueueARN": {  
    "S": "キューARN"  
  }  
}

電話番号は国コード(+81)を付けた「E.164」形式で登録します。
https://ja.wikipedia.org/wiki/E.164

また、市外局番や携帯電話番号の先頭の「0」は外した形で登録します。
(090-1111-XXXX→+81901111XXXX)

Lambda関数を作成

関数名、ランタイム、実行ロールを指定して関数を作成します。
実行ロールはポリシーテンプレート[DynamoDB シンプルなマイクロサービスのアクセス権限]を選択します。
※権限は必要に応じて設定してください。

import boto3    
import json    
    
def lambda_handler(event, context):    
    table_name = 'contactflowdb'    
    
    print(json.dumps(event))    
    
    # Amazon Connectから受け取ったイベントから「Amazon Connectの電話番号」を取り出す    
    phone_number = event['Details']['ContactData']['SystemEndpoint']['Address']    
    
    # DynamoDBテーブルから「Amazon Connectの電話番号」をキーに指定してレコードを抽出する    
    dynamodb = boto3.resource('dynamodb')    
    table = dynamodb.Table(table_name)    
    
    response = table.get_item(    
        Key={    
            'PhoneNumber': phone_number    
        }    
    )    
    
    print(json.dumps(response))    
    
    # 「キューARN」、「プロンプトARN」を取り出して戻り値にセット    
    queuearn = response['Item'].get('QueueARN')  
    promptarn =  response['Item'].get('PromptARN')   
  
    return {  
        'QueueARN':queuearn,  
        'PromptARN':promptarn  
    }

Lambda関数をAmazon Connectに登録

作成したLambda関数をAmazon Connectコンタクトフローで使用可能にする為に登録を行います。
Amazon Connectのコンソールを開き対象のインスタンスを選択します。
問い合わせフロータブを開き、Lambda関数のプルダウンから作成したLambda関数を選択し、「+Add Lambda Function」をクリックします。

コンタクトフローを作成

コンタクトフローを作成します。
Amazon Connectコンソールよりコンタクトフローを開き、[コンタクトフローを作成]を選択

以下の内容でコンタクトフローを作成します。

①AWS Lambda 関数を呼び出す
作成したLambda関数を呼び出します。

②コンタクト属性の設定
Lambda関数の戻り値をコンタクト属性に設定します。

③プロンプトの再生
Lambda関数からの戻り値のプロンプトライブラリを読み上げるように設定しています。

④作業キューの設定
Lambda関数からの戻り値のキューを設定しています。

動作確認

同じコンタクトフローを使っても電話番号毎にDynamoDBに設定された異なるプロンプトが再生され、キューに転送されることが確認できました。

さいごに

複数の電話番号で1つのコンタクトフローを利用するとメンテナンスの効率性があがることはもちろんですが、キュー、プロンプトなどの情報をDynamoDBから動的に呼び出すことができるのでDR対策を考慮した構成も考えやすいのではないかと思います。

明日の「Amazon Connect アドベントカレンダー 2022」の記事もお楽しみに!