2-1.発信者番号の自動切替

アウトバウンドコールにおいて、発信元の電話番号が顧客と同じ市外局番の場合、顧客は着信コールに応答する可能性が高くなります。例えば日本の顧客に US 番号で発信しても電話を取る確率は低いですが、050 番号や 0120 番号で発信することで、電話を取ってもらえる確率は上がります。
Amazon Connect、AWS Lambda、Amazon DynamoDB を組み合わせて活用することで、コンタクトセンターのエージェントが発信番号を手動で操作することなく、発信先の電話番号に応じて自動的に Amazon Connect 側の発信者番号を切り替えてアウトバウンドコールを行うことができます。


ソリューションの概要

  1. エージェントは、CCPを使用して、顧客にアウトバウンドコールを発信します。
  2. Amazon Connect 内で発信ウィスパーコンタクトフローが呼び出されます。
  3. このフロー内で 顧客の電話番号をパラメータとしてLambda 関数を呼び出します。
  4. Lambda 関数は DynamoDB のテーブルにクエリを実行し、宛先電話番号に対応する発信元の電話番号を取得し、Amazon Connect に返却します。
  5. Amazon Connect のコンタクトフローでは、この番号を発信者番号として、手順1でエージェントが入力した顧客の電話番号に電話をかけます。
  6. 顧客側の電話には、DynamoDB のテーブルから取得した電話番号が発信者として表示されます。

以下の図は、ダイナミックアウトバウンドダイヤルの処理の流れを示しています。 dynamic


前提条件

この手順を行うには、以下の準備が必要です。

次の権限を持つAWS アカウント
  • Lambda 関数の作成および変更を行う権限
  • DynamoDB テーブルの作成および更新を行う権限

    発信/着信が可能な Amazon Connect インスタンスおよび電話番号
  • 発信元の番号を切り替えるため、取得可能な国の電話番号を2つ以上取得します(前章の追加準備で電話番号を取得した場合、合計で最低3つの電話番号が必要です)。

    Lambda 実行のためのIAMポリシーの作成
  • DynamoDB のテーブルの読み取り権限を持つIAMポリシーを DDBtblspecificReadAccess として作成します。ポリシーには以下のJSONを利用します。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": [
				"dynamodb:BatchGet*",
				"dynamodb:DescribeReservedCapacity*",
				"dynamodb:DescribeTable",
				"dynamodb:Get*",
				"dynamodb:Scan",
				"dynamodb:List*",
				"dynamodb:Query",
				"dynamodb:DescribeStream",
				"dynamodb:DescribeTimeToLive",
				"dynamodb:DescribeLimits"
			],
			"Resource": "*"
		}
	]
}

dynamo


DynamoDB テーブルのセットアップ

  1. AWS コンソールから DynamoDBを検索し、DynamoDB を開きます。 dynamo
  2. テーブルの作成を選択します。 dynamo
  3. USAreaCodesという名前でテーブルを作成します。以下の値で設定し、テーブルの作成を選択します。
    • パーティションキー :AreaCode(文字列)
    • ソートキー:OutboundDialNumber(文字列)
    • その他の項目:デフォルト dynamo
  4. テーブルの作成が完了したらテーブル名をクリックし、テーブルアイテムの探索 - 項目の作成をクリックします。AreaCodeにはテストでコールする先の電話番号を E.164(+12345678901)形式で設定し、OutboundDialNumberには Amazon Connect で取得した電話番号のうち1つをE.164形式で設定します。項目の作成を選択します。 dynamic

    リージョンにかかわらず、作成直後の Amazon Connect インスタンスでは 090、080、070番号への発信は許可されていません。このワークショップでは Amazon Connect から通話発信を行いますが、携帯電話番号以外に 03 や 050 などの固定電話や、US 番号を無料で取得できるアプリ等を準備できない場合は、前項の追加準備手順に従って、通話先となる US 電話番号を Amazon Connect 上で取得して、テーブルのテストコール先電話番号( AreaCode )として設定してください。


Lambda 関数のセットアップ

  1. Lambda 関数をDDBPhoneNumberSearchという名前で Python 3.9 のランタイムで作成し、以下のコードをペーストして Deploy します。この関数は宛先電話番号に対応する発信元電話番号を DynamoDB テーブルから取得します。
import json
import json
import boto3

from boto3 import resource
from boto3.dynamodb.conditions import Key
dynamodb_resource   = resource('dynamodb')
areaCodesTable = dynamodb_resource.Table('USAreaCodes')
RET_ERROR = 999

def lambda_handler(event, context):
	phoneNumber = event['Details']['ContactData']['CustomerEndpoint']['Address'] 
