あなたのAlexaダッシュボード 設定

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

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

Dialogディレクティブの要件

Dialogディレクティブを使用するために、スキルは次の要件を満たしている必要があります。

  • 対話モデルをスキルビルダー(ベータ版)でビルドしなければなりません。
  • ダイアログモデルを組み込む必要があります。このモデルには必要なスロットと、それらのスロットを得るために必要なプロンプトと発話例が定義されています。
  • 対話モデルでは、インテントに単一スロット値のみで構成される発話例を含めることはできませんでした。ダイアログモデルでは、スロットサンプルを認識するためのスロットだけからなる発話例を含めることができます。たとえば、インテントPlanMyTripに次のような発話例を含めることはできませんでした。

      PlanMyTrip {travelDate}
    

    対して、ダイアログモデルではtravelDateスロットを取得するための専用の発話例を“{travelDate}”というようにして含めることができます

    スロット用の発話の定義方法について詳しくは、必須のスロットとプロンプトの特定を参照してください。

  • 対話モデルに、AMAZON.YesIntentまたはAMAZON.NoIntentビルトインインテントを含めることはできません。これらのインテントは、Dialogディレクティブとは互換性がありません。

ダイアログモデル

Dialogディレクティブを使用するには、スキルビルダー(ベータ版)を使用してダイアログモデルを作成する必要があります。ここで構築する構造は、次のものを識別します。

  • インテントを実行するために満たす必要があるスロット。これらは必要なスロットと見なされます。
  • Alexaが必要なスロット値を求めるために話すプロンプトと、ユーザーが回答で話すことのできる発話例。
  • 続行する前にユーザーがいずれかのスロットの内容を確認する必要があるかどうか。
  • 続行する前にユーザーがインテント全体を確認する必要があるかどうか。
  • Alexaがスロットとインテントの確認を求めて話すプロンプト。

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

マルチターンのダイアログまたは会話のステップ

Alexaスキルにおけるユーザーとの会話は、Alexaとユーザーの間の複数回に及ぶ会話で構成されます。Alexaの質問に対し、ユーザーが回答します。会話は、ユーザーのリクエスト全体を表す特定のインテントと結び付けられています。質問と回答の目的は、インテントの必要なスロットすべての値を収集して確認することです。インテントに必要なすべてのスロットの取得と確認が済むまで、会話が続きます。

会話中にAlexaが尋ねる質問は次の3つのカテゴリーに分類されます。

  • スロットの情報引き出し:スロット値をユーザーに尋ねます。ユーザーはスロット値を答えるか、スロット値を含む発話で答えます。スロット情報を引き出す質問の例:
    • Alexa: What city are you leaving from? fromCityスロットの値を引き出す。)
    • Alexa: Where are you traveling to? toCityスロットの値を引き出す。)
    • Alexa: When did you want to travel? travelDateスロットの値を引き出す。)
  • スロットの確認:すでに提供されている(またはプログラムによって設定された)単一スロット値が正しいことの確認をユーザーに求めます。ユーザーは「はい」または「いいえ」で回答します。スロット確認の質問例:
    • Alexa: You said you’re leaving from Seattle, right? fromCity値を確認する。)
    • Alexa: Did you want to travel to Portland? toCity値を確認する。)
    • Alexa: You’re traveling on April 21st, right? travelDate値を確認する。)
  • インテントの確認:インテントを処理する前に、インテントのために収集されたすべての情報が正しいか確認するようユーザーに求めます。スロット確認と同様に、ユーザーは「はい」または「いいえ」で回答します。インテント確認の質問例:
    • Alexa: I’m saving your trip from Seattle to Portland on April 21st. Is that OK? PlanMyTripインテント全体を確認する。)

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

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

スキルでは、ダイアログモデルで実現されるマルチターンの会話の処理に関して、主に次の3つの方法があります。

  1. Dialog.Delegateディレクティブを返して、ダイアログモデルで定義されているプロンプトをAlexaに使用させる
  2. Dialog.ElicitSlotDialog.ConfirmSlot、およびDialog.ConfirmIntentを使用して、自分でダイアログの各ステップを制御する。
  3. 両方のオプションの組み合わせ – 必要に応じて会話の一部を委任し、一部を自分で制御する。

