Alexa Conversationsとの間でのダイアログ管理の引き渡し



Alexa Conversationsとの間でのダイアログ管理の引き渡し

インテントベースのダイアログ管理を使用するスキルの場合、ダイアログ管理の一部または全部をAlexa Conversationsで処理することができます。

ダイアログ管理を引き渡すには、Alexaからのリクエストに対する応答として、Dialog.DelegateRequestディレクティブを送信します。このディレクティブの詳細は、インテントベースのダイアログ管理からAlexa Conversationsに切り替えるか、その逆の切り替えを行うかによって異なります。

どちらの場合も、ダイアログの状態などのセッションアトリビュートを同じ応答に保存できます。

Alexa Conversationsにダイアログ管理を引き渡す

ダイアログ管理をスキルからAlexa Conversationsに引き渡すには、インテントハンドラーでDialog.DelegateRequestをAlexaに送信します。インテントをAlexa Conversationsでどの発話セットにマッピングするかを特定し、そのスロットをAlexa Conversationsに渡します。

Dialog.DelegateRequestの形式は次のとおりです。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "AMAZON.Conversations",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "Dialog.InputRequest",
            "input": {
               "name": "<utteranceSetName>",  //発話セットInvoke APIsダイアログアクトを使用する必要があります
               "slots": {
                  "<slotName1>": {
                     "name": "<slotName1>",
                     "value": "<slotValue1>"
                  },
                  "<slotName2>": {
                     "name": "<slotName2>",
                     "value": "<slotValue2>"
                  },
                  ...
               }
            }
         }
      }
    ]
  }
}

Alexa Conversationsからスキルにダイアログ管理を引き渡す

Alexa Conversationsからスキルにダイアログ管理を引き渡すには、Dialog.API.Invokedリクエストに対する応答として、Dialog.DelegateRequestを送信します。スキルのエントリポイントとして使用するインテントを指定し、そのインテントに必要なスロット値を渡します。この場合、Dialog.DelegateRequestの形式は次のとおりです。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "skill",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "IntentRequest",
            "intent": {
               "name": "<intentName>",
               "slots": {
                  "<slotName1>": {
                     "name": "<slotName1>",
                     "value": "<slotValue1>"
                  },
                  "<slotName2>": {
                     "name": "<slotName2>",
                     "value": "<slotValue2>"
                  },
                  ...
               }
            }
         }
      }
    ]
  }
}

Dialog.DelegateRequestのパラメーター

Dialog.DelegateRequestのパラメーターは次のとおりです。

フィールド 説明 必須

type

このディレクティブの名前。Dialog.DelegateRequestに設定します。

文字列

target

切り替え先のダイアログマネージャー。有効な値は次のとおりです。

  • AMAZON.Conversations: Alexa Conversationsにダイアログ管理を引き渡します。
  • skill: スキルにダイアログ管理を引き渡します。

文字列

period

デリゲートの期間。

オブジェクト

period.until

デリゲート期間の終了。有効な値は次のとおりです。

  • EXPLICIT_RETURN: スキルが新しいtargetを指定してDialog.DelegateRequestディレクティブを送信するまでデリゲートが継続します。

列挙型文字列

updatedRequest

デリゲートのリクエスト。nullに設定して現在のリクエストをデリゲートします。

オブジェクト

updatedRequest.type

デリゲートのリクエストタイプ。有効な値は次のとおりです。

  • Dialog.InputRequest: ダイアログ管理をAlexa Conversationsに引き渡す場合は、この値を使用します。
  • IntentRequest: ダイアログ管理をスキルに引き渡す場合は、この値を使用します。

文字列

updatedRequest.input

Alexa Conversationsのダイアログ管理モデルで使用する発話セット。

オブジェクト

updatedRequest.input.name

発話セットの名前。

文字列

updatedRequest.input.slots

スロット名ごとの入力スロットのマップ。

オブジェクト

updatedRequest.intent

ダイアログマネージャーをスキルに切り替えるときに使用するインテント。

