这是Alexa技能代码:
'use strict';
const Alexa = require("alexa-sdk");
exports.handler = function(event, context, callback) {
console.log("skill-sample-nodejs-hello-world Received an event");
console.log("event=");
console.dir(event);
const alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'LaunchRequest': function () {
console.log("LaunchRequest called()");
this.response.speak('Hello World Init!').listen("I am listening SayHelloInit");
this.emit(':responseReady');
//this.emit('SayHelloInit');
},
'HelloWorldIntent': function () {
console.log("hello world intent called");
this.response.speak('Hello World How are you!').listen("I am listening sayhello");
this.emit(':responseReady');
//this.emit('SayHello');
},
'AMAZON.HelpIntent': function () {
const speechOutput = 'This is the Hello World Sample Skill. ';
const reprompt = 'Say hello, to hear me speak.';
this.response.speak(speechOutput).listen(reprompt);
this.emit(':responseReady');
},
'AMAZON.CancelIntent': function () {
this.response.speak('Goodbye!');
this.emit(':responseReady');
},
'AMAZON.StopIntent': function () {
this.response.speak('See you later!');
this.emit(':responseReady');
},
'SessionEndedRequest': function () {
console.log("SESSIONENDEDREQUEST");
this.response.speak("SessionEndedRequest. Goodbye!");
this.emit(':responseReady');
},
'Unhandled': function() {
console.log("UNHANDLED");
const message = 'Unhandled';
this.response.speak(message).listen(message);
this.emit(':responseReady');
}
};
以下是一些观察到的奇怪行为:
来自亚马逊开发者控制台中的Alexa模拟器,无法通过"启动hello world回家",响应是"抱歉,我不知道&#34 ;.但是在我通过"启动你好世界"来调用技能后,我可以通过"启动你好世界回家"得到回应"你好世界你好!"。
从Echosim.io,我可以通过"启动你好的世界"来调用技能,但是我永远不能通过"启动你好世界回家"。它回复了"抱歉,我不知道"。此外,没有任何重新发表的言论被播放出来。
从cloudwatch日志中,有时我会看到" SessionEndedRequest"使用原因码" USER_INITIATED"发送到lambda函数。我没有说任何"停止,取消" USER_INITIATED SessionEndedRequest是如何触发的?这在某种程度上与谴责言论从未发挥过的事实相关吗?
"回家"映射如下:
{
"name": "HelloWorldIntent",
"samples": [
"hello",
"say hello",
"who are you",
"go home",
"hello world"
],
"slots": []
}
答案 0 :(得分:0)
我看到很多帖子最近都没有得到重新谴责。我认为SDK可能无法按照第一行中的预期构建响应。
this.response.speak(speechOutput).listen(reprompt);
this.emit(':responseReady');
请尝试使用此行。
this.emit(':ask', speechOutput, reprompt);
这应该等同于你的。
关于echosim.io的问题。你用适当的麦克风录制你的话语吗?根据我的经验,即使我使用耳机麦克风,echoism.io在识别我的意思时也遇到了很多麻烦。
相反,我建议使用echo设备(如果可能)或者在开发者控制台中使用新推出的Test Simulator BETA。