会話をAlexaに委任する

このオプションを使用すると、ユーザーにスロット値を尋ねるコードを自分で作成する必要はありません。コーディングの労力の大部分をユーザーのリクエストを実現するロジックに集中させることができます。

Alexaがスキルにインテントを送信するとき、IntentRequestにはdialogStateプロパティが含まれています。このプロパティは、ダイアログに追加ステップが存在するかどうか(STARTEDまたはIN_PROGRESS)、あるいはすべてのステップが完了し、IntentRequestには必要なスロット値とユーザーからの確認がすべて含まれているかどうか(COMPLETED)のいずれかが含まれています。

ダイアログが完了していない場合は、Dialog.Delegateディレクティブを返します。これを受け取ると、Alexaはダイアログ内の次のステップを判別し、ダイアログモデルで定義されているプロンプトを使用して、スロット値を引き出したり、スロット値を確認したり、インテント全体を確認したりします。

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

スキルコードで会話を制御する

このオプションでは、コードはスロット値と確認ステータスをチェックし、会話内の次のステップを判別し、適切なディレクティブ(Dialog.ElicitSlotDialog.ConfirmSlot、またはDialog.ConfirmIntent)を返します。

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

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

会話を委任するか手動で制御するかを任意に決める

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

  • Dialog.Delegateを返して、Alexaが次のステップを処理するようにします。
  • 他のいずれかのディレクティブ(Dialog.ElicitSlotなど)を返して、会話を自分で制御します。

会話の途中でスロット値と確認ステータスを更新する

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

  • ダイアログを続行する前に、コード内のスロット値を設定または変更します。これにより、Alexaがインテントを実行するために尋ねる必要がある質問数を減らし、ユーザーエクスペリエンスを向上させることができます。

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

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

Dialogディレクティブを返す際、インテントは変更できないため、インテント名とスロットのセットは、スキルに送信されたインテントのものと一致していなければなりません。

Dialogディレクティブ

次の表に、Dialogディレクティブについてまとめます。各ディレクティブの詳細については以下のセクションをご覧ください。

スキルがDialogディレクティブを使用するための要件を満たしていない場合、これらのディレクティブを返すとエラーが生じます。

ディレクティブ 説明

Dialog.Delegate

Alexaに、ユーザーとのダイアログの次回のやり取りで処理するコマンドを送信します。このディレクティブは、スキルにダイアログモデルが含まれ、ダイアログの現在のステータス(dialogState)がSTARTEDIN_PROGRESSのいずれかである場合に使用できます。dialogStateCOMPLETEDの場合にこのディレクティブを返すことはできません。

Dialog.ElicitSlot

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

Dialog.ConfirmSlot

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

Dialog.ConfirmIntent

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

Delegateディレクティブ

Alexaに、ユーザーとの会話の次回のやり取りで処理するコマンドを送信します。このディレクティブは、スキルにダイアログモデルが含まれ、ダイアログの現在のステータス(dialogState)がSTARTEDIN_PROGRESSのいずれかである場合に使用できます。dialogStateCOMPLETEDの場合にこのディレクティブを返すことはできません。

構文

{
  "type": "Dialog.Delegate",
  "updatedIntent": {
    "name": "string",
    "confirmationStatus": "NONE",
    "slots": {
      "string": {
        "name": "string",
        "value": "string",
        "confirmationStatus": "NONE"
      }
    }
  }
}
パラメーター 説明 必須

type

Dialog.Delegateに設定。

string

必須

updatedIntent

スキルに送信するインテントを表すintentオブジェクト。このプロパティを使用して、必要に応じ、スロット値と確認ステータスを設定または変更できます。

スロット値も確認ステータスも変更する必要がない場合は、このプロパティを応答から除外できます。

