8

我创建了一个简单的Lambda函数来调用网页,当我从函数页面进行测试时,此工作正常,但尝试创建一个技能来调用这个函数,我最终得到一个“远程端点不能被调用,或者它返回的响应是无效的。”错误。Alexa技能ARN - 无法调用远程端点,或者返回的响应无效

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的技能套装”。

该函数的ARN作为显示:

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

Alexa的技能(开发者门户网站)

我然后创建一个技能用一个简单的意图:

{ 
"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" 
} 

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

The remote endpoint could not be called, or the response it returned was invalid.

有没有人有任何想法,为什么技能无法连接到该功能?

谢谢

+0

如果你看一下日志中的CloudWatch您拉姆达 - 它被调用 – Tom

回答

0

此错误信息非常广泛,可能意味着很多不同的问题。我得到这个错误,在我的情况下,这是一个超时问题。您要ping的网站需要多长时间才能做出回应?超时似乎没有正确记录,请参阅我的原始问题在这里:Troubleshooting Amazon's Alexa Skill Kit (ASK) Lambda interaction

4

内置到亚马逊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" 
} 
+0

这对我的作品或者你可以不断尝试,直到你成功! –

+1

技能的网页 - >测试 - >服务模拟器 - >文本选项卡 - >恩特红色话语并点击“询问技能名称”按钮,并在“服务请求”textarea中生成包含我的链接帐户访问令牌的请求。但是在“服务响应”中,我得到了“远程端点无法被调用,或者它返回的响应无效”。 后来我从“服务请求”复制JSON和切换到JSON标签,粘贴复制的JSON在“JSON请求”文本区域,然后点击“向技能名称”和我在“服务响应”得到了预期的JSON。 这很奇怪,但现在我可以接受。 –

3

在上传.zip,不相反夹压缩成.zip文件。

,进入文件夹,选择package.jsonindex.jsnode modules &然后对其进行压缩,然后上传.zip