2016-04-06 20 views
1

Alexaスキルを作成していて、AWS LambdaからNodeJSコードをホストしています。Alexa API request by lambda function

APIからデータにアクセスし、Alexaに返すためにラムダ関数にプルする必要があります。 Expressや、おそらくjQueryなどのパッケージを使用して、ラムダ関数によるAPIリクエストを許可するにはどうすればよいですか?


私はnpmパッケージのインストールのverbose/complex waysを見つけたが、私はnodeJShttp要求を使用し、この

を行うためのより良い/別の方法があった場合は探していました。アレクサの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 

を。私はこのエラーをあまり理解していません。

答えて

0

HTTPコールを行うだけであれば、これはNodeJSに組み込まれており、ラムダに余分なパッケージをインストールする必要はありません。この質問への答えを見てください:Sending http request in node.js

+0

十分に、それはパッケージを使用するといいです。だから私は 'node' HTTPリクエストを使ってLambda' function getWelcomeResponse(callback) 'メソッドに入れ、Alexa Dev内でテストしたところ、'リモートエンドポイントを呼び出せなかったか、返されたレスポンスが無効でしたHTTPリクエストがなければ、期待される 'json'レスポンスを返します – Growler

+0

なぜパッケージを使うのがいいですか?デプロイメントプロセスをより複雑にするだけですか?それとも、何かを簡単にするフレームワークを使用するのがいいのですか?組み込みのNodeJS関数は、ブラウザでjQuery AJAX関数を使用するのと同じくらい簡単です。 –

+0

また、CloudWatchから失敗した関数呼び出しのログを取得して、ここに投稿する必要があります。または、それを読んで、あなたの誤りが何であるかを見てください。 –

関連する問題