我正在建立一个自定义技能。在添加谷歌分析之前,3 个内置插件和 2 个自定义 intent 都可以正常工作,无论是从 AWS 控制台还是服务模拟器测试时。现在,我从服务模拟器中得到“响应无效”,仅适用于内置 intent (2 个海关 intent 给出正确的 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 函数,在所有 intent 中类似:
内置 intent 示例 : (=> 测试此 intent 会在 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');
});
},
自定义 intent 中的示例 : (=> 测试这个 intent 将输出正确的语音输出)
'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。我做错什么了?
最后引用,工作 intent 代码,在添加 GA 之前:
'AMAZON.CancelIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
最佳答案
在不起作用的内置 intent 示例中,我需要做的就是用回调替换 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());
},
关于node.js - Alexa - 添加 Google Analytics 后,服务模拟器上的内置 intent 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137005/