我有一个包含请求调用的模块,它似乎没有被执行。
var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;
var self = module.exports = {
handler : function (event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(self);
alexa.execute();
},
"TestIntent": function () {
var speechOutput = "Recorded Test";
request("http://www.google.com",
function(error, response,body)
{
return console.log(body);
}
);
this.emit(':tell', speechOutput);
}
}
我从未在Lambda控制台或其他任何地方看到我的console.log中显示的google正文。我已经尝试过其他调用(比如我的应用程序服务器API的API帖子)并且看不到它出现在该服务器上。
似乎在请求回调完成之前进程正在关闭。
在Amazon Lambda“测试人员”中,我得到了有效的回复。在Alexa“测试员”中,我得到了“Recorded Test”的回复。在Echo上(通过Alexa),我从设备上获得了“Recorded Test”响应。所以技能似乎很有效。这只是失败的“请求”操作(在这种情况下,只是拉动google.com)。
谢谢!
更新:我至少能够完成调用,但可能不是最干净的方式。
var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;
var self = module.exports = {
handler : function (event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(self);
alexa.execute();
},
"TestIntent": function () {
var that = this;
var speechOutput = "Recorded Test";
request("http://www.google.com",
function(error, response,body)
{
console.log(body);
that.emit(':tell', speechOutput);
return;
}
);
}
}
答案 0 :(得分:3)
您的(原始)代码无效,因为您正在呼叫
this.emit(':tell', speechOutput);
request("http://www.google.com",
:tell
函数将调用lambda回调并终止lambda函数的执行。
您自己找到了解决方案:等待request
回调执行并在那时发出:tell
事件。
请参阅
的alexa-skills-kit-sdk-for-nodejs代码
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L6
和
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L101
您可以在http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
了解有关Lambda编程模型的更多信息