ここで、バイクショップの予約をスケジュールできるインテントが必要です。静的なレスポンスのみを返す最初のインテント Hours の場合(「We're open from 9 AM to 6 PM every day.Is there anything else I can do for you?」だけを返す)と異なり、新しいインテントはより複雑なタスクを実行できる必要があります。
お客様とエージェントの間の、次のやり取りを調べてみましょう。
お客様: Hi.
エージェント: Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?
User: I need to make an appointment at 3 PM today.
エージェント:Got it.I have your appointment scheduled on Wednesday, August 1 at 3 PM.See you soon. Good-bye.
上のダイアログでは、ユーザーの発話「I need to make an appointment at 3 PM today」(今日の午後 3 時に予約を入れる必要があります)には「午後」と「今日」という重要な情報が含まれています。エージェントのレスポンスには、お客様の発話にあった時刻と日付の情報が含まれています(「Got it.I have your appointment scheduled on Wednesday, August 1 at 3 PM.See you soon. Good-bye.」)。
人間にとって、発話から重要な情報を特定することは簡単です。しかし、マシンにとって、それは複雑な作業になります。お客様の発話から、重要な情報としてパラメータを抽出する能力を、インテントに与える必要があります。
エンティティとパラメータを使用して情報を抽出する
Dialogflow は、エンティティおよびパラメーとして知られるコンセプトを使用して、お客様の発話から対象となる情報を抽出してパラメータのセットに変換し、次にそれを他の機能やシステムで処理してさまざまなタスクを実行します。
パラメータを使用して新しいインテントを作成する手順は、次のとおりです。
Make Appointment
という名前付きインテントの作成。[Training phrases] セクションに、次のトレーニング フレーズを追加します。
I need to make an appointment at 3 PM today.
アクションとパラメータの表に、システム エンティティ
@sys.date
と@sys.time
が表示されることを確認します。[Text response] テーブルに、次のレスポンス フレーズを追加します。
Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.
[SAVE] をクリックします。
図 5. Make Appointment インテントの追加を示すフローチャート。
この設定では、インテント Make Appointment は、お客様の発話を調べ Dialogflow の組み込みシステム エンティティ @sys.date
と @sys.time
にマッピングされる単語をキャプチャして、キャプチャした値を取得した値をパラメータ $date
と $time
に設定します。したがって、レスポンスでは、$date
と $time
ユーザーの発話から取得された日付と時刻の値を参照します(「Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.」)。
また Dialogflow では、稀なまたは未分類のパラメータを抽出するためにカスタマイズされたエンティティを作成することもできます。しかし、このシナリオでは、システム エンティティを使用するだけで、時間や日付などの一般的なパラメータを取得できます。エンティティについて詳しく知りたい場合には、エンティティをご覧ください。
スロット入力を使用して必要なパラメータを取得する
前のセクションのベスト プラクティスに続いて、現在のトレーニング フレーズに加えて、「I need to make an appointment at 3 PM today」というトレーニング フレーズを追加する必要があります。
次のトレーニング フレーズを追加します。
Can I schedule service for 4 PM tomorrow?
Can I set up an appointment for noon on Friday?
すべてのトレーニング フレーズには、時刻と日付の情報が含まれています(「3 PM today」、「4 PM tomorrow」、および「noon on Friday」)。しかし、現実の世界では、ユーザーの発話には必ずしも必要なパラメータがすべて含まれているとは限りません。次のトレーニング フレーズを追加します。
Can you fix my road bike?
My bike is broken.
I'd like to get my bike fixed, I have a mountain bike that needs servicing.
I need to fix my bike today.
I'd like to schedule an appointment on this Thursday.
上のすべてのフレーズは、お客様が予約をスケジューリングしたいことを示しています。したがって、新しいインテントは、予約をスケジューリングするタスクを処理するために、そのようなフレーズと一致する必要があります。ただし、このようなフレーズには、それぞれ時間情報、日付情報、またはその両方が欠けています。インテントは日時情報なしでは予約をスケジューリングできないため、このようなフレーズは面倒です。
Dialogflow には、インテントがお客様から必要な情報をすべて取得できるようにする「スロット入力」という機能があります。この機能を有効にするには、パラメータを「必須」とマークする必要があります。
インテントに必須パラメータが存在する場合で、必須パラメータが欠けているお客様の発話と一致した場合、インテントは、お客様から必須パラメータをすべて取得するために、「回答を促す質問」を行います。以下の対話を見てみましょう。
お客様: Hi.
エージェント: Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?
お客様: I need to fix my bike.
エージェント: Okay, I can help you with that. What day do you want to come in?
お客様: Today.
エージェント: And what time works for you?
お客様: 3 PM.
エージェント:Got it.I have your appointment scheduled on Wednesday, August 1 at 3 PM.See you soon. Good-bye.
パラメータ $time
と $date
を必須にして、これらのパラメータへの回答を促す質問を行う手順は、次のとおりです。
- [Make Appointment] インテントをクリックします。
- アクションとパラメータの表で、
$time
と$date
パラメータのREQUIRED
ボックスを確認します。PROMPTS
という列が作成されます。 - テーブル内で
$date
パラメータが$time
パラメータの下に表示されている場合、この表のうち、$date
パラメータの行を$time
パラメータの上までドラッグします。(テーブル内の配置により、回答を促す質問の順序が決まります)。 $date
パラメータについては、PROMPTS
列の下の [Define prompts] リンクをクリックして、次のプロンプトを追加します。Okay, I can help you with that. What day do you want to come in?
Sure, what day are you coming in?
Okay, what day will work for you?
$time
パラメータについては、[Define prompts] リンクをクリックして、次のプロンプトを追加します。And what time works for you?
What time?
Now, what time do you want the appointment?
- [SAVE] をクリックします。
Dialogflow コンソールで、シミュレータを使用してスロット入力設定をテストします。
図 6:必須パラメータのスロット充填プロンプトを示すフローチャート。
これで、お客様が予約する必要があることを示した場合、日付と時刻の情報を確実に取得するインテントを作成しました。しかし、現時点では、インテントはモックアップ レスポンスでのみ応答します。実際の予約はスケジューリングされません。Google カレンダー上で予約をスケジューリングするタスクを実行できるバックエンド プロセスとして、「フルフィルメント」を作成する必要があります。
次のセクションでは、Make Appointment インテントのフルフィルメントを作成する方法を検討します。