Dialogディレクティブを返す際、インテントは変更できないため、インテント名とスロットのセットは、スキルに送信されたインテントのものと一致していなければなりません。

object

いいえ

詳細

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

outputSpeechまたはrepromptを、Dialog.Directiveと一緒に含めないでください。Alexaは、ダイアログモデルで定義されているプロンプトを使用して、スロット値をユーザーに尋ねたり確認したりします。

updatedIntentプロパティを使用して、スロット値または確認ステータス(あるいはその両方)を設定または変更します。受け取るIntentRequestをトリガーしたスロット値とステータスをそのまま使用してダイアログを続行する場合には、このプロパティを省略できます。

たとえば、最初のやり取りでは特定のスロットにデフォルト値を事前に入れ、次にDelegateを返してAlexaにダイアログを続行させることができます。

  1. IntentRequestdialogStateプロパティを使用してダイアログステータスをチェックします。
  2. ダイアログが開始されたばかりの場合(dialogStateSTARTEDの場合)、Intentオブジェクトのスロットを必要に応じてデフォルト値で更新します。この更新されたインテントを、Dialog.DelegateディレクティブのupdatedIntentプロパティに含めます。
  3. ダイアログがIN_PROGRESSの場合、updatedIntentを含めずにDialog.Delegateを返します。
  4. ダイアログがCOMPLETEDになると、通常のインテント処理を行います。
// The intentRequest variable here is the IntentRequest object sent to the skill.
if (intentRequest.dialogState === "STARTED"){
    // Pre-fill slots: update the intent object with slot values for which
    // you have defaults, then return Dialog.Delegate with this updated intent
    // in the updatedIntent property.
} else if (intentRequest.dialogState != "COMPLETED"){
    // return a Dialog.Delegate directive with no updatedIntent property.
} else {
    // Dialog is now complete and all required slots should be filled,
    // so call your normal intent handler. 
    handlePlanMyTripIntent(intent, session, callback);
}

対話例

旅行を計画するインテント(PlanMyTrip)に次のような対話がになります。

User: アレクサ, Plan My Tripを開いて、ポートランドに行きたいです
AlexaはスキルのPlanMyTrip インテントに次を送る:

dialogState: STARTED
fromCity: null
toCity: Portland
travelDate: null
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegateディレクティブで次を返します: updatedIntent.slots.fromCity: シアトル 他のスロットは変更なし (これにより fromCity スロットに対してデフォルト値を与えています)
Plan My Trip: シアトル出発ですよね? (ダイアログモデルで定義されている、fromCityスロットの確認プロンプト。)
User: はい
AlexaはPlanMyTripインテントに次を送ります:

dialogState: IN_PROGRESS
fromCity: シアトル (今回からconfirmationStatus: CONFIRMEDで)
toCity: ポートランド
travelDate: null
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegate ディレクティブで応答
Alexa: 出発はいつですか? travelDateの情報を引き出すためのプロンプトは、ダイアログモデルに基づきます。)
User: 金曜日です
AlexaはPlanMyTripインテントに次を送ります:

dialogState: IN_PROGRESS
fromCity: シアトルconfirmationStatus: CONFIRMEDで)
toCity: ポートランド
travelDate: 2017-04-21
travelMode: null
activity: null
confirmationStatus: NONE

スキルはDialog.Delegate ディレクティブで応答 (この例では、travelModeactivity スロットは必須ではなく、Alexa はこれらを取得するためのプロンプトを行いません)
Alexa: 4月21日発でシアトルからポートランドへの旅行の予定を保存します。よろしいですか? (ダイアログモデルに基づくインテント確認プロンプト。)
User: はい
Alexa はPlanMyTripインテントに次を送ります:

dialogState: COMPLETED
fromCity: SeattleconfirmationStatus: CONFIRMED
toCity: Portland
travelDate: 2017-04-21
travelMode: null
activity: null
confirmationStatus: CONFIRMED

これでスキルは必要な全ての情報を得、PlanMyTrip インテントを処理することができるようになりました。dialogStateCOMPLETEDなので、これ以上Dialog.Delegate ディレクティブで応答をすることはできません。

