具有Alexa技能的节点JS回调

时间:2016-10-18 02:18:29

标签: node.js aws-lambda alexa alexa-skills-kit node-request

我有一个包含请求调用的模块,它似乎没有被执行。

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;
             }
        );
    }
}

1 个答案:

答案 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编程模型的更多信息