Cómo construir un juego de preguntas y respuestas para Amazon Echo en menos de una hora
This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.
Spanish (Español) translation by Elías Nicolás (you can also view the original English article)
Durante
mucho tiempo, fue un hecho que la comunicación con las computadoras se
realizó a través de una interfaz de usuario en un dispositivo físico:
escribiendo comandos en el teclado o tocando o haciendo clic en los
íconos. Hablar con tu computadora en lenguaje natural fue algo que solo sucedió en la ciencia ficción.
Pero el mundo está cambiando, y las interfaces de usuario de voz finalmente están entrando en nuestros hogares y oficinas, borrando la línea entre la informática y la vida real.
Amazon Echo y Alexa, el servicio de voz que lo impulsa, son algunos de los primeros ejemplos de esta nueva tecnología.
En este tutorial, utilizaremos Alexa Skills Kit, AWS Lambda, y algún código fuente de plantilla de Amazon para crear un juego de preguntas y respuestas que se pueda jugar utilizando un dispositivo Amazon Echo o cualquier dispositivo compatible con Alexa, como Amazon Fire TV, Echo Dot, o un Amazon Tap.
Después de completar el tutorial, tendrá una
buena comprensión básica
de la creación de nuevas habilidades para Alexa, y estará listo para
participar en la exploración de la nueva frontera de las experiencias de
usuario impulsadas por la voz.
Una descripción rápida de la arquitectura
Una habilidad de Alexa, una aplicación de Alexa dirigida por
voz, consta de dos partes:
- La habilidad, definida en el Amazon Developer Portal. Esto es lo que vincula todo, al vincular las frases que el usuario dice para interactuar con el juego (por ejemplo, "iniciar juegos de renos") a la lógica de la aplicación.
- Un servicio web al que se llama cada vez que el usuario le da un comando a la habilidad. El servicio se puede ejecutar en cualquier servidor web seguro que responda a la API basada en JSON.
En este tutorial, ejecutaremos el servicio web en AWS Lambda, un servicio que ejecuta código en respuesta a eventos, lo que le ahorra al desarrollador el problema de mantener un servidor. Lambda también se vincula perfectamente al Alexa Skills Kit, lo que lo convierte en una excelente herramienta para ejecutar el código de Alexa Skills.
Implementaremos la funcionalidad del servidor como un módulo Node.js, por lo que para completar el tutorial, necesitará una comprensión básica de JavaScript. La experiencia de Node.js es un plus, pero absolutamente no es un requisito para completar el tutorial.
1. Crea la función Lambda
Comencemos construyendo el juego configurando una función AWS Lambda para ejecutar su lógica comercial.
Paso 1: comience con AWS Lambda
Para usar Lambda, primero necesitará una cuenta de Amazon Web Services (AWS).
Si ya tiene una cuenta, haga clic en Iniciar sesión en la consola en la esquina superior derecha de la página para comenzar.
Si es un usuario nuevo, verá un enlace diferente, Crear una cuenta de AWS, en su lugar. Haga clic en el enlace y siga las instrucciones en la página para registrarse en una cuenta de nivel gratuita.



Durante el registro, deberá ingresar información válida de la tarjeta de crédito. Pero no se preocupe, no se le cobrará a menos que su uso exceda el nivel de uso gratuito, que para Lambda significa 1 millón de solicitudes gratuitas y hasta 3.2 millones de segundos de "tiempo de computación" por mes, mucho más que suficiente para pasar por el tutorial y prueba su funcionalidad.
Una vez que haya completado el registro e iniciado sesión en AWS Consola, puede activar Lambda para su cuenta.
Primero, verifique la esquina superior derecha de la página para verificar que esté utilizando la región este de los EE. UU. (N. Virginia).
Luego, en la lista de servicios, seleccione Lambda:



Si es la primera vez que usa la herramienta, verá la siguiente pantalla con información sobre lo que puede hacer con ella.
Haga clic en Comenzar ahora.



Paso 2: configurar la función Lambda
Como aún no ha creado ninguna función Lambda, la interfaz de usuario se
inicia en el asistente de nueva función. Primero, le muestra una lista
de planos, ejemplos de configuraciones de Lambda para varios casos de
uso común.
Vamos a construir nuestro juego de preguntas y respuestas desde cero, así que desplácese hacia abajo y haga clic en el botón Omitir en la parte inferior de la página.



El siguiente paso en el asistente es "Configurar función":



Ingrese cierta información sobre su nueva función Lambda:



- Nombre: Seleccione un nombre descriptivo para la función. Este
nombre no es el que expondrá a los usuarios de Alexa todavía, por lo
que no tiene que preocuparse de hacerlo único fuera de su cuenta de
Lambda. Solo proponga algo descriptivo que lo ayude a reconocer la función en su
consola AWS Lambda. En el ejemplo, vamos a ir con
MyTriviaGame, pero puedes elegir lo que quieras. - Descripción: este campo es opcional y se usa para documentar su trabajo. Puedes ingresar algo como "Mi primer juego de trivia" si quieres.
- Tiempo de ejecución: el idioma del servidor que se utilizará para ejecutar su código. AWS Lambda admite Node.js, Java y Python. En este tutorial, usaremos Node.js.
Luego en la página, verá un editor para ingresar el código de la función.
Antes de llegar a eso, sin embargo, desplácese hacia abajo y configure el resto de las opciones:



- Manejador:
especifique la función de JavaScript que debe invocar Lambda cuando
ejecuta su código, en el formato
<JavaScript file name>.<function name>. Al usar el editor en línea, el código se guarda comoindex.js. Y como pronto veremos, la función de controlador en el juego de trivia se llamahandler. Entonces, para usar esa función, escribaindex.handler.
- Rol: El rol de seguridad de IAM que se debe usar al
ejecutar la función Lambda. Seleccione "Función de ejecución básica" en
el menú desplegable para crear una nueva función. Si ha utilizado Lambda
anteriormente, puede tener una función llamada
lambda_basic_execution. En ese caso, puede usar el existente.
Aparecerá una nueva ventana o pestaña para configurar el rol. Si no ocurre nada, asegúrese de que la configuración de su navegador esté configurada para permitir las ventanas emergentes y vuelva a intentarlo.



No se necesitan cambios a estos valores predeterminados. Haga clic en Permitir para crear la nueva regla de IAM y volver a la página anterior. También deje los campos en Configuración avanzada en sus valores predeterminados.
Luego, con la configuración lista, ingresemos el código.
Paso 3: agrega el código JavaScript
Al
definir una función Lambda, puede escribir su código en un editor en
línea directamente en la interfaz de Amazon Lambda o cargarlo como un
archivo zip. El editor en línea actualmente tiene un límite
de 20 KB, por lo que para funciones más grandes, o si necesita dividir
su código en varios archivos (por ejemplo, si usa bibliotecas), el
enfoque del archivo zip es el camino a seguir.
Esta vez, sin embargo, no
crearemos nada demasiado complejo, así que estamos bien usando el editor
en línea.
Copie el código fuente de la habilidad de muestra de "Reindeer Games" (Juegos de renos) de Amazon y péguelo en el editor de código. Reindeer Games es una implementación completa del juego de preguntas y respuestas que puedes usar libremente como plantilla para tu propio juego.



