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はダイアログの次の手順を決め、ダイアログモデルで定義したプロンプトを使用してスロット値を引き出すか、スロット値を確認するか、インテント全体を確認するかのいずれかを行います。

Dialog.DelegateディレクティブをAPLディレクティブAPLリクエストと組み合わせることはできません。ダイアログ中の画面に視覚要素を表示するには、スキルコードでダイアログを手動制御します。

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

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

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

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

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

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

この方法でダイアログを制御する場合、Dialog.ElicitSlotDialog.ConfirmSlotDialog.ConfirmIntentのいずれかのディレクティブとともにAlexa.Presentation.APL.RenderDocumentディレクティブを含めることで画面上にダイアログに関連する情報を表示できます。また、APLリクエストからこれらのディレクティブを返すことで、ダイアログ全体にタッチイベントと音声の両方を組み込むことができます。

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

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

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

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

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

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

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

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

  • スロットまたはインテント全体のconfirmationStatusを設定または変更します。
  • Alexa Presentation Languageを使って画面にコンテンツを表示する際は、タッチイベントによって提供されたデータに基づいてスロット値や確認ステータスを設定または変更します。たとえば、ユーザーが画面のタッチによりリスト項目を選択すると、スキルは選択された項目に関する情報を含むUserEventリクエストを受け取ることができます。これを使用してインテントオブジェクトを作成し、必要に応じてスロット値を設定して、Dialogディレクティブを返し、会話を続行できます。

    UserEventリクエストにはインテントが含まれないため、セッションの現在のインテントを追跡する必要はありません。

新しいインテントを渡す

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ディレクティブのいずれかを返すこともできます。これは、ユーザーに何をしたいかをたずねるのではなく、デフォルトのアクションでスキルフローを開始する場合に便利です。
  • Alexa.Presentation.APL.UserEventリクエストから、Dialog.ElicitSlotDialog.ConfirmSlotDialog.ConfirmIntentDialog.UpdateDynamicEntitiesのいずれかを返すことができます。これは、ユーザーの画面操作に基づいてダイアログを開始または続行する場合に便利です。

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

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

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

ディレクティブ

次の表に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オブジェクトに指定します。プロンプトでユーザーの確認が必要なすべての値を復唱するようにしてください。

Dialog.UpdateDynamicEntities

実行時に対話モデルを適応させます。このディレクティブを使用すると、スキルが新しいエンティティを動的に作成できるため、スキルの定義済み静的カタログを拡張できます。

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

パラメーター 説明 必須

type

Dialog.Delegateに設定します。

string

updatedIntent

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

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

object

詳細

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

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

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

DelegateとAlexa Presentation Language

対話例

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

パラメーター 説明 必須

type

Dialog.ElicitSlotに設定します。

string

slotToElicit

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

string

updatedIntent

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

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

object

詳細

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

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

ElicitSlotとAlexa Presentation Language

対話例

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

パラメーター 説明 必須

type

Dialog.ConfirmSlotに設定します。

string

slotToConfirm

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

string

updatedIntent

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

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

string

詳細

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

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

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

ConfirmSlotとAlexa Presentation Language

対話例

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

この例では、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": "ハイキング"
              "confirmationStatus": "NONE"
            },
            "travelMode": {
              "name": "travelMode",
              "value": "ドライブする"
              "confirmationStatus": "NONE"
            }
          }
        }
      }
    ]
  }
}

パラメーター 説明 必須

type

Dialog.ConfirmIntentに設定します。

string

updatedIntent

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

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

object

詳細

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

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

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

ConfirmIntentとAlexa Presentation Language

対話例

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

UpdateDynamicEntitiesディレクティブ

実行時に対話モデルを適応させます。このディレクティブを使用すると、スキルが新しいエンティティを動的に作成できるため、スキルの定義済み静的カタログを拡張できます。

詳細については、カスタマイズした対話に動的エンティティを使用するを参照してください。

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

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

インターフェース


このページは役に立ちましたか?

最終更新日: 2023 年 12 月 18 日