
Amazon Connect コンタクトフローでAmazon Lexを利用時、スロットタイプ AMAZON. Timeは、発話で時刻をどこまで認識してくれるか調査してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
ConnectとLexでコンタクトセンター向けチャットボットを構築時、ユーザーから時刻を聞き取る場合は、LexのスロットタイプであるAMAZON.Timeを利用すると思います。
このAMAZON.Timeでは、普段会話で使う時間の伝え方をどこまで認識するか、構築時に把握する必要がありますので、調査してみました。

まず、調査するための環境の作成方法をご説明します。
調査環境の作成
今回、調査するために、作成したボットとインテントの作成方法を説明します。
ボットの作成
- Lexのコンソール画面から、[ボットの作成]をクリックします。

- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。

- 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。

これでボットが作成できました。
インテントの作成
- インテントの[インテントを追加]から[空のインテントを追加]でインテントを作成します。

- インテント名を入力し、サンプル発話に「予約時間」を追加します。

- [スロットを追加]から、スロットタイプ[AMAZON.Time]を選択します。プロンプトと名前も記載します。
- スロット名を
timeとしました。
- スロット名を
- [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
{time}でよろしいでしょうか?
- インテントを保存後、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を使用する際、時刻をどこまで認識してくれるかある程度把握できました。
参考になれば幸いです。






