2016-10-18 19 views
2

リクエストコールを含むモジュールがありますが、これは実行されていないようです。ノードAlexaスキルを使用したJSコールバック

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

ラムダコンソールのconsole.logまたは他の場所にGoogle本体が表示されることはありません。私は他の呼び出し(私のアプリケーションサーバーAPIへのAPI投稿のような)を試みましたが、そのサーバー上にもそのような表示は見られません。

リクエストコールバックが完了する前にプロセスが終了しているようです。

Amazon Lambdaの "テスター"では有効な回答が得られます。 Alexaの "テスター"では、 "記録されたテスト"の応答を取り戻します。そして、エコー(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; 
      } 
     ); 
    } 
} 
+0

でラムダプログラミングモデルについての詳細を学ぶことができますが、現在のバージョンを使用していますラムダ(4.3)の?コールバックを呼び出すときに古いバージョンがプロセスを終了させるかどうかは疑問です。私が使用しているテストハーネス(node-lamdba)はこれを行い、その動作は古いラムダ用に設計されており、更新されていないためだと思います。 – Tom

+0

また、呼び出しが失敗し、本文が空である可能性があります。私は本当にログに記録されていないことを確認するために、そこに明示的なログメッセージを貼り付けます。そして、無関係なコメントですが、あなたはAPP_IDにalexa.appIdを設定することは想定されていません。あなたはそれらが一致することを確認することになっています。 – Tom

+0

ありがとう@Tom、 "this.emit"を実行する前にバグを確認すると、リクエスト機能の中に明示的な "I got here"というメッセージが表示されます。したがって、TestIntent関数が完了しなければ、コールバックは実行して報告する時間があります。だから私は何とかthis.emitをコールバックが終了するのを待つために取得する必要があります – probbins222

答えて

2

あなたがちょうどいい request("http://www.google.com",

:tell関数は、ラムダコールバックを呼び出し、ラムダ関数の実行を終了します this.emit(':tell', speechOutput);

を呼び出しているので、あなたの(元)のコードが動作していません。

自分で解決策を見つけました。requestコールバックが実行されるのを待ち、その時点で:tellイベントを発行します。

参照
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

でアレクサ・スキル・キット-SDK-FOR-nodejsコードあなたはhttp://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html

関連する問題