En el resto de este paso, veremos las partes principales del código del juego de trivia para ver cómo interactúa con la configuración del kit de habilidades de Alexa que crearemos más adelante en el tutorial, y para darle algunos consejos para que comience con explorando y personalizando el código por su cuenta.
El código de JavaScript comienza con una estructura de datos (líneas 18-265 en el código fuente de la plantilla) que contiene las preguntas para el juego de preguntas y respuestas. Cada pregunta de trivia consiste en una pregunta y una matriz con al menos cuatro opciones: la respuesta correcta seguida de al menos tres incorrectas:
1 |
/**
|
2 |
* When editing your questions pay attention to your punctuation. Make sure you use question marks or periods.
|
3 |
* Make sure the first answer is the correct one. Set at least 4 answers, any extras will be shuffled in.
|
4 |
*/
|
5 |
var questions = [ |
6 |
{
|
7 |
"Reindeer have very thick coats, how many hairs per square inch do they have?": [ |
8 |
"13,000", |
9 |
"1,200", |
10 |
"5,000", |
11 |
"700", |
12 |
"1,000", |
13 |
"120,000" |
14 |
]
|
15 |
},
|
16 |
{
|
17 |
"The 1964 classic Rudolph The Red Nosed Reindeer was filmed in:": [ |
18 |
"Japan", |
19 |
"United States", |
20 |
"Finland", |
21 |
"Germany" |
22 |
]
|
23 |
},
|
24 |
|
25 |
// ...
|
26 |
];
|
Al personalizar el juego de preguntas y respuestas, reemplace las preguntas por las suyas: agregue al menos 20, pero preferiblemente más. Un número bastante bueno sería de 100 preguntas. Además, recuerde que la respuesta correcta siempre es lo primero.
A
continuación, después de las preguntas, en las líneas 267-305,
encontrará la función de controlador que hemos especificado en el paso
anterior. Cuando Alexa Skills Kit envía una solicitud a la función
Lambda, se llama a esta función, handler.
La función toma dos parámetros:
-
eventcontendrá un objeto con información sobre la solicitud. -
contextrepresentará el estado de la función Lambda (por ejemplo, cuánto tiempo queda antes de que la función se agote). El parámetro de contexto también se usa para enviar una respuesta a la persona que llama.
Para obtener más información, consulte la documentación de AWS Lambda.
Así es como se ve la función:
1 |
// Route the incoming request based on type (LaunchRequest, IntentRequest,
|
2 |
// etc.) The JSON body of the request is provided in the event parameter.
|
3 |
exports.handler = function (event, context) { |
4 |
try { |
5 |
console.log("event.session.application.applicationId=" + event.session.application.applicationId); |
6 |
|
7 |
/**
|
8 |
* Uncomment this if statement and populate with your skill's application ID to
|
9 |
* prevent someone else from configuring a skill that sends requests to this function.
|
10 |
*/
|
11 |
|
12 |
// if (event.session.application.applicationId !== "amzn1.echo-sdk-ams.app.05aecccb3-1461-48fb-a008-822ddrt6b516") {
|
13 |
// context.fail("Invalid Application ID");
|
14 |
// }
|
15 |
|
16 |
if (event.session.new) { |
17 |
onSessionStarted({requestId: event.request.requestId}, event.session); |
18 |
}
|
19 |
|
20 |
if (event.request.type === "LaunchRequest") { |
21 |
onLaunch(event.request, |
22 |
event.session, |
23 |
function callback(sessionAttributes, speechletResponse) { |
24 |
context.succeed(buildResponse(sessionAttributes, speechletResponse)); |
25 |
});
|
26 |
} else if (event.request.type === "IntentRequest") { |
27 |
onIntent(event.request, |
28 |
event.session, |
29 |
function callback(sessionAttributes, speechletResponse) { |
30 |
context.succeed(buildResponse(sessionAttributes, speechletResponse)); |
31 |
});
|
32 |
} else if (event.request.type === "SessionEndedRequest") { |
33 |
onSessionEnded(event.request, event.session); |
34 |
context.succeed(); |
35 |
}
|
36 |
} catch (e) { |
37 |
context.fail("Exception: " + e); |
38 |
}
|
39 |
};
|
En las líneas 278-280 (12-14 en este fragmento), encontrará una estructura comentada if. Esta comprobación es necesaria para evitar que otras habilidades que no sea la que configure pronto invoquen su función Lambda.
Por ahora, deja el código tal como está. Más adelante en el tutorial, una vez que haya creado su Alexa Skill y tenga una ID única para ella, regrese a este control y reemplace el ID de la aplicación de ejemplo en la línea 278 con la nueva ID. Luego, elimine el comentario del código para ponerlo en uso.
Cada solicitud del Alexa
Skills Kit tiene un tipo, pasado en event.request.type.
En total, hay tres tipos de solicitud, a los cuales el servicio debe responder por separado:
-
LaunchRequest: Enviado cuando el usuario inicia la Habilidad. El código de ejemplo llama a la función auxiliaronLaunchpara inicializar el juego, selecciona las preguntas y envía la primera pregunta junto con un mensaje de bienvenida. -
SessionEndedRequest: Se envía cuando el usuario deja de utilizar la habilidad diciendo "salir", al no responder por un tiempo o si se produce un error. El código de ejemplo llama a la función auxiliaronSessionEnded, que actualmente es solo un marcador de posición y no hace nada. -
IntentRequest: Enviado cuando el usuario habla un comando que se asigna a un intento. El código de ejemplo llama a la función auxiliaronIntent.
La documentación de Amazon explica que:
"[U]n intento representa una acción de alto nivel que cumple con la solicitud hablada de un usuario. Los intentos pueden tener opcionalmente argumentos llamados intervalos que recogen información adicional necesaria para satisfacer la solicitud del usuario".
Cuando un usuario habla un comando, Alexa lo convierte en texto y lo compara con una lista de frases que entiende la aplicación. Cada frase se asigna a una definición de intención para que su código no tenga que preocuparse por analizar la entrada de forma libre del usuario, pero puede confiar en los intentos de organizar su comunicación con el usuario.
Pronto verá cómo especificar los intentos de su
habilidad, pero
primero, echemos un vistazo a la función onIntent para ver cómo el juego
maneja los intentos.
Puede encontrar la función en las líneas 327-371 en el código fuente:
1 |
/**
|
2 |
* Called when the user specifies an intent for this skill.
|
3 |
*/
|
4 |
function onIntent(intentRequest, session, callback) { |
5 |
console.log("onIntent requestId=" + intentRequest.requestId |
6 |
+ ", sessionId=" + session.sessionId); |
7 |
|
8 |
var intent = intentRequest.intent, |
9 |
intentName = intentRequest.intent.name; |
10 |
|
11 |
// handle yes/no intent after the user has been prompted
|
12 |
if (session.attributes && session.attributes.userPromptedToContinue) { |
13 |
delete session.attributes.userPromptedToContinue; |
14 |
if ("AMAZON.NoIntent" === intentName) { |
15 |
handleFinishSessionRequest(intent, session, callback); |
16 |
} else if ("AMAZON.YesIntent" === intentName) { |
17 |
handleRepeatRequest(intent, session, callback); |
18 |
}
|
19 |
}
|
20 |
|
21 |
// dispatch custom intents to handlers here
|
22 |
if ("AnswerIntent" === intentName) { |
23 |
handleAnswerRequest(intent, session, callback); |
24 |
} else if ("AnswerOnlyIntent" === intentName) { |
25 |
handleAnswerRequest(intent, session, callback); |
26 |
} else if ("DontKnowIntent" === intentName) { |
27 |
handleAnswerRequest(intent, session, callback); |
28 |
} else if ("AMAZON.YesIntent" === intentName) { |
29 |
handleAnswerRequest(intent, session, callback); |
30 |
} else if ("AMAZON.NoIntent" === intentName) { |
31 |
handleAnswerRequest(intent, session, callback); |
32 |
} else if ("AMAZON.StartOverIntent" === intentName) { |
33 |
getWelcomeResponse(callback); |
34 |
} else if ("AMAZON.RepeatIntent" === intentName) { |
35 |
handleRepeatRequest(intent, session, callback); |
36 |
} else if ("AMAZON.HelpIntent" === intentName) { |
37 |
handleGetHelpRequest(intent, session, callback); |
38 |
} else if ("AMAZON.StopIntent" === intentName) { |
39 |
handleFinishSessionRequest(intent, session, callback); |
40 |
} else if ("AMAZON.CancelIntent" === intentName) { |
41 |
handleFinishSessionRequest(intent, session, callback); |
42 |
} else { |
43 |
throw "Invalid intent"; |
44 |
}
|
45 |
}
|
Como
puede ver, la mayor parte de la función es una estructura if..else que
compara el nombre de intención de la solicitud con un conjunto de
intentos que acepta el juego. Dependiendo del nombre del intento, llama a una función de juego que coincida.
Por
ejemplo, cuando el juego recibe una solicitud con el nombre de
intención AnswerIntent, sabe que la solicitud es una respuesta a la
pregunta actual y llama a la función handleAnswerRequest para
manejarla.
Paso 4: guarda la función Lambda
Como se trata de un tutorial sobre cómo crear una habilidad para dispositivos habilitados para Alexa en lugar de desarrollar juegos, no profundizaremos en la lógica del juego. Pero ahora debes tener algunas ideas sobre por dónde empezar a explorar el código por tu cuenta.
Desplácese hasta el final de la página y haga clic en Siguiente para guardar la configuración.
En el último paso del asistente, verá una
descripción general de la configuración de la función Lambda. Verifique
que todo se ve correcto y luego haga clic en Crear función.



La función Lambda ahora se ha creado.
Si necesita cambiar alguna de las opciones del asistente, puede hacerlo en la pestaña Configuración.



Paso 5: Defina cómo se activa la función Lambda
Ahora que ha creado la función y puesto su código en su lugar, es hora de especificar cómo se llama. Haremos esto agregando un origen de evento.
Primero, haga clic en la pestaña de Fuentes de eventos.



En esta pestaña, una vez configurada, encontrará una lista de fuentes de eventos que se han configurado para esta función Lambda. Haga clic en el enlace Agregar fuente del evento para agregar uno.
Se abre una ventana emergente para elegir el tipo de fuente de evento:



Seleccione el kit de habilidades Alexa. A continuación, haz clic en Enviar.
Esa es toda la configuración que necesita para que la función Lambda escuche los eventos de Alexa Skills Kit.
El nuevo origen del evento ahora aparece en la pestaña de fuentes del evento:



Observe el identificador con la etiqueta ARN en la esquina superior derecha. Pronto lo usará para configurar Alexa Skill para llamar a la función Lambda correcta.
Ahora, vamos a definir la habilidad.
2. Configure la habilidad en el Amazon Developer Portal
Ahora ha establecido la lógica para el juego de preguntas y respuestas y ha configurado la función para ejecutar a petición del Alexa Skills Kit.
Lo que queda es crear la habilidad para que usted y sus usuarios puedan usar un dispositivo real habilitado para Alexa como Amazon Echo para hablar con el código.
Para hacer esto, usaremos el Amazon Developer Portal.
Paso 1: crea una cuenta de desarrollador de Amazon
Comience registrándose en una cuenta del portal para desarrolladores.
Haga clic en Iniciar sesión o Crear cuenta gratuita en la esquina superior derecha de la página de Amazon Developer. Primero, verás el inicio de sesión predeterminado de Amazon. Úselo para crear una cuenta nueva o usar su cuenta de Amazon existente (la misma que utilizó al registrarse en AWS, por ejemplo) para iniciar sesión.



Si no ha utilizado el portal para desarrolladores anteriormente, se le pedirá que ingrese cierta información sobre su empresa y acepte el acuerdo de distribución de la aplicación. Esta información se comparte entre todas las aplicaciones que pueda crear para Amazon Marketplace utilizando esta cuenta.
Finalmente, en el último paso, el flujo de suscripción le pregunta sobre los pagos. Actualmente, Alexa Skills no se puede vender ni comprar, por lo que si solo planea desarrollar Alexa Skills, elija No en ambas preguntas para omitir los pasos de configuración relacionados con la monetización. Si decide monetizar sus aplicaciones más tarde, siempre puede regresar a la configuración cuando sea relevante.



Haga clic en Guardar y Continuar.
Ahora, estás registrado y listo para agregar tu primera habilidad.
Paso 2: agrega tu primera habilidad de Alexa
Una vez que haya iniciado sesión en Consola, vaya a la página del kit de habilidades de Alexa: primero, haga clic en Aplicaciones y servicios en el menú superior y luego, en el sub menú, seleccione Alexa.



En esta página, verás las siguientes opciones:



Seleccione Alexa Skills Kit haciendo clic en el botón Comenzar.
En la pantalla que aparece, encontrarás todas las habilidades de Alexa que has creado:



La lista todavía está vacía, por lo tanto, haga clic en Agregar nueva habilidad para comenzar a definir la primera usando un asistente de cinco pasos que lo guiará hasta la publicación de la habilidad para que otros usuarios de Alexa puedan encontrarla y usarla.
Primero, en la pestaña Información de habilidad, ingrese información básica para identificar su nueva habilidad.



- Tipo de habilidad: elija "Modelo de interacción personalizado" ya que creará una habilidad personalizada en la que defina el modelo de interacción. Puede obtener más información sobre los diferentes tipos de habilidades de Alexa aquí.
- Nombre: Un nombre descriptivo para la Habilidad. Una vez que publique su habilidad, este es el nombre que verán sus posibles usuarios. En el ejemplo, Amazon usa Reindeer Games, pero debe seleccionar algo propio ya que ese nombre ya está en uso.
- Nombre de la invocación: el nombre que los usuarios usarán cuando quieran decirle a Alexa que ejecute esta habilidad, por ejemplo, "Alexa, abra Reindeer Games". Tenga en cuenta que no tiene que ser el mismo que el nombre de la habilidad. Cuando decida el nombre de invocación, pruebe sus ideas con un dispositivo Echo para asegurarse de que el nombre que elija sea fácil de reconocer para Alexa. De esta manera, puede estar seguro de que sus usuarios podrán activar sus habilidades sin ningún problema adicional.
Una vez que la información esté en su lugar, haga clic en Siguiente.
Tenga en cuenta que siempre puede volver a editar esta información más adelante si hay errores. Después de guardar el paso, también encontrará la ID de la aplicación de Habilidades volviendo a este paso (para que pueda usarla en su código JavaScript para verificar las solicitudes, como mencioné anteriormente).
Paso 3: definir el modelo de interacción
Un
modelo de interacción es el vínculo entre el usuario que habla con el
dispositivo habilitado para Alexa (por ejemplo, Amazon Echo) y la
función Lambda que configuramos anteriormente. En cierto modo, es la
definición de interfaz de usuario para nuestra pieza de software
impulsado por voz.
El modelo consiste en un Esquema de Intento que define el conjunto de Intenciones utilizadas por la habilidad, los parámetros de intención, conocidos como Ranuras y Expresiones, frases que el usuario dirá para ejecutar una de las intenciones definidas en el Esquema de Intento.



