【问题标题】:Cannot get ID from the intentrequest无法从意图请求中获取 ID
【发布时间】:2022-02-22 01:36:57
【问题描述】:

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

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

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

我试过了:

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

还有很多其他的东西。

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

亚马逊创建的我的要求是

{
  "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"
}

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

【问题讨论】:

    标签: node.js alexa alexa-skills-kit alexa-skill alexa-slot


    【解决方案1】:

    发送到您的 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 中执行循环的信息,例如 link

    【讨论】:

    • 非常感谢您的帮助,我一定会查看该链接。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多