2017-04-10 7 views
0

私はAlexaに新しく、airportinfoチュートリアルに従いました。コードをgithub https://github.com/bignerdranch/alexa-airportinfoからコピーしました。また、npmを使用してテストし、空港コードを入力してください。 SFO、Theres no "outputSpeech:"私は同じ問題で同様のスキルを作ろうとしたが、何が間違っているのか分からない。私はindex.jsとFAADataInfo.jsの両方を持っています。Alexa TestレスポンスにoutputSpeechが含まれていません

これは、これは私が

{ 
    "version": "1.0", 
    "response": { 
    "directives": [], 
    "shouldEndSession": true 
    }, 
    "sessionAttributes": {}, 
    "dummy": "text" 
} 
+0

http://stackoverflow.com/help/mcve – Rob

+0

は、私はそれを行うだろうだが、私はので、私は知らない作業プログラムイマイチのどの部分を知りませんどのように問題を解決するためにそれを単純化するか、私はこんにちは世界のスキルを作ることができます – user3408117

+0

あなたはあなたがそのデータをどのように取得したのか、後でそれをしたのかを示す必要があります。 – Rob

答えて

0

にそのアレクサ・アプリのバージョンを取得することに応答であるindex.jsファイル

'use strict'; 
module.change_code = 1; 
var _ = require('lodash'); 
var Alexa = require('alexa-app'); 
var skill = new Alexa.app('airportinfo'); 
var FAADataHelper = require('./faa_data_helper'); 

skill.launch(function(req, res) { 
    var prompt = 'For delay information, tell me an Airport code.'; 
    res.say(prompt).reprompt(prompt).shouldEndSession(false); 
}); 

skill.intent('airportInfoIntent', { 
    'slots': { 
     'AIRPORTCODE': 'FAACODES' 
    }, 
    'utterances': [ 
     '{|flight|airport} {|delay|status} {|info} {|for} {-|AIRPORTCODE}' 
    ] 
    }, 
    function(req, res) { 
    var airportCode = req.slot('AIRPORTCODE'); 
    var reprompt = 'Tell me an airport code to get delay information.'; 
    if (_.isEmpty(airportCode)) { 
     var prompt = 'I didn\'t hear an airport code. Tell me an airport code.'; 
     res.say(prompt).reprompt(reprompt).shouldEndSession(false); 
     return true; 
    } else { 
     var faaHelper = new FAADataHelper(); 
     console.log(airportCode); 
     faaHelper.getAirportStatus(airportCode).then(function(airportStatus) { 
     console.log(airportStatus); 
     res.say(faaHelper.formatAirportStatus(airportStatus)).send(); 
     }).catch(function(err) { 
     console.log(err.statusCode); 
     var prompt = 'I didn\'t have data for an airport code of ' + 
      airportCode; 
     res.say(prompt).reprompt(reprompt).shouldEndSession(false).send(); 
     }); 
     return false; 
    } 
    } 
); 
module.exports = skill; 

と相続人FAADataInfo.js

'use strict'; 
var _ = require('lodash'); 
var requestPromise = require('request-promise'); 
var ENDPOINT = 'http://services.faa.gov/airport/status/'; 

function FAADataHelper() { 
} 

FAADataHelper.prototype.getAirportStatus = function(airportCode) { 
    var options = { 
    method: 'GET', 
    uri: ENDPOINT + airportCode, 
    json: true 
    }; 
    return requestPromise(options); 
}; 

FAADataHelper.prototype.formatAirportStatus = function(aiportStatusObject) { 
    if (aiportStatusObject.delay === 'true') { 
    var template = _.template('There is currently a delay for ${airport}. ' + 
     'The average delay time is ${delay_time}.'); 
    return template({ 
     airport: aiportStatusObject.name, 
     delay_time: aiportStatusObject.status.avgDelay 
    }); 
    } else { 
    //no delay 
    var template =_.template('There is currently no delay at ${airport}.'); 
    return template({ 
     airport: aiportStatusObject.name 
    }); 
    } 
}; 

module.exports = FAADataHelper; 

ですチュートリアルは古いものを使用しています。最新のalexa-app npmバージョン(4.0.0)を使用する場合、非同期関数を実行している場合、.intent()関数の戻り値はPromiseであり、ブール値ではありません。あなたのindex.jsで

、追加:

return faaHelper.getAirportStatus(....) {}.catch(){}

とキャッチした後return false;を削除します。ここで

はフルskill.intent()コード

skill.intent('airportInfoIntent', { 
    'slots': { 
     'AIRPORTCODE': 'FAACODES' 
    }, 
    'utterances': [ 
     '{|flight|airport} {|delay|status} {|info} {|for} {-|AIRPORTCODE}' 
    ] 
    }, 
    function(req, res) { 
    var airportCode = req.slot('AIRPORTCODE'); 
    var reprompt = 'Tell me an airport code to get delay information.'; 
    if (_.isEmpty(airportCode)) { 
     var prompt = 'I didn\'t hear an airport code. Tell me an airport code.'; 
     res.say(prompt).reprompt(reprompt).shouldEndSession(false); 
     return true; 
    } else { 
     var faaHelper = new FAADataHelper(); 
     console.log(airportCode); 

     return faaHelper.getAirportStatus(airportCode).then(function(airportStatus) { 
     console.log(airportStatus); 
     res.say(faaHelper.formatAirportStatus(airportStatus)).send(); 
     }).catch(function(err) { 
     console.log(err.statusCode); 
     var prompt = 'I didn\'t have data for an airport code of ' + 
      airportCode; 
     res.say(prompt).reprompt(reprompt).shouldEndSession(false).send(); 
     }); 
     //return false; 
    } 
    } 
); 
+0

ありがとう、病気は今チェックしてください。空港事態はどのように設定されますか?または私はそれに私が欲しい名前を割り当てることができますか? – user3408117

+0

FAADataHelper.prototype.getAirportStatus()を呼び出すと、airportStatusがFAADataInfo.jsクラスに設定されます。これによりAPIが呼び出され、戻りJSON値がairportStatus変数に設定されます。 –

+0

工場に感謝! :) – user3408117

関連する問題