Alexa - 添加 Google 分析后服务模拟器的内置意图出错
Alexa - Error with built-ins intents on service simulator after adding Google Analytics
我正在构建自定义技能。在添加 google 分析之前,从 AWS 控制台和服务模拟器进行测试时,3 个内置和 2 个自定义意图均正常工作。现在,我从服务模拟器中得到 'The response is invalid',仅针对内置意图(2 个海关意图给出了正确的 lambda 响应)。这是自上一个工作版本以来我的代码发生的变化:
添加:
var express = require('express'), request = require('request'), app = express(), GA_TRACKING_ID = 'UA_TRACKING_ID';
function trackEvent(category, action, label, value, cb) {
console.log('1');
var data = {v: '1', tid: GA_TRACKING_ID, cid: '555', t: 'event', ec: category, ea: action, el: label, ev: value,};
request.post(
'http://www.google-analytics.com/collect', {
form: data
},
function(err, response) {
console.log('2');
if (err) { console.log('3'); return cb(err); }
if (response.statusCode !== 200) {
console.log('4');
return cb(new Error('Tracking failed'));
}
console.log('5');
cb();
}
);
}
并调用 trackEvent 函数,所有意图都类似:
内置意图示例:(=> 测试此意图在 CloudWatch 中注销“1”,然后执行停止)
'AMAZON.CancelIntent': function (intent, session, response) {
var self = this;
trackEvent('Intent', 'AMAZON.CancelIntent', 'stop', '100', function(err) {
if (err) { return next(err); }
self.response.speak(STOP_MESSAGE);
self.emit(':responseReady');
});
},
自定义意图示例:(=> 测试此意图将输出正确的语音输出)
'DressingTodayIntent': function(intent, session, response) {
var speechOutput;
var self = this;
var cb = getJSON('...', function(err, forecast) {
if (err) {
console.log('Error occurred while trying to retrieve data', err);
} else {
speechOutput = getDressingAdvice(forecast, true);
}
self.response.cardRenderer("Your advice for today:", speechOutput);
self.response.speak(speechOutput);
self.emit(':responseReady');
});
trackEvent('Intent', 'DressingTodayIntent', 'DressingToday', '100', cb);
}
我坚持,'AMAZON.CancelIntent','AMAZON.HelpIntent','AMAZON.StopIntent'(&'LaunchRequest')都不行,只有因为我添加了遗传算法。我做错了什么?
添加 GA 之前的最后参考,工作意图代码:
'AMAZON.CancelIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
我不确定,因为我对 JS 不太熟悉。但是你试过使用箭头函数吗?可能是这样的..
'AMAZON.CancelIntent': function (intent, session, response) {
// var self = this;
trackEvent('Intent', 'AMAZON.CancelIntent', 'stop', '100', (err) => {
if (err) { return next(err); }
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
});
},
也许你离开了一个你不想离开的范围...
在不起作用的内置意图示例中,我需要做的就是用回调替换 trackEvent 中的实际函数,如下所示:
'AMAZON.CancelIntent': function (intent, session, response) {
var self = this;
var callback = function(err) {
if (err) { return next(err); }
console.log(STOP_MESSAGE);
self.response.speak(STOP_MESSAGE);
self.emit(':responseReady');
};
trackEvent('Intent', 'AMAZON.CancelIntent', 'Cancel', '100', callback());
},
我正在构建自定义技能。在添加 google 分析之前,从 AWS 控制台和服务模拟器进行测试时,3 个内置和 2 个自定义意图均正常工作。现在,我从服务模拟器中得到 'The response is invalid',仅针对内置意图(2 个海关意图给出了正确的 lambda 响应)。这是自上一个工作版本以来我的代码发生的变化:
添加:
var express = require('express'), request = require('request'), app = express(), GA_TRACKING_ID = 'UA_TRACKING_ID';
function trackEvent(category, action, label, value, cb) {
console.log('1');
var data = {v: '1', tid: GA_TRACKING_ID, cid: '555', t: 'event', ec: category, ea: action, el: label, ev: value,};
request.post(
'http://www.google-analytics.com/collect', {
form: data
},
function(err, response) {
console.log('2');
if (err) { console.log('3'); return cb(err); }
if (response.statusCode !== 200) {
console.log('4');
return cb(new Error('Tracking failed'));
}
console.log('5');
cb();
}
);
}
并调用 trackEvent 函数,所有意图都类似:
内置意图示例:(=> 测试此意图在 CloudWatch 中注销“1”,然后执行停止)
'AMAZON.CancelIntent': function (intent, session, response) {
var self = this;
trackEvent('Intent', 'AMAZON.CancelIntent', 'stop', '100', function(err) {
if (err) { return next(err); }
self.response.speak(STOP_MESSAGE);
self.emit(':responseReady');
});
},
自定义意图示例:(=> 测试此意图将输出正确的语音输出)
'DressingTodayIntent': function(intent, session, response) {
var speechOutput;
var self = this;
var cb = getJSON('...', function(err, forecast) {
if (err) {
console.log('Error occurred while trying to retrieve data', err);
} else {
speechOutput = getDressingAdvice(forecast, true);
}
self.response.cardRenderer("Your advice for today:", speechOutput);
self.response.speak(speechOutput);
self.emit(':responseReady');
});
trackEvent('Intent', 'DressingTodayIntent', 'DressingToday', '100', cb);
}
我坚持,'AMAZON.CancelIntent','AMAZON.HelpIntent','AMAZON.StopIntent'(&'LaunchRequest')都不行,只有因为我添加了遗传算法。我做错了什么?
添加 GA 之前的最后参考,工作意图代码:
'AMAZON.CancelIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
我不确定,因为我对 JS 不太熟悉。但是你试过使用箭头函数吗?可能是这样的..
'AMAZON.CancelIntent': function (intent, session, response) {
// var self = this;
trackEvent('Intent', 'AMAZON.CancelIntent', 'stop', '100', (err) => {
if (err) { return next(err); }
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
});
},
也许你离开了一个你不想离开的范围...
在不起作用的内置意图示例中,我需要做的就是用回调替换 trackEvent 中的实际函数,如下所示:
'AMAZON.CancelIntent': function (intent, session, response) {
var self = this;
var callback = function(err) {
if (err) { return next(err); }
console.log(STOP_MESSAGE);
self.response.speak(STOP_MESSAGE);
self.emit(':responseReady');
};
trackEvent('Intent', 'AMAZON.CancelIntent', 'Cancel', '100', callback());
},