ユーザーが最終の確認で拒否をすると、会話はCOMPLETEと見なされますが、intent.confirmationStatusDENIEDとなります。

…先のインタラクションでPlanMyTrip 呼び出し、fromCitytoCity、そしてtravelDate スロットが設定されている状態
Alexa: 4月21日発でシアトルからポートランドへの旅行の予定を保存します。よろしいですか? (ダイアログモデルに基づくインテント確認プロンプト。)
User: いいえ
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": {
      "string": {
        "name": "string",
        "value": "string",
        "confirmationStatus": "NONE"
      }
    }
  }
}

次の例は、fromCityスロット値を尋ねるためのDialog.ElicitSlotを返す方法を示しています。OutputSpeechオブジェクトがプロンプトに使用されていることに注意してください。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "From where did you want to start your trip?"
    },
    "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に設定。

string

必須

slotToElicit

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

string

必須

updatedIntent

スキルに送信するインテントを表すintentオブジェクト。このプロパティを使用して、必要に応じ、スロット値と確認ステータスを設定または変更できます。

スロット値も確認ステータスも変更する必要がない場合は、このプロパティを応答から除外できます。

Dialogディレクティブを返す際、インテントは変更できないため、インテント名とスロットのセットは、スキルに送信されたインテントのものと一致していなければなりません。

object

いいえ

詳細

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

Dialog.ElicitSlot は、指定されたスロットの値を得るためにスロット用に指定した発話例を使用します。Alexaはスロットに定義されている発話を聞き取ろうとして対話モデルにバイアスをかけるため、ダイアログモデルを利用するときには注意深く発話例を定義することが重要です。

ダイアログを続行する前に、スロット値または確認ステータスを設定あるいは変更する必要がある場合には、Intentオブジェクトでこれらの値を設定し、updatedIntentプロパティでそのオブジェクトを渡します。

対話例

旅行を計画するインテント(PlanMyTrip)に次のような対話が含まれているとします。

User: アレクサ、Plan My Trip を開いて旅行の計画をして
AlexaはスキルのPlanMyTrip インテントにスロット値は何何も持たない次のような内容を送ります:

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

スキルは Dialog.ElicitSlot ディレクティブで slotToElicitfromCity をセットして応答します。
Plan My Trip: 出発はどこですか? (情報を引き出すこのプロンプトは、応答に含まれるoutputSpeechに基づきます。)
User: シアトル
AlexaはPlanMyTrip インテントに次のような内容を送ります:

fromCity: シアトル
toCity: null
travelDate: null
travelMode: null
activity: null

スキルはDialog.ElicitSlot ディレクティブで slotToElicittoCity をセットして応答します。
Plan My Trip: どちらに向かいますか?
User: ポートランド
Alexa は PlanMyTrip インテントに次のような内容を送ります:

fromCity: シアトル
toCity: ポートランド
travelDate: null
travelMode: null
activity: null

(Dialog continues as the skill sends 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",
        "confirmationStatus": "NONE"
      }
    }
  }
}

