node.js - Alexa - 添加 Google Analytics 后,服务模拟器上的内置 intent 出错

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

我正在建立一个自定义技能。在添加谷歌分析之前,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/

相关文章:

amazon-web-services - 如何安全地将 .pfx 证书添加到 aws lambda

amazon-web-services - 使用自定义资源 Lambda 运行爬网程序

javascript - 如何将 moment js 日期时间转换为字符串,反之亦然

android - 如何阻止 Google Analytics 机器人、操作系统版本中的推荐垃圾邮件、Android 的热门设备型号条目

javascript - NodeJS 中处理错误响应并再次尝试相同的调用同时避免回调汤的好模式是什么?

javascript - Analytics 嵌入 API 多账户

apache - 实现HTTP到HTTP的重定向,以保留Google Analytics(分析)引荐来源网址

amazon-web-services - client.Timeout 在等待 header 时超出

用于捕获相关收件人字段中找到的电子邮件地址的 Javascript 和 PHP 正则表达式

javascript - Express js 聊天应用程序 :404 error on socket. io.js 文件