Amazon ConnectとLambdaを組み合わせて、待ち時間を音声メッセージで返す→コールバック

こんにちは。今回も前回に引き続きAmazon Connectについてです。

前回、簡単なコールセンターフローを作成し、オペレータに外部からの着信が繋がるように設定しました。

今回はそのフローを編集し、Lambdaと組み合わせて混雑時にオペレータにつながるまでの待ち時間を音声メッセージで返したり、コールバックしたりする仕組みを作っていこうと思います。


Lambdaとは

今回待ち時間を音声メッセージで返す処理を行うにあたって、Lambdaを使います。

Lambdaとは、AWSが提供するサーバーレスコンピューティングサービスです。管理不要で、任意のアプリやバックエンドサービスで仮想的にコードを実行することが可能です。

例えばLambdaはこんな感じのことが出来ます。

・イベントをトリガーにファイル処理(S3など)
・ログの監視
・データの抽出や変換
・別のAWSサービスを起動させる
・APIリクエストによるバックエンド処理

サーバーレスなので、これらの処理も実際に動かしたいプログラムだけを開発すれば良く、いちいち環境を構築する必要がないのも特徴です。

無料枠で利用できるサービスについては、公式サイトで次のように記載されていました。

AWS Lambda の無料利用枠には、1か月ごとに 100 万件の無料リクエスト、および 40 万 GB-秒のコンピューティング時間が、それぞれ含まれます。

100万件て凄まじいですよね(笑)
なので個人利用等であれば、無料枠でも十分すぎるくらいのサービスが提供されています。


待ち時間を音声メッセージで返す設定

それでは、設定していきましょう。返ってくる音声メッセージのイメージはこんな感じです。

・待ち人数0人(キューが空)の場合

只今オペレータにお繋ぎします。そのままでお待ちください。

・待ち人数が2人の場合(キューの中に2人いる)

誠に申し訳ございません、只今混み合っております。
約10分後にオペレータにお繋ぎします、そのままでお待ちください。
コールバックを希望される方は1を押してください。

キューにいる待ち人数に応じて、音声メッセージが待ち時間を案内してくれます。


Lambdaの設定

まずLambdaで関数を作成します。

AWS管理コンソールにログインし、サービス一覧から「Lambda」を選択し、「関数の作成」をクリックします。その後「一から作成」を押し、任意の関数の名前を入力して言語は「Node.js 12.x」を選択します。

言語選択まで出来たら、「関数の作成」を押します。

作成できたら、以下のような画面になると思います。

画像2

赤枠の部分に以下のコードを記入します。

exports.handler = async (event) => {

const busyTime = 5; // 1件の対応時間を5分と仮定する
const agentsStaffedCount = event['Details']['Parameters']['Metrics.Agents.Staffed.Count']; // 対応可能なエージェント数
const queueCount = event['Details']['Parameters']['Metrics.Queue.Size']; // 現在キューで待機中の呼数

let message = '只今、オペレータにお繋ぎします、そのままでお待ち下さい。'
if (queueSize != 0) {
const waitTime = queueCount*busyTime / agentsStaffedCount; //予想待ち時間
message = "申し訳ございません、只今混みあっております。約" + waitTime + "分後にオペレータにお繋ぎします。コールバックを希望される場合は1を押してください。"
}
return {message: message};
};

コードの1行目にeventと書いてありますが、Amazon Connectでは、eventの中に通話内容に関する情報が入っていて、LambdaにJSONで送られてきます。

例えば下記みたいな感じです。Adreessの部分に発信元のユーザの電話番号が記載されています。

{
   'Details': {
       'ContactData': {
           'Attributes': {},
           'Channel': 'VOICE',
           'ContactId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
           'CustomerEndpoint': {
               'Address': '8190012345678',
               'Type': 'TELEPHONE_NUMBER'
           },
           'InitialContactId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
           'InitiationMethod': 'INBOUND',
           'InstanceARN': 'arn:aws:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
           'MediaStreams': {
               'Customer': {
                   'Audio': None
               }
           },
           'PreviousContactId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
           'Queue': {
               'ARN': 'arn:aws:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
               'Name': 'test-queue',
               'OutboundCallerId': {
                   'Address': '+8190012345678',
                   'Type': 'TELEPHONE_NUMBER'
               }
           },
           'SystemEndpoint': {
               'Address': '+8190012345678',
               'Type': 'TELEPHONE_NUMBER'
           }
       },
       'Parameters': {}
   },
   'Name': 'ContactFlowEvent'
}

先ほど赤枠の中に書いたコードでは、このeventの中の、対応可能なエージェントやキューの待ち人数を表す部分を参照し、待ち時間を計算しています。

そしてmesssageに、音声メッセージで返される内容を定義しています。待ち人数が0人であればそのまま電話を繋ぐ旨を返し、待ち人数が1人以上いる場合はそれに応じた待ち時間を返します。コールバック希望の場合のダイヤル操作指示も返します。

コードを記入したら、画面右上にある「保存」を押します。
これでLambda上で行う設定は完了です。


問い合わせフロー設定

次に問い合わせフローで設定を行います。

まずキューのメトリクスを取得するために、「キューメトリクスの取得」ブロックを配置します。中身はこんな感じで設定してください。

画像3

次に先ほど作成したLambda関数を問い合わせフローに組み込みます。
「Lambda関数を呼び出す」ブロックを配置し、「関数を選択する」の項目から先ほど作成した関数を選択し、それ以降は以下のように設定します。

画像4


最後にコールバックの設定をします。

今回は、ユーザが希望した場合にのみコールバックをする処理にしています。(希望する場合はダイヤルの1を押す)

ユーザのPush操作で処理を分岐させるためには、「顧客の入力を取得する」ブロックを使用します。中身は以下のように設定してください。

「テキスト読み上げまたはチャットテキスト」の部分に、先ほどLambdaのコードの中で出てきた変数の「message」を設定します。この設定によって、Lambdaで定義したメッセージ内容を音声が読み上げてくれるようになります。

そしてオプションに「1」を設定します。ユーザが「1」を押した場合の処理の分岐を行うためです。

画像5

そして「コールバック番号を設定する」ブロックも配置し、以下のように設定します。

画像6

そして最後に「キューへ転送」ブロックを配置し、中身で「コールバックキューへの転送」を選択すれば完了です。


問い合わせフロー全体図

画像1

フローの全体図は上記の通りです。
メトリクスの値に応じて待ち時間案内などのメッセージをLambdaで作成し、アナウンスします。そしてユーザの操作に合わせて処理を分岐させ、キューに入るようになっています。


まとめ

今回は待ち時間を音声メッセージで返したり、コールバック設定をしたりしました。今回は1人あたりの待ち時間を5分と仮定しましたが、こんな感じで大まかにでも待ち時間を案内してもらえると、お客さんにとってはちょっとありがたいかもしれないですね。

またコールバックも出来るので、待ち時間が長かった場合にはコールバックを希望する、という選択肢が出来るのも良いですね。

このような設定が簡単に出来てしまうのも、Amazon Connectの大きな魅力だと思います。もっと上手く活用できれば、従業員にとってもお客様にとっても便利なコールセンターを構築できるかもしれませんね。

今回も最後まで読んでいただいてありがとうございました。

この記事が気に入ったらサポートをしてみませんか?