我正在使用他们的SpaceGeek模板为Alexa开发一项事实技能。模板本身非常简单,但是我正在尝试通过确保使用的事实在同一会话中不会再次出现来改进它。因此,我在使用元素后将其删除。但是,现在出现一个问题,即在会话中删除的那些元素甚至不会在以后的会话中出现。因此,我假设全局变量停留在后端,因此创建了一个如下所示的复制数组。但这仍然行不通。因此,在使用完所有事实之后,我将始终得到“这就是我们现在拥有的所有事实”。即使我开始一个新的会话。任何帮助将不胜感激。
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);
}
}
解决此问题的正确方法是将数组存储为会话变量,而不是全局对象。History Buff示例技能是一个详细说明如何执行此操作的示例,但通常来说,过程如下:
处理用户的第一个请求时,请创建一个对象,该对象包含要在整个会话中维护的所有变量,并将其分配给session.attributes
。您想将数组存储为该对象的属性。
然后,在将来的事件处理程序中,您将能够访问那些存储的特定于会话的变量(即数组)作为该session.attributes
对象的属性。
在链接的示例中,在随后的意图处理程序中,它们包括摘要sessionAttributes = session.attributes
以提供访问这些变量的更方便的句柄。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句