概要
今回、下記の公式サイトを参考にAmazon Connectでクラウド上にコールセンターを構築しました。
Amazon Connect Introduction – ANZ
https://catalog.us-east-1.prod.workshops.aws/workshops/b06b53f6-3b36-4e1a-a208-ddbeb25405c6/en-US
Welcome to Amazon Connect Bootcamp
Amazon Connectインスタンスの作成及び初期設定
Amazon Connectインスタンス作成
Amazon ConnectサービスでCreate Instance
を選択します。

【ID管理を設定】
“Amazon Connectでユーザーを作成および管理”を選択して、アクセスURL
を入力します。
アクセスURL
はグローバルで一意になる必要があります。
名前が重複しているかどうかは作成しないとわかりません。
重複時は、残念ながら一から再作成する事になります。

【管理者を追加】管理者を指定
を選択して、管理者情報を入力します。

【テレフォニーを設定】着信を許可する
と発信を許可する
ともにチェックがついていることを確認します。

【データストレージ】
デフォルトのままとしました。

確認ページで確認後、数分でインスタンスが作成されました。
Amazon Connectのコンソールに移動しますので、アクセスURL
をクリックします。

先ほど作成した管理者でログインします。

ログイン後、英語表記になっているので、右上のアイコンをクリックして日本語に変更します。

電話番号の取得
通常であれば、[チャネル]-[電話番号]メニューで電話番号取得
を選択して新規電話番号を取得するのですが、

国/地域
で”日本”を選択すると、”その国でお使いいただける番号はありません。必要な場合は、サポートにお問い合わせください。”とメッセージが表示され取得できません。

