Amazon Connect デスクフォンに転送した時に相手の電話番号を確認する方法 – Amazon Connect アドベントカレンダー 2022
こんにちは。
繁松です。
この記事は「Amazon Connect アドベントカレンダー 2022」の14日目の記事となります。
Amazon Connectアドベントカレンダー2022は、クラスメソッドと株式会社ギークフィードさんの有志が集いチャレンジしている企画です。
はじめに
今日はAmazon Connectで着信をデスクフォンに転送した際にウィスパーを使って電話番号を囁かせて番号を確認する方法についてブログを書いていきます。
説明
Amazon Connectでエージェントの設定をデスクフォンにして電話を受ける場合に通知される電話番号はAmazon Connectの電話番号になります。
どういうことかというと、、
外出時などにエージェントの設定をソフトフォンからデスクフォンに変更することがあるかと思います。
この場合デスクフォンで設定した電話に通知される番号は「Amazon Connect の電話番号」になります。
外部の電話番号(090-1111-XXXX) -> Amazon Connect の電話番号(03-222-XXX) -> 表示される電話番号(03-222-XXX)
これではデスクフォンに設定した電話に着信を転送した場合、誰からの着信かわからず不便です。
ウィスパーを使い電話を取った時に電話番号を囁かせることで誰からの電話か確認できるようにするといった内容のブログになります。
ウィスパーとは
ウィスパーについては前回のブログで書きました。
ウィスパーとはコールセンター用語で、通話がオペレータに接続される際に自動音声で顧客の情報等を伝える(ささやく)機能です。
Amazon Connectで通話開始時にキュー名がエージェント側に読み上げられるのはデフォルトのウィスパーフローによるものです。
顧客側に「この通話は録音されています」等のお知らせするメッセージを読み上げさせることもできます。
構築手順
ウィスパーフローを作成
エージェントウィスパーフローを作成します。
Amazon Connectコンソールよりコンタクトフローを開き、[エージェントウィスパーフローを作成]を選択
以下の内容でウィスパーフローを作成します。
①プロンプトの再生
電話番号を読み上げるプロンプトの再生ブロックです。
SSMLタグでtelephoneを設定して電話番号として読み上げさせています。
telphoneを設定をしない場合は、「プラス8190億1111万XXXX」と読み上げられてしまいます。
https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html#say-as-tag
テキスト内容
<speak> <say-as interpret-as="telephone">$.Attributes.PhoneNumber</say-as> </speak>
②プロンプトの再生
ここでは10秒待機をさせて誰からの着信か考える時間を作っています。
https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html#break-tag
テキスト内容
<speak> 10秒後に繋がります。<break time="10s"/> </speak>
コンタクトフローを作成
コンタクトフローを作成します。
Amazon Connectコンソールよりコンタクトフローを開き、[コンタクトフローを作成]を選択
以下の内容でコンタクトフローを作成します。
①音声の設定
読み上げる音声を設定します。
日本語のTakumi ニューラル発話で設定します。
②コンタクト属性の設定
顧客の電話番号をコンタクト属性[PhoneNumber]として設定します。
③ウィスパーフローの設定
先ほど作成したウィスパーフローを設定します。
動作確認
電話番号に作成したコンタクトフローを紐づけることで動作確認ができます。
エージェントがデスクフォンに設定した電話で着信をとった場合、
「+81901111XXXX」→「10秒後に繋がります」と再生され、10秒経過すると電話が繋がります。
ただ、エージェント側でプロンプトの再生中に電話を切断した場合、ステータスが[Missed]となってしまいCCPから状態を変更するまで電話が受けれなくなってしまいます。番号を聞いた後に、電話に出ないといった選択は出来ませんでした。。。
顧客の名前を読み上げる方法
電話番号を読み上げられても誰かわからないことの方が多いと思います。
そこで、お客様情報を照会する仕組みを青柳さんのブログの内容を使用させていただき、お客様情報を登録している番号についてはお客様名を囁かせるフローについても考えていきます。
電話帳データベース(DynamoDB)を作成
DynamoDBに「電話番号」「お客様の名前」「名前の読み」のデータをもつデータベースを作成します。
パーティションキーを「PhoneNumber」として作成します。
その他はデフォルトのままテーブルを作成します。
作成したらデータを登録します。
{ "PhoneNumber": { "S": "+81901111XXXX" }, "CustomerName": { "S": "繁松昂大" }, "CustomerNameKana": { "S": "しげまつこうだい" } }
電話番号は国コード(+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 = 'PhoneBook' print(json.dumps(event)) # Amazon Connectから受け取ったイベントから「発信者電話番号」を取り出す phone_number = event['Details']['ContactData']['CustomerEndpoint']['Address'] # DynamoDBテーブルから「発信者電話番号」をキーに指定してレコードを抽出する dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(table_name) response = table.get_item( Key={ 'PhoneNumber': phone_number } ) print(json.dumps(response)) # 抽出結果を元に関数の戻り値(マップ構造体)をセットする if 'Item' in response: # レコードが抽出できた場合:「お客様のお名前(かな)」を取り出して戻り値にセット result = {'CustomerNameKana': response['Item'].get('CustomerNameKana', '')} else: # レコードが抽出できなかった場合:「お客様の名前(かな)」は空白にして戻り値とする result = {'CustomerNameKana': ''} return result
Lambda関数をAmazon Connectに登録
作成したLambda関数をAmazon Connectコンタクトフローで使用可能にする為に登録を行います。
Amazon Connectのコンソールを開き対象のインスタンスを選択します。
問い合わせフロータブを開き、Lambda関数のプルダウンから作成したLambda関数を選択し、「+Add Lambda Function」をクリックします。
コンタクトフローの変更
先ほど作成したコンタクトフローを変更します。
以下の内容に変更します。
赤枠内が変更点です。
①AWS Lambda関数を呼び出す
作成したLambda関数を呼び出します。
②コンタクト属性の設定
Lambda関数の戻り値をコンタクト属性に設定します。
ウィスパーフローの変更
先ほど作成したエージェントウィスパーフローを変更します。
以下の内容に変更します。
赤枠内が変更点です。
①プロンプトの再生
Lambda関数からの戻り値を読み上げるように設定しています。
動作確認
電話をかけるとDynamoDBに番号が登録されている場合は「名前+電話番号」が登録されていない場合は「電話番号」が読み上げられるようになりました。
さいごに
エージェントから電話を切った場合に、ステータスが「missed」になってしまいそれ以降の電話を受けれない等改善点はありますが、、転送した場合に誰からの着信かを確認する方法の1つとして考えてみました。
明日の「Amazon Connect アドベントカレンダー 2022」の記事もお楽しみに!