使用Alexa和JS的HTTP发布
我试图获得一个Alexa技能(JS / Lambda)使用HTTP.request将值发布到REST服务器。 我正在尝试一些简单的事情来完成工作。 我想我错过了一些明显的东西。
理想的技能使用
- 我说,“Alexa,告诉testing五”。
- Alexa将代码中指定的URL更新为5。
- Alexa说:“我已经把价值更新到了五点。”
问题
我有两个问题:
-
口语与打字的话语 。 如果我在亚马逊服务模拟器(“五”)中键入我的插槽值,该值将发布到我的服务器,因为它应该是。 但是,如果我说同样的话,即使Alexa正确地识别了这些单词(通过查看应用程序中的卡片确认),该值也不会被发布,并且她说:“我找不到问题的答案。
-
在哪里以及如何调用输出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
- 我在服务模拟器中input“五”。
- 节点更新,但Alexa没有说什么。
目前的用法:B
- 我告诉Alexa,“告诉testing二”。
- Alexa说:“我找不到问题的答案。” 卡证实她正确地听到了我。
- 没有更新。
在此先感谢您的帮助。
更新:日志
更新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