日本の電話番号を取得するにはAWSのサポートに申請が必要です。
申請に必要な書類は下記が必要となります。
- 申請者の行政機関発行の有効な身分証明書 (運転免許証、パスポートなど)
- 申請者と企業の関連性を示すドキュメント(社員証や、その他所属を確認できる書類)
- 公共料金の請求書、法務省からの企業登録証明書 (登記事項証明書など)、行政機関からの領収書、国税または地方税に関する証明書 (納税証明書など)、社会保険料の領収書などの書類(東京の 03 番号の取得をする場合は、03 番号が使用可能な住所が記載されているもの)
事業用の電話番号のみ取得でき、個人用の番号は取得できません。
2022年8月現在、Amazon Connectで取得できる電話番号は下記の通りです。
- 直通ダイヤル(DID)番号
050 プレフィックス番号
03 東京を表すプレフィックス番号 - 通話料無料番号
0120 プレフィックス番号
0800 プレフィックス番号
現在、DIDでは東京以外の電話番号は取得できないようです。
私は大阪在住ですので、06を取得したかったのですが、無理なようですので050から始まる番号を申請しました。
申請から約1週間くらいで電話番号の取得が完了しました。
機能制限の緩和の申請
2021年8月上旬以降に東京リージョンで作成されたConnectインスタンスについて、デフォルトで、日本の固定電話・アメリカ合衆国・ベトナムの架電のみ可能となっており、その他の国及び日本の携帯電話番号への架電はホワイトリスト化の申請が必要となっております。
今回は、日本の携帯電話への架電が必要なので、AWSサポートに制限緩和の申請をしました。
申請から約1週間くらいで制限緩和の完了の連絡がきました。
問合せフローの設定
電話番号の取得が完了したので、[チャネル]-[電話番号]で取得した電話番号をクリックして、問合せフロー/IVR
でSample inbound flow(first contact experienceを選択して保存します。
ここで一度発着信が可能か確認しておきます。

コンタクトフローの作成
Amazon Connectでは複数のコンタクトフロー間を行き来しながら全体のフローを組み立てていく事となります。
各フローは公開されていないと、その他のフローから参照ができません。
そこで最初にAWSBootcamp1~8までの仮のコンタクトフローを作成して、公開状態にしておきます。(公式サイトでは9があったのですが、実際には使用されていないようだったので、作成の必要はありません。)
[ルーティング]-[問い合せフロー]メニューでコンタクトフローの作成
を選択します。

フロー名
を”AWSBootcamp1”切断フロー
を追加して、エントリポイントから線でつなげます。
保存の右にある矢印
をクリックして名前をつけて保存
を選択して、説明に”Set global parameters”として保存します。

この名前を付けて保存
を繰り返して、AWSBootcamp2~9まで下記のように作成します。
フロー名 | 説明 |
AWSBootcamp1 | Set global parameters |
AWSBootcamp2 | TOD Check |
AWSBootcamp3 | Customer Lookup |
AWSBootcamp4 | Welcome Message |
AWSBootcamp5 | Menu |
AWSBootcamp6 | Callback |
AWSBootcamp7 | Case update playback |
AWSBootcamp8 | Last agent routing |
作成後、各フロー設定画面で公開
を選択して、全てのフローを公開済み状態とします。

AWS Bootcamp 1
全体の初期設定
概要
このコンタクトフローでは、全体の初期設定を行います。
全ての設定が完了すれば、AWSBootcamp2へ転送します。
コンタクトフローの設定
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
ログの記録動作の設定 | コンタクトフロー内の動作ログを取得することができます。 CloudWatchLogsの /aws/connect/<インスタンス名> にログが記録されます。 ログの記録の動作:有効化 |
音声の設定 | テキスト読み上げでの音声に関する設定をします。 言語:日本語 音声:Takumi 言語属性を設定:チェック |
記録と分析の動作を設定 | 通話録音に関する設定を行います。 エージェントと顧客、またはどちらかを指定できます。 録音されたデータは、S3の amazon-connect-XXXXXXXXXXXX/connect/<インスタンス名>/CallRecordings に.wav形式で保存されます。通話記録:[オン]-[エージェントおよび記録] |
保留フローの設定 | エージェントが通話を保留中に実行されるのフローを設定します。 [エージェント]-[フローの選択]で”Default agent hold”を選択します。 |
顧客キューフローの設定 | 顧客がキューに転送された時のフローを設定します。 [フローの選択]で”Default customer queue”を選択します。 |
ウィスパーフローの設定 | 通話がエージェントにつながる時に顧客またはエージェントに対してのウィスパーフローを設定します。 [送信先:エージェント]-[フローの選択]で”Default agent whisper”を選択します。 |
フローへの転送 | 別のフローへ転送します。 フローの選択:”AWSBootcamp2″を選択します。 |

テスト
全ての設定が完了して、AWSBootcamp2のフローに遷移する事を確認します。
ブロック単位での処理結果を確認するにはCloudWatchLogsを参照するとよいです。
AWS Bootcamp 2
営業時間設定
概要
このコンタクトフローでは営業時間をチェックして時間内であればAWSBootcamp3へ転送します。
オペレーション時間の設定
最初に営業時間の設定をします。
[ルーティング]ー[オペレーション時間]ページで、新しい時間の追加
を選択します。

名前
:Basic Business Hours説明
:営業時間(通常)タイムゾーン
:Japan営業時間
:月~金のAM9:00~PM5:00

コンタクトフローの設定
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
オペレーション時間を確認する | [指定時間(オプション)]で”Basic Business Hours”を選択します。 |
フローへ転送 | フローの選択:”AWSBootcamp3″を選択します。 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“本日の営業は終了しました。” |

テスト
営業時間内であればAWSbootcamp3へ遷移し、営業時間外であればメッセージが流れて切断されることを確認します。
AWSBootcamp3
顧客情報照会
概要
このコンタクトフローでは、Amazon Connectから渡される顧客電話番号を用いてLambdaを経由でDynamoDBへ顧客情報を照会をします。
データがあればmessageに”Success”をセットして取得された各値をセット。
データがなければmessageに”Fail”をセットします。
実際のシナリオではDynamoDBではなく、CRMへの照会になるかと思いますが、今回はDynamoDBを使用してシミュレートします。
IAMロールの作成
Lambdaに付与するロールを作成します。
IAMサービスで[ロール]メニューから、ロールを作成
を選択します。

[AWSのサービス]からLambda
を選択します。

下記のポリシーをアタッチします。
- AWSLambdaBasicExecutionRole
- AmazonDynamoDBReadOnlyAccess
- AmazonConnect_FullAccess(今回は特に必要なし)

ロール名
を”AWSBootcamp”としてロールの作成を完了します。

DynamoDBのテーブル作成
DynamoDBのテーブルを作成します。
DynamoDBサービスの[テーブル]メニューからテーブルの作成
を選択します。

テーブル名に”AWSBootCamp”
パーティションキーに”phoneNumber”と入力してテーブルの作成を完了します。

作成したテーブルに項目を追加します。
作成したテーブルのアクションから項目を作成
を選択します。

JSON
を選択して、下記のコードを貼り付けて項目の作成を完了します。
“phoneNumber”の値には発信者番号に書き換えて下さい。
{
"phoneNumber": {
"S": "+818012345678"
},
"caseNotes": {
"S": "問合せ状況は、現在急ぎで確認中です。次の更新は午後3時になります。"
},
"caseNumber": {
"S": "1030"
},
"DOB": {
"S": "800105"
},
"fName": {
"S": "イチロウ"
},
"lastAgent": {
"S": "tanaka"
},
"lName": {
"S": "スズキ"
},
"status": {
"S": "シルバー"
}
}

Lambda関数の作成
DynamoDBにデータ照会をするLambda関数を作成します。
Lambdaサービスの[関数]メニューから関数の作成
を選択します。

「一から作成」を選択して、
関数名
:AWSBootcampランタイム
:Python3.8実行ロール
:既存のロールを使用する
を選択して、AWSBootcamp
を選択します。

作成されたLambda関数の内容を編集します。
コード
タブを選択して、下記のコードを貼り付けます。
貼り付け後、Deploy
を選択して保存します。
# MIT No Attribution
# Copyright 2021 AWS
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#Import libraries and set table name
import json
import boto3
import os
tableName= os.environ['tableName']
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
#Customer phone number passed from Amazon Connect via JSON
phoneNumber = event ['Details']['ContactData']['CustomerEndpoint']['Address']
#customer lookup to DynamoDB via Customer phone number
table = dynamodb.Table(tableName)
response = table.get_item(Key={'phoneNumber' : phoneNumber})
#If record exists write values to variables
if 'Item' in response:
caseNumber = response['Item']['caseNumber']
DOB = response['Item']['DOB']
fName = response['Item']['fName']
lName = response['Item']['lName']
status = response['Item']['status']
lastAgent = response['Item']['lastAgent']
caseNotes = response['Item']['caseNotes']
#Return variables to Amazon Connect
return {'message': 'Success',
'caseNumber' : caseNumber,
'DOB' : DOB,
'fName' : fName,
'lName' : lName,
'status' : status,
'caseNotes' : caseNotes,
'lastAgent' : lastAgent
}
#If no match return a default message
else:
return { 'message': 'Fail'}

コード中で環境変数からテーブル名を取得しておりますので、環境変数を追加します。
設定
タブを選択して、環境変数
メニューで編集
を選択します。

キー
:tableName値
:AWSBootCamp
を入力して保存
を選択します。

Amazon ConnectのLambda設定
Amazon ConnectからLambdaを呼び出せるように設定します。
Amazon Connectサービスで該当インスタンスを選択し、[問合せフロー]メニューのAWS Lambda項目でAWSBootcamp
を選択してAdd Lambda Function
を押してLambda関数を追加します。

コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
コンタクト属性を確認する | コンタクト属性とはコンタクトフロー内で使用する事ができるkey&valueタイプの変数です。 例えば、顧客の電話番号やキュー情報などの事前に定義されているものや、lambdaやLexなどのAWSサービスの戻り値、ユーザー定義で独自にも設定する事も可能です。 それらの値を用いて条件分岐で処理分岐させることができます。 ここではチャネル属性の値を確認しますが、値には VOICE ,CHAT ,TASK の3つがあります。今回は音声通話のみを対象としておりますので、VOICEかどうかの判定となります。 タイプ:システム 属性:チャネル チェックする条件:等しい “voice” |
AWS Lambda関数を呼び出す | Lambda関数を呼び出すことができます。 関数を選択する:Lambda関数のARN タイムアウト:8秒 |
コンタクト属性の設定 | コンタクト属性の値をセットします。 今回はLambdaの戻り値をユーザー定義として保存します。 宛先タイプ:ユーザー定義 宛先属性:message [属性を使用する]-タイプ:外部 属性:message 宛先タイプ:ユーザー定義 宛先属性:caseNumber [属性を使用する]-タイプ:外部 属性:caseNumber 宛先タイプ:ユーザー定義 宛先属性:DOB [属性を使用する]-タイプ:外部 属性:DOB 宛先タイプ:ユーザー定義 宛先属性:fName [属性を使用する]-タイプ:外部 属性:fName 宛先タイプ:ユーザー定義 宛先属性:lName [属性を使用する]-タイプ:外部 属性:lName 宛先タイプ:ユーザー定義 宛先属性:status [属性を使用する]-タイプ:外部 属性:status 宛先タイプ:ユーザー定義 宛先属性:caseNotes [属性を使用する]-タイプ:外部 属性:caseNotes 宛先タイプ:ユーザー定義 宛先属性:lastAgent [属性を使用する]-タイプ:外部 属性:lastAgent |
切断時間内 → フローへ転送 | フローの選択:”AWSBootcamp4″を選択します。 |

テスト
電話番号でデータを検索してヒットした時と、ヒットしない時に適切にコンタクト属性がセットされていることを確認します。
確認するにはCloudWatchLogsを参照するとよいです。
AWSBootcamp4
本人確認
概要
このコンタクトフローでは、ウェルカムメッセージを再生後に
- 顧客照会でヒットした顧客(message:Success)は生年月日入力による本人確認処理
- ヒットしなかった顧客(message:Fail)はAWSBootcamp5へ転送
の処理を行います。
本来であれば、生年月日による本人確認処理では、一致したケースと不一致のケースで処理を分岐するのでしょうが、このBootcampでは一致不一致の結果を音声で案内するのみで共にAWSBootcamp5転送するようです。
コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-”お電話ありがとうございます。こちらは〇〇会社です。” |
コンタクト属性を確認する | タイプ:ユーザー定義 属性:message チェックする条件:等しい ”Success” |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“こんにちは $.Attributes.fName さん。あなたは $.Attributes.status 会員です。” |
顧客の入力を保存する | 入力されたプッシュ番号をコンタクト属性に保存します。 保存されたコンタクト属性は、 [コンタクト属性を確認する]の、 タイプ:システム 属性:保存済の顧客の入力 で確認できます。 [テキスト読み上げまたはチャットテキスト]-[手動で設定する]で”生年月日を6桁の数字で入力してください。”と入力します。 顧客の入力:カスタム 最大桁数6 |
コンタクト属性を確認する | タイプ:システム 属性:保存済の顧客の入力 チェックする条件:等しい ”$.Attributes.DOB” |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“入力された番号と一致しませんでした。” |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“確認できました。” |
フローへ転送 | フローの選択:”AWSBootcamp5″を選択します。 |

テスト
AWSBootcamp4でデータベースにヒットした時は、その旨のメッセージが再生され、本人確認が正しく行われることを確認します。
データベースにヒットしなかった時はAWSBootcamp5に転送されることを確認します。
AWSBootcamp5
メニュー
概要
このコンタクトフローではメニューのフローを作成します。
各メニューと処理は
- 1:セールス
Salesキューへ転送 - 2:問合せ
Inquiryキューに設定してAWSBootcamp6へ転送 - 3:サポート
Supportキューに設定してAWSBootcamp7へ転送
となり、無効な入力がされた時は、エラーガイダンスを流し3回までリトライできるようにします。
3回のリトライでも無効と判定された時は2:問合せ
と同じ処理とします。
キューの作成
発信者のメニュー番号選択により、下記の3つのキューに振り分けますので、事前にキューを作成します。
- Sales
- Inquiry
- Support
[ルーティング]-[キュー]ページよりキューを追加
を選択します。

キューの名前
:Salesオペレーション時間
:Basic Business Hoursアウトバウンド発信者ID番号
:取得した電話番号
同様にInquiry,Supportのキューも作成します。

コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
顧客の入力を取得する | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-”営業は1を。 新規問合せは2を。 既存問合せは3を押してください。” オプション:1,オプション:2,オプション:3 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“無効な番号が入力されました。再度入力してください。” |
ループ | ループ数:3 |
作業キューの設定 | 通話を入れるキューを設定します。 設定されたキューは問合せフロー間で有効となります。 [キュー別]-[キューの選択]-“Sales”を選択します。 |
キューへ転送 | 設定されているキューへ転送します。 これによりエージェントと通話可能状態となります。 |
作業キューの設定 | [キュー別]-[キューの選択]-“Inquiry”を選択します。 |
フローへ転送 | フローの選択:”AWSBootcamp6″を選択します。 |
作業キューの設定 | [キュー別]-[キューの選択]-“Support”を選択します。 |
フローへ転送 | フローの選択:”AWSBootcamp7″を選択します。 |

テスト
メニューで無効な番号がプッシュされた時はエラーメッセージが流れ、リトライ処理が正しく行われることを確認します。
有効な番号がプッシュされた時は、適切なキューが設定されることを確認します。
AWSBootcamp6
コールバック
概要
このコンタクトフローでは、コールバックのフローを作成します。
キューの待ち時間(2分以内かどうか)によって流す音声を変更し、その後
- 1:このまま待機してエージェントと通話
Inquiryキューへ転送 - 2:コールバックをお願いする
コールバックの電話番号を入力してコールバックキューへ転送後切断
を選択します。
コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
キューの状態を確認する | 最も古い問合せがエージェントにルーティングされるか、キューから削除されるまでにキュー内で費やした時間です。 出力:キューされていた時 2分以下 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“待ち時間は2分以内です。” |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“待ち時間は2分以上です。” |
顧客の入力を取得する | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“このまま待機するには1を。コールバックをご希望の方は2をプッシュして下さい。” オプション:1,オプション:2 |
キューへ転送 | |
顧客の入力を保存する | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“ご希望のコールバック電話番号を入力してください。” 顧客の入力:電話番号-ローカル形式 国コード:+81 最初のエントリ前のタイムアウト:6 [電話番号]-[ローカル形式]で国コードを指定する事によりAmazon Connectが自動で国コードをセットします。 |
コールバック番号を設定する | タイプ:システム 属性:保存済みの顧客の入力 |
キューへ転送 | コールバックキューへの転送 初回ディレイ:5秒 最大試行回数:2、試行間の最小時間:2分0秒 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“コールバックを受付しました。” |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“無効な電話番号が入力されました。” |

エージェントの電話の受信の設定
エージェントで電話の受信できるようにするにはルーティングプロファイルを作成して、ユーザーとルーティングプロファイルを関連付ける必要があります。
[ユーザー]-[ルーティングプロファイル]で「プロファイルを新規追加」を選択します。
名前
:routing_profile_Inquiry説明
:to Inquiryチャネルを選択
:音声キュー
:Inquiryを選択して、優先度と遅延を入力します。デフォルトのアウトバウンドキュー
:Inquiry

[ユーザー]-[ユーザー管理]で該当のユーザーを選択して、ルーティングプロファイル
:routing_profile_Inquiry
を選択します。

あとは、管理画面右上の電話のアイコンをクリックして、別窓で表示される電話操作画面でステータスがAvailavle
になっていることを確認します。

テスト
このまま待機(1)でエージェントにつながる事と、コールバック(2)で入力された電話番号にエージェントから電話がかかってくることを確認します。
AWSBootcamp7
最新コメント再生
概要
このコンタクトフローでは問合せの最新コメント再生のフローを作成します。
- 顧客照会でヒットした顧客
問合せの最新のコメントを聞く(1)か、新規で問い合わせをする(2)かを選択します。
問合せの最新のコメントを聞くときは、再生後、エージェントと通話するかを選択します。(エージェントと通話するときはAWSBootcamp8に転送)
新規で問い合わせをするとき(1)は、AWSBootcamp8に転送します。 - 顧客照会でヒットしなかった顧客
AWSBootcamp8に転送します。
コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
コンタクト属性を確認する | タイプ:ユーザー定義 属性:message チェックする条件:等しい ”Success” |
顧客の入力を取得する | 音声の再生には、テキスト以外にSSMLのタグを使用する事ができます。 [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“ <speak> $.Attributes.fName さん。 最新の受付番号は、 <say-as interpret-as=”digits”>$.Attributes.caseNumber</say-as> です。 最新の状況を再生するには1を。 新規の問い合わせは2をプッシュして下さい。 </speak> “ 解釈する:SSML オプション:1,オプション:2 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“ <speak> 受付番号 <break time=”1s”/> <say-as interpret-as=”digits”>$.Attributes.caseNumber</say-as> <break time=”1s”/> $.Attributes.caseNotes </speak> ” 解釈する:SSML オプション:1 |
顧客の入力を取得する | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者と話をするには1をプッシュして下さい。” オプション:1 |
フローへの転送 | フローの選択、”AWSBootcamp8″ |

テスト
顧客照会でヒットした顧客が、既存受付の最新の状況を確認できる事と、それ以外がAWSBootcamp8に転送されることを確認します。
AWSBootcamp8
担当エージェントへ転送
概要
このコンタクトフローでは前回の担当者につなぐフローを作成します。
既存の問合せで、担当のエージェントに接続可能であればエージェントキューに転送し、以外はサポートキューに転送します。
コンタクトフローの作成
下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
コンタクト属性を確認する | タイプ:ユーザー定義 属性:message チェックする条件:等しい ”Success” |
人員の確認 | キューやエージェント単位で通話可能かどうかを確認します。 チェックするステータス:利用可能 [確認するキュー]-[エージェント別]-[属性を使用する] タイプ:ユーザー定義 属性:lastAgent |
顧客の入力を取得する | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“ $.Attributes.fName さん。あなたの担当者は $.Attributes.lastAgent です。 担当者との通話をご希望の時は1を押してください。 “ オプション:1 |
作業キューの設定 | [エージェント別]-[属性を使用する] タイプ:ユーザー定義 属性:lastAgent |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者 $.Attributes.lastAgent に転送します。 しばらくお待ちください。” |
作業キューの設定 | [キュー別]-[キューの選択]-“Support”を選択します。 |
プロンプトの再生 | [テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者におつなぎます。しばらくお待ちください。” |
キューへ転送 |

テスト
既存の問合せで担当のエージェントが通話可能であればエージェントに転送され、以外はサポートキューに転送されることを確認します。
Default customer whisperの設定
Default customer whisperを変更して、エージェント接続時にlambdaを起動して、DynamoDBのAWSBootCampテーブルのlastAgent
を更新するようにします。
Lambda関数の作成
DynamoDBのデータを更新するLambda関数を作成します。
AWSBootcamp3でLambdaを作成した時と同様の手順で下記を作成します。
関数名
:AWSBootcampLastAgentUpdate
# MIT No Attribution
# Copyright 2021 AWS
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#Import libraries and set table name
import json
import boto3
import os
tableName= os.environ['tableName']
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
#Customer phone number and last agent deatils passed from Amazon Connect via JSON
phoneNumber = event ['Details']['ContactData']['CustomerEndpoint']['Address']
lastAgent = event['Details']['ContactData']['Attributes']['lastAgent']
#customer lookup to DynamoDB via Customer phone number
table = dynamodb.Table(tableName)
response = table.get_item(Key={'phoneNumber' : phoneNumber})
#If record exists update the last agent field
if 'Item' in response:
table.update_item(
Key={'phoneNumber': phoneNumber},
UpdateExpression="SET lastAgent = :var",
ExpressionAttributeValues={':var': lastAgent}
)
return {'Message': 'updated'}
#If no record exists create a new record with the phone number and last agent field
else:
table.put_item(
Item={
"phoneNumber": "" + phoneNumber + "",
"lastAgent": "" + lastAgent + "",
}
)
return { 'Message': 'added'}
コンタクトフローの修正
既存のDefault customer whisperコンタクトフローを下記の表を参考に最終的に下記の図になるように設定します。
設定後、公開
を選択します。
コンタクト属性の設定 | 宛先タイプ:ユーザー定義 宛先属性:lastAgent 属性を使用する タイプ:エージェント 属性:ユーザー名 |
AWS Lambda関数を呼び出す | 関数を選択する AWSBootcampLastAgentUpdate |

テスト
既存の問合せでは既存レコードのlastAgentが更新され、新規の電話番号の問合せであればレコードが作成されることを確認します。
デフォルトのフローについて
ここまでのテストでお気づきだと思いますが、下記のような時にデフォルトで設定されているフローが適用され、英語のメッセージが再生されます。(音声言語を日本語にしている時は、カタカナ読みの英語)
- エージェントで顧客からの通話がつながる時
Default agent whisper - エージェントがコールバック発信をする時
Default outbound - エージェントが保留した時
- 顧客が通話キューに入れられた時
Default customer queue - 顧客が着信を受ける時
Default customer whisper
これらのデフォルトのフローはコンタクトフローのページで変更できます。
また、新規で作成して設定する事も可能です。
(コンタクトフローのページの「コンタクトフローの作成」の右の矢印ボタンを押下)
最後に
かなり突っ込みどころがある豪快なフローのBootcampでしたが、どのような事が可能かのイメージはつかむことができました。
次回はAmazon ConnectのAPIを使用してOutbound発信をしていこうと思います。