Привет всем,
В данный момент я работаю над навыком Alexa, и у меня проблема, что мне нужно вызвать обработчик из другого.
Я прочитал несколько постов, но четкого ответа на мою проблему не было. У меня есть обработчик "AskForEmployeeInformation_Handler", который имеет дело с несколькими намерениями, которые отвечают на несколько вопросов о человеке. Но если пользователь говорит только фамилию или имя вместо полного имени, тогда Alexa подскажет, есть ли люди, которые соответствуют данному имени. Теперь пользователь должен сказать одно из предложенных имен. При произнесении этого имени вызывается другой обработчик «SetName_Handler», который устанавливает выбранное имя в качестве атрибута сеанса. Теперь я хочу снова вызвать в операторе return «AskForEmployeeInformation_Handler», потому что он включает в себя весь лог c для запроса требуемой информации.
Я видел несколько решений для вызова обработчика, как вы можете видеть в следующем коде, и лог c был выполнен, но Alexa ничего не сказала и не предлагает пользователю ответ.
У вас есть идея, что я могу сделать, чтобы решить проблему?
Спасибо за вашу помощь.
const SetName_Handler = {
canHandle(handlerInput){
const request = handlerInput.requestEnvelope.request;
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
return sessionAttributes.event === 'AskForEmployee_Name' || sessionAttributes.event === 'AskForPhoneNumber_Name' || sessionAttributes.event === 'AskForRole_Name';
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
let say = '';
let slotValues = getSlotValues(request.intent.slots);
console.log('***** slotValues: ' + JSON.stringify(slotValues, null, 2));
//save person for the session - maybe for further questions
sessionAttributes['employeeSurname'] = slotValues.employeeSurname.resolved;
sessionAttributes['employeeName'] = slotValues.employeeName.resolved;
handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
return AskForEmployeeInformation_Handler.handle(handlerInput;
}
};