У меня есть эта функция, которую я использую для возврата значения слота. Если слот является синонимом, он будет преобразовывать синоним в значение канонического слота. Вот код, который у меня есть сейчас:
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slot, useId) => {
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
};
//Example
//let category = slotValue(handlerInput.requestEnvelope.request.intent.slots.category, true);
module.exports = new slotHelper();
Я пытаюсь сократить // пример, где я могу просто напечатать это:
let category = slotHelper.slotValue(category);
И вернуть значение канонического слота.
Я испробовал несколько разных подходов, и все они приводят к: «Ошибка обработана: категория не определена»
Вот различные подходы, которые я пробовал:
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slotName, useId) => {
let slot = handlerInput.requestEnvelope.request.intent.slots[slotName];
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
}
module.exports = new slotHelper();
И
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slotName, useId) => {
let slot = handlerInput.requestEnvelope.request.intent.slots.slotName;
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
}
module.exports = new slotHelper();
Конечно, со вторым слотом NameName затенено, потому что это неправильный подход. Кто-нибудь знает, как я могу пересмотреть это, где я могу использовать:
let category = slotHelper.slotValue(category);
Я пытаюсь обобщить эту функцию, чтобы я мог использовать ее для всех своих слотов в будущем. Это облегчит работу с моим кодом ... вместо того, чтобы всегда вводить:
let category = slotHelper.slotValue(handlerInput.requestEnvelope.request.intent.slots.category);