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



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

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

Dialogディレクティブの要件

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

  • ダイアログモデルを組み込む必要があります。このモデルを使用して、必須のスロットと、そのスロットの値に必要なプロンプトと発話を指定します。

ダイアログモデル

Dialogディレクティブを使用する場合、必ずダイアログモデルを作成する必要があります。ダイアログモデルは、以下の項目で構成されています。

  • スロット:インテントに入力するには、このスロットに有効な値を指定しなければなりません。これらは必須のスロットとみなされます。
  • Alexaが必須のスロット値を得るためにユーザーに尋ねるプロンプトと、その返答としてユーザーが言うことのできる発話。
  • 必須のスロットをユーザーが確認してから続行する必要があるかどうか。
  • インテント全体をユーザーが確認してから続行する必要があるかどうか。
  • Alexaがスロットとインテントの確認を求めるプロンプト。

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

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

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

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

  • スロットの情報引き出し: スロット値をユーザーに尋ねます。ユーザーはスロット値を答えるか、スロット値を含む発話で答えます。以下は、スロット値を要求する質問例です。
    • Alexa: 出発地はどこですか?fromCityスロットの値を引き出す)
    • Alexa: 目的地はどこですか?toCityスロットの値を引き出す)
    • Alexa: 出発日はいつですか?travelDateスロットの値を引き出す)
  • スロットの確認: すでに提供された(またはプログラムによって設定された)単一スロット値が正しいかどうか、ユーザーに確認を求めます。ユーザーは「はい」または「いいえ」で回答します。以下は、スロットの確認を求める質問の例です。
    • Alexa: 出発地は神戸ですね?fromCityの値が正しいことの確認)
    • Alexa: 目的地は京都ですね?toCityの値が正しいことの確認)
    • Alexa: 出発日は4月21日ですね?travelDateの値が正しいことの確認
  • インテントの確認: インテントを処理する前に、インテント用に取得したすべての情報が正しいかどうか、確認をユーザーに求めます。スロットの確認と同様に、ユーザーは「はい」または「いいえ」で回答します。以下は、インテントの確認を求める質問の例です。
    • Alexa: 4月21日に神戸を出発して京都に向かいます。間違いないですか?PlanMyTripインテント全体の確認)

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

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

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

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

Alexaにダイアログを委任する

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

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

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

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

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

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

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

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

ダイアログの委任と制御を手動で行う

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

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

ダイアログ中にスロット値と確認ステータスを更新する

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

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

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

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

Dialogディレクティブを返すときにインテントは変更できません。そのためインテント名とスロットのセットがスキルに送信したインテントのものと一致している必要があります。

Dialogディレクティブ

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

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

ディレクティブ 説明

Dialog.Delegate

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

Dialog.ElicitSlot

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

Dialog.ConfirmSlot

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

Dialog.ConfirmIntent

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

Delegateディレクティブ

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

構文

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

type

Dialog.Delegateに設定します。

文字列

updatedIntent

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

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

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

オブジェクト

×

詳細

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

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

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

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

  1. IntentRequestdialogStateプロパティを使用してダイアログのステータスを確認します。
  2. ダイアログが開始されたばかりの場合(dialogStateSTARTED)、必要に応じてIntentオブジェクトのスロットをデフォルト値で更新します。この更新したインテントをDialog.DelegateディレクティブのupdatedIntentプロパティに含めます。
  3. ダイアログがIN_PROGRESSの場合、updatedIntentを含めずにDialog.Delegateを返します。
  4. ダイアログがCOMPLETEDになったら、通常のインテント処理を行います。
// ここのintentRequest変数は、スキルに送信されるIntentRequestオブジェクトです。
if (intentRequest.dialogState === "STARTED"){
    // 入力済みスロット: デフォルト値のあるスロット値を使用して
    // インテントオブジェクトを更新します。次にupdatedIntentプロパティのこの更新されたインテントで
    // Dialog.Delegateを返します。
} else if (intentRequest.dialogState != "COMPLETED"){
    // updatedIntentプロパティを持たないDialog.Delegate ディレクティブを返します。
} else {
    // ダイアログは完了し、すべての必要なスロットが入力されました。
    // 通常のインテントハンドラーを呼び出してください。
    handlePlanMyTripIntent(intent, session, callback);
}

対話例

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

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

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

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

Plan My Trip: 出発地は神戸ですね? (ダイアログモデルで定義された、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になったため、スキルが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": {
      "string": {
        "name": "string",
        "value": "string",
        "confirmationStatus": "NONE"
      }
    }
  }
}

この例では、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オブジェクトです。必要に応じて、このプロパティを使用してスロット値や確認ステータスを設定または変更できます。

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

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

オブジェクト

×

詳細

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

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

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

対話例

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

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

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

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

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

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

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

Plan My Trip: 目的地はどこですか?
ユーザー: 京都。
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",
        "confirmationStatus": "NONE"
      }
    }
  }
}

この例では、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オブジェクトです。必要に応じて、このプロパティを使用してスロット値や確認ステータスを設定または変更できます。

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

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

文字列

×

詳細

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

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

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

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

対話例

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

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

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

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

Plan My Trip: 出発地は神戸ですね? (このプロンプトは、応答に含まれる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",
        "confirmationStatus": "NONE"
      }
    }
  }
}

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

パラメーター 説明 必須

type

Dialog.ConfirmIntentに設定します。

文字列

updatedIntent

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

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

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

オブジェクト

×

詳細

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

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

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

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

対話例

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

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

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

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

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

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

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

インターフェース: