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"

  1. El tiempo
  2. Noticias del dia
  3. 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. 

  1. ASK v1 : deprecated
  2. 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