简体   繁体   English

通过lambda函数的Alexa API请求

[英]Alexa API request through lambda function

I am creating an Alexa skill and have hosted my NodeJS code through AWS Lambda. 我正在创建一个Alexa技能并通过AWS Lambda托管我的NodeJS代码。

I need to access data from an API and pull it into my Lambda function to serve back to Alexa. 我需要从API访问数据并将其拉入我的Lambda函数以回送给Alexa。 How can I use packages like Express or, perhaps jQuery, to allow for API requests through my Lambda function? 我如何使用Express或者jQuery这样的包来通过我的Lambda函数允许API请求?


I've found verbose/complex ways of installing npm packages, but was looking if there was a better / different way of doing this 我已经找到了安装npm软件包的详细/复杂方法 ,但是看看是否有更好/不同的方式来做这个

I used the nodeJS http request. 我使用了nodeJS http请求。 Including this request within the getWelcomeResponse() and testing within Alexa Dev, I get getWelcomeResponse()包含此请求并在Alexa Dev中进行测试,我得到了

The remote endpoint could not be called, or the response it returned was invalid. 无法调用远程端点,或者它返回的响应无效。

Without the HTTP request, it returns an expected json response 如果没有HTTP请求,它将返回预期的json响应

 function getWelcomeResponse(callback) {

    console.log('GET WELCOME RESPONSE');

    var options = {
        host: 'http://clg-api-dev.elasticbeanstalk.com',
        port: 7474,
        path: '/1.0/leveldata/3',
        method: 'GET',
        headers: {
            accept: 'application/json'
        }
    };

    var x = http.request(options,function(res){
        console.log("Connected");

        res.on('data',function(data){

            console.log('My Data: ', data);

            var sessionAttributes = {},
            speechOutput = "Reindeer Games. I will ask you " + GAME_LENGTH.toString()
                + " questions, try to get as many right as you can. Just say the number of the answer. Let's begin. ",
            shouldEndSession = false,

            gameQuestions = populateGameQuestions(),

            sessionAttributes = {
                "speechOutput": repromptText,
                "repromptText": repromptText,
                "currentQuestionIndex": currentQuestionIndex,
                "correctAnswerIndex": correctAnswerIndex + 1,
                "questions": gameQuestions,
                "score": 0,
                "correctAnswerText":
                    questions[gameQuestions[currentQuestionIndex]][Object.keys(questions[gameQuestions[currentQuestionIndex]])[0]][0]
            };
            callback(sessionAttributes, buildSpeechletResponse(CARD_TITLE, speechOutput, repromptText, shouldEndSession));

        });
    });

    x.end();
}

Cloudwatch Error logs: Cloudwatch错误日志:

START RequestId: e293453f-fc30-11e5-ae18-8723f88b4bb0 Version: $LATEST 
2016-04-06T19:50:59.657Z    e293453f-fc30-11e5-ae18-8723f88b4bb0    event.session.application.applicationId=amzn1.echo-sdk-ams.app.e8233bb6-ce2d-4a6c-8f82-e947d58d3bad 
2016-04-06T19:50:59.767Z    e293453f-fc30-11e5-ae18-8723f88b4bb0    onLaunch requestId=EdwRequestId.f6baa34c-bfc1-4758-b74d-9874d970c10e, sessionId=SessionId.7063c3b5-b2c0-4b1d-9180-d79aaeed9a49 
2016-04-06T19:50:59.768Z    e293453f-fc30-11e5-ae18-8723f88b4bb0    GET WELCOME RESPONSE 
2016-04-06T19:50:59.934Z    e293453f-fc30-11e5-ae18-8723f88b4bb0    Error: getaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer [as oncomplete] (dns.js:126:16) 
END RequestId: e293453f-fc30-11e5-ae18-8723f88b4bb0 
REPORT RequestId: e293453f-fc30-11e5-ae18-8723f88b4bb0  Duration: 315.42 ms Billed Duration: 400 ms Memory Size: 128 MB Max Memory Used: 14 MB   
Process exited before completing request 

Where the error is getaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer . 错误是getaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer I don't quite understand this error. 我不太明白这个错误。

If you just need to make an HTTP call, this is built into NodeJS and you don't need to install any extra packages in Lambda. 如果您只需要进行HTTP调用,这将内置到NodeJS中,您无需在Lambda中安装任何额外的包。 Look at the answer to this question: Sending http request in node.js 看看这个问题的答案: 在node.js中发送http请求

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM