2017-04-10 30 views
0

我是Alexa的新手,並且遵循了機場信息教程,我從github https://github.com/bignerdranch/alexa-airportinfo複製了代碼,當我使用npm測試它並輸入機場代碼例如SFO,Theres no「outputSpeech:」我試着用同樣的問題做出類似的技巧,我不知道我做錯了什麼。我有index.js和FAADataInfo.js在此先感謝您的幫助。Alexa測試的響應不包含outputSpeech

這是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; 

這是響應我得到

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

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

+0

我會做,但我不知道我不什麼程序心不是工作,所以部分知道如何簡化它仍然有問題,我可以做一個世界各地的技能 – user3408117

+0

你需要展示你如何獲得這些數據,以及你以後做了什麼。 – Rob

回答

0

了Alexa-應用程序版本該教程正在使用已過時。使用最新的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

謝謝,我現在檢查。 airportStatus如何設置?或者我可以分配任何我想要的名字? – user3408117

+0

當您調用FAADataHelper.prototype.getAirportStatus()時,airportStatus在您的FAADataInfo.js類中設置。這會調用API並將返回的JSON值設置爲airportStatus變量。 –

+0

感謝一家工廠! :) – user3408117