Dialogインターフェースのリファレンス



Dialogインターフェースのリファレンス

Dialogインターフェースは、スキルとユーザーとの間のマルチターンの会話を管理するためのディレクティブを提供します。ユーザーのリクエストに応えるために必要な情報をユーザーにたずねるときに使用できます。

Dialogディレクティブの要件(ダイアログモデル)

Dialogディレクティブを使用するには、スキルにダイアログモデルが含まれている必要があります。ダイアログモデルは次を識別します:

  • インテントを実行するために、有効な値を受け取る必要があるスロット。必須のスロットです。
  • Alexaが必須のスロット値を得るためにユーザーにたずねるプロンプトと、その返答としてユーザーが言う発話。
  • 続行する前に必須スロットをユーザーが確認する必要があるかどうか。
  • 続行する前にインテント全体をユーザーが確認する必要があるかどうか。
  • Alexaがスロットとインテントの確認を求めて話すプロンプト。
  • ユーザーが提供したスロット値が有効であるとして合格する必要のあるスロット検証ルール。必須のスロットと必須ではないスロットのどちらにもこのルールを使用できます。
  • ユーザーの応答がスロットの検証を通らなかった場合に、Alexaが修正値を求めて発話するプロンプト。

ユーザーがスキルと対話するときにダイアログモデルがどのように使われるかは、選択する会話の管理方法によって異なります。

開発者コンソールを使用して、ダイアログモデルを作成することができます。対話モデルのスキーマで、JSONのダイアログモデルを定義することもできます。

マルチターンのダイアログまたは会話の手順

Alexaスキルのユーザーとのダイアログは、Alexaとユーザーの複数回の会話で構成されます。Alexaが質問し、ユーザーが答えるという形式です。会話は、ユーザーのリクエスト全体を表す特定のインテントと結び付けられています。質問と応答を使用して、スロット値を収集、検証、確認します。ダイアログモデルで定義されたルールに従い、インテントに必要なすべてのスロット値を取得し、確認が完了するまで会話が続きます。

Alexaが会話中にたずねる質問は、以下の4つのカテゴリに分類されます。

  • スロットの情報引き出し: スロット値をユーザーにたずねます。ユーザーはスロット値を答えるか、スロット値を含む発話で答えます。以下は、スロット値を要求する質問例です。
    • 出発地はどこですか?fromCityスロットの値を引き出す)
    • 目的地はどこですか?toCityスロットの値を引き出す)
    • 出発日はいつですか?travelDateスロットの値を引き出す)
  • スロットの確認: すでに提供された(またはプログラムによって設定された)単一スロット値が正しいかどうか、ユーザーに確認を求めます。ユーザーは「はい」または「いいえ」で回答します。以下は、スロットの確認を求める質問の例です。
    • 出発地は神戸ですね?fromCityの値が正しいことの確認)
    • 目的地は京都ですね?toCityの値が正しいことの確認)
    • 出発日は4月21日ですね?travelDateの値が正しいことの確認)
  • インテントの確認: インテントを処理する前に、インテント用に取得したすべての情報が正しいかどうか、確認をユーザーに求めます。スロットの確認と同様に、ユーザーは「はい」または「いいえ」で回答します。以下は、インテントの確認を求める質問の例です。
    • 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか?PlanMyTripインテント全体の確認)
  • スロット検証: スロット値を定義済みのルールと照らし合わせて確認し、ルールに従っていない場合はユーザーにプロンプトを出します。ユーザーは訂正した値を使用して応答できます。例:
    • 過去の日付では旅行を計画できません。未来の日付を指定してください(ユーザーがtravelDateスロットに本日より前の日付を指定した場合にプロンプトを出します)

特定のインテントに関するダイアログには、これらの手順がすべて含まれる場合もあれば、一部だけが含まれる場合もあります。たとえば、ダイアログによってはスロットの情報引き出しは行っても、スロットやインテントの確認は行わない場合がります。

ダイアログには複数のインテントが含まれる可能性もあります。ダイアログを開始したインテントのハンドラーは、別の質問セットを使ってダイアログを続ける2つ目のインテントに制御を渡します。

ユーザーとの会話の管理について

