Я пытаюсь развить навык, который требует многооборотного диалога.Пока что навык Alexa способен точно подсказать и захватить слоты.Только определенные слоты должны быть подтверждены.После захвата значения для последнего слота (времени) он запускает обработчик ошибок, а не переключается в состояние ЗАВЕРШЕНИЕ.
Прилагается вывод JSON при появлении ошибки
{
"body": {
"version": "1.0",
"response": {
"directives": [
{
"type": "Dialog.Delegate",
"updatedIntent": {
"name": "AddNewMedIntent",
"confirmationStatus": "NONE",
"slots": {
"dosage": {
"name": "dosage",
"value": "2",
"confirmationStatus": "NONE"
},
"medication": {
"name": "medication",
"value": "Xanax",
"confirmationStatus": "CONFIRMED"
},
"time": {
"name": "time",
"value": "07:00",
"confirmationStatus": "NONE"
}
}
}
}
]
},
"sessionAttributes": {},
"userAgent": "ask-node/2.1.0 Node/v8.10.0"
}
}
Вот лямбда-код для CompletedAddNewMedIntent, который предположительно запускается в конце многооборотного диалога.
const CompletedAddNewMedIntent = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest'
&& request.intent.name === 'AddNewMedIntent'
&& request.dialogState === 'COMPLETED';
},
async handle(handlerInput) {
const filledSlots = handlerInput.requestEnvelope.request.intent.slots;
const slotValues = getSlotValues(filledSlots);
let outputSpeech = 'Great. Your new medicine has been added succesfully.';
try {
} catch (error) {
outputSpeech = 'I am really sorry. I am still learning. Please try again later';
console.log(`Intent: ${handlerInput.requestEnvelope.request.intent.name}: message: ${error.message}`);
}
return handlerInput.responseBuilder
.speak(outputSpeech)
.getResponse();
},
};
Буду признателен за любую помощь.Спасибо.