clean code, testing and deploy alexa skills€¦ · •/handlers: refactorización de index.js....

20
Clean code, testing and deploy Alexa Skills Javier Campos [email protected] https://www.linkedin.com/in/franciscojaviercampos

Upload: others

Post on 05-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

Clean code, testing and deploy Alexa Skills

Javier Campos

[email protected]

https://www.linkedin.com/in/franciscojaviercampos

Page 2: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

Índice

1. Presentación

2. Qué vamos a hacer

3. Configuración inicial (ask cli, vscode, profiles…)

4. Template sano (estructura, testing y deploy)

5. Bonus: tests automáticos e2e en Alexa

6. Crear una nueva skill a partir del template

7. Preguntas

Page 3: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

1. Presentación

• Cofundador Mobilendo (2010)

• +200 apps para clientes

• Product Manager app FUIFI (B2E: registro horario, planes de carrera, comunicación…)

• Con Alexa:• +10 skills propias para Alexa• 2º Premio Nacional HackForGood con una Skill Alexa (hackaton con amigo Joan)• Participante en Alexa APL Multimodal Contest (‘test autoescuela’ e ‘información

medicamentos’)• Skills para clientes (sector educación)• Experimentos Raspberry + Google + Alexa + Snips• Open source https://github.com/javichur• Posts https://javiercampos.es/blog

Page 4: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

1. Presentación

Page 5: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

1. Presentación

Page 6: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

2. Qué vamos a hacer

• Configuración inicial

• Template sano. A partir del template oficial “Hola Mundo”, creado un nuevo template con:• Soporte Alexa Presentation Language (APL) y ejemplos• Events (onPress y Back) y Layouts personalizados con APL• Multiidioma (modelo y código)• Testing automático (unit testing)• Análisis estático de código• Consumo de APIs externas• Uso de session y estados• Uso de DynamoDB• Refactorización de handlers• Fichero de settings• Instrucciones :)

• Crear y publicar en 1’ nueva skill usando el template

Page 7: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

3. Configuración inicial

1. Install ASK CLI (npm install -g ask-cli)

