Я работаю над простым умением получить код ifsc для банка из названия банка и филиала.Я реализовал многооборотные диалоги, что означает, что разговор идет до того, как слоты заполняются.У меня есть два слота в модели взаимодействия.Это БАНК и ФИЛИАЛ.Оба слота обязательны.Я предоставил 200 высказываний для слота BANK.
Навык сначала запрашивает у пользователя имя банка.Если пользователь указывает неверное имя банка, скажем, например, «Я не знаю».Он определяет, что это недействительное имя банка, и снова запрашивает у пользователя имя банка.Но в этом процессе он заполняет слот BRANCH словами «я не знаю».Я хочу поддерживать порядок заполнения слотов.Слот BRANCH не должен заполняться до тех пор, пока не будет заполнен слот BANK.Я хочу убедиться, что BRANCH является действительным адресом улицы (это slotType для BRANCH).Как применить порядок заполнения значений в слоте?Пожалуйста, найдите лямбда-код ниже:
const InProgressIfscCodeIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'ifscCode' &&
handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED'
},
handle(handlerInput) {
const currentIntent = handlerInput.requestEnvelope.request.intent;
return handlerInput.responseBuilder
.addDelegateDirective(currentIntent)
.getResponse();
}
};
const CompletedIfscCodeIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'ifscCode'
},
async handle(handlerInput) {
if (!handlerInput.requestEnvelope.request.intent.slots.BANK.value) {
return handlerInput.responseBuilder
.speak("Let me know which IFSC code for which bank are you looking for ?")
.reprompt("Let me know which IFSC code for which bank are you looking for ?")
.addElicitSlotDirective('BANK')
.getResponse();
} else {
const bankName = handlerInput.requestEnvelope.request.intent.slots.BANK.value;
const branch = handlerInput.requestEnvelope.request.intent.slots.BRANCH.value;
// retrieve the bank details by calling the API
const bankDetails = await getBankDetails(bankName, branch);
console.log('--- length of the bank ---', bankDetails.banks.length);
if (bankDetails.banks.length > 0) {
console.log('-- bank details --', bankDetails);
const speechText = `IFSC code of the ${bankName}, ${branch} is
<break time="2s"/>
<emphasis level="strong"><say-as interpret-as='spell-out'>${bankDetails.banks[0].IFSC}</say-as></emphasis>.
<break time="2s"/>Try again for different bank by invoking open ifsc code finder.`;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withShouldEndSession(true)
.getResponse();
} else {
const speechText = "We were not able to get the bank details. Please try again by invoking open ifsc code finder.";
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withShouldEndSession(true)
.getResponse();
}
}
}
};
Кроме того, строка «Я не знаю» не является допустимым адресом улицы.Обучение модели для 1 миллиона адресов на данный момент не представляется возможным.Моя проблема заключается в том, что недопустимое значение для слота BANK не должно использоваться в качестве ветви.Я хочу добавить подтверждение здесь.Пожалуйста, помогите мне понять вещи здесь.
Спасибо