【发布时间】:2017-09-26 02:43:17
【问题描述】:
这几天我一直试图弄清楚我的 lambda 函数出了什么问题。我怀疑这是其余的电话,但我无法弄清楚为什么 alexa 不接受输出。我添加了更多的console.logs,它似乎永远不会离开TrashPickUpIntent。代码如下:
'use strict';
const Alexa = require('alexa-sdk');
const https = require('https');
var handlers = {
'LaunchRequest': function () {
this.emit('SayHello');
},
'HelloWorldIntent': function () {
this.emit('SayHello')
},
'TrashPickUpIntent' : function () {
console.log("inside trash pick up intent");
this.emit('trashPickUp');
},
'SayHello': function () {
console.log("testing here");
this.emit(':tell', 'Hello there!');
},
'TrashPickUp': function () {
var TrashPickUp="Trash Pick up on ";
var Recycling="Recycling on ";
var AlexaTell="For Address ";
var output ="test";
console.log("inside trash function");
//Get data for Tash PickUp and Recycling
https.get('https://data.boston.gov/api/action/datastore_search?resource_id=fee8ee07-b8b5-4ee5-b540-5162590ba5c1&q={"Address":"866 Huntington ave"}', (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
//Get Response and parse String for Alexa
res.on('data', (d) => {
output += d;
});
res.on('error', (e) => {
console.error(e);
});
res.on('end', () => {
var apiResponse = JSON.parse(output);
output = AlexaTell + apiResponse["result"]["records"][0]["Address"] +
TrashPickUp + apiResponse["result"]["records"][0]["Trash"] +
Recycling + apiResponse["result"]["records"][0]["Recycling"];
console.log(output);
});
});
console.log("outside about to send output");
this.emit(':tell', output);
}
};
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
alexa.execute();
};
我的 rest/js 知识很薄弱,我的 alexa 知识更弱。我怀疑它与 https.get 中的异步调用有关,所以我将“this.emit”移到了 on end 调用中。然后我尝试在 get 调用上方使用“var self = this”,因为我读过 here 可能我的 this 引用在 get 调用中无法访问。
这些都没有解决我的问题。当我通过技能包对其进行测试时,它说“响应无效”,当我使用语音测试的输入对其进行测试并将其直接输入到 lambda 测试中时,它说成功,结果为空。
【问题讨论】:
-
您遇到的错误是什么?请更新来自 CloudWatch 的错误问题。
标签: node.js rest aws-lambda alexa