防止 Amazon Echo 在程序流中间启动

Prevent Amazon Echo from starting in the middle of program flow

我做了一个测验技巧,首先提示用户 Alexa 的回复,询问他们是否准备好继续。从那里,用户必须说是或否以分别激活相应的 AMAZON.YesIntentAMAZON.NoIntent。然后测验开始,用户说出答案字母,然后是每个问题的答案。我用服务器模拟我技能范围内的状态。

通常我会说:

"Alexa, start Quiz Skill"

但是,我发现使用服务器模拟状态并不能为 Echo 提供非常强大的语音界面。如果用户说:

"Alexa, ask Quiz Skill yes"

当亚马逊检测到 AMAZON.YesIntent 时,该技能将跳转到我设置的任何触发点。这不是我想要的!我希望用户遵循我列出的技能流程。

有没有办法控制在什么时间可以激活哪些意图?我的一个想法是使用属性来基本上设置接下来允许调用的意图。

每个 Alexa 请求都有一个 session object。该会话对象有一个 new 属性 是真还是假取决于它是否是您技能的全新会话。

如果您碰巧使用 alexa-sdk 节点模块来构建您的技能,您还可以使用 NewSession 处理程序来捕获新会话并将流量转移到您想要的 event/intent互动开始于。有关状态处理程序的更多信息,请参见 github 页面 here

虽然我认为 enable/disable 意图是不可能的,但您一定可以改变他们的反应方式。使用会话对象很容易跟踪最后说出的意图是什么。然后您的意图处理程序可以读取会话对象以查看先前的响应是什么,以便选择如何响应。

在上面的示例中,您可以将最后一个问题编号保存到会话对象中。如果 'yes' 根据前面的(或缺少)问题没有意义,那么你的 YesIntent 处理程序可以用 "I'm sorry, I don't know what to do with that" 响应,或者甚至可能只是忽略它并从头开始对话。