我正在尝试获取 Alexa 技能(JS/Lambda)以使用 HTTP.request 将值发布到 REST 服务器。我正在尝试拼凑一些简单的东西来完成工作。我想我错过了一些明显的东西。
理想的技能用法
- 我说,“Alexa,告诉发布测试五。”
- Alexa 将代码中指定的 URL 处的值更新为 5。
- Alexa 说:“我已将值更新为 5。”
问题
我有两个问题:
口语与打字的话语。如果我在 Amazon Service Simulator 中键入我的槽值(“五”),则该值将按原样发布到我的服务器。但是,如果我说同样的话,即使 Alexa 正确识别了这些单词(通过查看应用程序中的卡片来确认),值也不会发布,她会说,“我找不到问题的答案。”
在哪里以及如何调用输出函数。我想我需要添加类似下面两行的内容,但取决于我在当前代码中添加它的位置,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
我正在使用可以在此处的每个示例中找到的 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
- 我在服务模拟器中输入“五”。
- 节点更新但 Alexa 什么也没说。
当前使用情况:B
- 我告诉 Alexa,“告诉发布测试二。”
- Alexa 说:“我找不到问题的答案。” 卡确认她没听错。
- 什么都没有更新。
提前感谢您的帮助。
更新:日志
更新帖子以添加日志:
错误信息
{
"errorMessage": "Process exited before completing request"
}
日志输出错误
TypeError: Cannot read property 'intent' of undefined
at exports.handler (/var/task/index.js:24:35)
拉姆达响应
The response is invalid