测试匹配的不同话语
Testing different utterances for a match
我是 Amazon Echo 编程的新手。我正在使用 Node.js 并尝试 return 根据我说出的名字做出不同的响应。
例如,如果我说名字 "David" 或 "James" 或 "Benjy" Alexa 应该只说 "Welcome [and the name I said]" 但如果我说 "Jonathan" 它应该说"Yay! Welcome home Jonathan".
但是当我说 "Jonathan" 它只是说 "Welcome Jonathan".
我一直在修改基本的 alexa-skills-kit-color-expert Lambda 并修改了该代码中的 setColorInSession() 函数。我已将该函数重命名为 setAndWelcomePerson()。
我试过:
- 使用 if 语句来测试我的话语并让 Alexa 根据我的话语回复
- 给出不同的话语示例,以尝试教 Alexa 区分一个名字和另一个名字。
None 这似乎有效。请告诉我我做错了什么以及修复建议。下面的一些代码:
我的 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}
感谢您的帮助。
您正在使用 "LITERAL" 插槽类型。 (不鼓励这样做,但仍然支持。)这意味着您只是在识别一个词。口语是没有格的。但是 Javascript 中的 === 运算符区分大小写。如果你检查你的日志,我怀疑当你说 "Jonathan" 时你得到的是 "jonathan",然后你的匹配失败。
要解决此问题,您可以将比较更改为小写,或将运算符更改为不区分大小写的字符串比较(请参阅 here)。
另一种方法是不使用 LITERAL 插槽类型,而是使用 AMAZON.US_FIRST_NAME。因为这知道它是一个名字,它returns它大写。
我是 Amazon Echo 编程的新手。我正在使用 Node.js 并尝试 return 根据我说出的名字做出不同的响应。
例如,如果我说名字 "David" 或 "James" 或 "Benjy" Alexa 应该只说 "Welcome [and the name I said]" 但如果我说 "Jonathan" 它应该说"Yay! Welcome home Jonathan".
但是当我说 "Jonathan" 它只是说 "Welcome Jonathan".
我一直在修改基本的 alexa-skills-kit-color-expert Lambda 并修改了该代码中的 setColorInSession() 函数。我已将该函数重命名为 setAndWelcomePerson()。
我试过:
- 使用 if 语句来测试我的话语并让 Alexa 根据我的话语回复
- 给出不同的话语示例,以尝试教 Alexa 区分一个名字和另一个名字。
None 这似乎有效。请告诉我我做错了什么以及修复建议。下面的一些代码:
我的 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}
感谢您的帮助。
您正在使用 "LITERAL" 插槽类型。 (不鼓励这样做,但仍然支持。)这意味着您只是在识别一个词。口语是没有格的。但是 Javascript 中的 === 运算符区分大小写。如果你检查你的日志,我怀疑当你说 "Jonathan" 时你得到的是 "jonathan",然后你的匹配失败。
要解决此问题,您可以将比较更改为小写,或将运算符更改为不区分大小写的字符串比较(请参阅 here)。
另一种方法是不使用 LITERAL 插槽类型,而是使用 AMAZON.US_FIRST_NAME。因为这知道它是一个名字,它returns它大写。