目前 ASK SDK 中没有帮助程序来访问规范值,但您可以创建一个简单的函数来获取它。您首先要使用 getSlot 帮助器,它返回一个 Slot 对象,其中包含定义为 here 的已解析实体。
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"
}
}