我从ASK开发开始。我对某些行为感到有点困惑,我想知道如何从“服务模拟器”控制台调试错误。如何获得有关The remote endpoint could not be called, or the response it returned was invalid.
错误的更多信息?
这是我的情况:
我有技能和三个Lambda函数(ARN:A,ARN:B,ARN:C)。如果我将技能的端点设置为ARN:A并尝试从技能的服务模拟器进行测试,则会收到错误响应:The remote endpoint could not be called, or the response it returned was invalid.
我复制lambda请求,我前往ARN的lambda控制台:A,我甚至设置测试,粘贴服务模拟器的请求,我测试它,我得到一个完美的ASK响应。然后我前往ARN的lambda控制台:B和我做一个虚拟处理程序,返回与ARN:A从控制台给我的完全相同的响应(字面意思是复制和粘贴)。我将我的技能端点设置为ARN:B,使用服务模拟器测试它并获得预期的响应(因此,响应格式正确),尽管是静态的。我再次前往lambda控制台并将来自ARN:A的代码复制并粘贴到新的ARN:C中。将技能的终点设置为ARN:C,它的工作原理非常好。 ARN的问题:C是它没有适当的权限将数据保存到DynamoDB中(我仍然熟悉系统,不确定我是否可以在不同的lambda之间共享IAM角色,我相信不是)。
我怎样才能弄清楚ARN发生了什么:A?这是在某处记录的吗?我找不到与此特定lambda相关的云观察/日志中的任何条目或该技能。
不确定是否相关,我在我的lambda运行时使用python,代码是(现在)内联在Web编辑器上,我使用boto3来持久化到DynamoDB。
答案 0 :(得分:3)
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具有几乎为空的表。一旦我评论了一些数据加载的东西,它运行得稍快,Alexa服务模拟器再次工作。我无法在任何地方找到时间预算,我猜3秒钟?我很可能需要转移到另一个后端,lambda上的DynamoDB + Python对于非常简单的请求来说太慢了。
答案 1 :(得分:2)
与python无关,但如果我没有指定intent的处理程序,我发现同样的问题:
# lets pretend intentName is actually 'FooBarIntent'
if (intentName == 'TestIntent') {
handleTestRequest(intent, session, callback);
} else {
throw "Invalid intent";
}
从这里开始,亚马逊正在咆哮我的lambda无效。对于其他人来说,它可能表明错误正在堆栈中提前抛出。
您还可以使用aws cloudwatch 注销lambda错误,这将显示任何警告或错误。
查看我的回购,alexa lambda starter kit了解一个简单的hello world ask / lambda示例。
答案 2 :(得分:1)
我认为你对ARN的问题:1你可能没有在你的lambda函数中为alexa技能设置触发器。
或者它可以是alexa会话超时,默认情况下设置为8秒。
答案 3 :(得分:0)
我的猜测是你错过了设置的一步。您必须在其中设置"事件来源"。如果你不这样做,我想你会得到那个信息。
但调试选项有限。我在编写服务模拟器之前编写了EchoSim(GitHub上的原始版本),虽然它有点过时,但它可以更好地进行诊断。
缺乏调试选项,最好是做你已经做过的事情。分区和重新测试。做静态回复,直到找到问题所在。