使用Alexa和JS的HTTP发布

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

理想的技能使用

  1. 我说,“Alexa,告诉testing五”。
  2. Alexa将代码中指定的URL更新为5。
  3. Alexa说:“我已经把价值更新到了五点。”

问题

我有两个问题:

  1. 口语与打字的话语 。 如果我在亚马逊服务模拟器(“五”)中键入我的插槽值,该值将发布到我的服务器,因为它应该是。 但是,如果我同样的话,即使Alexa正确地识别了这些单词(通过查看应用程序中的卡片确认),该值也不会被发布,并且她说:“我找不到问题的答案。

  2. 在哪里以及如何调用输出function 。 我想我需要添加类似下面两行的内容,但是根据我在当前代码中添加的位置,Alexa会响应而不更新节点,或者什么也不做。

    var text = 'I have updated the value to' + targetSlot; output( text, context ); 

调用名称

 posting test 

意图架构

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

示例话语

 writeTarget {Target} 

AlexaSkill.js和index.js

我正在使用可在每个示例中find的AlexaSkill.js文件。

我的index.js看起来像这样。 URL,req.writestring等被replace为****。

 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. 我在服务模拟器中input“五”。
  2. 节点更新,但Alexa没有说什么。

目前的用法:B

  1. 我告诉Alexa,“告诉testing二”。
  2. Alexa说:“我找不到问题的答案。” 卡证实她正确地听到了我。
  3. 没有更新。

在此先感谢您的帮助。

更新:日志

更新post以添加日志:

错误信息

 { "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 

通过反复试验得出这个结论,下面是工作的代码: http : //dglogik.com/company/blog/197-alexa-dsa