2. Install vscode (https://code.visualstudio.com)

3. Install Alexa Skill Kit (ASK) Toolkit for vscode(https://marketplace.visualstudio.com/items?itemName=ask-toolkit.alexa-skills-kit-toolkit)

4. Edit ~/.aws/credentials file to add a valid AWS profile (aws_access_key_id, aws_secret_access_key) with the following policy

5. Comando ask init, para seleccionar el profile de AWS que usaremos en el despliegue desde consola, y acceso a la cuenta Alexa developers.

More info:

• https://developer.amazon.com/es/docs/smapi/manage-credentials-with-ask-cli.html

• https://docs.aws.amazon.com/es_es/cli/latest/userguide/cli-chap-configure.html

{

"Version": "2012-10-17",

"Statement": {

"Effect": "Allow",

"Action": [

"iam:CreateRole",

"iam:GetRole",

"iam:AttachRolePolicy",

"iam:PassRole",

"lambda:AddPermission",

"lambda:CreateFunction",

"lambda:GetFunction",

"lambda:UpdateFunctionCode

",

"lambda:ListFunctions",

"logs:FilterLogEvents",

"logs:getLogEvents",

"logs:describeLogStreams"

],

"Resource": "*"

}

}

Page 8: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

https://github.com/javi

chur/alexa-skill-clean-

code-template

Crear una nueva skill usando este template:ask new --url

https://github.com/javichur/alexa

-skill-clean-code-template.git

?>Please type in your new skill

name: my-new-skill

Page 9: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

• .ask: carpeta con la configuración del despliegue. Se modifica automáticamente al ejecutar “askdeploy”.

• .vscode: configurado depurador con Bespoken, unit test para Alexa.

• hooks: script para forzar el “npm install” cuando comienza un despliegue.

• lambda: (ver siguientes páginas).• /models: creados para ES y EN. Incluyen

los intents “hola”, “ayuda” y “salir”.• InvocationName se cambia desde aquí.

Page 10: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

• /test: 2 tests unitarios automáticos para Alexa skills, usando la herramienta Bespoken.

• .eslintrc: lint para javascript, configurado con las reglas de Airbnb. Puede lanzarse con “npm eslint”.

• Licencia Apache 2.

• Package.json: contiene las líneas de comando para lanzar eslint, testing, sonar…

• README.md: Todos los pasos realizados y lo que incluye el template.

• Skill.json. Toda la configuración de la skill. Se ha editado para:• Incluir multiidioma.• Soportar APL incluso en echo Show 5.• Desplegar en región Irlanda, además de Virginia

US

Page 11: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

• Sonar: configurado para que aparezcan los resultados del análisis estático, los tets y cobertura de dichos tests.

• Testing.json: testing automático unitario, basado en Jest (Bespoken).

Page 12: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

• /lambda/custom/

Es la carpeta que se despliega en Lambda• /apl: documentos APL de ejemplo, incluyendo:

• APL adaptado a dispositivos pequeños circulares y otros.

• apiTemplates.js: helper sencillo para trabajar con APL.

• /api.js: ejemplo de descarga de datos por API.• /sessionState.js: guardado y recuperación de

datos desde sesión de AWS.• /handlers: refactorización de index.js.• /strings: cadenas usadas en localización de los

textos de lambda. Ver también myLocalizationInterceptor(). Para añadir un idioma basta con:• Añadir su modelo conversacional, pegar en /strings

las cadenas del nuevo idioma, modificar skill.json y crear el test automático del nuevo idioma.

• O modificarlo online y descargar la skill con “askclone”.

Page 13: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

(continuación)

• /lambda/custom/• ./index.js: punto de entrada a la skill.

• ./package.json: incluye solo las dependencias para producción.

• ./settings.js: idioma por defecto de la skill, url base de la api, etc…

Page 14: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

4. El Template

Herramientas:

ask deploy

ask dialog

ask clone

npm run unit-test (o F5)

Para ejecutar los tests automáticos unitarios y poder activar el depurador con ellos.

npm run eslint

npm run sonar

Page 15: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

5. Bonus: tests automáticos e2e en Alexa

Page 16: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

5. Bonus: tests automáticos e2e en Alexa

1. Registrarse gratis y crear gratis un virtual device: https://apps.bespoken.io/dashboard/virtualdevice

2. Editar “testing.json” para indicar token del dispositivo virtual y tipo de test."type": "e2e",

"virtualDeviceToken": {

"alexa": {

"es-ES": “<token https://apps.bespoken.io/dashboard/virtualdevice>",

"en-US": “<token https://apps.bespoken.io/dashboard/virtualdevice>",

}

}

3. Añadir fichero test e2e (./test/e2e.test.yml)

4. Ejecutar bst test ./test/e2e.test.yml

Page 17: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

5. Bonus: tests automáticos e2e en Alexa

Fichero test “e2e.test.yml”:

“---

configuration:

locale: en-US

voiceId: Joey

---

- test: abrir la skill y nada más

- start hello world: welcome to the hello world you can say hello to me

Page 18: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

6. Crear una nueva skill a partir del template

ask new --url https://github.com/javichur/alexa-skill-clean-code-template.git

? Please type in your new skill name, alphanumeric only: my-new-skill

Realizar cambios en la skill.

ask deploy

Page 19: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

7. Preguntas

Page 20: Clean code, testing and deploy Alexa Skills€¦ · •/handlers: refactorización de index.js. •/strings: cadenas usadas en localización de los textos de lambda. Ver también

¡GRACIAS!Clean code, testing and deploy

Alexa SkillsJavier Campos

[email protected]

https://github.com/javichur

https://www.linkedin.com/in/franciscojaviercampos

https://javiercampos.es