Dialogインターフェースのリファレンス
Dialog
インターフェースは、スキルとユーザーとの間のマルチターンの会話を管理するためのディレクティブを提供します。ユーザーのリクエストに応えるために必要な情報をユーザーにたずねるときに使用できます。
- Dialogディレクティブの要件(ダイアログモデル)
- マルチターンのダイアログまたは会話の手順
- ユーザーとの会話の管理について
- ダイアログ中にインテントの変更やスロット値の更新を行う
- ディレクティブ
- Delegateディレクティブ
- ElicitSlotディレクティブ
- ConfirmSlotディレクティブ
- ConfirmIntentディレクティブ
- UpdateDynamicEntitiesディレクティブ
- サービスインターフェースのリファレンス(JSON)
Dialogディレクティブの要件(ダイアログモデル)
ほとんどのDialog
ディレクティブは、使用するスキルにダイアログモデルが含まれていなければなりません。ダイアログモデルは次の事柄を識別します。
- インテントを実行するために、有効な値を受け取る必要があるスロット。必須のスロットです。
- Alexaが必須のスロット値を得るためにユーザーにたずねるプロンプトと、その返答としてユーザーが言う発話。
- 続行する前に必須スロットをユーザーが確認する必要があるかどうか。
- 続行する前にインテント全体をユーザーが確認する必要があるかどうか。
- Alexaがスロットとインテントの確認を求めて話すプロンプト。
- ユーザーが提供したスロット値が有効であるとして、合格する必要のあるスロット検証ルール。必須のスロットと必須ではないスロットのどちらにもこのルールを使用できます。
- ユーザーの応答がスロットの検証を通らなかった場合に、Alexaが修正値を求めて発話するプロンプト。
Dialog.UpdateDynamicEntities
ディレクティブを使用するのにダイアログモデルは必要ありません。ユーザーがスキルと対話するときにダイアログモデルがどのように使われるかは、選択する会話の管理方法によって異なります。
開発者コンソールを使用して、ダイアログモデルを作成することができます。対話モデルのスキーマで、JSONのダイアログモデルを定義することもできます。
AMAZON.LITERAL
ビルトインスロットタイプを含めることはできません。スキルがまだAMAZON.LITERAL
を使用している場合、ダイアログのディレクティブを使用する前にカスタムスロットタイプでAMAZON.LITERAL
を置き換えてください。マルチターンのダイアログまたは会話の手順
Alexaスキルのユーザーとのダイアログは、Alexaとユーザーの複数回の会話で構成されます。Alexaが質問し、ユーザーが答えるという形式です。会話は、ユーザーのリクエスト全体を表す特定のインテントと結び付けられています。質問と応答を使用して、スロット値を収集、検証、確認します。ダイアログモデルで定義されたルールに従い、インテントに必要なすべてのスロット値を取得し、確認が完了するまで会話が続きます。
Alexaが会話中にたずねる質問は、以下の4つのカテゴリに分類されます。
- スロットの情報引き出し: スロット値をユーザーにたずねます。ユーザーはスロット値を答えるか、スロット値を含む発話で答えます。以下は、スロット値を要求する質問例です。
- 出発地はどこですか? (
fromCity
スロットの値を引き出す) - 目的地はどこですか? (
toCity
スロットの値を引き出す) - 出発日はいつですか? (
travelDate
スロットの値を引き出す)
- 出発地はどこですか? (
- スロットの確認: すでに提供された(またはプログラムによって設定された)単一スロット値が正しいかどうか、ユーザーに確認を求めます。ユーザーは「はい」または「いいえ」で回答します。以下は、スロットの確認を求める質問の例です。
- 出発地は神戸ですね? (
fromCity
の値が正しいことの確認) - 目的地は京都ですね? (
toCity
の値が正しいことの確認) - 出発日は4月21日ですね? (
travelDate
の値が正しいことの確認)
- 出発地は神戸ですね? (
- インテントの確認: インテントを処理する前に、インテント用に取得したすべての情報が正しいかどうか、確認をユーザーに求めます。スロットの確認と同様に、ユーザーは「はい」または「いいえ」で回答します。以下は、インテントの確認を求める質問の例です。
- 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか? (
PlanMyTrip
インテント全体の確認)
- 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか? (
- スロット検証: スロット値を定義済みのルールと照らし合わせて確認し、ルールに従っていない場合はユーザーにプロンプトを出します。ユーザーは訂正した値を使用して応答できます。例:
- 過去の日付では旅行を計画できません。未来の日付を指定してください(ユーザーが
travelDate
スロットに本日より前の日付を指定した場合にプロンプトを出します)
- 過去の日付では旅行を計画できません。未来の日付を指定してください(ユーザーが
特定のインテントに関するダイアログには、これらの手順がすべて含まれる場合もあれば、一部だけが含まれる場合もあります。たとえば、ダイアログによってはスロットの情報引き出しは行っても、スロットやインテントの確認は行わない場合がります。
ダイアログには複数のインテントが含まれる可能性もあります。ダイアログを開始したインテントのハンドラーは、別の質問セットを使ってダイアログを続ける2つ目のインテントに制御を渡します。
ユーザーとの会話の管理について
スキルのユーザーとのマルチターンの会話処理には、主に次の3つのシナリオがあります。
- Alexaにダイアログをデリゲートします。この場合、Alexaはダイアログモデルで定義されたプロンプトを使用します。
Dialog.ElicitSlot
、Dialog.ConfirmSlot
、Dialog.ConfirmIntent
を使用してダイアログの各手順を自分で制御します。- 両方のオプションを組み合わせます。この場合、ユーザーは一部のダイアログをデリゲートしますが、必要に応じて一部を自分で制御します。
Alexaにダイアログをデリゲートする
このオプションを使うと、ユーザーにスロット値をたずねるコードを自分で作成する必要はありません。このため、コーディングにかかる大半の労力をユーザーのリクエストを実現するロジックに集中させることができます。Dialog.Delegate
ディレクティブを使用して、ダイアログをオートデリゲートすることも、手動で処理することもできます。
オートデリゲートの場合、Alexaはダイアログモデルに基づいて、すべてのダイアログのステップを完了し、その後スキルに単一のIntentRequest
を送信します。このオプションを使用すると、Dialog
ディレクティブを使用する必要がありません。
手動デリゲートの場合、Alexaは会話のたびにスキルにIntentRequest
を送信します。リクエストにはダイアログに追加の手順がある(STARTED
または IN_PROGRESS
)、あるいはすべての手順が完了した(COMPLETED
)ことを示すdialogState
プロパティが含まれます。ダイアログがCOMPLETED
の場合、IntentRequest
には必要なすべてのスロット値とユーザーからの確認があること、およびすべてのスロット値が定義されたルールに従って検証されたことを意味します。ダイアログが完了していない場合は、Dialog.Delegate
ディレクティブを返します。Alexaはダイアログの次の手順を決め、ダイアログモデルで定義したプロンプトを使用してスロット値を引き出すか、スロット値を確認するか、インテント全体を確認するかのいずれかを行います。
IntentRequest
を取得します。任意の時点で、Alexaへのデリゲートを中止して、ユーザーがダイアログを引き継ぐことができます。これは、スロット値にデフォルト値を設定したり、現時点でわかっている情報に基づいてスロット値を計算したりする必要がある場合、ダイアログ全体を手順ごとに進めるよりも便利です。Dialog.Delegate
ディレクティブをAPLディレクティブやAPLリクエストと組み合わせることはできません。ダイアログ中の画面に視覚要素を表示するには、スキルコードでダイアログを手動制御します。
会話が完了すると、受け取ったIntentRequest
のdialogState
はCOMPLETED
になります。必要な情報はすべてインテントのスロット値で利用できるようになっています。これでスキルはユーザーのリクエストを実行できます。
スキルのコードでダイアログを制御する
このオプションでは、コードはスロット値と確認ステータスを確認し、会話の次のステップを決め、適切なディレクティブ(Dialog.ElicitSlot
、Dialog.ConfirmSlot
、Dialog.ConfirmIntent
のいずれか)を返します。
自分が作成するコードで、ステータスと次の手順を判断する必要があります。スキルがDialog
ディレクティブを使用する要件を満たしている場合、スキルに送信されるIntentRequest
にはdialogState
が含まれます。ただし、このステータスはSTARTED
(インテントが呼び出されたとき)またはIN_PROGRESS
に設定されます。COMPLETED
ステータスに設定されるのは、Dialog.Delegate
またはオートデリゲートを使用する場合のみです。
このシナリオでは、ディレクティブがダイアログモデルで定義されたプロンプトを使用しないことに注意してください。たとえば、Dialog.ElicitSlot
を返す場合、応答にはプロンプトを含める必要があります。Dialog.ElicitSlot
には、スロットに指定した発話を使用します。Alexaはスロットの値を取得するために定義された発話例に応じて、ユーザーの発話を聞き取るよう対話モデルにバイアスをかけるため、ダイアログモデルを定義するときには適切な発話例を定義することが重要です。
Dialog.ElicitSlot
はスロットの検証を一切行わないことにも注意してください。スロット検証ルールを定義し、ユーザーが正しくない値を提供した場合にプロンプトを出すようにする場合は、ダイアログをAlexaにデリゲートします。
この方法でダイアログを制御する場合、Dialog.ElicitSlot
、Dialog.ConfirmSlot
、Dialog.ConfirmIntent
のいずれかのディレクティブとともにAlexa.Presentation.APL.RenderDocument
ディレクティブを含めることで画面上にダイアログに関連する情報を表示できます。また、APLリクエストからこれらのディレクティブを返すことで、ダイアログ全体にタッチイベントと音声の両方を組み込むことができます。
ダイアログのデリゲートと制御を手動で行う
2つの主要なオプションを組み合わせて使用できます。受け取ったIntentRequest
に応じて、コードは次のアクションのいずれかを実行します。
Dialog.Delegate
を返してAlexaが次の手順を処理するようにします。- ほかのディレクティブのいずれか(
Dialog.ElicitSlot
など)を返し、自分でダイアログを制御します
このシナリオのサンプルについては、ランタイム時に会話を変更するために手動でデリゲートするを参照してください。
ダイアログ中にインテントの変更やスロット値の更新を行う
各Dialog
ディレクティブには、updatedIntent
プロパティが含まれます。このプロパティはIntent
オブジェクトを取得します。次の目的で使用します。
- まったく別のインテントに関するダイアログをトリガーします。たとえば、
BookFlight
インテントのダイアログを完了した後、Dialog.Delegate
を返します。このとき、updatedIntent
をBookRentalCar
に設定して新しいダイアログを開始します。 -
ダイアログを続行する前に、コードの任意のスロット値の設定または変更を行います。これにより、インテントを実行するためにAlexaがたずねる質問の数を減らし、ユーザーエクスペリエンスを向上させることができます。
たとえば、ユーザーのデフォルト値や既に持っているその他の情報に基づいてスロット値を設定できます。これを
Dialog.Delegate
ディレクティブやDialog.ConfirmSlot
ディレクティブと組み合わせて使用します。 - スロットまたはインテント全体の
confirmationStatus
を設定または変更します。 -
Alexa Presentation Languageを使って画面にコンテンツを表示する際は、タッチイベントによって提供されたデータに基づいてスロット値や確認ステータスを設定または変更します。たとえば、ユーザーが画面のタッチによりリスト項目を選択すると、スキルは選択された項目に関する情報を含むUserEventリクエストを受け取ることができます。これを使用してインテントオブジェクトを作成し、必要に応じてスロット値を設定して、
Dialog
ディレクティブを返し、会話を続行できます。UserEvent
リクエストにはインテントが含まれないため、セッションの現在のインテントを追跡する必要はありません。
新しいインテントを渡す
updatedIntent
を使って別のインテントに変更すると、ディレクティブは元のインテントではなく新しいインテントに対して実行されるようになります。
…BookFlight
インテントのこれまでのダイアログ
Alexa: フライトを予約しました。レンタカーも予約しますか?
ユーザー: はい(スキルはAMAZON.YesIntent
を受け取ります。)
スキルは、Dialog.Delegate
を返します。このとき、updatedIntent
をBookRentalCar
に設定します。
Alexa: では、レンタカーを予約します。車のサイズは、コンパクト、中型、大型のどれがいいですか? (BookRentalCar
インテントのsizeOfCar
スロットについての情報を引き出すダイアログです)
このようにupdatedIntent
を使う場合、以下の点に注意してください。
- 新しいインテントオブジェクトのスロット値は、
Dialog
ディレクティブを返す前に設定できます。これにより、元のインテントからのユーザー情報を新しいインテントに引き継ぐことができます。 - 新しいインテントにスロット値を設定する場合、インテントの対話モデルで定義したすべてのスロットを含めるようにしてください。これには空に設定するものもすべて含まれます。たとえば、インテントに4つスロットがあり、1つだけに値を設定する場合でも、4つすべてを含める必要があります。
- すべての
Dialog
インテントのoutputSpeech
オブジェクトに、Alexaに読み上げさせるテキストを含めることができます。Dialog.Delegate
の場合、Alexaはダイアログに定義したプロンプトの前にこのテキストを読み上げます。ほかのディレクティブの場合、Alexaはこのテキストを、情報引き出しや確認のためのプロンプトとして使います。 reprompt
オブジェクトに指定したすべてのテキストは無視され、使用されることはありません。shouldEndSession
をfalse
に設定するか、応答のプロパティをまったく指定しない場合、セッションを開いたままにしてダイアログを継続できます。LaunchRequest
からのupdatedIntent
とともに、Dialog
ディレクティブのいずれかを返すこともできます。これは、ユーザーに何をしたいかをたずねるのではなく、デフォルトのアクションでスキルフローを開始する場合に便利です。Alexa.Presentation.APL.UserEvent
リクエストから、Dialog.ElicitSlot
、Dialog.ConfirmSlot
、Dialog.ConfirmIntent
、Dialog.UpdateDynamicEntities
のいずれかを返すことができます。これは、ユーザーの画面操作に基づいてダイアログを開始または続行する場合に便利です。
元のインテントにあるデータの設定や変更を行う
updatedIntent
を使って元のインテントにあるデータの設定や変更を行う場合、インテント名とスロットのセットすべてをスキルに送信したインテントと一致させてください。新しいスロット値または確認ステータスを使用して、最初にスキルに送信したIntent
オブジェクトを更新し、ディレクティブに返すことができます。変更していない空のスロットなど、すべてのスロットを含めてください。
このシナリオのサンプルについては、デフォルト値を設定するためにダイアログを手動でデリゲートするを参照してください。
ディレクティブ
次の表にDialog
ディレクティブの概要をまとめてあります。各ディレクティブの詳細については、以下のセクションを参照してください。
スキルがDialog
ディレクティブを使用する要件を満たしていない場合、以下のいずれかのディレクティブを返すとエラーになります。
ディレクティブ | 説明 |
---|---|
Alexaにユーザーとのダイアログの次のやり取りを処理するコマンドを送信します。このディレクティブで有効な戻り値の型は、
|
|
特定のスロット値についてユーザーにたずねるコマンドをAlexaに送信します。情報を引き出すスロット名を |
|
ダイアログを続行する前に特定のスロットの値を確認するコマンドをAlexaに送信します。確認するスロット名を |
|
スキルでアクションを実行する前に、ユーザーがインテントに提供したすべての情報をユーザーに確認するコマンドをAlexaに送信します。ユーザーに確認を求めるプロンプトを応答の |
|
実行時に対話モデルを適応させます。このディレクティブを使用すると、スキルが新しいエンティティを動的に作成できるため、スキルの定義済み静的カタログを拡張できます。 |
Delegateディレクティブ
Alexaにユーザーとのダイアログの次のやり取りを処理するコマンドを送信します。このディレクティブで有効な戻り値の型は、dialogState
とupdatedIntent
の組み合わせによって変わります。
dialogState
がSTARTED
またはIN_PROGRESS
の場合、updatedIntent
は元のインテントまたは新しいインテントに設定できます。dialogState
がCOMPLETED
の場合、updatedIntent
も別のインテントに設定する必要があります。updatedIntent
がないか、元のインテントに設定されている場合、COMPLETED
のダイアログにDialog.Delegate
を返すとエラーになります。
構文
{
"type": "Dialog.Delegate",
"updatedIntent": {
"name": "string",
"confirmationStatus": "NONE",
"slots": {
"SlotName": {
"name": "SlotName",
"value": "string",
"resolutions": {},
"confirmationStatus": "NONE"
}
}
}
}
インテントのSlot
オブジェクトは、JSON構文に表示されるresolutions
プロパティを含む場合も、含まない場合もあることに注意してください。これはスロットタイプによって異なります。resolutions
プロパティがあるかどうかは、いずれのDialog
ディレクティブにも影響を与えません。</em>
パラメーター | 説明 | 型 | 必須 |
---|---|---|---|
|
|
|
◯ |
|
Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。
|
|
✕ |
詳細
Alexaはダイアログモデルに基づいてダイアログの次の手順を判断します。複数のスロットを持つインテントのダイアログでは、Alexaはダイアログモデルで定義した順序で各スロットの情報を引き出し、値を検証し、(必要に応じて)確認を行います。インテントの確認(設定されている場合)は、必要なすべてのスロットに値が入った後で行われます。
必須でないスロットでスロットの検証を使用することもできるので、オプション値がある場合は検証が可能です。ただし、ユーザーにこれらのスロットに入力するよう強制しないようにします。この場合、Dialog.Delegate
は空白のスロット値を受け入れ、必須でないスロットに対して検証も要求も実行しません。ユーザーがスロット値を提供しない場合は、Dialog.Delegate
は検証ルールを使用して、通常どおりにプロンプトを出します。
応答にOutputSpeech
を含める場合、Alexaはダイアログモデルで定義したプロンプトの前にoutputSpeech
を読み上げます。この方法はインテントを変更する場合に有効ですが、インテントを変更しない場合にもoutputSpeech
を使うことができます。reprompt
に含まれる発話はすべて無視されます。ダイアログ中、Alexaはダイアログモデルのプロンプトを使って再プロンプトを出します。
Intent.confirmationStatus
プロパティがCONFIRMED
になっていることも確認してください。ユーザーが確認プロンプトに「いいえ」と答えた場合、dialogState
はCOMPLETED
に、confirmationStatus
はDENIED
になります。DelegateとAlexa Presentation Language
Dialog.Delegate
と同じ応答にAPLディレクティブを含めることはできません。- どのAPLリクエストからも
Dialog.Delegate
を返すことはできません。
対話例
ElicitSlotディレクティブ
特定のスロット値についてユーザーにたずねるコマンドをAlexaに送信します。情報を引き出すスロット名をslotToElicit
プロパティに指定します。スロット値についてユーザーにたずねるプロンプトを応答のOutputSpeech
オブジェクトに指定します。
スキルがDialog
ディレクティブを使用する要件を満たしていない場合、Dialog.ElicitSlot
ディレクティブを返すとエラーになります。
構文
{
"type": "Dialog.ElicitSlot",
"slotToElicit": "string",
"updatedIntent": {
"name": "string",
"confirmationStatus": "NONE",
"slots": {
"SlotName": {
"name": "SlotName",
"value": "string",
"resolutions": {},
"confirmationStatus": "NONE"
}
}
}
}
インテントのSlot
オブジェクトは、JSON構文に表示されるresolutions
プロパティを含む場合も、含まない場合もあることに注意してください。これはスロットタイプによって異なります。resolutions
プロパティがあるかどうかは、いずれのDialog
ディレクティブにも影響を与えません。</em>
この例では、Dialog.ElicitSlot
を返してfromCity
スロットの値をたずねています。プロンプトにOutputSpeech
オブジェクトが使用されていることに注意してください。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "出発地はどこですか?"
},
"shouldEndSession": false,
"directives": [
{
"type": "Dialog.ElicitSlot",
"slotToElicit": "fromCity",
"updatedIntent": {
"name": "PlanMyTrip",
"confirmationStatus": "NONE",
"slots": {
"toCity": {
"name": "toCity",
"confirmationStatus": "NONE"
},
"travelDate": {
"name": "travelDate",
"confirmationStatus": "NONE",
"value": "2017-04-21"
},
"fromCity": {
"name": "fromCity",
"confirmationStatus": "NONE"
},
"activity": {
"name": "activity",
"confirmationStatus": "NONE"
},
"travelMode": {
"name": "travelMode",
"confirmationStatus": "NONE"
}
}
}
}
]
}
}
パラメーター | 説明 | 型 | 必須 |
---|---|---|---|
|
|
|
◯ |
|
情報を引き出すスロットの名前です。 |
|
◯ |
|
Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。 このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントにある特定のスロット値について情報を引き出そうとします。スキルに対する次の |
|
✕ |
詳細
OutputSpeech
オブジェクトにスロット値をユーザーにたずねるプロンプトを含める必要があります。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。
Dialog.ElicitSlot
は、ダイアログモデルでスロットに指定したユーザー発話を使用します。Alexaはスロットの値を取得するために定義された発話例に応じて、ユーザーの発話を聞き取るよう対話モデルにバイアスをかけるため、ダイアログモデルを定義するときには適切な発話例を定義することが重要です。
ElicitSlotとAlexa Presentation Language
Dialog.ElicitSlot
と同じ応答にAlexa.Presentation.APL.RenderDocumentディレクティブを含めることができます。- Alexa.Presentation.APL.UserEventリクエストから
Dialog.ElicitSlot
を返すことができます。 Dialog.ElicitSlot
と同じ応答にAlexa.Presentation.APL.ExecuteCommandsディレクティブを含めることはできません。
対話例
ConfirmSlotディレクティブ
ダイアログを続行する前に特定のスロットの値を確認するコマンドをAlexaに送信します。確認するスロット名をslotToConfirm
プロパティに指定します。ユーザーに確認を求めるプロンプトを応答のOutputSpeech
オブジェクトに指定します。確認する値をプロンプトで復唱するようにしてください。
スキルがDialog
ディレクティブを使用する要件を満たさない場合、Dialog.ConfirmSlot
ディレクティブを返すとエラーになります。
構文
{
"type": "Dialog.ConfirmSlot",
"slotToConfirm": "string",
"updatedIntent": {
"name": "string",
"confirmationStatus": "NONE",
"slots": {
"string": {
"name": "string",
"value": "string",
"resolutions": {},
"confirmationStatus": "NONE"
}
}
}
}
インテントのSlot
オブジェクトは、JSON構文に表示されるresolutions
プロパティを含む場合も、含まない場合もあることに注意してください。これはスロットタイプによって異なります。resolutions
プロパティがあるかどうかは、いずれのDialog
ディレクティブにも影響を与えません。</em>
この例では、Dialog.ConfirmSlot
を返してfromCity
スロットの値を確認しています。プロンプトにOutputSpeech
オブジェクトが使用されていることに注意してください。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "出発地は神戸ですね?"
},
"shouldEndSession": false,
"directives": [
{
"type": "Dialog.ConfirmSlot",
"slotToConfirm": "fromCity",
"updatedIntent": {
"name": "PlanMyTrip",
"confirmationStatus": "NONE",
"slots": {
"toCity": {
"name": "toCity",
"confirmationStatus": "NONE"
},
"travelDate": {
"name": "travelDate",
"confirmationStatus": "NONE",
"value": "2017-04-21"
},
"fromCity": {
"name": "fromCity",
"value": "神戸",
"confirmationStatus": "NONE"
},
"activity": {
"name": "activity",
"confirmationStatus": "NONE"
},
"travelMode": {
"name": "travelMode",
"confirmationStatus": "NONE"
}
}
}
}
]
}
}
パラメーター | 説明 | 型 | 必須 |
---|---|---|---|
|
|
|
◯ |
|
確認するスロットの名前です。 |
|
◯ |
|
Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。 このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントにある特定のスロット値を確認しようとします。 |
|
✕ |
詳細
Dialog.ConfirmSlot
を返す場合、ユーザーへの確認を求めるプロンプトをOutputSpeech
オブジェクトに含めます。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。
AlexaがOutputSpeech
からのプロンプトを読み上げたら、ユーザーは「はい」か「いいえ」で応答できます。 その後Alexaはスキルに、特定のスロットのconfirmationStatus
プロパティを更新してインテントを送信します。このプロパティには、ユーザーの応答(CONFIRMED
またはDENIED
)が入ります。
ユーザーが確認を2回拒否すると、セッションが終了します。
ConfirmSlotとAlexa Presentation Language
Dialog.ConfirmSlot
と同じ応答にAlexa.Presentation.APL.RenderDocumentディレクティブを含めることができます。- Alexa.Presentation.APL.UserEventリクエストから
Dialog.ConfirmSlot
を返すことができます。 Dialog.ConfirmSlot
と同じ応答にAlexa.Presentation.APL.ExecuteCommandsディレクティブを含めることはできません。
対話例
ConfirmIntentディレクティブ
スキルでアクションを実行する前に、ユーザーがインテントに提供したすべての情報をユーザーに確認するコマンドをAlexaに送信します。ユーザーに確認を求めるプロンプトを応答のOutputSpeech
オブジェクトに指定します。プロンプトでユーザーの確認が必要なすべての値を復唱するようにしてください。
スキルがDialog
ディレクティブを使用する要件を満たさない場合、Dialog.ConfirmIntent
ディレクティブを返すとエラーになります。
構文
{
"type": "Dialog.ConfirmIntent",
"updatedIntent": {
"name": "string",
"confirmationStatus": "NONE",
"slots": {
"string": {
"name": "string",
"value": "string",
"resolutions": {},
"confirmationStatus": "NONE"
}
}
}
}
インテントのSlot
オブジェクトは、JSON構文に表示されるresolutions
プロパティを含む場合も、含まない場合もあることに注意してください。これはスロットタイプによって異なります。resolutions
プロパティがあるかどうかは、いずれのDialog
ディレクティブにも影響を与えません。</em>
この例では、Dialog.ConfirmIntent
を返してインテント全体を確認しています。プロンプトにOutputSpeech
オブジェクトが使用されていることに注意してください。この例では、必須の3つのスロット(toCity
、fromCity
、travelDate
)も確認を使用しており、以前のダイアログでのターンで確認は完了しています。残りの2つのスロット(activity
とtravelMode
)には値が入っていますが、確認は不要でした。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか?"
},
"shouldEndSession": false,
"directives": [
{
"type": "Dialog.ConfirmIntent",
"updatedIntent": {
"name": "PlanMyTrip",
"confirmationStatus": "NONE",
"slots": {
"toCity": {
"name": "toCity",
"value": "京都",
"confirmationStatus": "CONFIRMED"
},
"travelDate": {
"name": "travelDate",
"confirmationStatus": "CONFIRMED",
"value": "2017-04-21"
},
"fromCity": {
"name": "fromCity",
"value": "神戸",
"confirmationStatus": "CONFIRMED"
},
"activity": {
"name": "activity",
"value": "ハイキング"
"confirmationStatus": "NONE"
},
"travelMode": {
"name": "travelMode",
"value": "ドライブする"
"confirmationStatus": "NONE"
}
}
}
}
]
}
}
パラメーター | 説明 | 型 | 必須 |
---|---|---|---|
|
|
|
◯ |
|
Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。 このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントを確認しようとします。ディレクティブを返す前に、インテントの関連するスロット値をすべて設定するようにしてください。スキルに対する次の |
|
✕ |
詳細
インテントの実行に必要なすべての必須スロットの値を取得したが、値が正しいことをもう一度ユーザーに確認してから続行したい場合、このディレクティブを使用します。商品を注文したり、予約を行ったりするスキルでよく使われます。
Dialog.ConfirmIntent
を返す場合、ユーザーへの確認を求めるプロンプトをOutputSpeech
オブジェクトに含める必要があります。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。
Alexaがユーザーに情報を確認したら、ユーザーは「はい」または「いいえ」で答えることができます。 その後Alexaはスキルに、intent.confirmationStatus
プロパティを更新してインテントを送信します。このプロパティには、ユーザーの応答(CONFIRMED
またはDENIED
)が入ります。
ConfirmIntentとAlexa Presentation Language
Dialog.ConfirmIntent
と同じ応答にAlexa.Presentation.APL.RenderDocumentディレクティブを含めることができます。- Alexa.Presentation.APL.UserEventリクエストから
Dialog.ConfirmIntent
を返すことができます。 Dialog.ConfirmIntent
と同じ応答にAlexa.Presentation.APL.ExecuteCommandsディレクティブを含めることはできません。
対話例
UpdateDynamicEntitiesディレクティブ
実行時に対話モデルを適応させます。このディレクティブを使用すると、スキルが新しいエンティティを動的に作成できるため、スキルの定義済み静的カタログを拡張できます。
詳細については、カスタマイズした対話に動的エンティティを使用するを参照してください。
サービスインターフェースのリファレンス(JSON)
リクエストの形式と標準のリクエストタイプ:
- Alexa.Presentation.APLインターフェース
- Alexa.Presentation.APLTインターフェース
- Alexa.Presentation.HTMLインターフェースのリファレンス
- AudioPlayerインターフェース
- Connectionsインターフェース
- Dialogインターフェース(このドキュメント)
- Messagingインターフェース
- PlaybackControllerインターフェース
- VideoAppインターフェース
最終更新日: 2023 年 12 月 18 日