次の例は、fromCityスロット値を確認するためのDialog.ConfirmSlotを返す方法を示しています。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": "Seattle",
              "confirmationStatus": "NONE"
            },
            "activity": {
              "name": "activity",
              "confirmationStatus": "NONE"
            },
            "travelMode": {
              "name": "travelMode",
              "confirmationStatus": "NONE"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ConfirmSlotに設定。

string

必須

slotToConfirm

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

string

必須

updatedIntent

スキルに送信するインテントを表すintentオブジェクト。このプロパティを使用して、必要に応じ、スロット値と確認ステータスを設定または変更できます。

スロット値も確認ステータスも変更する必要がない場合は、このプロパティを応答から除外できます。

Dialogディレクティブを返す際、インテントは変更できないため、インテント名とスロットのセットは、スキルに送信されたインテントのものと一致していなければなりません。

string

いいえ

詳細

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

インテントの確認をユーザーに求める前にスロット値を変更する必要がある場合には、Intentオブジェクトでこれらの値を設定し、updatedIntentプロパティでそのオブジェクトを渡します。

Alexaがスロット値の確認をユーザーに求めた後、ユーザーは「はい」または「いいえ」で応答できます。その後、Alexaは、特定のスロットに関して更新されたconfirmationStatusプロパティが含まれるインテントをスキルに送信し、ユーザーの応答を示します(CONFIRMEDまたはDENIED)。

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

対話例

旅行を計画するインテント(PlanMyTrip)に次のような対話が含まれているとします。

User: Alexa, Plan My Trip を開いてシアトル発の旅行を計画して
Alexa はスキルのPlanMyTrip インテントに次のような内容を送ります:

fromCity: シアトル (ユーザーがこの値を確認していないため、confirmationStatusNONE
toCity: null
travelDate: null
travelMode: null
activity: null

スキルは Dialog.ConfirmSlot ディレクティブで slotToConfirmfromCityにセットして応答します。
Plan My Trip: シアトル出発ですね? この確認プロンプトはレスポンスに含まれる outputSpeech の値からきています。
User: Yes. (ユーザーが「はい」で応答する場合には通常の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",
        "confirmationStatus": "NONE"
      }
    }
  }
}

次の例は、インテント全体を確認するためのDialog.ConfirmIntentを返す方法を示しています。OutputSpeechオブジェクトがプロンプトに使用されていることに注意してください。この例では、必須の3つのスロット(toCityfromCity、および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": "Portland",
              "confirmationStatus": "CONFIRMED"
            },
            "travelDate": {
              "name": "travelDate",
              "confirmationStatus": "CONFIRMED",
              "value": "2017-04-21"
            },
            "fromCity": {
              "name": "fromCity",
              "value": "Seattle",
              "confirmationStatus": "CONFIRMED"
            },
            "activity": {
              "name": "activity",
              "value": "hiking"
              "confirmationStatus": "NONE"
            },
            "travelMode": {
              "name": "travelMode",
              "value": "driving"
              "confirmationStatus": "NONE"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ConfirmIntentに設定。

string

必須

updatedIntent

スキルに送信するインテントを表すintentオブジェクト。このプロパティを使用して、必要に応じ、スロット値と確認ステータスを設定または変更できます。

スロット値も確認ステータスも変更する必要がない場合は、このプロパティを応答から除外できます。

Dialogディレクティブを返す際、インテントは変更できないため、インテント名とスロットのセットは、スキルに送信されたインテントのものと一致していなければなりません。

object

いいえ

詳細

このディレクティブは、インテントを実行するために必要なすべての必須スロットをスキルが収集した後、正しいことを確認する機会をユーザーにもう一度与えてから続行する場合に使用します。これは、製品の注文や予約を行うスキルの場合に一般的です。

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

インテントの確認をユーザーに求める前にスロット値を変更する必要がある場合には、Intentオブジェクトでこれらの値を設定し、updatedIntentプロパティでそのオブジェクトを渡します。

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

対話例

旅行を計画するインテント(PlanMyTrip)に次のような対話が含まれているとします。

…ここにくるまでの会話の中で必須項目 fromCity, toCity、と travelDate スロットの値が取得できているとします。 Alexa はスキルの PlanMyTrip インテントにそれら全ての値が入った状態でリクエストを送り、しかしインテント全体の confirmationStatusNONEで設定されています
スキルは Dialog.ConfirmIntentで応答します
Plan My Trip: 4月21日発でシアトルからポートランドへの旅行の予定を保存します。よろしいですか? (この確認プロンプトは、応答に含まれるoutputSpeechに基づきます。)
User: はい (ユーザーが「はい」で応答する場合には通常のAMAZON.YesIntentは送信されませんが、代わりにPlanMyTripインテントが送信されます。このインテントではすべてのスロットの値が指定されており、confirmationStatusCONFIRMEDに設定されています。)

Dialogディレクティブに戻る

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

インターフェース: