我正在尝试使用自定义插槽来编写Alexa技能,但是Alexa忽略了我的同义词。显然,Alexa.getSlotValue(requestEnvelope, 'intentSlotName');
将检索实际口语单词,而不是规范值。我正在与规范值进行比较以确定程序的行为,因此,我更希望我的插槽在碰到同义词时返回规范值,而不是同义词本身。
我该如何做?我在Alexa文档中找不到答案时遇到了一些麻烦,我确实看到的答案对于看起来似乎应该是默认行为的行为似乎确实很复杂(当我尝试这些行为时它们并没有起作用)
有没有类似的东西
Alexa.getCanonicalSlotValue(requestEnvelope, 'intentSlotName');
当前,ASK SDK中没有帮助者可以访问规范值,但是您可以创建一个简单的函数来获取它。您将要开始使用getSlot
帮助程序,该帮助程序将返回一个具有定义为here的已分解实体的Slot对象。
const getCanonicalSlot = (slot) => {
if (slot.resolutions && slot.resolutions.resolutionsPerAuthority.length) {
for (let resolution of slot.resolutions.resolutionsPerAuthority) {
if (resolution.status && resolution.status.code === 'ER_SUCCESS_MATCH') {
return resolution.values[0].value.name;
}
}
}
}
然后在您的处理程序中调用它:
let mySlot = Alexa.getSlot(requestEnvelope, 'mySlot');
let mySlotCanonical = getCanonicalSlot(mySlot);
我建议在Alexa开发人员控制台上的“测试”选项卡中进行实验(或简单地完整记录请求),以更好地理解上述代码的工作原理。例如,基本广告位实现的JSON将这样返回:
"slots": {
"mySlot": {
"name": "mySlot",
"value": "bar",
"resolutions": {
"resolutionsPerAuthority": [{
"authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.****.mySlotType",
"status": {
"code": "ER_SUCCESS_MATCH"
},
"values": [{
"value": {
"name": "foo",
"id": "acbd18db4cc2f85cedef654fccc4a4d8"
}
}]
}]
},
"confirmationStatus": "NONE",
"source": "USER"
}
}