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



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

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

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

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

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

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

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

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

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

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

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

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

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

スキルのユーザーとのマルチターンの会話処理には、主に次の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オブジェクトを取得します。次の目的で使用します。

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

    たとえば、ユーザーのデフォルト値やすでに持っているその他の情報に基づいてスロット値を設定できます。これをDialog.DelegateディレクティブやDialog.ConfirmSlotディレクティブと組み合わせて使用します。このシナリオのサンプルについては、デフォルト値を設定するためにダイアログを手動でデリゲートするを参照してください。

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

Dialogディレクティブを返すときにインテントは変更できません。そのためインテント名とスロットのセットがスキルに送信したインテントのものと一致している必要があります。新しいスロット値または確認ステータスを使用して、最初にスキルに送信したIntentオブジェクトを更新し、ディレクティブに返すことができます。

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": {
      "SlotName": {
        "name": "SlotName",
        "value": "string",
        "resolutions": {},
        "confirmationStatus": "NONE"
      }
    }
  }
}

インテントのSlotオブジェクトは、JSON構文に表示されるresolutionsプロパティを含む場合も、含まない場合もあることに注意してください。これはスロットタイプによって異なります。resolutionsプロパティがあるかどうかは、いずれのDialogディレクティブにも影響を与えません。

パラメーター 説明 必須

type

Dialog.Delegateに設定します。

文字列

updatedIntent

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

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

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

オブジェクト

×

詳細

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

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

outputSpeechまたはrepromptDialog.Directiveと同時に使用しないでください。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になったため、スキルが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ディレクティブを返すことはありません。</em>

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

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

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

オブジェクト

×

詳細

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

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

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

対話例

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

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

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

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

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

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

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

トリッププラン: 目的地はどこですか?
ユーザー: 京都。
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オブジェクトです。必要に応じて、このプロパティを使用してスロット値や確認ステータスを設定または変更できます。

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

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

文字列

×

詳細

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

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

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

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

対話例

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

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

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

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

トリッププラン: 出発地は神戸ですね? (このプロンプトは、応答に含まれる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オブジェクトです。必要に応じて、このプロパティを使用してスロット値や確認ステータスを設定または変更できます。

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

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

オブジェクト

×

詳細

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

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

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

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

対話例

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

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

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

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

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

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

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

インターフェース: