Поведение типа any в пользовательских слотах Alexa - PullRequest
0 голосов
/ 04 мая 2018

Я хочу выполнить следующий сценарий: Небольшое диалоговое окно между Alexa и пользователем, со следующими 2 Intents:

  • NameIntent: «Меня зовут {name}»

Где {name} - AMAZON.US_FIRST_NAME, с обязательным заполнением слота и определением приглашения.

  • ActivityIntent: «Мне нравится {activity}»

И тут становится сложнее. Я сделал {activity} пользовательский слот и определил для него некоторые значения, такие как «рыбалка, спорт» и тому подобное, но, очевидно, есть и другие ответы на это. Если я сейчас отвечу чем-то, что не определил (например, «дартс»), Алекса всегда возвращается к первому намерению, так как кажется, что это имя.

* * Пример тысяча двадцать-один: * * 1 022

LaunchRequest: "Добро пожаловать. Как вас зовут?" -> Меня зовут Петр

NameIntent: "Добро пожаловать, Питер. Что ты любишь делать?" -> Дартс -> «Добро пожаловать, Дартс. Что ты любишь делать?»

Я бы просто хотел, чтобы Alexa принял любое значение, которое там говорит пользователь, в Dialogflow это было бы просто сделать с сущностью {any} . Я следил за этой статьей в блоге из блога alexa, и там они, похоже, могут фиксировать любое прозвище, которое вы к нему добавляете, даже те, которые не определены, чего я и хочу добиться здесь.

Вопрос : Как я могу захватить любой ввод с помощью Alexa, фразы помимо того, что я определил в построителе навыков? Как я могу убедиться, что эта фраза направлена ​​на правильное намерение?

Я немного расстроен этим, особенно если вы используете ElicitSlotDirectives, чтобы специально спросить пользователя о слоте, а затем он переходит к совершенно другому намерению.

Код для двух обработчиков намерений:

const NameIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'NameIntent';
    },
    handle(handlerInput) {
        const { intent } = handlerInput.requestEnvelope.request;
        const name = intent.slots.name.value;

        const speechText = `Welcome ${name}. What is your favourite activity?`;
        return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .withShouldEndSession(false)
            .getResponse();
    },
};

const ActivityIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'ActivityIntent';
    },
    handle(handlerInput) {
        const { intent } = handlerInput.requestEnvelope.request;
        const activity = intent.slots.activity.value;

        const speechText = `You like ${activity}.`;
        return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .withShouldEndSession(false)
            .getResponse();
    },
};

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы можете рассмотреть возможность использования AMAZON.LITERAL встроенного пользовательского типа слота. Этот тип слота передает произнесенные слова без какого-либо преобразования. Хотя официальные документы предполагают не использовать его. Это было также прекращено однажды. Из официальных документов.

Примечание. Несмотря на то, что вы можете отправлять новые и обновленные навыки английского языка (США) с помощью AMAZON.LITERAL, пользовательские типы слотов обеспечивают большую точность, чем AMAZON.LITERAL, в большинстве случаев. Поэтому мы рекомендуем по возможности перейти на пользовательские типы слотов. Обратите внимание, что AMAZON.LITERAL не поддерживается ни для одного языка, кроме английского (США).

Узнайте больше о AMAZON.LITERAL здесь. https://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html

0 голосов
/ 05 мая 2018

Похоже, у Алексы проблемы с связыванием высказываний об активности с вашим ActivityIntent, и вместо этого он снова вызывает NameIntent. Полагаться на Amazon, чтобы выяснить, какое намерение использовать в зависимости от типа слота, не всегда хорошо работает для меня. Если вы опубликуете свой код намерения, это будет очень полезно.

Это может помочь взглянуть на пример JavaScript из Amazon здесь и Руководство по дизайну голоса Amazon .

...