Мой ответ
Вы не определяете переменную updatedIntent во время ответов, когда состояние диалога находится в любом состоянии, отличном от начального.Чтобы это исправить, попробуйте переместить объявление updatedIntent непосредственно перед оператором if / else.
'DialogIntent': function(){
var updatedIntent = this.event.request.intent;
if (this.event.request.dialogState === "STARTED") {
this.emit(":delegate", updatedIntent);
} else if (this.event.request.dialogState !== "COMPLETED") {
this.emit(":delegate", updatedIntent);
} else {
return this.event.request.intent.slots;
}
return null;
}
Причина, по которой это необходимо, заключается в том, что каждый запрос устанавливает диалог в одно из трех состояний 1) STARTED, чтоотправляется только по первому запросу диалога, 2) IN_PROGRESS, который устанавливается в каждом последующем запросе, пока диалоговое окно не будет завершено, и ЗАПОЛНИТЬ, для которого он установлен, после того как все необходимые слоты заполнены и любое необходимое подтверждение выполнено.
В вашем примере вы устанавливаете updatedIntent только для запросов с состоянием диалога, установленным на STARTED, то есть только для первого запроса диалога.Каждый последующий запрос пропускает начальный шаг в операторе if, тем самым никогда не определяя обновленную переменную намерения, которую вы пытаетесь передать обратно в Alexa в операторе «else if».
Refactor # 1
Если вам не нужно выполнять какие-либо дополнительные настройки, когда состояние диалога только что «НАЧИНАЕТСЯ», вы можете исключить этот раздел из оператора if else все вместе, так как выделать то же самое в обоих === "НАЧАЛО и! ==" ЗАВЕРШЕНО ":
'DialogIntent': function(){
var updatedIntent = this.event.request.intent;
if (this.event.request.dialogState !== "COMPLETED") {
this.emit(":delegate", updatedIntent);
} else {
return this.event.request.intent.slots;
}
return null;
}
Refactor # 2
Вы, вероятно, неМне не нужно использовать updatedIntent. Несмотря на то, что я не совсем уверен, как работает комплект Alexa Skills Kit в Node.js (я полагаю, это то, что вы используете), вам не нужно передавать updatedIntent обратно в Alexa.Обновленная переменная намерения необходима только в том случае, если по какой-то причине вам необходимо обновить намерение вручную в коде. Если нет, Alexa может обработать весь диалог без него:
'DialogIntent': function(){
if (this.event.request.dialogState !== "COMPLETED") {
this.emit(":delegate");
} else {
return this.event.request.intent.slots;
}
return null;
}