使用Alexa和JS发布HTTP

时间:2016-02-10 01:11:53

标签: javascript node.js http aws-lambda alexa

我正在尝试使用HTTP.request将Alexa技能(JS / Lambda)发布到REST服务器。我试图破解一些简单的东西来完成工作。我想我错过了一些明显的东西。

理想技能用法

  1. 我说," Alexa,告诉发布测试五。"
  2. Alexa将代码中指定的URL的值更新为5。
  3. Alexa说,"我已将值更新为五。"
  4. 问题

    我有两个问题:

    1. 口语与打字的话语。如果我在亚马逊服务模拟器中键入我的插槽值("五"),则该值将发布到我的服务器,应该是这样。但是,如果我说话相同的话语,即使Alexa正确识别单词(通过查看应用中的卡片确认),该值也不会发布,她说,"我可以&找到问题的答案。"

    2. 在何处以及如何调用输出功能。我想我需要添加类似下面两行的内容,但根据我在当前代码中添加它的位置,Alexa要么在不更新节点的情况下做出响应,要么不做任何事情。

      var text = 'I have updated the value to' + targetSlot;
      output( text, context );
      
    3. 调用名称

      posting test
      

      意图架构

      {
        "intents": [ {
          "intent": "writeTarget",
          "slots": [ {
             "name": "Target",
             "type": "NUMBER"
          } ]
        }]
      }
      

      示例话语

      writeTarget {Target}
      

      AlexaSkill.js和index.js

      我正在使用每个示例here中都可以找到的AlexaSkill.js文件。

      我的index.js看起来像这样。 URL,req.write字符串等替换为****。

      exports.handler = function( event, context ) {
      
          var APP_ID = undefined;
      
          const http = require( 'http' );
      
          var AlexaSkill = require('./AlexaSkill');
      
          var options = {
            host: '****.com',
            path: '/****',
            port: '****',
            method: 'PUT'
          };
      
          callback = function(response) {
            var str = ''
            response.on('data', function (chunk) {
              str += chunk;
            });
      
            response.on('end', function () {
              console.log(str);
            });
          };
          var targetSlot = event.request.intent.slots.Target.value;
          var req = http.request(options, callback);
          req.write("****");
          req.end();    
      };
      
      function output( text, context ) {
      
          var answer = {
              outputSpeech: {
                  type: "PlainText",
                  text: text
              },
              card: {
                  type: "Simple",
                  title: "System Data",
                  content: text
              },
              shouldEndSession: true
          };
      
          context.succeed( { answer: answer } );
      
      }
      

      当前用法:A

      1. 我打字"五"在服务模拟器中。
      2. 节点更新,但Alexa没有说什么。
      3. 当前用法:B

        1. 我告诉Alexa,"告诉发布测试二。"
        2. Alexa说,"我找不到问题的答案。"卡确认她没听错。
        3. 什么都没有更新。
        4. 提前感谢您的帮助。

          更新:记录

          更新帖子以添加日志:

          错误消息

          {
            "errorMessage": "Process exited before completing request"
          }
          

          日志输出错误

          TypeError: Cannot read property 'intent' of undefined
              at exports.handler (/var/task/index.js:24:35)
          

          Lambda响应

          The response is invalid
          

1 个答案:

答案 0 :(得分:1)

通过反复试验弄清楚这一点,以下是有效的代码:http://dglogik.com/company/blog/197-alexa-dsa