Alexa Conversationsとの間でのダイアログ管理の引き渡し
• (GA)
en-US
• (Beta)
en-AU
, en-CA
, en-IN
, en-GB
, de-DE
, ja-JP
, es-ES
, es-US
インテントベースのダイアログ管理を使用するスキルの場合、ダイアログ管理の一部または全部をAlexa Conversationsで処理することができます。
ダイアログ管理を引き渡すには、Alexaからのリクエストに対する応答として、Dialog.DelegateRequest
ディレクティブを送信します。このディレクティブの詳細は、インテントベースのダイアログ管理からAlexa Conversationsに切り替えるか、その逆の切り替えを行うかによって異なります。
どちらの場合も、ダイアログの状態などのセッションアトリビュートを同じ応答に保存できます。
- Alexa Conversationsにダイアログ管理を引き渡す
- Alexa Conversationsからスキルにダイアログ管理を引き渡す
- Dialog.DelegateRequestのパラメーター
- セッションアトリビュートを保存する
- Alexa Conversationsにダイアログ管理を引き渡す場合の例
- ダイアログ管理をスキルに引き渡す場合の例
- 関連トピック
Alexa Conversationsにダイアログ管理を引き渡す
ダイアログ管理をスキルからAlexa Conversationsに引き渡すには、インテントハンドラーでDialog.DelegateRequest
をAlexaに送信します。インテントをAlexa Conversationsでどの発話セットにマッピングするかを特定し、そのスロットをAlexa Conversationsに渡します。
Dialog.DelegateRequest
で使用する発話セットは、Invoke APIsダイアログアクトを使用する必要があります。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
のパラメーターは次のとおりです。
フィールド | 説明 | 型 | 必須 |
---|---|---|---|
|
このディレクティブの名前。 |
文字列 |
◯ |
|
切り替え先のダイアログマネージャー。有効な値は次のとおりです。
|
文字列 |
◯ |
|
デリゲートの期間。 |
オブジェクト |
◯ |
|
デリゲート期間の終了。有効な値は次のとおりです。
|
列挙型文字列 |
◯ |
|
デリゲートのリクエスト。nullに設定して現在のリクエストをデリゲートします。 |
オブジェクト |
✕ |
|
デリゲートのリクエストタイプ。有効な値は次のとおりです。
|
文字列 |
◯ |
|
Alexa Conversationsのダイアログ管理モデルで使用する発話セット。 |
オブジェクト |
◯ |
|
発話セットの名前。 |
文字列 |
◯ |
|
スロット名ごとの入力スロットのマップ。 |
オブジェクト |
✕ |
|
ダイアログマネージャーをスキルに切り替えるときに使用するインテント。 |
オブジェクト |
◯ |
|
ダイアログマネージャーをスキルに切り替えるときに使用するインテントの名前。 |
文字列 |
◯ |
|
スロット名ごとの入力スロットのマップ。 |
オブジェクト |
✕ |
セッションアトリビュートを保存する
同じ応答で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>"
}
}
}
]
}
}
関連トピック
最終更新日: 2022 年 01 月 14 日