Проверка разных высказываний на матч

Я новичок в программировании для Amazon Echo. Я использую Node.js и пытаюсь вернуть другой ответ, основанный на произнесении имени.

Например, если я произношу имя «Дэвид», «Джеймс» или «Бенджи», Алекса должен просто сказать «Добро пожаловать [и имя, которое я сказал]», но если я скажу «Джонатан», он должен сказать «Ура! Добро пожаловать домой, Джонатан».

Но когда я говорю «Джонатан», это просто «Добро пожаловать, Джонатан».

Я модифицировал базовую лямбду alexa-skills-kit-color-expert и модифицировал функцию setColorInSession () в этом коде. Я переименовал эту функцию в setAndWelcomePerson ().

Я пытался:

  1. использовать оператор if для проверки моего высказывания и получения ответа Alexa на основе моего высказывания
  2. приводить различные примеры высказываний, чтобы попытаться научить Алексу различать одно имя и другое.

Кажется, ничего из этого не работает. Подскажите пожалуйста, что я делаю не так, и предложения по исправлению. Код ниже:

Функция 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}

Спасибо за помощь.


person haltersweb    schedule 16.07.2016    source источник


Ответы (1)


Вы используете тип слота "LITERAL". (Это не рекомендуется, но все же поддерживается.) Это означает, что вы просто распознаете слово. Произносимые слова не имеют смысла. Но оператор === в Javascript чувствителен к регистру. Если вы проверите свои журналы, я подозреваю, что, когда вы говорите «Джонатан», вы получаете «Джонатан», и тогда ваше совпадение не выполняется.

Чтобы исправить это, вы можете изменить свое сравнение на нижний регистр или изменить оператор на сравнение строк без учета регистра (см. здесь).

Другой подход - не использовать тип слота LITERAL, а использовать вместо него AMAZON.US_FIRST_NAME. Поскольку он знает, что это имя, он возвращает его с заглавной буквы.

person Joseph Jaquinta    schedule 16.07.2016
comment
Отлично! Спасибо! Хотя мне не удалось заставить AMAZON.US_FIRST_NAME работать, изменение регистра на строчные и использование LITERAL сработало отлично! - person haltersweb; 17.07.2016