clean code, testing and deploy alexa skills€¦ · •/handlers: refactorización de index.js....
TRANSCRIPT
Clean code, testing and deploy Alexa Skills
Javier Campos
https://www.linkedin.com/in/franciscojaviercampos
Í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
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
1. Presentación
1. Presentació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
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": "*"
}
}
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
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í.
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
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).
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”.
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…
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
5. Bonus: tests automáticos e2e en Alexa
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
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
”
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
7. Preguntas
¡GRACIAS!Clean code, testing and deploy
Alexa SkillsJavier Campos
https://github.com/javichur
https://www.linkedin.com/in/franciscojaviercampos
https://javiercampos.es