Alexa向AWS Lambda发送了多个请求

时间:2018-10-26 10:05:28

标签: amazon-web-services amazon-s3 aws-lambda alexa alexa-skills-kit

我正在构建将请求发送到我的Web服务器的Alexa技能, 然后Web服务器将执行一些处理并将文件上传到Amazon S3。 在网络服务器过程中,我会不断保持技巧,每10秒从Amazon S3获取文件直到获取文件。响应是基于文件内容的。

但是不幸的是,Web服务器过程耗时超过1分钟。这意味着技能必须停留1分钟以上才能使文件响应。

目前,我在代码中使用了渐进式响应和async await, 和技巧确实一直在等待S3上的文件。 但是我发现该技能会在50秒后自动将第二个请求发送给Lambda。这意味着对于同一技能,我同时运行了两个lambda函数。

执行结果为:渐进响应做出的第一个响应后,50秒后将听到属于第二个请求的渐进响应也做出的另一个响应。 直到最后都没有发生任何事情。

我知道让技能等待这么长时间是不好的,但是如果技能需要等待这么长时间,我仍然想找出可执行的方式。

我想指出一些要点。

  1. 无论如何,是否存在阻止发送第二个技能的问题 请求给Lambda?
  2. 还有另一种方法可以尝试实现目标吗?

谢谢

1 个答案:

答案 0 :(得分:0)

最终,我发现Lambda的第二次调用不是来自Alexa,而是来自AWS Lambda本身。请参阅以下文章

https://cloudonaut.io/your-lambda-function-might-execute-twice-deal-with-it/

因此,您必须在Lambda代码中处理这种情况。可以使用的是,两次调用的请求ID相同。因此,您可以通过检查存储中是否有与第一次执行时相同的请求ID来判断这是否是第一次执行。

此外,我还发现,一旦Alexa Skill等待超过1分钟,它将崩溃并通过语音返回错误(由Amazon Echo测试)。与常规执行日志相比,AWS Lambda日志没有什么不同。这意味着Log看起来不错,但实际上执行结果却不行。

希望这可以帮助在这个问题上也遇到困难的人。