Java dialogState==完成后如何重新获得控制,Alexa delegateDialog
我有一个正常工作的对话框,我将此对话框委托给Alexa,用于intent BeginDiagnosis,提示用户填写年龄和性别的槽值,这是BeginDiagnosis的槽。但是,当最后一个插槽值已填充且dialogState==“COMPLETED”时,而不是由处理程序捕获intent BeginDiagnosisInt,然后在填充给定插槽值的情况下执行我打算执行的行为。ErrorHandler捕获响应并抛出错误 如何控制对话框,以便在dialogState完成时,我能够执行希望在给定插槽已填满的情况下执行的功能Java dialogState==完成后如何重新获得控制,Alexa delegateDialog,java,json,alexa,alexa-skills-kit,alexa-intent,Java,Json,Alexa,Alexa Skills Kit,Alexa Intent,我有一个正常工作的对话框,我将此对话框委托给Alexa,用于intent BeginDiagnosis,提示用户填写年龄和性别的槽值,这是BeginDiagnosis的槽。但是,当最后一个插槽值已填充且dialogState==“COMPLETED”时,而不是由处理程序捕获intent BeginDiagnosisInt,然后在填充给定插槽值的情况下执行我打算执行的行为。ErrorHandler捕获响应并抛出错误 如何控制对话框,以便在dialogState完成时,我能够执行希望在给定插槽已填满
{
"interactionModel": {
"languageModel": {
"invocationName": "diagnose",
"intents": [
{
"name": "BeginDiagnosisIntent",
"slots": [
{
"name": "age",
"type": "AMAZON.NUMBER"
},
{
"name": "gender",
"type": "GENDER"
}
],
"samples": [
"{age}",
"I am {age}",
"I'm {age}",
"I am {age} years",
"I'm {age} years",
"I am {age} years old",
"I'm {age} years old",
"I was born {age} years ago",
"I am the old age of {age}",
"I am the ripe old age of {age}",
"I am {gender}"
]
},
{
"name": "AMAZON.RepeatIntent"
},
{
"name": "AMAZON.HelpIntent"
},
{
"name": "AMAZON.StopIntent"
},
{
"name": "AMAZON.CancelIntent"
}
],
"types": [
{
"name": "GENDER",
"values": [
{
"name": {
"value": "female",
"synonyms": [
"girl",
"woman"
]
}
},
{
"name": {
"value": "male",
"synonyms": [
"boy",
"man"
]
}
}
]
}
]
},
"dialog": {
"delegationStrategy": "ALWAYS",
"intents": [
{
"name": "BeginDiagnosisIntent",
"prompts": {},
"slots": [
{
"name": "age",
"type": "AMAZON.NUMBER",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.1323207333291.854898796228"
}
},
{
"name": "gender",
"type": "GENDER",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.1323207333291.563366041005"
}
}
]
}
]
},
"prompts": [
{
"id": "Elicit.Slot.1323207333291.854898796228",
"variations": [
{
"type": "PlainText",
"value": "How old are you?"
}
]
},
{
"id": "Elicit.Slot.1323207333291.563366041005",
"variations": [
{
"type": "PlainText",
"value": "Are you male of female?"
}
]
}
]
}
}
在launchHandler中,我将对话框委托给BeginDiagnosinent。然后,我希望Alexa处理这个对话框,当插槽被填满时,我可以继续从BeginDiagnosisInthentHandler开始。
但是,当对话框状态完成时。我的错误处理程序捕获响应。为什么会发生这种情况?对话框完成后,如何恢复上下文
public class LaunchHandler implements LaunchRequestHandler {
@Override
public boolean canHandle(HandlerInput handlerInput, LaunchRequest launchRequest) {
return true;
}
@Override
public Optional<Response> handle(HandlerInput handlerInput, LaunchRequest launchRequest) {
Intent chainedIntent = Intent.builder().withName("BeginDiagnosisIntent").build();
return handlerInput.getResponseBuilder()
.addDelegateDirective(chainedIntent)
.build();
}
}
public class BeginDiagnosisIntentHandler implements IntentRequestHandler {
@Override
public boolean canHandle(HandlerInput input, IntentRequest intentRequest) {
return intentRequest.getIntent().getName().equals("BeginDiagnosisIntent");
}
@Override
public Optional<Response> handle(HandlerInput handlerInput, IntentRequest intentRequest) {
Intent currentIntent = intentRequest.getIntent();
if (intentRequest.getDialogState().equals("COMPLETED")) {
return handlerInput.getResponseBuilder()
.withSpeech("I have all the information I need.")
.build();
} else {
return handlerInput.getResponseBuilder()
.addDelegateDirective(currentIntent)
.build();
}
}
}
公共类LaunchHandler实现LaunchRequestHandler{
@凌驾
公共布尔canHandle(HandlerInput HandlerInput,LaunchRequest LaunchRequest){
返回true;
}
@凌驾
公共可选句柄(HandlerInput HandlerInput、LaunchRequest LaunchRequest){
Intent chainedIntent=Intent.builder().withName(“BeginDiagnosinent”).build();
return handlerInput.getResponseBuilder()
.addDelegateDirective(chainedIntent)
.build();
}
}
公共类BeginDiagnosintHandler实现IntentRequestHandler{
@凌驾
公共布尔canHandle(HandlerInput输入,IntentRequest IntentRequest){
返回intentRequest.getIntent().getName().equals(“BeginDiagnosinent”);
}
@凌驾
公共可选句柄(HandlerInput HandlerInput、IntentRequest IntentRequest){
Intent currentIntent=intentRequest.getIntent();
if(intentRequest.getDialogState().equals(“COMPLETED”)){
return handlerInput.getResponseBuilder()
.withSpeech(“我有我需要的所有信息。”)
.build();
}否则{
return handlerInput.getResponseBuilder()
.addDelegateDirective(currentIntent)
.build();
}
}
}