我有一个包含请求调用的模块,它似乎没有被执行。
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“测试器”中,我得到了“记录测试”的响应。在 Echo 上(通过 Alexa),我从设备返回“记录的测试”响应。所以这项技能似乎很管用。只是失败的“请求”操作(在本例中,只是拉 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;
}
);
}
}
最佳答案
您的(原始)代码无法正常工作,因为您正在调用
this.emit(':tell', speechOutput);
就在这之后
请求(“http://www.google.com”,
:tell
函数将调用 lambda 回调并终止 lambda 函数的执行。
您自己找到了解决方案:WAITING 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 编程模型的更多信息
关于node.js - 具有 Alexa 技能的 Node JS 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098494/