Alexa - 添加Google Analytics后,服务模拟器上的内置插件意图出错

时间:2018-01-07 12:18:55

标签: node.js google-analytics aws-lambda aws-sdk alexa

我正在建立自定义技能。在添加谷歌分析之前,3个内置插件&从AWS控制台和服务模拟器进行测试时,2个海关意图都正常运行。现在,我得到的答案是无效的'来自服务模拟器,仅用于内置入口意图(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');
   });
},

自定义意图中的示例 :( =>测试此意图将输出正确的speechOutput)

'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。我做错了什么?

最后一个参考,工作意图代码,在添加GA之前:

'AMAZON.CancelIntent': function () {
  this.response.speak(STOP_MESSAGE);
  this.emit(':responseReady');
},

2 个答案:

答案 0 :(得分:1)

在没有工作的内置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());
},

答案 1 :(得分:0)

我不确定,因为我对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');
   });
},

也许你离开一个范围,你不想离开......