DEV Community

Joaquín Engelmo (a.k.a. Kini)
Joaquín Engelmo (a.k.a. Kini)

Posted on • Originally published at kinisoftware.com on

Creando un custom skill para Alexa (V): Probando nuestro skill con las herramientas de Amazon

En el anterior post ya completamos el desarrollo de una primera versión funcional de nuestro skill. Tenemos creada la parte front en la Alexa Developer Console y tenemos la parte back en AWS Lambda. Ahora podemos pasar a probar el skill usando las propias herramientas de Amazon. Esto fue lo primero que yo hice para ver que todo lo que hicimos en los anteriores posts habían ido bien.

Probando el skill desde la Alexa Developer Console

Amazon nos ofrece una forma de probar nuestro skill con un simulador que admite tanto input de texto como hablado. También tiene otras opciones como meter un JSON directamente o probar la personalidad de nuestro skill soportando SSML. Eso es algo con lo que aún no he jugado mucho, pero tengo ganas de verlo.

Yo usé este simulador para probar mi skill hablando y con input de texto. Recuerda que el skill puede ser usado por distintos dispositivos. Por ejemplo el móvil tiene la posibilidad de interactuar con texto, no sólo con la voz.

Además, el simulador nos da información adicional a la respuesta propia del skill. Si nuestro skill tuviera la capacidad de crear una respuesta visual, una card, también lo podríamos ver en el simulador así como otros logs.

Para probar el skill tenemos que invocarlo con la "wake word". No uséis la palabra Alexa al principio porque no funciona, true story :)

En el ejemplo que os pongo arriba yo simplemente invoqué al skill, sin one-shot invocation, y me dio la respuesta del LaunchRequestHandler ya que era una petición de tipo LaunchRequest. Esta respuesta me la dio tanto en texto como por voz.

Side note: La primera vez tarda un poco en responder porque está levantando el lambda, creando una sesión nueva. Esta experiencia también la van a tener los usuarios con primeras peticiones y tal. Una vez está la sesión creada va todo mucho más rápido.

Skill I/O

Esta opción del simulador nos permite ver la entrada y salida del skill en formato JSON.

Input

En el input podemos ver info propia de nuestro skill y de la sesión creada en la invocación. Además podemos ver información del dispositivo usado para interactuar con el skill y, al final, veremos información de gran utilidad sobre la petición.

El type, en este caso, es una LaunchRequest. Esto hará que la petición llegué al LaunchRequestHandler. Si hubiéramos realizado una one-shot invocation o hubiéramos ya invocado un intent después del launch tendríamos una IntentRequest:

Por ejemplo, he ejecutado el intent de ayuda y podemos ver cómo Alexa lo ha resuelto indicando que el intent es AMAZON.HelpIntent y da otra información asociada al intent.

Cuando añadamos un slot a nuestro intent veremos cómo aquí aparecerá el valor que Alexa ha interpretado y se enviará al back. En mi caso será de utilidad para saber con exactitud, sobre ejemplos, el formato de fechas que llegarán al back. Esto ya lo veremos.

Output

Esta opción del simulador nos muestra la salida de la ejecución de nuestro skill a la petición.

Aquí vemos la respuesta de la invocación. Interesante comprobar:

  • El valor del parámetro shouldEndSession, importante tenerlo en cuenta para la certificación de nuestro skill.
  • El uso de SSML, tanto en el outputSpeech como en el reprompt en el caso de tenerlo.
  • La info de la card que se va a mostrar en dispositivos con pantalla.

Device Display

Aquí podremos ver el resultado de invocar nuestro skill en un dispositivo con pantalla. Además podemos cambiar entre tipos de pantallas en el selector.

En mi caso es una salida bastante triste porque no he preparado mi skill para eso, pero creo que podría ser interesante evolucionarlo para mostrar los carteles de las películas e incluso los trailers de las mismas. Ya veremos si hago eso en algún momento :)

Device Log

De aquí no os puedo contar mucho porque la verdad es que no he mirado a fondo lo que ofrece. Así por encima proporciona información como la del Skill I/O y otros muchos más detalles sobre cada petición. Viene desactivada por defecto al entrar en el simulador y a mí se me pasó las primeras veces. Si alguno de los que paséis por este post usáis esta opción me encantaría tener algún comentario al respecto ;)

Bola Extra: Utterance Profiler

Una feature que no tenía la Alexa Developer Console cuando yo hice este skill era el Utterance Profiler.

Con esta herramienta se puede probar, desde la propia ventana de edición de un utterance, su comportamiento ante request de ejemplo. Especialmente útil cuando tenemos slots para ver que valores toma.

Os dejo aquí un link de un vídeo donde German Viscuso cuenta cómo usarlo.

Probando el back desde la consola de AWS Lambda

Con lo que he contado hasta ahora estamos probando nuestro skill E2E, tanto front como back y podríamos quedarnos ahí. En mi caso, con la intención de aprender más de AWS Lambda, estuve buscando cómo se podría probar el back desplegado sin tener que pasar por el simulador.

Podemos configurar test events de distintos tipos que nos ayudarán a probar el back de forma separada. De entre esos tipos podemos crear uno nuevo usando plantillas predefinidas para skills de Alexa.

Un ejemplo simple sería crear un evento para simular el LaunchRequest que vimos en el punto anterior. Para esto podemos usar la plantilla de "Amazon Alexa Start Session", darle un nombre y, sin tocar nada más, guardarlo.

Yo le llamé LaunchRequest y, al lanzarlo, podemos ver como resultado lo mismo que vimos en el output del Skill I/O. De esta forma podemos crear tantos eventos de prueba como creamos necesarios simulando otros intents y valores de slots si los tuviéramos. Aparte de info del skill tendremos también info sobre el propio lambda como la duración de la llamada, el tiempo de bill, memoria usada, etc.


Con lo que he contado hasta ahora ya nos podríamos animar a llevar nuestro skill al proceso de certificación ya que tenemos algo funcional. Yo, llegados a este punto, decidí añadirle la gestión de un slot de tiempo en mi intent principal antes de intentar publicar nada. Os lo cuento en el próximo post ;)

Top comments (0)