Я использую делегат-функцию alexa-sdk для получения важных значений слотов.
Я использую node.js, и мой Намерение выглядит примерно так:
'SomeIntent': function() {
var slotValues = delegateSlotCollection.call(this);
}
DelegateSlotCollection проверяет, запущен и завершен ли диалог:
function delegateSlotCollection() {
if(this.event.request.dialogState === "STARTED") {
var updatedIntent=this.event.request.intent;
// optionally pre-fill slots
return this.emit(":delegate", updatedIntent);
} else if (this.event.request.dialogState !== "COMPLETED") {
return this.emit(":delegate", updatedIntent);
} else {
return this.event.request.intent.slots;
}
}
Делегирование и диалог работают хорошо, если я использую именно этот код.Пользователю задают важные слоты и так далее.Но если я добавлю некоторый код в функцию-намерение, например, для доступа к значениям слота, Alexa выдаст ошибку:
'SomeIntent': function() {
var slotValues = delegateSlotCollection.call(this);
this.response.speak(slotValues.foo.value);
this.emit(':responseReady');
}
Это выдаст ошибку.Я проверил длину ключей объекта в slotValues через Object.keys (slotValues) .length.И у каждого слота есть ключ в slotValues.Но если я хочу проверить длину ключей foo в slotValues, например (Object.keys (slotValues.foo) .length; [Должно быть хотя бы 'name' и 'value']), я получу ошибку снова.
Кто-нибудь знает, в чем проблема?