为什么我没有收到插槽?

时间:2017-12-27 05:13:36

标签: aws-lambda alexa alexa-skills-kit alexa-skill alexa-slot

我的要求如下:

"request": {
 "type": "IntentRequest",
 "requestId": "EdwRequestId.0941c2f8-30b3-4001-aa05-1cec3a715b05",
 "intent": {
   "name": "Buses",
   "slots": {
     "Heading": {
       "name": "Heading",
       "value": "eastbound"
     }
   }
 },
 "locale": "en-US",
 "timestamp": "2017-12-27T02:45:22Z"
}

在我提供激活话语后,服务模拟器生成了上述内容。

我的AWS Lambda函数具有以下内容:

'Buses': function() {
    const itemSlot = this.event.request.intent.slots.Item;
    let heading;
    if (itemSlot && itemSlot.value) {
        console.log(itemSlot.value);
        heading = itemSlot.value.toLowerCase();
    }
    else
        console.log("No slots!");

No slots!输出到控制台。

1 个答案:

答案 0 :(得分:2)

正如所写,您的请求和您的代码正在做他们应该做的事情。以服务模拟器请求为例,您的请求仅定义了一个标识为"Heading"的插槽:

   "slots": {
     "Heading": {
       "name": "Heading",
       "value": "eastbound"
     }

由于没有标识为"Item"的插槽,因此未定义itemSlot变量并评估else条件。

如果您的话语中没有名为“项目”的插槽,您可能只想参考标题插槽,如下所示:

this.event.request.intent.slots.Heading;

如果您的话语中有一个名为“Item”的插槽,则模拟器可能会在没有“Item”的情况下识别出差别话语,而是使用它。您可以通过检查您的话语和模拟器的示例请求来解决此问题,以确保它们按预期路由。您也可以调试以检查this.event.request.intent.slots,以验证您的lambda中是否正在接收插槽。