Alexaスキルを作成していて、AWS LambdaからNodeJSコードをホストしています。Alexa API request by lambda function
APIからデータにアクセスし、Alexaに返すためにラムダ関数にプルする必要があります。 Expressや、おそらくjQueryなどのパッケージを使用して、ラムダ関数によるAPIリクエストを許可するにはどうすればよいですか?
私はnpm
パッケージのインストールのverbose/complex waysを見つけたが、私はnodeJS
http
要求を使用し、この
を行うためのより良い/別の方法があった場合は探していました。アレクサのDev内getWelcomeResponse()
とテスト内でこの要求を含め、私は、リモートエンドポイントを呼び出すことができなかった、またはそれが を返された応答が無効でした
を取得します。 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のエラーログを返します。エラーがgetaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer
ある
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
を。私はこのエラーをあまり理解していません。
十分に、それはパッケージを使用するといいです。だから私は 'node' HTTPリクエストを使ってLambda' function getWelcomeResponse(callback) 'メソッドに入れ、Alexa Dev内でテストしたところ、'リモートエンドポイントを呼び出せなかったか、返されたレスポンスが無効でしたHTTPリクエストがなければ、期待される 'json'レスポンスを返します – Growler
なぜパッケージを使うのがいいですか?デプロイメントプロセスをより複雑にするだけですか?それとも、何かを簡単にするフレームワークを使用するのがいいのですか?組み込みのNodeJS関数は、ブラウザでjQuery AJAX関数を使用するのと同じくらい簡単です。 –
また、CloudWatchから失敗した関数呼び出しのログを取得して、ここに投稿する必要があります。または、それを読んで、あなたの誤りが何であるかを見てください。 –