12

我创建了一项技能,以便人们可以跟踪某些状态。但不是每次都要求 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每次都使用。

4

4 回答 4

15

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

于 2016-07-05T01:21:50.383 回答
5

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

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

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

于 2016-09-28T02:43:13.957 回答
2

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

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

所以在重新提示之前总共有 8 秒,在重新提示后又是 8 秒。总共16秒。

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

于 2018-05-01T15:11:38.550 回答
1

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

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

于 2019-05-08T15:52:12.050 回答