リクエストコールを含むモジュールがありますが、これは実行されていないようです。ノード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;
}
);
}
}
でラムダプログラミングモデルについての詳細を学ぶことができますが、現在のバージョンを使用していますラムダ(4.3)の?コールバックを呼び出すときに古いバージョンがプロセスを終了させるかどうかは疑問です。私が使用しているテストハーネス(node-lamdba)はこれを行い、その動作は古いラムダ用に設計されており、更新されていないためだと思います。 – Tom
また、呼び出しが失敗し、本文が空である可能性があります。私は本当にログに記録されていないことを確認するために、そこに明示的なログメッセージを貼り付けます。そして、無関係なコメントですが、あなたはAPP_IDにalexa.appIdを設定することは想定されていません。あなたはそれらが一致することを確認することになっています。 – Tom
ありがとう@Tom、 "this.emit"を実行する前にバグを確認すると、リクエスト機能の中に明示的な "I got here"というメッセージが表示されます。したがって、TestIntent関数が完了しなければ、コールバックは実行して報告する時間があります。だから私は何とかthis.emitをコールバックが終了するのを待つために取得する必要があります – probbins222