Amazon Connect Bootcampで躓いたポイントまとめてみた
目次
この記事は株式会社ギークフィードのアドベントカレンダーに参加させていただいています。7日目の記事になります。
はじめに
はじめまして!スカイアーチHRソリューションズのkuramochiです。
今後Amazon Connectのプロジェクトに参画することになったので、それに備えてハンズオンをやってみました!ボリュームのあるハンズオンなので、今回は躓きポイントに絞ってアウトプットしていきます。
私はIT業界未経験で2023年5月に今の職場に転職したばかり人間ですので、超初心者向けの内容になります。
Amazon Connectってどんなもの?
そもそもAmazon Connectって何?というところですが、クラウド上でコンタクトセンター(電話だけでなくメールやチャットにも対応した問い合わせ窓口)を構築できるサービスです。
特徴として、ドラッグ&ドロップでブロックを組み合わせることで、受電からオペレーター接続までの流れを簡単に構築できます。オペレーター10人から数万人の体制まで対応可能で、働き方も在宅でも出勤でも利用できます。個人で使う人はほぼいないと思いますが、問い合わせ窓口が必要な企業にはメリットの多いサービスです。
Amazon Connect Bootcampはどんなハンズオン?
Amazon Connect Bootcampでは、Amazon Connectの他、AWS Lambda、Amazon DynamoDB、Amazon Lex等を使って、コンタクトセンターに必要な以下の機能を実装していきます。
- 営業時間判定:営業時間を判定し、営業時間外の場合は自動メッセージを流す
- 分岐:顧客の入力に応じて担当オペレーターへ振り分ける
- 顧客認証:発信者番号からIDを識別、顧客が入力した誕生日による本人確認を行う
- 顧客管理:データベースに登録された顧客情報を顧客IDで照会し、顧客にあったメッセージを流す
- コールバック:顧客がコールバックを希望した場合、コールバックをキューで管理し自動で折り返す
- 対応履歴:直近の問い合わせについて、対応状況を音声メッセージで聞くことができる。前回のオペレーターと再度会話することができる
- Amazon Lexによる音声認識:顧客の要件を音声で認識し、担当オペレーターへ割り振る
これらの機能を、AWSBootCamp1から8のコンポーネントに分けて構築します。図にすると以下のような形です。
長いですね!
この他、このハンズオンの特徴として、「AWS Hands-on for Beginners Amazon Connectによる基本的なコンタクトセンター構築」の実施を前提としており、Amazon Connectの基本機能の説明はありません。加えて、操作に関してもコンソールのスクリーンショットのみで説明無しの場合が多いです。
スクリーンショットの通りなんとなく操作してもできなくはないですが、随時不明点を調べながら進めないと、自分が何をやっているのかわからなくなってしまいます。よくわからないことはググりながら進めましょう!
ここからが本題で、私が躓いた3つのポイントについて書いていきます。
躓いたポイント①電話番号の取得
このハンズオンを始める前の段階として、Amazon Connectのインスタンスを準備し、電話番号を取得しておく必要があります。私はここから躓きました。
下の画像はAmazon Connectのクォータに関するものです。新しく立てたインスタンスで最初の番号取得でしたが、まさに画像の文言で「上限に達しました」と表示されました。
AWSのサポートにクォータの引き上げをリクエストし、インスタンスのARN、エラー画面のスクリーンショット、利用目的(自己学習)を伝えました。4営業日ほどで制限が解除され、無事番号を取得できました。
躓いたポイント②本人確認
ハンズオン内で、簡単な本人確認機能の実装を経験できます。流れとしては以下の通りです。
- 顧客から電話があった段階でLambdaが起動し、DynamoDBから顧客情報を取得する
- 取得した顧客情報をAmazon Connectに保持する
- 顧客情報に応じて自動音声(「こんにちは〇〇様~」)を流し、顧客に生年月日を入力してもらう
- 顧客の入力と顧客情報内のデータを照合する。照合結果に応じた自動音声を流す
私の場合、正しい生年月日を入力しても「入力に誤りがあります」という案内が流れてしまい中々本人確認できませんでした。原因究明のためCloudWatchでログを確認していきます。
照合に関するログを見ると、顧客の入力(Value)はきちんと入ってますが、顧客情報(SecondValue)が空欄になっています。
{
"Results": "false",
"ContactId": "AAAAABBBBBCCCCC",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:AAAAAAAAABBBBBBBBBBBBCCCCCCC",
"ContactFlowName": "AWSBootcamp4",
"ContactFlowModuleType": "CheckAttribute",
"Identifier": "AAAAABBBBBCCCCC",
"Timestamp": "2023-11-17T01:23:01.634Z",
"Parameters": {
"Value": "111111",
"SecondValue": "",
"ComparisonMethod": "Equals"
}
}
SecondValueが空欄ということは、1の情報取得か、2の情報保持に問題がありそうです。さらにログをさかのぼると、Lambdaを使ったデータの取得は問題なくできています。生年月日(DOB)もきちんと取れていますね。
{
"ContactId": "AAAAABBBBBCCCCC",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:AAAAABBBBBCCCCC",
"ContactFlowName": "AWSBootcamp3",
"ContactFlowModuleType": "InvokeExternalResource",
"Identifier": "AAAAABBBBBCCCCC",
"Timestamp": "2023-11-17T01:22:43.017Z",
"ExternalResults": {
"lName": "Jiro",
"fName": "Tanaka",
"caseNumber": "1030",
"DOB": "111111",
"message": "Success",
"lastAgent": "kuramochi",
"status": "Silver",
"caseNotes": "プライオリティ、high。ステータス、エスカレーション中。コメント、ケースは調査中です。次回の更新は午後三時です。"
},
"Parameters": {
"FunctionArn": "arn:aws:lambda:ap-northeast-1:00000000:function:AWSBootcamp",
"ResponseValidation": "ResponseType=STRING_MAP",
"TimeLimit": "8000"
}
}
ということは、Connectの情報保持がうまくいっていないのでは…コンソールで設定を確認すると生年月日だけ保持設定が抜けていました!追加し再度テストすると、きちんと照合できました。
躓いたポイント③プロンプトの再生
プロンプトの再生をいくつも組み込むのですが、終盤のプロンプトの再生がうまくいきませんでした。ここまでは単純なコピペだけでうまくいっていたのに、なぜ…
結論としては、SSML設定の見落としが原因でした。
そもそもSSMLという単語自体知らず、注意していませんでした。調べてみると、SSMLは合成音声を制御するマークアップ言語で、声の種類・大きさ・高さ・速さ・区切りなどを指定できるようです。
プロンプトの中身ですが、最初の<speak>と最後の</speak>でSSML拡張テキストであることを示しています。<say-as interpret-as=”digits”>~</say-as>は数字を個別に読み上げる指示です(100を「ひゃく」ではなく「いちれいれい」と読む)。ちなみに、$.Attributes.caseNumberはSSMLではなく、Lambdaで取得した顧客情報の1つを指す変数です。
最後に
上記の他にも小さな躓きがいくつかあり、結構大変でした…躓くと多少イラっとはしますが、解決の過程はとても勉強になりました。全体として、とてもいいハンズオンだったと思います。
Amazon Connectに触れる機会のある方、ぜひAmazon Connect Bootcampをやってみてください!