スキルのユーザーとのマルチターンの会話処理には、主に次の3つのシナリオがあります。

  1. Alexaにダイアログをデリゲートします。この場合、Alexaはダイアログモデルで定義されたプロンプトを使用します
  2. Dialog.ElicitSlotDialog.ConfirmSlotDialog.ConfirmIntentを使用してダイアログの各手順を自分で制御します
  3. 両方のオプションを組み合わせます。この場合、ユーザーは一部のダイアログをデリゲートしますが、必要に応じて一部を自分で制御します。

Alexaにダイアログをデリゲートする

このオプションを使うと、ユーザーにスロット値をたずねるコードを自分で作成する必要はありません。このため、コーディングにかかる大半の労力をユーザーのリクエストを実現するロジックに集中させることができます。Dialog.Delegateディレクティブを使用して、ダイアログをオートデリゲートすることも、手動で処理することもできます。

オートデリゲートの場合、Alexaはダイアログモデルに基づいて、すべてのダイアログのステップを完了し、その後スキルに単一のIntentRequestを送信します。このオプションを使用すると、Dialogディレクティブを使用する必要がありません。

手動デリゲートの場合、Alexaは会話ごとにスキルに IntentRequestを送信します。リクエストにはダイアログに追加の手順がある(STARTEDまたは IN_PROGRESS)、あるいはすべての手順が完了した(COMPLETED)ことを示すdialogStateプロパティが含まれます。ダイアログがCOMPLETEDの場合は、 IntentRequestには必要なすべてのスロット値とユーザーからの確認があること、およびすべてのスロット値は定義されたルールに従って検証されたことを意味します。ダイアログが完了していない場合は、Dialog.Delegateディレクティブを返します。Alexaはダイアログの次の手順を決め、ダイアログモデルで定義したプロンプトを使用してスロット値を引き出すか、スロット値を確認するか、インテント全体を確認するかのいずれかを行います。

会話が完了すると、受け取ったIntentRequestdialogStateCOMPLETEDになります。必要な情報はすべてインテントのスロット値で利用できるようになっています。これでスキルはユーザーのリクエストを実行できます。

スキルのコードでダイアログを制御する

このオプションでは、コードはスロット値と確認ステータスを確認し、会話の次の手順を決め、適切なディレクティブ(Dialog.ElicitSlotDialog.ConfirmSlotDialog.ConfirmIntentのいずれか)を返します。

自分が作成するコードで、ステータスと次の手順を判断する必要があります。スキルがDialogディレクティブを使用する要件を満たしている場合、スキルに送信されるIntentRequestにはdialogStateが含まれます。ただし、このステータスはSTARTED(インテントが呼び出されたとき)またはIN_PROGRESSに設定されます。COMPLETEDステータスに設定されるのは、Dialog.Delegateまたはオートデリゲートを使用する場合のみです。

このシナリオでは、ディレクティブがダイアログモデルで定義されたプロンプトを使用しないことに注意してください。たとえば、Dialog.ElicitSlotを返す場合、応答にはプロンプトを含める必要があります。Dialog.ElicitSlotには、スロットに指定した発話を使用します。Alexaはスロットの値を取得するために定義された発話例に応じて、ユーザーの発話を聞き取るよう対話モデルにバイアスをかけるため、ダイアログモデルを定義するときには適切な発話例を定義することが重要です。

Dialog.ElicitSlotスロットの検証を一切行わないことにも注意してください。スロット検証ルールを定義し、ユーザーが正しくない値を提供した場合にプロンプトを出すようにする場合は、ダイアログをAlexaにデリゲートします。

ダイアログのデリゲートと制御を手動で行う

2つの主要なオプションを組み合わせて使用できます。受け取ったIntentRequestに応じて、コードは次のアクションのいずれかを実行します。

  • Dialog.Delegateを返してAlexaが次の手順を処理するようにします。
  • 他のディレクティブのいずれか(Dialog.ElicitSlotなど)を返し、自分でダイアログを制御します

このシナリオのサンプルについては、ランタイム時に会話を変更するために手動でデリゲートするを参照してください。

ダイアログ中にインテントの変更やスロット値の更新を行う

