soy algo nuevo con Alexa. Mi problema es el siguiente. He elaborado un skill con Node.js que te hace un cuestrionario de tres preguntas. La primer pregunta se dispara en el Launch Request, que es cuando el usuario invoca el skill. El usuario ingresa la respuesta sólo diciendo el número. De ahí pasa el diálogo al siguiente intent que le puse el nombre de Answer, ese intent está programado para realizar las últimas dos preguntas. Cuando el usuario responde la primer pregunta me funciona bien el intent de Answer. Cuando Alexa me da la segunda pregunta y se responde, es donde me marca audio response only, aclaro que uso el simulador para probar la skill. Estoy desarrollando la skill con el módulo ask-sdk y lo levanto de forma local con alexa-skill-local.
El ejemplo sería así:
User: Alexa abre trivia
Alexa: Bienvenido, se te harán 3 preguntas…..blablabla
User: es la 1
Alexa: La respuesta es correcta. La segunda pregunta es…..blablabla
User: 3
audio only response ————> aquí es donde falla
Les comparto mis dos intent relevantes, omitiré el código para generar las preguntas y las respuestas, ya que no es la gran cosa. Sospecho que puede ser la interfaz que habilita la auto delegación del diálogo. En sí busco que mi intent Answer sea invocado siempre que mis utterances coincidan con lo que el usuario ingresa, y no sólo se invoque una vez y ya. Con Google Assistant y DialogFlow pude hacer la aplicación sin ningún problema.
Este es el LaunchRequest:
const LaunchIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, handle(handlerInput) { const speech = `Bienvenido al cuestionario Factly. Se te harán 3 preguntas. Trata de responder correctamente. Sólo di el número de la respuesta. Comencemos. $ {buildQuestions(0)} . Las posibles respuestas son las siguientes: $ {buildAnswers(0)}`; handlerInput.attributesManager.setSessionAttributes({ question: 0 }); return handlerInput.responseBuilder.speak(speech).reprompt(speech).getResponse(); }};
Y este es el Answer:
const AnswerIntentHandler = { canHandle(handlerInput) { const request = handlerInput.requestEnvelope.request; return request.type === 'IntentRequest' && request.intent.name === 'Answer'; }, handle(handlerInput) { const choice = getSlotValue(handlerInput.requestEnvelope, 'choice'); const { question } = handlerInput.attributesManager.getSessionAttributes(); const responseResult = isCorrectAnswer(question + 1, choice); let result = 'Tu respuesta es incorrecta'; if (responseResult) { result = 'Tu respuesta es correcta'; } const speech = `$ {result}. La siguiente pregunta es $ {buildQuestions(question + 1)}. Y sus posibles respuestas son $ {buildAnswers(question + 1)}`; handlerInput.attributesManager.setSessionAttributes({ question: question + 1 }); return handlerInput.responseBuilder.speak(speech).getResponse(); }
};