输出来自单个意图的多个响应

我有一个Alexa的技能,我想有一个意图的初步反应,然后在一个延迟,陈述另一个回应。

我试图使用多个response.tell(...)调用与他们之间的setTimeout() ,但这只会响应第一个.tell()并结束。 ( .tell()被设置为结束会话,但即使我将其设置为false ,我的代码仍然不会达到setTimeout()

我已经包含了一些关于我想要做什么的伪代码:

 intentHandlers.DynamicDurationIntent = function(intent, session, response) { var calculatedDuration = doCalculation(); var speechDuration = convertToSpeech(calculatedDuration); var speechOutput = "Your duration will last <say-as interpret-as="time">' + speechDuration + '</say-as>"; response.tell(speechOutput); //I get this far setTimeout(function () { var speechOutputEnd = "Great job! You're done."; response.tell(speechOutputEnd); }, calculatedDuration); } 

这个模型的一个例子是在7分钟锻炼Alexa技巧中使用的。

使用AWS Lambda可行吗?

谢谢!

这不是一个AWS Lambda相关的问题,这是一个Alexa相关的问题。

部分的混乱似乎是node.js的asynchronous性质,使得看起来你可以发送多个响应到Alexa,你不能。 思考Alexa的方式与正常的API调用将具有相同的请求/响应types性质。 您的第二个回复无法发送其数据,因为原始请求早已结束。

考虑的方法是Alexa正在和用户保持一个对话,而不是让用户在没有他们进行交互的情况下中断用户。 你的第一个回应将会话放回到用户的手中,直到他们再次和你谈话之前,你什么都不能说。


所有这一切,有一个简单的解决scheme,可能会在今天的Alexa平台上可用。

您可以使用SSML提供单个响应,并在语音输出中放置中断。 一个SSML中断的文档显示你看起来像<break time="420s"/>并且你已经在你的响应中使用了SSML。

但是,对于可用性,我不会build议在7分钟内暂停。 你有其他select,例如在每分钟之间插入分钟暂停和鼓励演讲(实际上你可能要暂停50秒)。 另一种方法是使用audio SSML标签播放一段时间的音乐或锻炼相关的声音。