Mission First — Una causa para divulgar es una oportunidad para la Voz.

Reemplazando la Voz de Alexa con Clips de Audio

Juan González
Diseñando para la Voz
6 min readSep 19, 2018

--

Como parte importante de mi proceso de aprendizaje, en cada nuevo proyecto que decido explorar — independientemente de su complejidad — procuro incluir algunos conceptos que sean totalmente nuevos para mi como desarrollador.

Para la implementación de mi primera Skill destinada al mercado Americano, he decidido trabajar por primera vez con ficheros de audio. Es algo novedoso que resulta simple de implementar y que ofrece resultados muy interesantes.

Inicialmente tenía en mente realizar algo al estilo Jeopardy, una introducción basada en un fichero de audio, y el resto de la skill con el clásico TTS (Text To Speech) de Alexa. Lo cierto es que una vez empecé a jugar con la potencia de los ficheros de audio, este plan cambió por completo. Me resultaba de repente mucho más interesante la idea de reemplazar todas las interacciones de Alexa, y verificar que en efecto se puede lanzar una skill sin que intervenga la voz del bot de Amazon.

La elección del foco de ésta skill fue simple. Buscaba implementar un proyecto del tipo trivia, el cual pudiese ser utilizado para divulgar información sobre alguna causa en particular. La causa a divulgar: Mission First. Un programa recién lanzado en el estado de Virginia, en los Estados Unidos, para movilizar veteranos guerra y sus familias en las próximas elecciones al Congreso de ese país.

El Flujo de la Conversación

El diseño del flujo es bastante simple. Al invocar la skill, luego de escuchar el mensaje de bienvenida, podemos pedir información (ayuda) sobre como utilizarla y podemos pedir un fragmento de información sobre el programa (fact).

En todo momento podemos solicitar a la skill que repita la información que nos ha dado previamente y a su vez, como es normal en este tipo de aplicaciones, podemos salir del todo y cerrar la skill. En este caso se escucha un último mensaje de agradecimiento y despedida.

Diagrama de flujo de voz para la skill Mission First.

Desde el punto de vista del desarrollo de esta skill no existen grandes retos técnicos. Para el caso de Mission First, he decidido jugar un poco con un concepto que vi en alguna oportunidad revisando tutoriales de otros desarrolladores: el interruptor.

Un switch o interruptor consiste básicamente en crear una variable que te permita cambiar por completo algún estado de la skill según una preferencia particular. En este caso me interesaba la idea de poder pasar de una skill con ficheros de audio — su comportamiento por defecto — a una skill que utilizase la voz de Alexa.

Preparación de los Ficheros de Audio

Para lograr este efecto solo es necesario garantizar que se cuentan con pares de recursos para cada elemento de la interfaz de voz. Por cada nota de audio, existe una cadena de texto equivalente.

Ficheros de audio en formato MP3.

Es importante destacar que los ficheros de audio a utilizar deben cumplir con ciertos requerimientos técnicos de configuración. A la hora de exportar los ficheros, debemos tener en cuenta que tanto el formato como su longitud, bit rate y sample rate.

Requerimientos para los ficheros de audio de la skill.

Existen diferentes formas de grabar y exportar con la configuración correcta cada fichero. En este caso, yo he utilizado la herramienta gratuita Audacity. Es importante mencionar que por tema de licencias, Audacity necesita que instalemos una librería adicional — LAME — que podemos descargar fácilmente de su web oficial.

Configuración de los ficheros MP3 al momento de exportar.

Los ficheros de audio que vamos a utilizar en nuestra skill deben encontrarse disponibles y accesibles en un repositorio web. En este caso, he decidido utilizar un bucket de Amazon S3 para colgar todos los ficheros de mi skill. Una de las ventajas de utilizar S3 es que podemos decidir donde ubicar geográficamente nuestros ficheros. En este caso resulta lógico pensar que un servidor en los Estados Unidos ofrecerá un mejor rendimiento que uno ubicado en Europa.

Ficheros de audio en el bucket Amazon S3 ubicado en la Costa Este de los Estados Unidos.

Otro detalle a tener en cuenta es que aún cuando debemos configurar los permisos de visibilidad de cada fichero para su acceso público, el bucket que los contiene puede seguir siendo privado.

La Lógica en la Función Lambda λ

Una vez configurados todos los ficheros de audio y sus correspondientes cadenas de texto, solo nos queda verificar en la implementación que al momento de “pasar el interruptor”, la función lambda se encargue de ejecutar las instrucciones correspondientes a cada caso.

La variable useHumanVoice representa “el interruptor” entre TTS y ficheros de audio.

Una simple estructura del tipo if {} else {} me permite decidir la modalidad de ejecución en cada elemento de la interfaz. Quizás exista una forma más elegante de realizar esta configuración “en caliente,” pero de momento la simplicidad tiene prioridad en todos mis experimentos.

Uso del “interruptor” a lo largo de la función lambda de mi skill.

El resultado es el esperado. Al invocar la skill y durante todo su ciclo de vida, al menos que se indique lo contrario, la voz de Alexa ha sido completamente reemplazada por las grabaciones suministradas vía directrices del SSML (Speech Synthesis Markup Language). Cambiar a la voz de Alexa será tan simple como modificar el valor de useHumanVoice a falso.

Pruebas Más Allá del Simulador

Realizar pruebas en dispositivos Echo en este momento sigue siendo todo un reto en España.

En este caso, haciendo uso de una tableta de Amazon — que cree que se encuentra en los Estados Unidos — y del programa Beta para desarrolladores de Amazon, puedo ingeniármelas para realizar pruebas en un dispositivo real.

A través del programa de pruebas Beta es posible probar la skill en una tableta de Amazon.

Durante el proceso de desarrollo, las pruebas en el simulador son más que suficiente para verificar que todo funciona correctamente. La principal ventaja que nos da el poder probar en un dispositivo real, es precisamente el poder observar a un usuario final interactuar con la skill. Es aquí cuando ponemos a prueba nuestro diseño del modelo de interacción y todos los casos que se alejan del “happy path”.

Proceso de Certificación para el Marketplace Americano

Una vez terminadas las pruebas básicas, el proceso de certificación resulta sorpresivamente rápido. En tan solo un día, la skill de Mission First es aprobada y se encuentra disponible en el marketplace de los Estados Unidos.

Mission First en el marketplace Americano.

Mi experiencia con el proceso de certificación de Amazon ha sido muy positiva hasta la fecha. Tanto para las cuatro skills publicadas en el marketplace Español (a la espera de su lanzamiento) como para la primera skill publicada en el marketplace Americano.

Es importante destacar que Amazon te envía una encuesta de satisfacción en cada uno de los correos de confirmación de certificación. De esta forma mantienen un ciclo de feedback constante con los desarrolladores.

Correo informativo sobre la publicación de la skill con encuesta de satisfacción.

El uso de ficheros de audio, demostrado en una de sus implementaciones más simples en la skill de Mission First, tiene un enorme potencial a la hora de ofrecer experiencias de usuario con grandes niveles de empatía.

Ya sea para ampliar la divulgación sobre un proyecto político, una causa benéfica, o para entretener a los usuarios con juegos de aventura, el uso de ficheros de audio nos permite a los desarrolladores crear conexiones más profundas con nuestros usuarios. Conexiones que son realmente difíciles de lograr con otro tipo de plataforma distinta a la voz.

Los comentarios, mejoras a las soluciones propuestas y feedback en general son siempre bienvenid@s.

Gracias por leer,

Juan.

Diseñando para la Voz es una iniciativa personal de Juan González Ponce que trae contenido relacionado al mundo del desarrollo de Alexa Skills para el servicio de Amazon, en Castellano, con la finalidad de compartir ideas y lecciones aprendidas en el camino.

--

--