Dialogディレクティブには、 updatedIntentプロパティが含まれます。このプロパティはIntentオブジェクトを取得します。次の目的で使用します。

  • まったく別のインテントに関するダイアログをトリガーします。たとえば、BookFlightインテントのダイアログを完了した後、Dialog.Delegateを返します。このとき、updatedIntentBookRentalCarに設定して新しいダイアログを開始します。
  • ダイアログを続行する前に、コードの任意のスロット値の設定または変更を行います。これにより、インテントを実行するためにAlexaがたずねる質問の数を減らし、ユーザーエクスペリエンスを向上させることができます。

    たとえば、ユーザーのデフォルト値やすでに持っているその他の情報に基づいてスロット値を設定できます。これをDialog.DelegateディレクティブやDialog.ConfirmSlotディレクティブと組み合わせて使用します。

  • スロットまたはインテント全体の confirmationStatusを設定または変更します。

新しいインテントを渡す

updatedIntentを使って別のインテントに変更すると、ディレクティブは元のインテントではなく新しいインテントに対して実行されるようになります。

BookFlightインテントのこれまでのダイアログ

Alexa: フライトを予約しました。レンタカーも予約しますか?
ユーザー: はい(スキルはAMAZON.YesIntentを受け取ります。)
スキルは、Dialog.Delegateを返します。このとき、updatedIntentBookRentalCarに設定します。

Alexa: では、レンタカーを予約します。車のサイズは、コンパクト、中型、大型のどれがいいですか?BookRentalCarインテントのsizeOfCarスロットについての情報を引き出すダイアログです)

このようにupdatedIntentを使う場合、以下の点に注意してください。

  • 新しいインテントオブジェクトのスロット値は、Dialogディレクティブを返す前に設定できます。これにより、元のインテントからのユーザー情報を新しいインテントに引き継ぐことができます。
  • 新しいインテントにスロット値を設定する場合、インテントの対話モデルで定義したすべてのスロットを含めるようにしてください。これには空に設定するものもすべて含まれます。たとえば、インテントに4つスロットがあり、1つだけに値を設定する場合でも、4つすべてを含める必要があります。
  • すべてのDialogインテントのoutputSpeechオブジェクトに、Alexaに読み上げさせるテキストを含めることができます。Dialog.Delegateの場合、Alexaはダイアログに定義したプロンプトの前にこのテキストを読み上げます。ほかのディレクティブの場合、Alexaはこのテキストを、情報引き出しや確認のためのプロンプトとして使います。
  • repromptオブジェクトに指定したすべてのテキストは無視され、使用されることはありません。
  • shouldEndSessionfalseに設定するか、応答のプロパティをまったく指定しない場合、セッションを開いたままにしてダイアログを継続できます。
  • LaunchRequestからのupdatedIntentと共に、Dialogディレクティブのいずれかを返すこともできます。これは、ユーザーに何をしたいかをたずねるのではなく、デフォルトのアクションでスキルフローを開始する場合に便利です。

元のインテントにあるデータの設定や変更を行う

updatedIntentを使って元のインテントにあるデータの設定や変更を行う場合、インテント名とスロットのセットすべてをスキルに送信したインテントと一致させてください。新しいスロット値または確認ステータスを使用して、最初にスキルに送信したIntentオブジェクトを更新し、ディレクティブに返すことができます。変更していない空のスロットなど、すべてのスロットを含めてください。

このシナリオのサンプルについては、デフォルト値を設定するためにダイアログを手動でデリゲートするを参照してください。

Dialogディレクティブ

次の表にDialogディレクティブの概要をまとめてあります。各ディレクティブの詳細については、以下のセクションを参照してください。

スキルがDialogディレクティブを使用する要件を満たしていない場合、以下のディレクティブを返すとエラーになります。

ディレクティブ 説明

Dialog.Delegate

Alexaにユーザーとのダイアログの次のやり取りを処理するコマンドを送信します。このディレクティブで有効な戻り値の型は、dialogStateupdatedIntentの組み合わせによって変わります。

  • dialogStateSTARTEDまたはIN_PROGRESSの場合、updatedIntentは元のインテント、新しいインテントのいずれかに設定できます。
  • dialogStateCOMPLETEDの場合、updatedIntentも別のインテントに設定する必要があります。updatedIntentがないか、元のインテントに設定されている場合、COMPLETEDのダイアログにDialog.Delegateを返すとエラーになります。

Dialog.ElicitSlot

特定のスロット値についてユーザーにたずねるコマンドをAlexaに送信します。情報を引き出すスロット名をslotToElicitプロパティに指定します。スロット値についてユーザーにたずねるプロンプトを応答OutputSpeechオブジェクトに指定します。

