我是Amazon Echo编程新手。我正在使用Node.js,并且我试图根据我的名字来回复不同的回复。
例如,如果我说出名字" David"或者"詹姆斯"或者" Benjy" Alexa应该说"欢迎[和我说的名字]"但如果我说" Jonathan"它应该说"耶!欢迎回家乔纳森"。
但是当我说" Jonathan"它只是说"欢迎乔纳森"。
我一直在修改基本的alexa-skills-kit-color-expert Lambda并修改了该代码中的setColorInSession()函数。我已经重命名了函数setAndWelcomePerson()。
我试过了:
这些似乎都不起作用。请告诉我我做错了什么,并提出修复建议。下面是一些代码:
我的Lambda代码中的setAndWelcomePerson()函数:
/**
* Sets the name of the person(s) and welcomes them.
*/
function setAndWelcomePerson(intent, session, callback) {
var cardTitle = intent.name;
var whoToGreetSlot = intent.slots.Person;
var repromptText = null;
var sessionAttributes = {};
var shouldEndSession = false;
var speechOutput = "";
if (whoToGreetSlot) {
var whoToGreet = whoToGreetSlot.value;
sessionAttributes = createWhoToGreetAttributes(whoToGreet);
if (whoToGreet === "Jonathan") {
speechOutput = "Yay! Welcome home " + whoToGreet + "!";
} else {
speechOutput = "Welcome " + whoToGreet + ".";
}
} else {
speechOutput = "I'm not sure who you want me to welcome. Please try again.";
}
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}
我的意图架构:
{
"intents": [
{
"intent": "WhoShouldBeGreeted",
"slots": [
{
"name": "Person",
"type": "LITERAL"
}
]
},
{
"intent": "AdditionalGreetingRequest",
"slots": []
}
]
}
我的样本话语:
WhoShouldBeGreeted {Sam and Cat|Person}
WhoShouldBeGreeted {Jonathan|Person}
WhoShouldBeGreeted {James|Person}
WhoShouldBeGreeted {Benji|Person}
WhoShouldBeGreeted welcome {Sam and Cat|Person}
WhoShouldBeGreeted welcome {Jonathan|Person}
WhoShouldBeGreeted welcome {James|Person}
WhoShouldBeGreeted welcome {Benji|Person}
感谢您的帮助。
答案 0 :(得分:3)
您正在使用“LITERAL”插槽类型。 (这是不鼓励的,但它仍然受到支持。)这意味着你只是在识别一个单词。口语没有案例。但是Javascript中的===运算符区分大小写。如果你检查你的日志,我怀疑当你说“Jonathan”你得到的是“jonathan”,你的比赛就失败了。
要解决此问题,您可以将比较更改为小写,或将运算符更改为不区分大小写的字符串比较(请参阅here)。
另一种方法是不使用LITERAL插槽类型,而是使用AMAZON.US_FIRST_NAME。由于这知道它是一个名称,因此将其返回大写。