我从ASK开发开始。我对一些行为有点困惑,我想知道如何从“服务模拟器”控制台调试错误。如何获取有关The remote endpoint could not be called, or the response it returned was invalid.错误的更多信息?
我的情况是:
我有一个技能和三个Lambda函数(ARN:a,ARN:B,ARN:C)。如果我将skill的端点设置为ARN:A并尝试从skill的服务模拟器测试它,则会得到错误响应:The remote endpoint could not be called, or the response it returned was invalid.
我复制lambda请求,然后前往lambda控制台进行ARN:A,设置测试偶数,粘贴来自服务模拟器的请求,然后测试它,得到一个非常好的ASK响应。然后我前往lambda控制台获取ARN:B,并生成一个伪处理程序,该处理程序返回的响应与ARN:a从控制台给我的响应完全相同(字面上是复制和粘贴)。我将skill的端点设置为ARN:B,使用服务模拟器测试它,得到预期的响应(因此,响应格式良好),尽管是静态的。我再次前往lambda控制台,将ARN:A中的代码复制并粘贴到新的ARN:C中。将技能的端点设置为ARN:C,它工作得非常好。ARN:C的问题是它没有将数据持久化到DynamoDB中的适当权限(我仍在熟悉该系统,不确定是否可以在不同lambda之间共享IAM角色,我相信不是)。
我怎么知道阿恩怎么了?记录在什么地方了吗?我在cloudwatch/logs中找不到与这个特定lambda或技能相关的任何条目。
不确定是否相关,我在lambda运行时使用python,代码(目前)在web编辑器中是内联的,我使用boto3来持久化DynamoDB。

最佳答案

tl;dr:The remote endpoint could not be called, or the response it returned was invalid.还意味着可能有等待端点的超时。
我能把它缩小到一个暂停。
似乎Alexa服务模拟器(以及Alexa本身)比lambda测试控制台对长响应的容忍度要低。在开发过程中,我将ARN:1的超时时间增加到了30秒(而我认为默认值是3秒)。ARN:1使用的DynamoDB表拥有更多的数据,处理时间比ARN:3稍长,ARN:3的表几乎为空。当我注释掉一些数据加载的东西时,它运行得稍微快了一点,Alexa服务模拟器又开始工作了。我在任何地方都找不到时间预算,我猜是3秒?我很可能需要移动到另一个后端,lambda上的DynamoDB+Python对于非常小的请求来说太慢了。

关于python - 对Amazon的Alexa技能套件(ASK)Lambda交互进行故障排除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38887061/

10-09 02:35