0

提前谢谢你的帮助!我对此意图有一个意图和一个自定义槽值,槽值称为“事件”,它是我的“LIST_OF_EVENTS”列表中的一个值。

在这个列表中,我有很多槽选项,但更重要的是,每个槽值都有很多同义词。为了一视同仁,我想使用分配给每个插槽的 ID。我将它们设置为 0-11。现在获取此 ID 很重要,因为基于此 ID 定义了我将返回给用户的 JSON 文件的哪个部分。

这里的问题是我无法弄清楚如何在我的代码中获取此 ID,我已经做了很多研究并查看了很多文档,但我仍然无法设法获取 ID。

我努力了:

var id = alexa.event.request.intent.slots.event.resolutions.resolutionsPerAuthority[].values[].value.id;

以及许多其他事情。

当我查看通过亚马逊提供的测试平台发送的意图请求时,我似乎无法在我的意图请求中找到此解决方案对象。没有这样的。但是,在他们的文档中,在多个页面上,它显示并引用了这个对象。这是文档的链接

亚马逊创建的我的要求是

{
  "session": {
    "new": false,
    "sessionId": "SessionId.4bce2f23-d11e-4022-b6d1-b91aec14b9d6",
    "application": {
      "applicationId": "amzn1.ask.skill.e0cc33bb-4ad7-4bbb-91e8-a0eab852a49c"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.AF53KNANELPR77LPYI7GAED6MM2EIVTFZZRJQ3FGLKW7HMRWLEEET6T7MEY5FLD67JO4OZNTTRFB2XDH6J2X2GGHZKOM4UDW6WKP6GLCYW3OI7WCHW2HTEYNQQWUF6TARFBX64WUIAAUL6RFCZ663P4RKGJ43PEXQ43G4BSA3KWSKKRUPCXJWFLWUSDAHD6LMAQKXCPREDMKHQI"
}
  },
  "request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.0171880d-8006-47d9-b17b-52e1f431f5f4",
"intent": {
  "name": "WhenIsBLANK",
  "slots": {
    "event": {
      "name": "event",
      "value": "dream to fly"
    }
  }
},
"locale": "en-US",
"timestamp": "2017-10-14T20:24:43Z"
  },
  "context": {
"AudioPlayer": {
  "playerActivity": "IDLE"
},
"System": {
  "application": {
    "applicationId": "amzn1.ask.skill.e0cc33bb-4ad7-4bbb-91e8-a0eab852a49c"
  },
  "user": {
    "userId": "amzn1.ask.account.AF53KNANELPR77LPYI7GAED6MM2EIVTFZZRJQ3FGLKW7HMRWLEEET6T7MEY5FLD67JO4OZNTTRFB2XDH6J2X2GGHZKOM4UDW6WKP6GLCYW3OI7WCHW2HTEYNQQWUF6TARFBX64WUIAAUL6RFCZ663P4RKGJ43PEXQ43G4BSA3KWSKKRUPCXJWFLWUSDAHD6LMAQKXCPREDMKHQI"
  },
  "device": {
    "supportedInterfaces": {}
  }
}
  },
  "version": "1.0"
}

如果有人对如何解决此问题有任何想法,请告诉我,谢谢!

4

1 回答 1

0

发送到您的 lambda 的插槽数据将是一个字符串,例如“dream to fly”,如您发布的请求中所示。

将由您的 lambda 代码将此字符串与您的 LIST_OF_EVENTS 值进行比较以确定发送了哪一个。这通常通过迭代包含预期值的字符串数组来完成,但也可以使用带有每个可能值的 case 的 switch 语句来完成。记住要处理不匹配的值,因为有时你在槽值中得到的不是你期望的。

然后,您可以使用该索引来选择您的响应。

例如:

var slot = request.intent.slot.event.value;
var index;
for(index=0; index<NUM_SLOT_VALUES; index++) {
    if(knownValues[i] == slot) {
        break;
    }
}
// index is now the index of the matching value, or NUM_SLOT_VALUES if not found

你可以在网上找到很多关于在 javascript 中执行循环的信息,例如这个链接

于 2017-10-16T12:43:03.937 回答