1. Alexa: Conceptos básicos, caracteristicas y API
2. Lambda
3. Serverless
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
Hay 2 tipos de interacción
- Comandos de voz
- Skills
Son aplicaciones de terceros con las que añadir funcionalidades a Alexa.
Descargables a través de la app Alexa
- Rutinas
Nos permiten automatizar acciones. "Alexa, buenos días"
- Llamadas entre Alexas (sin coste)
Alexa, llama a Juan
- Domótica (solo con Echo Plus)
Nos permite interactuar con dispositivos del hogar
Niño de 6 años haciendo los deberes ...
Podemos pedir música
Loro hablando con Alexa ...
Alexa, abre CodersCantabria y saluda
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
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
Intent de invocacion
Configuración de Utterance
Configuración de slots
Alexa Skill Kit (ASK) conjunto de herramientas para el desarrollo de skills.
https://developer.amazon.com/es/alexa-skills-kit
LaunchIntentHandler
HelpIntentHandler
CancelIntentHandler
Custom1IntentHandler
Custom2IntentHandler
FallbackIntentHandler
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
CancelIntentHandler y StopIntentHandler
- dificiles de diferenciar
- cierre de sesión
RepeatIntentHandler
- Repite el intent ejecutado
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)
Configuración del slot
Alexa, abre Coders Cantabria
(LaunchIntent)
New Session
Saluda a <Slot>
Update Session
Despidete
(CancelIntent)(StopIntent)
End 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"
}
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 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
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.
- Simple
- CRUD sobre tabla de Amazon DynamoDB
- Alexa Skill utilizando Alexa Skills Kit
- Bot de Slack con Zappa
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);
};
//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}"`));
}
};
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
}
}
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.