1

我是 Amazon Echo 编程的新手。我正在使用 Node.js,并试图根据我说出的名字返回不同的响应。

例如,如果我说名字“David”、“James”或“Benjy”,Alexa 应该只说“Welcome [和我说的名字]”,但如果我说“Jonathan”,它应该说“Yay!Welcome home Jonathan”。

但是当我说“乔纳森”时,它只是说“欢迎乔纳森”。

我一直在修改基本的 alexa-skills-kit-color-expert Lambda,并修改了该代码中的 setColorInSession() 函数。我已将该函数重命名为 setAndWelcomePerson()。

我努力了:

  1. 使用 if 语句测试我的话语并根据我的话语让 Alexa 回复
  2. 给出不同的话语示例,尝试教 Alexa 区分一个名字和下一个名字。

这些似乎都不起作用。请告诉我我做错了什么以及修复的建议。下面的一些代码:

我的 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}

谢谢您的帮助。

4

1 回答 1

3

您正在使用“LITERAL”插槽类型。(不鼓励这样做,但仍然支持。)这意味着您只是在识别一个单词。口语没有大小写。但是 Javascript 中的 === 运算符区分大小写。如果你检查你的日志,我怀疑当你说“乔纳森”时,你得到的是“乔纳森”,那么你的匹配就会失败。

要解决此问题,您可以将比较更改为小写,或将运算符更改为不区分大小写的字符串比较(请参阅此处)。

另一种方法是不使用 LITERAL 插槽类型,而是使用 AMAZON.US_FIRST_NAME。因为这知道它是一个名字,所以它返回它大写。

于 2016-07-16T18:13:20.630 回答