Dialog.ConfirmSlot

ダイアログを続行する前に特定のスロットの値を確認するコマンドをAlexaに送信します。確認するスロット名をslotToConfirmプロパティに指定します。ユーザーに確認を求めるプロンプトを応答OutputSpeechオブジェクトに指定します。確認する値をプロンプトで復唱するようにしてください。

Dialog.ConfirmIntent

スキルでアクションを実行する前に、ユーザーがインテントに提供したすべての情報をユーザーに確認するコマンドをAlexaに送信します。ユーザーに確認を求めるプロンプトを応答OutputSpeechオブジェクトに指定します。プロンプトでユーザーの確認が必要なすべての値を復唱するようにしてください。

Delegateディレクティブ

Alexaにユーザーとのダイアログの次のやり取りを処理するコマンドを送信します。このディレクティブで有効な戻り値の型は、dialogStateupdatedIntentの組み合わせによって変わります。

  • dialogStateSTARTEDまたはIN_PROGRESSの場合、updatedIntentは元のインテント、新しいインテントのいずれかに設定できます。
  • dialogStateCOMPLETEDの場合、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ディレクティブにも影響を与えません。

パラメーター 説明 必須

type

Dialog.Delegateに設定します。

文字列

updatedIntent

Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。

updatedIntentに別のインテントを設定してDialog.Delegateを返すと、ユーザーがインテントを直接呼び出すのと同じになります。オートデリゲートが有効な場合、新しいインテントのダイアログが完了したらスキルは1つのIntentRequestを受け取ります。オートデリゲートが有効でない場合、スキルはダイアログのターンごとにIntentRequestを受け取ります。新しいインテントが元のインテントと同じスロットを使う場合、新しいインテントのすべてのスロットに同じ値を設定して、Alexaがユーザーに同じことを質問しないようにしてください。

オブジェクト

×

詳細

Alexaはダイアログモデルに基づいてダイアログの次の手順を判断します。複数のスロットを持つインテントのダイアログでは、Alexaはダイアログモデルで定義した順序で各スロットの情報を引き出し、値を検証し、(必要に応じて)確認を行います。インテントの確認(必要な場合)は、必要なすべてのスロットに値が入った後で行われます。

必須でないスロットでスロットの検証を使用することもできるので、オプション値がある場合は検証が可能です。ただし、ユーザーにこれらのスロットに入力するよう強制しないようにします。この場合、Dialog.Delegateは空白のスロット値を受け入れ、必須でないスロットに対して検証も要求も実行しません。ユーザーがスロット値を提供しない場合は、Dialog.Delegateは検証ルールを使用して、通常どおりにプロンプトを出します。

応答にOutputSpeechを含めることができます。Alexaは、ダイアログモデルで定義したプロンプトの前にoutputSpeechを読み上げます。この方法はインテントを変更する場合に有効ですが、インテントを変更しない場合にもoutputSpeechを使うことができます。repromptに含まれる発話はすべて無視されます。ダイアログ中、Alexaはダイアログモデルのプロンプトを使って再プロンプトを出します。

対話例

旅行の計画を立てるインテント(PlanMyTrip)では以下のような対話が考えられます。

ユーザー: アレクサ、トリッププランで、京都旅行を計画したい。
Alexaは次のようにスロット値を設定してスキルにPlanMyTripインテントを送信します。

dialogState: STARTED
fromCity: null
toCity: 京都
travelDate: null
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegateディレクティブを返します。updatedIntent.slots.fromCityには 神戸が設定され、その他のスロットは変更されません(fromCityのデフォルト値)

Alexa: 出発地は神戸ですね? (ダイアログモデルで定義された、fromCityスロットの確認プロンプトです)
ユーザー: はい。
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

dialogState: IN_PROGRESS
fromCity: 神戸confirmationStatus: CONFIRMED)
toCity: 京都
travelDate: null
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegateディレクティブを返します。

Alexa: 出発日はいつですか? (ダイアログモデルに定義されたtravelDateをたずねるプロンプトです)
ユーザー: 金曜日です
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

dialogState: IN_PROGRESS
fromCity: 神戸 (confirmationStatus: CONFIRMED)
toCity: 京都
travelDate: 2017-04-21
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegateディレクティブ(この例ではtravelModeスロットとactivityスロットは必要ないため、Alexaはこれらをたずねるプロンプトを出しません)を返します。

