javascript - 如何在 Alexa Skills 中使用特定于 session 的变量?

标签 javascript arrays amazon-web-services alexa-skills-kit alexa-voice-service

我正在使用他们的 SpaceGeek 模板为 Alexa 开发事实技能。 模板本身非常简单,但我正在尝试通过以下方式改进它 确保所使用的事实不会在同一 session 中再次出现。所以我 使用后删除元素。但是,现在出现一个问题,那些在 session 中删除的元素甚至不会在以后的 session 中出现。 所以我假设全局变量保留在后端,因此创建了一个复制数组,如下所示。但它仍然行不通。因此,在使用所有事实一次之后,我总是会得到“这就是我们目前拥有的所有事实”。即使我开始新的 session 。任何帮助将不胜感激。

    function handleNewFactRequest(response) {
       var COPY_FACTS= SOME_FACTS.splice(0);
       if(COPY_FACTS.length>0){
           var factIndex = Math.floor(Math.random() * COPY_FACTS.length);
           var fact = COPY_FACTS[factIndex];

           // Create speech output
           var speechOutput = "Here's your random fact: " + fact + " would you like more?";
           var repromptOutput = "would you like more random facts?";
           COPY_FACTS.splice(factIndex, 1);
           response.ask(speechOutput, repromptOutput);
      }else{
           var speechOutput = "That's all the facts we have for now.";
           response.tell(speechOutput);
      }
    }

最佳答案

处理此问题的正确方法是将数组存储为 session 变量,而不是全局对象。一个详细说明如何执行此操作的示例是 History Buff example skill ,但一般来说,流程如下:

当处理用户的第一个请求时,创建一个对象,其中包含您希望在整个 session 期间维护的任何变量,并将其分配给 session.attributes。您希望将数组存储为该对象的属性。

然后,在未来的事件处理程序中,您将能够访问那些存储的特定于 session 的变量(即您的数组)作为该 session.attributes 对象的属性。

在链接的示例中,在后续的意图处理程序中,它们包括片段 sessionAttributes = session.attributes 以提供更方便的句柄来访问这些变量。

关于javascript - 如何在 Alexa Skills 中使用特定于 session 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36652187/

相关文章:

javascript - 粘贴修复 contenteditable

amazon-web-services - Amazon AWS EC2 - 如何限制仅从 Elastic Load Balancer 接收流量?

swift - 实现唯一 ID Dyn​​amoDB Swift 的最佳方式

amazon-web-services - 如何在 aws-cli 中对 `list-tasks` 的结果进行排序?

javascript - 如何一次定位多个数据属性

Javascript函数点击一个按钮并获取不同的值

javascript - 使用 angularjs 将单选按钮绑定(bind)到 ng-model

javascript - 查找字符串中 src 的值

java - 面向对象 : Java Arrays

C - 通用函数 : swap two items in array