我已经创建了一个简单的Lambda函数来调用一个网页,当我从函数页面测试它时工作正常但是当试图创建一个技能来调用这个函数时我最终得到了一个“无法调用远程 endpoints ,或者它返回的回复无效 . “错误 .
Lambda Function
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 (Developer Portal)
然后我创建了一个简单的Intent技能:
{
"intents": [
{
"intent": "CustomFunction"
}
]
}
并创造了一个话语:
CustomFunction execute my custom function
在我的技术配置部分,我选择了“AWS Lambda ARN(亚马逊资源名称)”选项,并将ARN输入到北美的框中 .
在测试 - >服务模拟器部分,我添加了“执行我的自定义函数”作为文本,这将更改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"
}
但是当我运行测试时,我收到以下错误:
无法调用远程 endpoints ,或者它返回的响应无效 .
有没有人知道为什么技能无法连接到该功能?
谢谢
3 回答
Amazon Alexa开发者控制台内置的服务模拟器存在已知问题 . 尝试复制模拟器生成的JSON并将其粘贴到lambda函数的测试事件中 . 要访问lambda的测试事件,首先找到蓝色的“测试”按钮 . 在该按钮旁边选择(操作下拉菜单) - >(配置测试事件) - >将提供的JSON粘贴到代码区域 - >(保存并测试) . Lambda的内置测试功能比Alexa更可靠 .
如果这不能解决问题,lambda的测试事件将返回一个完整的stackTrace和错误代码 . 当每个错误都不是“无法调用远程 endpoints ,或者它返回的响应无效时”,更容易进行故障排除 .
上传
.zip
时,请勿将文件夹压缩为.zip .相反,进入该文件夹,选择
package.json
,index.js
和node modules
然后压缩它们,然后上传.zip
.此错误消息非常广泛,可能意味着许多不同的问题 . 我收到此错误,在我的情况下,这是一个超时问题 . 你正在ping这个网站需要多长时间才能回复?超时似乎没有正确记录,请参阅我原来的问题:Troubleshooting Amazon's Alexa Skill Kit (ASK) Lambda interaction