#	areaCode = (phoneNumber[0:5])[-3:]
	areaCode = (phoneNumber)
	response = ''
	try:
		response = retrieveOutboundDialNumber(areaCode)
	except Exception as e:
		return {
			'statusCode': RET_ERROR,
			'OutboundDialNumber':str(e)
		}
		
	if response != '' :
		if 0 < response['Count'] :
			return {
				'statusCode': response['ResponseMetadata']['HTTPStatusCode'],
				'OutboundDialNumber': response['Items'][0]['OutboundDialNumber']
			}
		else :
			return {
				'statusCode': RET_ERROR,
				'OutboundDialNumber':response['Count']
			}
		
def retrieveOutboundDialNumber(areaCode):
	try:
		response = areaCodesTable.query(
			KeyConditionExpression=Key('AreaCode').eq(areaCode),
			ScanIndexForward=False,
			Limit=1
		)
	except Exception as ex:
		raise ex
	else :
		return response

dynamic

  • この Lambda 関数の IAM ポリシーには、AWSLambdaBasicExecutionRole-****に加えてDDBtblSpecificReadAccessを追加してください。 dynamic

Lambda 関数のテストイベントを任意のイベント名と以下のJSONにより作成して、テストします。CustomerEndpointに設定されている+12345678912はテストで使用する発信先の電話番号に変更します。

リージョンにかかわらず、090、080、070番号への発信は作成直後の Amazon Connect インスタンスでは許可されていません。03、050、US 番号など、発信先として設定可能な電話番号を準備できない場合は、前項の追加準備手順に従い宛先となる US 電話番号を取得して、テストコール先電話番号として設定してください。

{
	"Details": {
		"ContactData": {
			"CustomerEndpoint": {
				"Address": "+12345678912"
			}
		}
	}
}

dynamic

DynamoDB に登録されている宛先電話番号(AreaCode)に対応した発信元電話番号(OutboundDialNumber)と、statusCode=200 が応答されることを確認します。

dynamic

Amazon Connect のセットアップ

  1. Amazon Connect インスタンスの設定において、Contact flows メニュー内の AWS Lambda から、前の手順で作成した Lambda 関数 DDBPhoneNumberSearch を登録します。 dynamic

  2. Amazon Connect の設定管理画面から、問い合わせフロー画面に移動し、発信ウィスパーフローを作成します。このフローは、適切なキューに割り当てられたエージェントがアウトバウンドコールを発信しようとするたびに呼び出されます。以下に、設定するワークフローを示します。

    必要に応じてこちらのファイルをインポートすることで、作業時間を省略できます。インポートした場合はAWS Lambda関数を呼び出すボックスでLambdaを再選択する必要があります。

    • フロー名は DynamicOutboundDialer と設定します。
    • ログ記録動作の設定記録と分析の動作を設定ブロックを配置します。
    • AWS Lambda関数を呼び出すブロックを配置し、DDBPhoneNumberSearchを呼び出します。
    • コンタクト属性を確認するブロックを配置し、タイプを外部、属性値をstatusCodeとして、条件を等しい/200として設定します。
    • 電話番号を呼び出すブロックでは属性を使用し、タイプを外部として属性値をOutboundDialNumberとします。

    dynamic

  3. ユーザー > ユーザー管理から、発信テストに使用するエージェントを作成します。

    • ルーティングプロファイルはBasic Routing Profileを指定してください。
    • セキュリティプロファイルにはAgent,Adminを付与してください。
      dynamic
  4. ルーティング > キューから、Basic Queue を編集します。

    • アウトバウンド発信者 ID 番号 はアウトバウンドウィスパーフローで上書きされるため、任意の番号を選択して問題ありません。
    • アウトバウンドウィスパーフローDynamicOutboundDialer を選択します。
      dynamic

実行

  1. 上記で作成したエージェントで CCP にログインします。言語を日本語に切り替えます。
  2. CCP に、DynamoDB の宛先として設定した電話番号を入力し、呼び出しボタンを押します。
  3. 受信側の電話機において、表示される電話番号を確認してください。
  4. DynamoDB で、OutboundDialNumber の値を Amazon Connect で取得した別の US 番号に変更し、保存します。
  5. 再度、CCP に、DynamoDB の宛先として設定した電話番号を入力し、呼び出しボタンを押します。
  6. 受信側の電話機において、表示される電話番号を確認してください。

この方法を応用することで、例えばアメリカの顧客にはアメリカの番号で発信し、日本の顧客には日本の電話番号で発信することを、エージェントが意識せず自動で切り替えることが可能になります。