Alexa: 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか? (ダイアログモデルからのインテント確認プロンプトです)
ユーザー: はい。
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

dialogState: COMPLETED
fromCity: 神戸 (confirmationStatus: CONFIRMED)
toCity: 京都
travelDate: 2017-04-21
travelMode: null
activity: null
confirmationStatus: CONFIRMED

これでスキルは必要な情報をすべて取得し、PlanMyTripインテントを処理することができるようになりました。dialogStateCOMPLETEDであるため、スキルはupdatedIntentにも新しいインテントを渡す場合にのみDialog.Delegateをもう一度返すことができます。

ユーザーが最後のやり取りで確認を拒否した場合でも、ダイアログのステータスはCOMPLETEとみなされますが、intent.confirmationStatusDENIEDとなります。以下はその例です。

…これまでの対話でPlanMyTripが呼び出され、fromCitytoCitytravelDateのスロットの値が設定されました。

Alexa: 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか? (ダイアログモデルからのインテント確認プロンプトです)
ユーザー: いいえ。
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

dialogState: COMPLETED
fromCity: 神戸 (confirmationStatus: CONFIRMED)
toCity: 京都
travelDate: 2017-04-21
travelMode: null
activity: null
confirmationStatus: DENIED

すべての情報が取得できたので、ダイアログは完了したとみなされます。dialogStateCOMPLETEDになったため、スキルがDialog.Delegateディレクティブを返すことはありません。

上のDialogディレクティブに戻る

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ディレクティブにも影響を与えません。

この例では、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"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ElicitSlotに設定します。

文字列

slotToElicit

情報を引き出すスロットの名前です。

文字列

updatedIntent

Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。

このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントにある特定のスロット値について情報を引き出そうとします。スキルに対する次のIntentRequestは、元のインテントではなく新しいインテントになります。

オブジェクト

×

詳細

OutputSpeechオブジェクトにスロット値をユーザーにたずねるプロンプトを含める必要があります。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。

Dialog.ElicitSlotは、ダイアログモデルでスロットに指定したユーザー発話を使用します。Alexaはスロットの値を取得するために定義された発話例に応じて、ユーザーの発話を聞き取るよう対話モデルにバイアスをかけるため、ダイアログモデルを定義するときには適切な発話例を定義することが重要です。

対話例

旅行の計画を立てるインテント(PlanMyTrip)では以下のような対話が考えられます。

ユーザー: アレクサ、トリッププランで、旅行を計画したい。
Alexaは以下のようにスロット値に何も入れない状態で、スキルにPlanMyTripインテントを送信します。

fromCity: null
toCity: null
travelDate: null
travelMode: null
activity: null

スキルはslotToElicitfromCityを設定して、Dialog.ElicitSlotディレクティブを送信します。

Alexa: 出発地はどこですか? (このプロンプトは、応答に含まれるoutputSpeechから情報を引き出します)
ユーザー: 神戸。
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

fromCity: 神戸
toCity: null
travelDate: null
travelMode: null
activity: null

スキルはslotToElicittoCityを設定して、Dialog.ElicitSlotディレクティブを送信します。

Alexa: 目的地はどこですか?
ユーザー: 京都。
Alexaは次のようにスロット値を設定してPlanMyTripインテントを送信します。

fromCity: 神戸
toCity: 京都
travelDate: null
travelMode: null
activity: null

(スキルがElicitSlotディレクティブを送信してインテントの残りのスロットに入る値を収集する間、ダイアログは続きます。)

上のDialogディレクティブに戻る

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ディレクティブにも影響を与えません。

この例では、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"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ConfirmSlotに設定します。

文字列

slotToConfirm

確認するスロットの名前です。

文字列

updatedIntent

Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。

このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントにある特定のスロット値を確認しようとします。updatedIntentに渡すIntentオブジェクトのスロットに、確認する値が入っていることを確認してください。スキルに対する次のIntentRequestは、元のインテントではなく新しいインテントになります。

文字列

×

詳細

Dialog.ConfirmSlotを返す場合、ユーザーへの確認を求めるプロンプトをOutputSpeechオブジェクトに含めます。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。

AlexaがOutputSpeechからのプロンプトを読み上げたら、ユーザーは「はい」か「いいえ」で応答できます。 その後Alexaはスキルに、特定のスロットのconfirmationStatusプロパティを更新してインテントを送信します。このプロパティには、ユーザーの応答(CONFIRMEDまたはDENIED)が入ります。

