Todos sabemos que ahora mismo hay un hype impresionante sobre el tema de los altavoces inteligentes, Sopinet no quiere quedarse detrás y como curiosos que somos, hemos empezado a darle voz a nuestra gata Azur (ahora si :D). Te contamos como lo hemos hecho y cómo puedes desarrollar tu propia Skill en Amazon Alexa.
Introducción
Todo empezó hace cosa de un mes y medio cuando Amazon me contactó comentando si me apetecía ser betatester de Amazon Echo (que aun no ha salido en España de manera oficial). Digamos que tardé como 0.1 segundos en decir “¡CLARO QUE SI!”. Un par de semanas después, tenia mi flamante Amazon Echo en casa. Después de probar el altavoz, pensé en lo chulo que podría ser preguntar al altavoz como vamos, quien esta trabajando, etc. De modo que me puse manos a la obra. Voy a compartir como hice mi primera skill en Alexa en este mismo post.
Recordaros que aunque no tengais un Amazon Echo, podeis usar el simulador que te ofrece Amazon para hacer las pruebas.
Pasos para desarrollar una Skill en Alexa
Esto es lo que hariamos
1.- Crear una cuenta en AWS
2.- Crear una cuenta de desarollador
3.- Instalación del ask-cli y configuración con AWS
4.- Crear nuevo proyecto y explicación de la estructura.
5.- Picar código
6.- ask deploy
7.- Testing y a certificación!
1. Crear una cuenta en AWS
Lo primero que tenemos que hacer es abrirnos una cuenta en Amazon Web Services (AWS), esto lo necesitaremos para usar la herramienta Lambda que nos permitirá incluir alli el código del backend de nuestra Skill. Usar Lambda es totalmente gratuito a menos que superemos las 1.000.000 peticiones al mes.
Para abrir una cuenta en AWS simplemente tenemos que ir a Amazon y seguir los pasos. Te pedirá los datos de la tarjeta, pero eso es simplemente para la verificación de la cuenta.
Cuando hayamos abierto una cuenta en AWS, empezará a contar un año de pruebas de otros servicios como por ejemplo EC2, que podrías usarlo para otras cosas 🙂
2. Crear una cuenta de desarollador
Una vez abierto una cuenta en AWS, tenemos que abrir una cuenta de desarrollador en amazon, lo puedes hacer en el siguiente enlace: developer.amazon.com
Estando logueado, veremos un panel para poder crear skills, alli nosotros NO le vamos a dar, ya que vamos a usar el ASK-CLI para hacer deploy de nuestro codigo de la Skill.
3. ASK-CLI
Para instalar ask-cli necesitamos tener instalado node, podemos comprobarlo ejecutando
node --version
Si ya lo tenemos instalado, podemos seguir con el siguiente paso, que es la instalacion de ask-cli, para ello:
npm install -g ask-cli
Ahora tenemos que configurarlo con el siguiente comando:
ask init
Una vez aqui, tenemos que seguir los pasos que sale en la web de desarrolladores de amazon para dar permisos a ask-cli para usar AWS y la cuenta de developer que hemos creado antes.
4. Crear nuevo proyecto y explicación de la estructura
Ha llegado el momento de crear (por fin) el proyecto, para ello tenemos que ejecutar:
ask new
Esto lo que te hace es crear un nuevo proyecto con el template de “hello world”.
Especificado un nombre para la skill, se nos empezará a descargar la plantilla sobre con lo que vamos a trabajar.
Esto sería la estructura que tendrían los archivos:
├── lambda │ └── custom │ ├── index.js │ ├── node_modules │ │ ├── ask-sdk-core │ │ │ ... │ │ └── ask-sdk-model │ │ ... ├── models │ └── en-US.json └── skill.json
- skill.json: aquí es donde se especifica en un archivo json el idioma que tendría la skill, el nombre de la skill, las descripciones, unos ejemplos de las frases que usaríamos, etc…
- models/en-US.json: aqui es donde se configura para el idioma ingles los intents, si queremos hacer una skill en español, simplemente podríamos renombrar el archivo a ES-es.json. Aqui se define lo siguiente:
- invocationName: aquí se define el nombre por la que la skill escuchará (Alexa, abre <nombre_skill>)
- intents: son como rutas donde la skill puede ir, por ejemplo dentro de la skill de Sopinet podríamos preguntarle “Alexa, pregunta a <nombre_skill>¿Quienes están trabajando ahora mismo en remoto?”, aquí entraría en una intent que se podría llamarse “enLaOficinaIntent”, a su vez tambien le podriamos preguntar “Alexa, pregunta a <nombre_skill> ¿A quien le toca poner hoy el desayuno?” y en este caso entraria en otra intent dentro de la misma skill.
Por defecto tenemos una HelloWorldIntent.Las intents suelen tener “samples”, que son las frases por las que entrará en esa intent.
Para el ejemplo de antes, seria algo asi:"intents": [ ... { "name": "enLaOficinaIntent", "slots": [ ], "samples": [ "Quienes están trabajando ahora mismo en remoto" ] }, { "name": "desayunosIntent", "slots": [ ], "samples": [ "A quien le toca poner hoy el desayuno" ] } ] ...
- lambda/custom/index.js: aquí es donde iría toda la lógica de las skills, como por ejemplo las respuestas a las preguntas que le haríamos a Alexa. Os comento mas abajo sobre este archivo
- lambda/custom/node_modules: aqui como en cualquier proyecto con node, aqui es donde se guardan las librerias que usa el proyecto.
5. Picar código
Ahora toca la parte mas divertida de todo esto, picar código, vamos a empezar con abrir nuestro editor de texto preferido con el archivo index.js.
Vamos a centrarnos en este bloque:
const HelloWorldIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'HelloWorldIntent'; }, handle(handlerInput) { const speechText = 'Hello World!'; return handlerInput.responseBuilder .speak(speechText) .withSimpleCard('Hello World', speechText) .getResponse(); }, };
El nombre del constante va a ser “<nombre_intent>Handler” a partir de ahora, todo lo que hay entre los corchetes es lo que se va a ejecutar cuando las samples coincidan con el intent. (A quien le toca poner hoy el desayuno –> desayunosIntentHandler). La variable speechText es lo que diría en voz alta (protip: puedes añadir entonaciones personalizados/mp3/…, mas info aqui).
.speak() -> esto es lo que te diria en voz alta Alexa.
.withSimpleCard(”,”) -> esto lo que hace es imprimir por pantalla la respuesta, ya que existen dispositivos alexa con pantalla (obligatorio a la hora de subirlo a la tienda). El primer parametro es el titulo y el segundo es el cuerpo del mensaje.
Cualquier pregunta que le hagas a tu skill que no este contemplado, te dira algo parecido a: “Perdona. No he podido encontrar la respuesta a lo que me has preguntado.”, si le preguntas “Alexa, abre ” sin mas, entonces entraria en una intent por defecto llamado “LaunchRequestHandler”.
Recuerda que esto es JS, que fluya la imaginación 😀
6. ask deploy
Cuando hayamos terminado con la skill, podemos subirlo ejecutando en la terminal:
ask deploy
Esto tardaría unos segundos y lo tendríamos subido a lambda y a la consola de desarrolladores de Amazon.
7. Testing
Una vez subido, podemos probarlo directamente en el panel de desarolladores de Amazon, en la pestaña “Test”, alli tienes un Chat donde puedes hablar con tu skill.
Cuando hayas comprobado de que la skill funciona correctamente, puedes pasarlo para certificación, para ello hacemos clic en la pestaña “Distribution”, revisamos nuestra info y si esta todo correcto lo subimos a certificación. Una vez mandado, en cuestión de un par de días te responden diciendo que si lo han aceptado o rechazado, en caso de que lo han rechazado, te dirán donde has fallado para que lo soluciones.
Si tenéis vuestra skill publicada, ponedlo por los comentarios que le eche un ojo 😀
Deja un comentario