オブジェクト

updatedRequest.intent.name

ダイアログマネージャーをスキルに切り替えるときに使用するインテントの名前。

文字列

updatedRequest.intent.slots

スロット名ごとの入力スロットのマップ。

オブジェクト

セッションアトリビュートを保存する

同じ応答でsessionAttributesを指定することで、ダイアログの状態などのセッションアトリビュートを保存できます。

次の例は、ダイアログ管理をAlexa Conversationsに引き渡す場合にセッションアトリビュートを渡す方法を示しています。

{
  "version": "1.0",
  "sessionAttributes": {
    "key-1": "value-1",
    "key-2": "value-2",  
    ... 
  },
  "response": {  
     "directives": [
       {
          "type": "Dialog.DelegateRequest",
          "target": "AMAZON.Conversations",
          "period": {
             "until": "EXPLICIT_RETURN"
          }
       }
     ]
  }     
}

次の例は、ダイアログ管理をスキルに引き渡す場合にセッションアトリビュートを渡す方法を示しています。

{
  "version": "1.0",
  "sessionAttributes": {
    "key-1": "value-1",
    "key-2": "value-2",  
    ... 
  },
  "response": {    
     "directives": [
       {
          "type": "Dialog.DelegateRequest",
          "target": "skill",
          "period": {
             "until": "EXPLICIT_RETURN"
          }
       }
     ]
  }  
}

Alexa Conversationsにダイアログ管理を引き渡す場合の例

次の例は、ダイアログマネージャーをAlexa Conversationsに切り替える方法を、スロットを使用する場合、スロットを使用しない場合、現在の発話を使用する場合に分けて示しています。

スロットを使用する例

次の例では、ダイアログ管理をAlexa Conversationsにデリゲートし、スロットをAlexa Conversationsに渡します。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "AMAZON.Conversations",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "Dialog.InputRequest",
            "input": {
               "name": "<utteranceSetName>",
               "slots": {
                  "<slotName1>": {
                     "name": "<slotName1>",
                     "value": "<slotValue1>"
                  },
                  "<slotName2>": {
                     "name": "<slotName2>",
                     "value": "<slotValue2>"
                  }
               }
           }
         }
      }
    ]
  }
}

スロットを使用しない例

次の例では、スロットを渡さずに、ダイアログ管理をAlexa Conversationsにデリゲートします。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "AMAZON.Conversations",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "Dialog.InputRequest",
            "input": {
               "name": "<utteranceSetName>"
            }
         }
      }
    ]
  }
}

現在の発話を入力として送信する例

次の例では、ダイアログ管理をAlexa Conversationsにデリゲートしますが、updatedRequestがないため、現在の発話をAlexa Conversationsへの入力として使用しています。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "AMAZON.Conversations",
         "period": {
            "until": "EXPLICIT_RETURN"
         }
      }
    ]
  }
}

ダイアログ管理をスキルに引き渡す場合の例

次の例は、ダイアログマネージャーをスキルに切り替える方法を、スロットを使用する場合と使用しない場合に分けて示しています。

スロットを使用する例

次の例では、ダイアログ管理をスキルにデリゲートし、スロットをインテントに渡します。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "skill",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "IntentRequest",
            "intent": {
               "name": "<intentName>",
               "slots": {
                  "<slotName1>": {
                     "name": "<slotName1>",
                     "value": "<slotValue1>"
                  },
                  "<slotName2>": {
                     "name": "<slotName2>",
                     "value": "<slotValue2>"
                  }
               }
            }
         }
      }
    ]
  }
}

スロットを使用しない例

次の例では、スロットをインテントに渡さずに、ダイアログ管理をスキルにデリゲートします。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "directives":[
      {
         "type": "Dialog.DelegateRequest",
         "target": "skill",
         "period": {
            "until": "EXPLICIT_RETURN"
         },
         "updatedRequest": {
            "type": "IntentRequest",
            "intent": {
               "name": "<intentName>"
            }
         }
      }
    ]
  }
}