Nic Raboy

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con facilitar la comprensión del desarrollo web y móvil.

Hace poco escribí un tutorial sobre crear un AWS Lambda que se comunicaba con el Couchbase NoSQL utilizando el lenguaje de programación Go. Este tutorial anterior se basaba en un desarrollo sin servidor estándar, pero ¿y si quisiéramos llevar las cosas al siguiente nivel? Por ejemplo, los dispositivos impulsados por Amazon Alexa, en la mayoría de las circunstancias, aprovechan AWS Lambda para funcionar. Entonces, ¿qué haría falta para que nuestra función fuera compatible con Alexa?

En este tutorial vamos a ver cómo trabajar con las peticiones de Amazon Alexa y responder adecuadamente para que Alexa retransmita un mensaje de audio al usuario. Los datos con los que respondamos vendrán de nuestra base de datos y serán gestionados con el lenguaje de programación Go.

 

Creación de una función lambda compatible con Amazon Alexa

Si no ha visto mi tutorial anteriorte sugiero que le eches un vistazo antes de seguir leyendo. El tutorial anterior es corto y proporcionará alguna perspectiva en el desarrollo de funciones Lambda con Go y Couchbase.

A continuación, cree un proyecto dentro de su **$GOPATH** con un archivo **main.go** en él. Desde la línea de comandos, ejecute lo siguiente para descargar nuestras dependencias:

 

De nuestras dependencias, estamos descargando el SDK de AWS Lambda para Go así como el SDK de Couchbase para Go. También estamos descargando un paquete UUID para generar valores únicos para representar nuestras claves de documento, que es lo que teníamos en nuestro tutorial anterior. Sin embargo, esta vez estamos descargando otro paquete que contiene modelos para cada una de nuestras peticiones y respuestas. Alexa espera que tanto las peticiones como las respuestas estén en un determinado formato JSON, que es prácticamente el único propósito del paquete Alexa.

En el archivo **main.go**, añade el siguiente código boilerplate:

¿Qué ocurre en el código anterior?

Después de importar las dependencias descargadas, podemos crear un archivo Todo que contendrá nuestros datos. Al igual que en el ejemplo anterior, vamos a almacenar la información de la lista de tareas pendientes y a consultarla.

En el principal estamos estableciendo una conexión con nuestra instancia de Couchbase y abriendo nuestro bucket. Es importante que nuestra instancia de Couchbase esté alojada en algún sitio porque Lambda necesita poder interactuar con ella. Esto significa que probablemente no puedas hacer pruebas con Couchbase ejecutándose en tu host local.

Cuando se trata de Alexa, las cosas suceden basándose en acciones conocidas como intenciones. Estas acciones son típicamente una petición a Alexa. Para cualquier Skill, puedes interactuar con Alexa de muchas maneras, por lo tanto hay muchas intenciones. Nuestra Skill tendrá un Acerca deIntent para información, un CrearTodoIntent para guardar datos, y un GetTodosIntent para consultar nuestros datos y devolvérselos al usuario. Estos intentos serán controlados por nuestro IntentDispatcher función.

La idea que subyace a nuestro IntentDispatcher es que llegará una petición de Alexa. Dentro de la solicitud, Amazon va a averiguar la intención correcta y podemos utilizar esa información. Esta información de intención se definirá más adelante. Usando la información de la intención podemos llamar a la función correcta.

Así que veamos el Acerca deIntent función:

Si la función es llamada, podemos usar el paquete Alexa para formatear nuestra respuesta como JSON correcto y devolverla. La respuesta tendrá un título y un texto que se le dirá al usuario.

Ahora veamos el CrearTodoIntent función:

Si nuestro despachador elige la función anterior, tomaremos los datos dinámicos, conocidos como slot, y los insertaremos en Couchbase. Los datos de la ranura serán analizados por Amazon e incluidos en la solicitud, al igual que la intención. Los datos de la ranura serán devueltos y hablados por Alexa cuando hayamos terminado.

La función final es más larga, pero no mucho más complicada:

En el HandleGetTodosIntent estamos consultando el cubo abierto usando N1QL. Con los resultados estamos formando una cadena de datos que será devuelta al usuario y hablada por Alexa.

Una vez completado el código, podemos centrarnos en el despliegue.

