Повторение каждые 10 секунд, когда пользователь не отвечает, не уверен, сможем ли мы это сделать.
Но мы можем достичь части Да / Нет.Один из способов сделать это - использовать государство.Здесь, в этом примере, я использую модуль node-cache для управления состоянием.
Рассмотрим нижеприведенное намерение с именем "ConfirmationQuestionIntent".Он устанавливает состояние «имя-подтверждения».
const ConfirmationQuestionIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "ConfirmationQuestionIntent"
);
},
handle(handlerInput) {
const speechText = "Please confirm your name as 'John'.";
myCache.set('state','confirm-name');
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
Теперь включите / добавьте два встроенных намерения, AMAZON.YesIntent и AMAZON.NoIntent.Рассмотрим AMAZON.NoIntent ниже, в функции обработчика.он проверяет, существует ли какое-либо состояние с именем «имя-подтверждения».Если он присутствует, он отвечает «Пожалуйста, подтвердите ваше имя как« Джон ».»и если нет, то отвечает ответом по умолчанию.
const NoBuiltInIntent = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "AMAZON.NoIntent"
);
},
handle(handlerInput) {
const state = myCache.get("state");
let speechText = "I didn't get this!. Could you please rephrase.";
if(state === "confirm-name") speechText = "Please confirm your name as 'John'.";
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
Рассмотрим приведенный ниже AMAZON.YesIntent. В функции дескриптора он проверяет, существует ли какое-либо состояние с именем «verify-name».Если это так, то он отвечает «Спасибо за подтверждение» и удаляет состояние из кэша.Если нет, то он просит пользователя перефразировать.
const YesBuiltInIntent = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "AMAZON.YesIntent"
);
},
handle(handlerInput) {
const state = myCache.get("state");
let speechText = "I didn't get this!. Could you please rephrase.";
if(state === "confirm-name") speechText = "Thanks for the confirmation.";
myCache.del('state');
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
Таким образом, вы можете использовать «Состояние», чтобы определить, на какой сценарий отвечает пользователь, и затем предоставить правильный ответ.