ユーザーが確認を2回拒否すると、セッションが終了します。

対話例

旅行の計画を立てるインテント(PlanMyTrip)では以下のような対話が考えられます。

ユーザー: アレクサ、トリッププランで神戸からの旅行を計画したい。
Alexaは次のようにスロット値を設定してスキルにPlanMyTripインテントを送信します。

fromCity: 神戸(ユーザーはまだこの値を確認していないため、confirmationStatusNONEです。)
toCity: null
travelDate: null
travelMode: null
activity: null

スキルはslotToConfirmfromCityを設定して、Dialog.ConfirmSlotディレクティブを送信します。

Alexa: 出発地は神戸ですね? (このプロンプトは、応答に含まれるoutputSpeechからの情報を確認します)

ユーザー: はい。 (ユーザーが「はい」と応答すると、通常のAMAZON.YesIntentは送信されず、PlanMyTripインテントを送信します。このインテントには、fromCityスロットに「神戸」、fromCity.confirmationStatusCONFIRMEDを設定が設定されています)

上のDialogディレクティブに戻る

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ディレクティブにも影響を与えません。

この例では、Dialog.ConfirmIntentを返してインテント全体を確認しています。プロンプトにOutputSpeechオブジェクトが使用されていることに注意してください。この例では、必須の3つのスロット(toCityfromCitytravelDate)は確認を使用しており、以前のダイアログでのやり取りで確認は完了しています。残りの2つのスロット(activitytravelMode)には値が入っていますが、確認は不要でした。

{
  "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": "hiking"
              "confirmationStatus": "NONE"
            },
            "travelMode": {
              "name": "travelMode",
              "value": "ドライブする"
              "confirmationStatus": "NONE"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ConfirmIntentに設定します。

文字列

updatedIntent

Intentオブジェクトです。ダイアログ中にインテントを変更するか、スロット値や確認ステータスを設定するために使用します。ダイアログ中にインテントの変更やスロット値の更新を行うを参照してください。インテント、スロット値、確認ステータスを変更する必要がない場合、このプロパティを応答から省略できます。

このパラメーターを使ってインテントを切り替えると、Alexaは新しいインテントを確認しようとします。ディレクティブを返す前に、インテントの関連するスロット値をすべて設定するようにしてください。スキルに対する次のIntentRequestは元のインテントではなく新しいインテントになります。confirmationStatusはユーザーの応答によって変わります。

オブジェクト

×

詳細

インテントの実行に必要なすべての必須スロットの値を取得したが、値が正しいことをもう一度ユーザーに確認してから続行したい場合、このディレクティブを使用します。商品を注文したり、予約を行ったりするスキルでよく使われます。

Dialog.ConfirmIntentを返す場合、ユーザーへの確認を求めるプロンプトをOutputSpeechオブジェクトに含める必要があります。ディレクティブはダイアログモデルで定義されたプロンプトを使用しません。

Alexaがユーザーに情報を確認したら、ユーザーは「はい」または「いいえ」で答えることができます。 その後Alexaはスキルに、intent.confirmationStatusプロパティを更新してインテントを送信します。このプロパティには、ユーザーの応答(CONFIRMEDまたはDENIED)が入ります。

対話例

旅行の計画を立てるインテント(PlanMyTrip)では以下のような対話が考えられます。

…これまでのやり取りで、必要なfromCitytoCitytravelDateの各スロットの値はすべて取得できました。Alexaはスキルに、すべてのスロットに値が設定されたPlanMyTripインテントを送信しますが、スロット全体のconfirmationStatusNONEに設定します。

スキルはDialog.ConfirmIntentを送信します。

Alexa: 4月21日に神戸を出発して京都に向かう旅程を保存します。間違いないですか? (このプロンプトは、応答に含まれるoutputSpeechからの情報を確認します)
ユーザー: はい。 (ユーザーの「はい」と応答すると、通常のAMAZON.YesIntentは送信されず、PlanMyTripインテントを送信します。このインテントは、すべてのスロットに値が設定され、confirmationStatusCONFIRMEDに設定されています。)

上のDialogディレクティブに戻る

サービスインターフェースのリファレンス(JSON)

リクエストの形式と標準のリクエストタイプ:

インターフェース: