Alexa, saluda a Coders Cantabria
Indice
1. Alexa: Conceptos básicos, caracteristicas y API
2. Lambda
3. Serverless
Qúe es Alexa
Echo Dot : 60€
Echo : 100€
Echo Plus: 150€ , tecnología Zigbee (control domótico)
Echo Spot: 120€, tiene pantalla
Asistente virtual controlado por voz. Creado por Amazon
Qué puedo hacer con Alexa
Hay 2 tipos de interacción
- Comandos de voz
- Alexa, qué tiempo hace?
- Alexa, pon la radio
- Alexa, recuérdame a las 7 poner la lavadora
- Alexa despiértame en 30 minutos
- Skills
Son aplicaciones de terceros con las que añadir funcionalidades a Alexa.
Descargables a través de la app Alexa
Qué puedo hacer con Alexa
- Rutinas
Nos permiten automatizar acciones. "Alexa, buenos días"
- El tiempo
- Noticias del dia
- Echar un piropo
- Llamadas entre Alexas (sin coste)
Alexa, llama a Juan
Qué puedo hacer con Alexa
- Domótica (solo con Echo Plus)
Nos permite interactuar con dispositivos del hogar
- Alexa, sube la temperatura (termostato compatible)
- Alexa, enciende luz del salón (bombillas compatibles)
Qué puedo hacer con Alexa
Niño de 6 años haciendo los deberes ...
Qué puedo hacer con Alexa
Podemos pedir música
Qué puedo hacer con Alexa
Loro hablando con Alexa ...
Cómo funciona Alexa
Alexa, abre CodersCantabria y saluda
Conceptos básicos de Alexa
Alexa, abre [intent] y [utterance]
Alexa, abre CodersCantabria y saluda a todos
Alexa, abre CodersCantabria y despídete
Intent: Acción que desencadena que Alexa abra nuestra skill
Utterance: Frases específicas para invocar a diferentes peticiones
Conceptos básicos de Alexa
Alexa, abre [intent] y [utterance + slot]
Alexa abre SantanderCultural y dame una palabra
Alexa abre SantanderCultural y quiero una palabra
Alexa abre SantanderCultural y necesito una palabra
Alexa abre SantanderCultural y [{slot} una palabra]
Slots: Variables incluidas en un utterance
Amazon Develop Console
Intent de invocacion
Configuración de Utterance
Configuración de slots
Alexa Skill Kit
Alexa Skill Kit (ASK) conjunto de herramientas para el desarrollo de skills.
ASK v1 : deprecated- ASK v2 : Nos permite desarrollar para Java, Javascript, Python
https://developer.amazon.com/es/alexa-skills-kit
Alexa Skill Kit : Interacción basica
LaunchIntentHandler
HelpIntentHandler
CancelIntentHandler
Custom1IntentHandler
Custom2IntentHandler
FallbackIntentHandler
Alexa Skill Kit : Interacción basica
LaunchIntentHandler : El usuario abre la skill sin utterance.
Se crea un nuevo objeto de sesion
Ejemplo: Alexa, abre CodersCantabria
HelpIntentHandler : El usuario pide ayuda sobre el uso de la skill.
Ejemplo: Alexa, abre CodersCantabria y ayúdame
FallbackIntentHandler : La skill no sabe como responder
El usuario ha solicitado algo fuera del modelo
Alexa Skill Kit : Interacción basica
CancelIntentHandler y StopIntentHandler
- dificiles de diferenciar
- cierre de sesión
RepeatIntentHandler
- Repite el intent ejecutado
Alexa Skill Kit : Diálogos
Podemos configurar los diálogos con Alexa de 2 formas
- Permitir auto delegación
Alexa completa todos los pasos del diálogo.
Envía IntentRequest cuando se complete
- Delegación manual
Alexa envía un IntentRequest por cada paso
Gestión de estados (STARTED, PROGRESS, COMPLETED)
Alexa Skill Kit : Diálogos
Configuración del slot
Gestionando la session
Alexa, abre Coders Cantabria
(LaunchIntent)
New Session
Saluda a <Slot>
Update Session
Despidete
(CancelIntent)(StopIntent)
End Session
Gestionando la session
New Session
"session": {
"new": true,
"sessionId": "amzn1.echo-api.session.adf8c956-0798-40a5-8bab-b0cb7bfa7a3d",
"application": {
"applicationId": "amzn1.ask.skill.6ff36163-ff21-4a86-a3ef-eedc4320bc72"
},
"user": {
"userId":"amzn1.ask.account.xxxxx"
}
},
Update Session
"session": {
"new": false,
"sessionId": "amzn1.echo-api.session.adf8c956-0798-40a5-8bab-b0cb7bfa7a3d",
"application": {
"applicationId": "amzn1.ask.skill.6ff36163-ff21-4a86-a3ef-eedc4320bc72"
},
"user": {
"userId": "amzn1.ask.account"
}
Reprompts
utterance
reprompt
Resultado
8 seg
utterance
Intent
Amazon.Yes
Amazon.No
SessionParameter
EndSession
Alexa, abre Santander Cultural
(LaunchIntent)
New Session
Dame una palabra
Update Session
Reprompt
¿Quieres otra?
(Words = Started)
No
Amazon.NoIntent
End Session
AWS Lambda
AWS Lambda es un servicio de computación que permite ejecutar tu código sin controlar o configurar servidores. AWS Lambda ejecuta tu código solo cuando es necesario y escala el servicio automáticamente. Se puede usar AWS Lambda como respuesta a eventos o en respuesta a peticiones HTTP. Puedes escribir tu código para Lambda en C#, Java, Python, Go y Node.js
Functions
Una 'function' es tu trozo de código, que se ejecutará exclusivamente cuando sea llamado, ya sea desde algún tipo de evento o una llamada HTTP.
Podemos empezar desde cero, o usar alguna plantilla proporcionada por AWS. También podemos utilizar frameworks que nos realicen esta tarea.
Ejemplos
- Simple
- CRUD sobre tabla de Amazon DynamoDB
- Alexa Skill utilizando Alexa Skills Kit
- Bot de Slack con Zappa
Simple
exports.handler = (event, context, callback) => {
const inputString = event.string.toLowerCase();
const reverseString = inputString.toLowerCase().split('').reverse().join('');
const isPalindrome = (inputString == reverseString);
const result = isPalindrome ? `${inputString} is a palindrome` :
`${inputString} is not a palindrome`;
callback(null, result);
};
CRUD
//POST body request
{
"TableName": "Charlas",
"Item": {
"Titulo": "¿Está hecho el mundo de los containers para ti?",
"Ponente": "David Carvajal"
}
}
exports.handler = (event, context, callback) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
const done = (err, res) => callback(null, {
statusCode: err ? '400' : '200',
body: err ? err.message : JSON.stringify(res),
headers: {
'Content-Type': 'application/json',
},
});
switch (event.httpMethod) {
case 'DELETE':
dynamo.deleteItem(JSON.parse(event.body), done);
break;
case 'GET':
dynamo.scan({ TableName: event.queryStringParameters.TableName }, done);
break;
case 'POST':
dynamo.putItem(JSON.parse(event.body), done);
break;
case 'PUT':
dynamo.updateItem(JSON.parse(event.body), done);
break;
default:
done(new Error(`Unsupported method "${event.httpMethod}"`));
}
};
Zappa
Es un framework para Python que te ayuda a desplegar en AWS Lambda sin preocuparte de nada mas que de tu código. Soporta Flask y Django.
Zappa se encarga de:
- IAM Profile CloudWatch API Gateway
- Empaquetar tu virtualenv
- Vincular a API Gateway
...
- Dominios personalizados
- Certificados HTTPS
pip install zappa
zappa init
zappa deploy
Instalación y despliegue
Configuración de Zappa
{
"prod": {
"app_function": "app.app",
"aws_region": "eu-west-1",
"exclude": [
"__pycache__",
".git/*",
".gitignore",
".python-version",
"LICENSE",
"README.md",
"requirements.txt",
"zappa_settings.json"
],
"keep_warm": true,
"keep_warm_expression": "rate(5 minutes)",
"memory_size": 128,
"profile_name": "default",
"project_name": "codersbot-slack",
"runtime": "python3.6",
"s3_bucket": "codersbot-slack",
"timeout_seconds": 30
}
}
Mas cosas interesantes de Zappa
zappa status prod
zappa tail prod --since 1h
Funciona porque accede al archivo de credenciales de AWS (~/.aws/credentials) que se puede crear a través de AWS CLI o manualmente.
Podemos ver el estado de nuestro despliegue y su información. O también los logs que nos proporciona Lambda.
SERVERLESS
alexa
By rocimunoz
alexa
- 245