Esquema de intenciones
Copie y pegue el siguiente fragmento de código en el campo de texto etiquetado Esquema de intención:
1 |
{
|
2 |
"intents": [ |
3 |
{
|
4 |
"intent": "AnswerIntent", |
5 |
"slots": [ |
6 |
{
|
7 |
"name": "Answer", |
8 |
"type": "LIST_OF_ANSWERS" |
9 |
}
|
10 |
]
|
11 |
},
|
12 |
{
|
13 |
"intent": "AnswerOnlyIntent", |
14 |
"slots": [ |
15 |
{
|
16 |
"name": "Answer", |
17 |
"type": "LIST_OF_ANSWERS" |
18 |
}
|
19 |
]
|
20 |
},
|
21 |
{
|
22 |
"intent": "DontKnowIntent" |
23 |
},
|
24 |
{
|
25 |
"intent": "AMAZON.StartOverIntent" |
26 |
},
|
27 |
{
|
28 |
"intent": "AMAZON.RepeatIntent" |
29 |
},
|
30 |
{
|
31 |
"intent": "AMAZON.HelpIntent" |
32 |
},
|
33 |
{
|
34 |
"intent": "AMAZON.YesIntent" |
35 |
},
|
36 |
{
|
37 |
"intent": "AMAZON.NoIntent" |
38 |
},
|
39 |
{
|
40 |
"intent": "AMAZON.StopIntent" |
41 |
},
|
42 |
{
|
43 |
"intent": "AMAZON.CancelIntent" |
44 |
}
|
45 |
]
|
46 |
}
|
Al
observar la estructura de datos, observará cómo los nombres de
intención definidos en la lista coinciden con los del código JavaScript
que vimos anteriormente en el tutorial. Por ejemplo, el
primer intento, AnswerIntent, es el asignado a la función que verifica
si la respuesta del usuario es correcta o no.
Para obtener más información sobre el diseño de una interfaz de voz, consulte la documentación del kit de habilidades de Alexa.
Slots
Si bien la mayoría de los intentos son solo identificadores con solo un nombre, algunos de ellos especifican parámetros, conocidos como slots.
Sin dejar de mirar AnswerIntent, observe que el intento define
un parámetro, Answer, con el tipo de ranura
LIST_OF_ANSWERS.
LIST_OF_ANSWERS es un tipo de ranura personalizada, por
lo que debemos especificarlo en la configuración.
Haga clic en Agregar tipo de slot e ingrese la siguiente información:



- Tipo de entrada: el nombre del tipo de ranura, como se hace referencia en el Esquema de intención. Escriba
LIST_OF_ANSWERS. - Ingresar valores: los valores aceptados para la ranura, un valor por línea. Ingrese
los números del
1al4, cada uno en su línea para permitir que el usuario responda las preguntas diciendo el número de la respuesta correcta.
Luego haz clic en OK.
Ahora,
volvamos al JavaScript y buscamos una función llamada isAnswerSlotValid
(líneas 599-603) para ver cómo la función usa la ranura para recuperar
la respuesta del usuario:
1 |
function isAnswerSlotValid(intent) { |
2 |
var answerSlotFilled = intent.slots && intent.slots.Answer && intent.slots.Answer.value; |
3 |
var answerSlotIsInt = answerSlotFilled && !isNaN(parseInt(intent.slots.Answer.value)); |
4 |
return answerSlotIsInt && parseInt(intent.slots.Answer.value) < (ANSWER_COUNT + 1) && parseInt(intent.slots.Answer.value) > 0; |
5 |
}
|
Aquí
puede ver que el objeto de intención contiene un atributo, slots, para
pasar cualquier parámetro definido en el esquema de intención.
En este caso, solo hay uno, Answer. Por
lo tanto, al buscar en intent.slots.Answer.value, la función puede ver
qué respuesta seleccionó el usuario y comprobar si es la correcta para
la pregunta actual.
Ejemplos de expresiones
Finalmente, para completar el modelo de interacción, deberá definir Expresiones de muestra, oraciones que el usuario puede decir para invocar las intenciones especificadas en el esquema.