Desplegar y probar la función Lambda como una Alexa Skill

Antes de que podamos desplegar en la tienda Skill, tenemos que preparar nuestro código de función para Lambda. Al igual que en el ejemplo anterior, tenemos que realizar una compilación cruzada de nuestra aplicación para Linux, que es lo que utiliza Lambda.

Desde la línea de comandos, ejecute lo siguiente:

Asegúrese de cambiar el nombre binario con el del nombre de su archivo binario real creado a partir del comando de compilación anterior. Si no puede ejecutar el comando zip siga adelante y archive el archivo como más le convenga.

Con el archivo **handler.zip** en la mano, ve al panel de gestión de Lambda (https://console.aws.amazon.com/lambda) y crea una nueva función utilizando los valores predeterminados. Asegúrate de que estás usando un proyecto Go.

Para el activador, elija **Alexa Skills Kit** y proceda a cargar su archivo ZIP. Para el **Handler** asegúrate de proporcionar el nombre de tu archivo binario, no el nombre de tu archivo ZIP.

La última cosa a tener en cuenta es su id ARN. Este valor ARN será necesario cuando configuremos Alexa.

Ahora ve a la Alexa Developer Console (https://developer.amazon.com/alexa/console) para que podamos crear una nueva Skill. Como parte del proceso de creación, tendrás que hacer cuatro cosas:

 

  1. Nombre de la invocación
  2. Intenciones, muestras y franjas horarias
  3. Modelo de construcción
  4. Punto final

El nombre de la invocación no tiene por qué coincidir con el nombre de tu Skill, pero deben ser palabras reales que se puedan pronunciar con todos los acentos. Si empiezas a inventarte palabras o utilizas palabras complicadas, buena suerte con Alexa a la hora de entender lo que dice la gente.

El endpoint es el ARN que copiaste en el paso anterior desde la consola de Lambda. Asegúrate de pegarlo.

La mayor parte de nuestro trabajo consistirá en crear intents, expresiones de ejemplo y nuestros datos dinámicos de ranura. Tenemos que crear tres intentos para que coincida con lo que tenemos en nuestro código Golang. Cada uno de nuestros intentos debe tener una lista de frases que activan el intento.

Por ejemplo, el GetTodosIntent podría tener los siguientes ejemplos de enunciados:

 

Cuantas más frases de ejemplo tengas, mejor funcionará tu Skill. Básicamente, los ejemplos ayudan a Alexa a determinar qué intención activar en tu código. El CrearTodoIntent es donde las cosas se complican un poco porque esperamos datos dinámicos.

Eche un vistazo a los siguientes ejemplos de enunciados:

 

Observe que tengo {todo} en los ejemplos anteriores que coincide con la de mi ranura en mi código. El {todo} es en realidad una variable para información dinámica. Esta información se guardará en nuestra base de datos. Sin embargo, tenemos que definir qué tipo de datos {todo} es.

 

Crear un tipo de ranura personalizada y darle algunos valores. Por ejemplo, he añadido:

No necesitas una lista exhaustiva, pero son datos de aprendizaje para Alexa, y ayudan a Alexa a identificar qué tipos de información deben considerarse información sobre ranuras. El hecho de que un texto no aparezca en la lista no significa que Alexa no lo vaya a recoger.

En este momento, debería ser capaz de construir su Skill. Escriba algunas frases de ejemplo en el portal de pruebas para verlas en acción antes de intentar desplegarlas.

Conclusión

Acabas de ver cómo crear una Amazon Alexa Skill usando Golang y Servidor Couchbase. Esta fue una extensión de un tutorial anterior que escribí titulado, Desarrollo de funciones AWS Lambda con Golang y Couchbase NoSQL.

También hay que tener en cuenta algo sobre nuestra Skill. Amazon tiene varias intenciones obligatorias que deben estar presentes para ser aprobadas. Por ejemplo, debe haber intents para detener y cancelar acciones. Nosotros no las hemos añadido, pero seguirían la misma estrategia.

Si quieres ver otro ejemplo de desarrollo de una Skill con Golang, echa un vistazo a mi tutorial titulado, Crear una habilidad de Alexa con Golang y AWS Lambda.

Autor

Publicado por Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase

Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro boletín mensual para desarrolladores.

Dejar una respuesta