Amazon Connect コンタクトフローでAmazon Lexを利用時、スロットタイプ AMAZON. Timeは、発話で時刻をどこまで認識してくれるか調査してみた

Amazon Connect(以降Connect)のコンタクトフロー上でAmazon Lex(以降Lex)を利用する場合、スロットタイプ AMAZON.Timeは、どこまで認識してくれるかブラックボックス化されていますので、調査しました。
2023.05.02

はじめに

ConnectとLexでコンタクトセンター向けチャットボットを構築時、ユーザーから時刻を聞き取る場合は、LexのスロットタイプであるAMAZON.Timeを利用すると思います。

このAMAZON.Timeでは、普段会話で使う時間の伝え方をどこまで認識するか、構築時に把握する必要がありますので、調査してみました。

まず、調査するための環境の作成方法をご説明します。

調査環境の作成

今回、調査するために、作成したボットとインテントの作成方法を説明します。

ボットの作成

  1. Lexのコンソール画面から、[ボットの作成]をクリックします。
  2. [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
  3. 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。

これでボットが作成できました。

インテントの作成

  1. インテントの[インテントを追加]から[空のインテントを追加]でインテントを作成します。
  2. インテント名を入力し、サンプル発話に「予約時間」を追加します。
  3. [スロットを追加]から、スロットタイプ[AMAZON.Time]を選択します。プロンプトと名前も記載します。
    • スロット名をtimeとしました。
  4. [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
    • {time}でよろしいでしょうか?
  5. インテントを保存後、Buildすると、インテントのテストが行えます。

コンタクトフローの作成

Connectインスタンスの作成や電話取得は、下記の記事を参考にしてください。

コンタクトフローの作成を解説します。

コンタクトフロー図は、下記のようになります。

音声の設定

音声は、Lexで設定した音声と同じにします。

今回は、Takumiを設定しております。

また、言語属性を設定にチェックをします。

顧客の入力を取得する

下記画像の通り、先程作成したLexボットインテントを指定します。

Lexボットが表示されない場合、Connectインスタンスの設定で、Amazon Lex ボットを追加されていない可能性がありますので、ご確認ください。

ループ

今回は、1回の通話で多くテストしたかったため、ループを10回設定しました。

テスト方法

上記のコンタクトフローを設定し、電話番号とコンタクトフローを紐付けるとテストができます。

電話をかけて数字を発話して、Lexが認識するかテストができます。

調査結果

調査結果を出します。

調査日(2023年5月)時点でのLexの認識能力のため、今後、認識能力が上がることで、より聞き取ってくれる可能性はあります。

時間指定

発話内容 Lexの認識 判定
9 - ×
9時 - ×
12 - ×
12時 - ×
13 - ×
13時 13:00
13時13分 13:13
13時13 13:13
13時半 13:30
13時13分13秒 13:13
0時 00:00
24時 - ×
50分 - ×
2時間後 - ×
  • 13時30分ではなく、13時半と伝えてたところ、半を30分に変換してくれるようです。
  • 数字のみは、認識しませんでした。〇〇時〇〇時〇〇分〇〇時〇〇〇〇時半と伝える必要があるようです。
  • 秒は、認識しないようです。分単位で認識しました。
  • あいまいな時刻は、ドキュメント通り認識しません

あいまいな時刻

「9時」が認識されない理由は、厳格には認識していますが、09:00と21:00の2通りあり、どちらに変換すればよいか分からないため、スロット値に入らないようです。

ドキュメントにも2通りある時刻をあいまいな時刻と表現し、Lambda関数に値を渡して、処理する必要があると記載がありました。

以前、あいまいな時刻を処理するLambdaを構築しましたので、こちらを一読ください。

ただし、「午前9時」にすると、あいまいな時刻ではないので、「9:00」と認識してくれます。

あいまいな時刻の解決が含まれています。ユーザーがあいまいな時刻を入力すると、Amazon Lex は slotDetails イベントの Lambda 属性を使用して、あいまいな時刻の解決を Lambda 関数に渡します。たとえば、ボットからユーザーに配達時間を尋ねたときにユーザーが「10 時」と答えると、この時刻はあいまいです。午前 10:00 なのか午後 10:00 なのかが不明です。この場合、slots マップの値は null となり、slotDetails エンティティには 2 つの可能な時刻の解決が含まれます。

AMや午前がついた場合

発話内容 Lexの認識 判定
AM9 (エーエムキュウ) 18:09 ×
AM9時 - ×
午前9 09:09 ×
午前9時 09:00
AM0 - ×
AM12 - ×
午前0時 00:00
午前12時 00:00 ×
PM0 - ×
PM12 - ×
午後0時 12:00
午後12時 - ×
午後15時 15:00
正午 - ×
明日 - ×
今 (14:46) 14:46
現在 (14:46) 14:46
  • AM・PMは、認識せず、午前・午後という言い方ですと認識しました。
  • 午後12時は、認識しませんでしたが、午前12時はなぜか認識しました。。
  • 現在は、現在時刻と認識してくれるので便利ですね。

参考

最後に

ConnectとLexのAMAZON.Timeを使用する際、時刻をどこまで認識してくれるかある程度把握できました。

参考になれば幸いです。