8

我创建了一个简单的 Lambda 函数来调用网页,当我从函数页面对其进行测试时效果很好,但是当尝试创建调用此函数的技能时,我最终得到“无法调用远程端点,或者它返回的响应无效。” 错误。

Lambda 函数

var http = require('http');

exports.handler = function(event, context) {
  console.log('start request to ' + event.url)
  http.get(event.url, function(res) {
    console.log("Got response: " + res.statusCode);
    context.succeed();
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
    context.done(null, 'FAILURE');
  });

  console.log('end request to ' + event.url);
}

测试事件代码如下所示:

{
  "url": "http://mywebsite.co.uk"
}

我已经为“Alexa Skills Kit”添加了一个触发器。

此函数的 ARN 显示为:

arn:aws:lambda:us-east-1:052516835015:function:CustomFunction

Alexa Skill(开发者门户)

然后我创建了一个具有简单意图的技能:

{
 "intents": [
   {
 "intent": "CustomFunction"
   }
 ]
}

并创建了一个话语:

CustomFunction execute my custom function

在我的技能的配置部分中,我选择了“AWS Lambda ARN(亚马逊资源名称)”选项并将 ARN 输入到北美的框中。

在 Test -> Service Simulator 部分,我添加了“执行我的自定义函数”作为文本,这将 Lambda 请求更改为显示:

{
  "session": {
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX",
"application": {
  "applicationId": "amzn1.ask.skill.XXXXXXXXX"
},
"attributes": {},
"user": {
  "userId": "amzn1.ask.account.XXXXXXXXX"
},
"new": true
  },
  "request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX",
"locale": "en-GB",
"timestamp": "2016-11-27T22:54:07Z",
"intent": {
  "name": "RunWOL",
  "slots": {}
}
  },
  "version": "1.0"
}

但是当我运行测试时,出现以下错误:

无法调用远程端点,或者它返回的响应无效。

有没有人知道为什么该技能无法连接到该功能?

谢谢

4

3 回答 3

4

Amazon Alexa 开发人员控制台中内置的服务模拟器存在已知问题。尝试复制模拟器生成的 JSON 并将其粘贴到 lambda 函数的测试事件中。要访问 lambda 的测试事件,首先找到蓝色的“测试”按钮。在该按钮旁边选择(操作下拉菜单)->(配置测试事件)-> 将提供的 JSON 粘贴到代码区域 ->(保存并测试)。Lambda 的内置测试功能比 Alexa 的可靠得多。

如果这不能解决问题,则 lambda 的测试事件会返回完整的 stackTrace 和错误代码。当每个错误都不是“无法调用远程端点,或者它返回的响应无效”时,故障排除变得容易得多。

{
  "session": {
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX",
"application": {
  "applicationId": "amzn1.ask.skill.XXXXXXXXX"
},
"attributes": {},
"user": {
  "userId": "amzn1.ask.account.XXXXXXXXX"
},
"new": true
  },
  "request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX",
"locale": "en-GB",
"timestamp": "2016-11-27T22:54:07Z",
"intent": {
  "name": "RunWOL",
  "slots": {}
}
  },
  "version": "1.0"
}
于 2017-08-03T05:53:24.573 回答
3

​上传.zip时,请勿将文件夹压缩为.zip。

相反,进入文件夹,选择package.jsonindex.js然后node modules压缩它们,然后上传.zip.

于 2017-08-21T07:51:02.753 回答
0

此错误消息非常广泛,可能暗示许多不同的问题。我收到了这个错误,就我而言,这是一个超时问题。您 ping 的那个网站需要多长时间才能响应?超时似乎没有正确记录,请在此处查看我的原始问题:亚马逊的 Alexa Skill Kit (ASK) Lambda 交互故障排除

于 2017-04-10T20:20:27.547 回答