为什么我没有收到插槽?

Why am I not receiving the 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! 被输出到控制台。

正如所写,您的请求和您的代码正在执行它们应该执行的操作。以服务模拟器请求为例,你的请求只定义了一个slot,标识为"Heading":

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

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

如果您在名为 "Item" 的话语中没有空位,您可能只想引用标题空位,如下所示:

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

如果您的话语中确实有一个名为 "Item" 的插槽,则模拟器可能会识别出没有 "Item" 的差异话语并使用它来代替。您可以通过检查您的话语和对模拟器的示例请求来解决此问题,以确保它们按照您的预期进行路由。您还可以调试以检查 this.event.request.intent.slots,以验证您是否在 lambda 中接收到插槽。