node.js - 具有 Alexa 技能的 Node JS 回调

标签 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“测试器”中,我得到了“记录测试”的响应。在 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/

相关文章:

ruby - 如何在 AWS Lambda 函数中安装/使用 Ruby gems?

amazon-web-services - AWS Lambda 和 Pusher 集成。如何发送通知?

c# - 自行注册类(class)

node.js - 如何针对 Alexa 技能的错误和警告发出警报?

javascript - AWS Lambda 中的上下文与回调

javascript - 当我更新技能后第一次加载技能时,我可以向 Alexa 技能用户发送一次性通知吗?

php - 像在 php 中一样在 nodejs 中渲染 html

node.js - 如何正确使用带有 npm 脚本的 parallelshell?

javascript - 从回调获取代码或在 Javascript (Node.js) 中存储回调

node.js - Socket IO 不从手机发出事件