Я хочу выполнить следующий сценарий:
Небольшое диалоговое окно между 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();
},
};