Многооборотный диалог: невозможно повернуть к завершенному состоянию - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь развить навык, который требует многооборотного диалога.Пока что навык 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();
},
};

Буду признателен за любую помощь.Спасибо.

...