En el campo de texto, ingrese una frase por línea, usando el formato <Intent Name> <Phrase>. Para incluir la ranura del parámetro, use {Answer}. Luego,
cuando el usuario diga esa frase, Alexa lo analizará y llamará al
servicio que transmite la Intención coincidente y el valor analizado
para el slot Answer.
Comience por insertar los siguientes enunciados de muestra. Luego, puede continuar agregando tantas expresiones como desee. De hecho, cuantas más frases (relevantes) se te ocurran, mejor.
1 |
AnswerIntent the answer is {Answer}
|
2 |
AnswerIntent my answer is {Answer}
|
3 |
AnswerIntent is it {Answer}
|
4 |
AnswerIntent {Answer} is my answer
|
5 |
AnswerOnlyIntent {Answer}
|
6 |
|
7 |
AMAZON.StartOverIntent start game |
8 |
AMAZON.StartOverIntent new game |
9 |
AMAZON.StartOverIntent start |
10 |
AMAZON.StartOverIntent start new game |
11 |
|
12 |
DontKnowIntent i don't know |
13 |
DontKnowIntent don't know |
14 |
DontKnowIntent skip |
15 |
DontKnowIntent i don't know that |
16 |
DontKnowIntent who knows |
17 |
DontKnowIntent i don't know this question |
18 |
DontKnowIntent i don't know that one |
19 |
DontKnowIntent dunno |
Con
estos enunciados, por ejemplo, cuando el usuario dice "mi respuesta es
dos", Alexa enviará una IntentRequest a la función Lambda,
pasando AnswerIntent como intento y 2 como valor para la posición
Answer.
Haga clic en Siguiente para guardar su modelo de interacción. Crear el modelo de interacción puede tomar uno o dos minutos, así que deles algo de tiempo. Luego, una vez que se completa la compilación, estás listo para configurar tu Habilidad Alexa.
Paso 4: configura tu habilidad Alexa
En la pestaña Configuración, ingrese cierta información para configurar su habilidad y definir el servicio web que es responsable de su lógica.
- Endpoint: el método para ejecutar la funcionalidad de la habilidad. Nuestro código está en AWS Lambda, así que seleccione Lambda ARN. Luego, en el campo de texto, ingrese el identificador que señalé al final de la primera parte del tutorial.
- Enlace de cuenta: Seleccione No.
Una vez que la información esté en su lugar, haga clic en Siguiente.



3. Prueba el juego Trivia
Si bien la mejor manera de probar tu nueva Habilidad Alexa es jugar el juego de preguntas y respuestas en un dispositivo Echo real, también puedes probar la habilidad allí mismo en tu navegador, usando las herramientas en el siguiente paso del flujo Añadir Nueva Habilidad.
Paso 1: prueba el juego en un simulador
En la página de prueba, encontrará dos herramientas de prueba:



- Simulador de voz se puede usar para probar cómo dice Alexa cualquier oración. Esto es útil, por ejemplo, al diseñar las preguntas para su juego de preguntas y respuestas: si una pregunta no suena bien en el simulador de voz, intente nuevamente y reemplácela con una versión que sí lo haga.
- Simulador de Servicio prueba la funcionalidad de la habilidad, casi como si estuviera usando un dispositivo real habilitado para Alexa. Usando esta herramienta, puede escribir un enunciado y ver cómo responde su aplicación, a través del kit de habilidad de Alexa.
Entonces, pongamos el juego a prueba, usando el simulador de servicio.
En el cuadro de texto Ingresar Expresiones, escriba:
1 |
open reindeer games |
Luego, haz clic en el botón Ask Reindeer Games debajo de él.
La herramienta de prueba usa su modelo de interacción para analizar el comando y luego realiza una solicitud a la función Lambda de la habilidad.
Si todo va bien, verá la solicitud y la respuesta JSON que se muestran debajo del recuadro de comando:



En el lado izquierdo, verá la solicitud que el kil de habilidades de Alexa envió a su función Lambda y, a la derecha, cómo respondió su código.
Ahora, puede analizar la respuesta JSON, o para una experiencia Echo más auténtica, haga clic en el botón Escuchar para escuchar a Alexa pronunciar la respuesta por usted.
Una vez que hayas escuchado la pregunta, intenta responderla. Seleccione uno de los formatos de emisión que especificó en el paso anterior y escríbalo en el campo de texto Ingresar expresion.
Por ejemplo:
1 |
the answer is four |
Tenga en cuenta que debe escribir el número como una palabra y no como el número 4.
¿Recibió la respuesta, verdad? Continúe probando con diferentes expresiones y cambios de flujo hasta que tenga la certeza de que la aplicación está funcionando como se espera, y usted tiene una buena comprensión de cómo funciona.
Si algo
sale mal y recibes una respuesta inválida del servidor,
estos son algunos de los errores comunes que tal vez quieras verificar,
como se detalla en los desarrolladores del código de ejemplo:
- ¿Copió el ARN correcto para su función Lambda en su Habilidad en el Portal del Desarrollador?
- ¿Estás usando el nombre de invocación correcto? Tal vez lo cambiaste a algo diferente a los reindeer games y ahora sigues probando con el nombre del ejemplo.
- ¿Estás diciendo iniciar, abrir o abrir?
- ¿Estás seguro de que no tienes otras habilidades en tu cuenta con el mismo nombre de invocación?
- Para esta plantilla específicamente, debe tener un mínimo de siete preguntas y respuestas para que funcione la lógica comercial.
Paso 2: prueba el juego en un dispositivo
Como vimos en el paso anterior, la herramienta en línea es tan buena como un dispositivo real para probar la lógica de la aplicación y el esquema de interacción.
Lo que este método de prueba no le mostrará, sin embargo, es qué tan bien Alexa será capaz de entender y analizar los enunciados. Entonces, si está creando una habilidad que planea publicar, también puede hacer algunas pruebas finales usando un dispositivo en lugar de solo estas herramientas en línea antes de enviar su habilidad.
El equipo de certificación de Amazon Alexa también realizará pruebas exhaustivas antes de aceptar su habilidad en el mercado. Si su habilidad aún no está lista para la certificación, le enviarán comentarios adicionales para informarle sobre los cambios necesarios y para ayudarlo a preparar su habilidad para la publicación.
Para probar el juego en su dispositivo Echo, primero registre el dispositivo con la dirección de correo electrónico que usó para registrarse en su cuenta de desarrollador en Amazon Developer Portal. Una vez hecho esto, puede usar la habilidad como lo haría un usuario final real.
Consulte la documentación de Alexa para obtener más instrucciones de prueba.
4. Publica tu habilidad Alexa
Cuando su habilidad esté lista para el horario de máxima audiencia, puede continuar y lanzarla al mundo para que la vean.
Sin embargo, no vayas a publicar la aplicación de ejemplo tal como está.
En cambio, haz tuyo el juego, usando la plantilla y lo que has aprendido en este tutorial como base de tu nueva y sorprendente habilidad. Modifique el código en el editor AWS Lambda para reemplazar las preguntas, agregar nuevos enunciados a la configuración de habilidades y, tal vez, hacer algunas otras modificaciones que le parezcan adecuadas para su versión del juego de preguntas y respuestas.
Luego, en la pestaña Prueba, una vez que tenga confianza en su aplicación, haga clic en Siguiente para pasar a los dos pasos finales que conducen a la publicación de la habilidad.



En la pestaña Información de publicación, describa la habilidad con tanto detalle como sea necesario para que los nuevos usuarios puedan encontrar fácilmente sus habilidades, tener una idea de cómo funciona y por qué vale la pena intentarlo, y cómo usarlo. ¡Esta es la única oportunidad que tiene para atraer nuevos usuarios!
El icono es también un elemento de marketing importante. Debería ser algo que los usuarios potenciales notarán y sentirán curiosidad. Además, asegúrese de subir solo las imágenes que tiene derecho a usar.
En cualquier momento mientras edita los datos, puede guardar los cambios haciendo clic en Guardar y obtener una vista previa de la página de descripción de la habilidad en la aplicación Alexa Companion. Ahí es donde aparecerán las descripciones cuando la habilidad esté activa.
Repase cuidadosamente los campos, prestando mucha atención a las instrucciones. En la captura de pantalla anterior, puede ver los valores de ejemplo de la plantilla de Reindeer Games de Amazon.
Si usa variaciones de estos valores, recuerde reemplazar "Juegos de renos" en Frases de ejemplo con el nombre de invocación de su habilidad.
Las instrucciones de prueba solo son visibles para el equipo de certificación de Amazon Alexa. Simplemente puede mencionar: "Estoy usando la plantilla de habilidades Trivia basada en el ejemplo de código de juegos de renos".
Luego, cuando esté listo, haga clic en Siguiente.



En este paso final, responderá algunas preguntas sobre las opciones de privacidad de su juego.
Para un juego de trivia basado en este tutorial, seleccione No para ambas preguntas Sí / No: la habilidad no permite a los usuarios gastar dinero o recopilar información del usuario.
La URL de Política de privacidad y la URL de los Términos de uso son opcionales.
Cuando creas que el juego está listo, haz clic en Enviar para verificación. Luego, espere la opinión del equipo de Alexa Skills: recibirá correos electrónicos de progreso y posiblemente algunas sugerencias sobre cómo puede mejorar sus habilidades.
Y si todo va bien, dentro de poco su juego de preguntas y respuestas estará disponible para que los usuarios lo prueben en un Amazon Echo o en cualquier dispositivo compatible con Alexa.
¿Que sigue?
Ahora ha implementado su primera Habilidad Alexa y debe tener una buena comprensión de los componentes básicos y el proceso utilizado para construir uno. Pero esto es solo el principio.
Investigue más a fondo, invente nuevas formas de usar la interfaz de voz o agregue una interfaz de voz a su aplicación web existente. El mercado de aplicaciones basadas en voz solo está comenzando, y aún quedan muchas ideas sin usar para que las implemente.
¡Diviértete diseñando el futuro!



