如何保持alexa技能开放?

Posted

技术标签:

【中文标题】如何保持alexa技能开放?【英文标题】:How to keep an alexa skill open? 【发布时间】:2016-11-06 14:32:57 【问题描述】:

我创建了一项技能,以便人们可以跟踪某些状态。但不是每次都要求 Alexa 打开应用程序并进行交互。

alexa ask grocerylist to add 2 eggs
alexa ask grocerylist to add bread

我希望让购物清单技能保持打开状态,以便用户可以与它进行交互,直到他们要求关闭它

alexa open grocerylist
.... 2 mins later
add 2 eggs
.... 1 min later
add bread

有没有办法做到这一点,而不必每次都使用alexa ask grocerylist

【问题讨论】:

【参考方案1】:

这是不可能的。这是一项安全功能,因此第 3 方无法创建技能来“倾听”某人所说的一切。您可以响应,如果您不设置“endSession”标志,它将保持会话打开。但它只会保持打开状态约 8 秒。如果您设置了重新提示,它将在此时读取重新提示并保持打开状态 8 秒。所以你可以保持线路打开的最大值是 16 秒左右。

【讨论】:

此响应以“不可能”开头,但随后您准确描述了如何做我理解提问者想要的事情。下面的@adamp 给出了相同的答案。 在论坛和其他地方提出这个问题的大多数人都希望保持技能持续开放;监听用户稍后可能会说的任何内容而无需调用。提问者在这里没有明确说明他们的情况,所以我根据大多数搜索此问题的人会寻找的答案回答了这个问题。 我可以触发重复8秒聆听模式超过2次吗? 您只能在 Alexa 上提供一次重新提示,因此您最多只能提供最初的 8 秒(重新提示)和第二个 8 秒。 (Google Home 实际上让您提供不止一个提示,FWIW)【参考方案2】:

这当然是可能的! (但每条@Bill 的评论最多可以限制在 8 秒左右)

在您的回复中,当调用buildSpeechletResponse 时,将shouldEndSession 设置为false 以保持会话打开并继续收听更多话语,而无需使用再次启动该技能“alexa ask MyApp. ..”

各种演示将展示如何做到这一点。例如在此处查看示例代码:https://github.com/amzn/alexa-skills-kit-js/blob/master/samples/savvyConsumer/src/AlexaSkill.js

【讨论】:

这个答案具有误导性。 Amazon Echo 设备将在大约 8 秒后超时。您无法延长超时时间。【参考方案3】:

这是可能的,但仅限于有限的时间。

根据您使用的 sdk,您可以设置标志(应结束会话 = false)。这已经在询问响应中完成。 如果您添加设置了该标志的重新提示,那么您可以保持会话打开,直到重新提示语音。

所以在重新提示之前完全是初始 8 秒,之后又是 8 秒 再次提示。总共 16 秒。

您必须记住 会话结束后会话和会话变量消失(当 Alexa 回显上的蓝灯消失时)。因此,如果您想维护状态或购物清单,我建议您使用 db 之类的存储。如果您使用 lambda 托管端点,那么它有一个可用于存储数据的 dynamo Db。

【讨论】:

【参考方案4】:

唯一正确的答案是不可能。 OP 将他们希望保持会话打开的持续时间明确定义为分钟。这实际上是不可能的。说它可能的,但只在有限的时间内,这是 OP 试图做的时间的一小部分,并没有真正的帮助。

出于已经提到的安全原因,这是不可能的。

【讨论】:

以上是关于如何保持alexa技能开放?的主要内容,如果未能解决你的问题,请参考以下文章

如何结束自定义 Alexa 技能的会话?

如何使用自定义 Alexa 技能拨打电话

如何在亚马逊 Alexa 控制台上删除亚马逊技能?

如何更改 Alexa Show 技能卡上的背景图像?

如何让这个alexa技能识别两个意图

如何使用亚马逊的 Alexa API 为技能设置帐户链接?