1. INTRODUCCIÓN 1
1.1 IoT 1
1.2 Interfaces de voz 2
1.3 Sistemas conversacionales 4
2. GOOGLE ASSISTANT 7
3. SU PRIMER ASISTENTE 9
3.1 Conceptos básicos de sistemas conversacionales 9
3.2 Requisitos previos 10
3.3 Creación del proyecto en Actions on Google 11
3.4 Modificación de la intención de bienvenida en Dialogflow 18
3.5 Activación del micrófono del simulador del asistente 28
4. ACTIONS ON GOOGLE 31
4.1 Consola 32
4.1.1 Sistema de pestañas 33
4.1.1.1 Pestana de informacion general (Overview) 34
4.1.1.2 Pestana de desarrollo (Develop) 35
4.1.1.3 Pestana de pruebas (Test) 36
5. DIALOGFLOW 39
5.1 Consola 40
5.1.1 Configuración de los agentes 42
5.1.2 Menú lateral 44
6. CONCEPTOS BÁSICOS PARA EL DESARROLLO DE SISTEMAS
CONVERSACIONALES CON DIALOGFLOW 47
6.1 Intenciones (Intents) 47
6.1.1 Práctica de uso de intenciones 50
6.2 Contextos (Contexts) 58
6.2.1 Práctica de uso de contextos 60
6.3 Entidades (Entities) 66
6.3.1 Práctica de uso de entidades personalizadas 68
6.4 Cumplimiento (fulfillment) 75
6.4.1 Conceptos previos al desarrollo
de un cumplimiento 82
6.4.1.1 Protocolo HTTP 83
6.4.1.2 Tecnologia webhook 87
6.4.1.3 Formato de datos JSON 88
6.4.2 Librerías de desarrollo 91
6.4.2.1 Libreria Firebase Functions 92
6.4.2.2 Libreria Actions on Google 94
6.4.3 Estructura de ficheros de un cumplimiento 99
6.4.4 Desarrollo de un cumplimiento 101
6.4.4.1 Generacion dinamica de respuestas 101
6.4.4.2 Manejo de contextos y parámetros desde un cumplimiento 104
6.4.5 Depuración del código de un cumplimiento 106
6.4.5.1 Analisis de solicitudes y respuestas HTTP 107
6.4.5.2 Generacion de mensajes de traza 114
7. PRÁCTICAS DE DESARROLLO DE SISTEMAS
CONVERSACIONALES CON DIALOGFLOW 121
7.1 Juego de "adivina el número" 122
7.1.1 Creación de las intenciones 122
7.1.2 Desarrollo del cumplimiento 127
7.2 Juego de "sigue la secuencia" 130
7.2.1 Creación de las intenciones 131
7.2.2 Desarrollo del cumplimiento 134
7.3 Creación de las intenciones comunes
de fallback 139
7.4 Creación de las intenciones comunes
de ayuda y salida 147
7.5 Creación de las acciones (actions) 154
7.6 Uso del asistente desde un teléfono móvil 158
8. EXPORTACIÓN E IMPORTACIÓN DE AGENTES
EN DIALOGFLOW 163
9. FIREBASE 167
9.1 Consola 169
9.1.1 Panel principal 170
9.1.2 Menú lateral 171
9.2 Práctica de creación de un proyecto 176
10. FIREBASE REALTIME DATABASE 181
10.1 Consola 182
10.2 Práctica de creación de una estructura de datos 185
11. EL MÓDULO ESP-01 193
11.1 Características del ESP-01 194
11.2 Programación del ESP-01 desde el IDE Arduino 195
11.3 Práctica de integración de Arduino con ESP-01 199
11.4 Librería ESP8266Wifi 202
11.5 Práctica de acceso a Internet 204
12. INTEGRACIÓN DE FIREBASE REALTIME DATABASE CON ESP8266 211
12.1 Librería Firebase ESP8266 Client 211
12.1.1 Configuración de las credenciales de la base de datos 213
12.1.2 Lectura y escritura de datos 215
12.1.3 Sincronización de datos 216
12.2 Prácticas de integración de Firebase Realtime Database
con ESP8266 219
12.2.1 Lectura y escritura de los pines digitales del ESP-01 desde Firebase Realtime Database 219
12.2.1.1 Desarrollo del programa ESP-01 usando una consulta manual 220
12.2.1.2 Desarrollo del programa ESP-01 usando una funcion de callback 227
12.2.2 Lectura de los pines analógicos de Arduino desde Firebase Realtime Database 230
12.2.2.1 Creacion de la estructura de datos
en Firebase Realtime Database 232
12.2.2.2 Desarrollo del programa Arduino 233
12.2.2.3 Desarrollo del programa ESP-01 235
13. FIREBASE CLOUD FUNCTIONS 241
13.1 Consola 242
13.2 Firebase CLI 246
13.2.1 Instalación de Firebase CLI 246
13.2.2 Acceso a Firebase CLI 249
13.3 Prácticas de despliegue de funciones JavaScript 251
13.3.1 Despliegue de una función JavaScript 251
13.3.2 Despliegue de un cumplimiento como un webhook 262
14. INTEGRACIÓN DE FIREBASE CLOUD FUNCTIONS
CON ESP8266 269
14.1 Librería ESP8266HTTPClient 269
14.2 Práctica de integración de Firebase Cloud Functions
con ESP8266 271
14.2.1 Desarrollo de la función en Firebase Cloud Functions 271
14.2.2 Desarrollo del programa ESP8266 273
15. INTEGRACIÓN DE FIREBASE CLOUD FUNCTIONS
CON REALTIME DATABASE 277
15.1 SDK de Firebase Admin 277
15.2 Prácticas de integración de Firebase Cloud Functions con Realtime Database 280
15.2.1 Creación de la estructura de ficheros del proyecto 281
15.2.2 Escritura de datos en Firebase Realtime Database 283
15.2.3 Lectura de datos en Firebase Realtime Database 287
15.2.4 Creación de nodos en Firebase Realtime Database 289
15.2.5 Borrado de nodos en Firebase Realtime Database 291
16. LA PLACA WEMOS D1 R1 293
17. PRÁCTICAS DE CONTROL DE DISPOSITIVOS
DOMÓTICOS 297
17.1 Escenario de integración de servicios 298
17.2 Actividades previas 298
17.2.1 Creación del proyecto en Actions on Google 299
17.2.2 Creación de la estructura de base de datos en Firebase Realtime Database 303
17.2.3 Creación de las entidades y las intenciones básicas en Dialogflow 306
17.2.4 Inicialización del proyecto Firebase 17.2.5 Desarrollo de la estructura básica
del cumplimiento en Firebase Cloud Functions 318
17.3 Encendido y apagado de luces por habitaciones 324
17.3.1 Creación de la intención de obtención
de la habitación en Dialogflow 324
17.3.2 Desarrollo del cumplimiento
en Firebase Cloud Functions 327
17.3.3 Desarrollo del programa ESP8266 336
17.4 Lectura de la temperatura 344
17.4.1 Creación de la intención de consulta de la temperatura en Dialogflow 344
17.4.2 Desarrollo del cumplimiento en Firebase Cloud Functions 345
17.4.3 Desarrollo del programa ESP8266 347
17.5 Programación de la temperatura de la calefacción 354
17.5.1 Creación de la intención de programación de la temperatura en Dialogflow 355
17.5.2 Desarrollo del cumplimiento en Firebase Cloud Functions 356
17.5.3 Desarrollo del programa ESP8266 361
17.6 Programación de la alarma de un reloj despertador 371
17.6.1 Creación de la intención de programación de la alarma en Dialogflow 372
17.6.2 Desarrollo del cumplimiento en Firebase Cloud Functions 374
17.6.3 Desarrollo de la función que devuelve la hora en Firebase Cloud Functions 379
17.6.4 Desarrollo del programa ESP8266 381
17.7 Creación de las acciones 401
18. ANEXO - JAVASCRIPT DE SUPERVIVENCIA 405
18.1 Instalación de Node.js 405
18.2 ¡Hola Mundo! 407
18.3 Variables y constantes 411
18.4 Tipos de datos 412
18.5 Operadores 415
18.6 Estructuras de control 417
18.7 Funciones 420
18.8 Objetos y clases 425
18.9 Manejo de Strings 433
18.10 Módulos 437
Programar Arduino para llevar a cabo sus proyectos puede resultarle fácil; no obstante, si desea ir más allá, va a necesitar conocer otras herramientas. Este libro le abre una puerta al mundo del internet de las cosas (IoT) a través del ESP8266, un módulo que contiene el mismo IDE que Arduino y le permitirá acceder tanto a internet como a los infinitos servicios que proporciona, sin necesidad de aprender ningún lenguaje ni entorno de desarrollo nuevo. ¿Qué encontrará en el libro? En él descubrirá los conceptos necesarios para utilizar las consolas de los servicios en la nube, empleados para el desarrollo de sistemas conversacionales con Google Assistant. La lógica que hay tras dichos sistemas se programará en JavaScript. Si lo desconoce, no se preocupe, este manual incorpora un anexo completo con los conceptos básicos del lenguaje, así como todo lo necesario para entender los programas de las múltiples prácticas que se realizan. Además, gracias al libro se introducirá paso a paso en servicios en la nube de Google, como: ? Actions on Google y Dialogflow para el desarrollo de sistemas conversacionales. ? Firebase RealTime Database y Firebase Functions para integrar el asistente con ESP8266 y Arduino. Asimismo, aprenderá a establecer una conversación con Google Assistant sobre un tema determinado y lo podrá llevar a la práctica al desarrollar juegos de palabras y sistemas domóticos. Con todo esto y muchos otros conceptos que se detallan en el libro, podrá controlar por voz las luces de casa, la calefacción, un reloj despertador y hacer realidad todos sus proyectos. Tomás Domínguez es ingeniero de telecomunicación y doctorado en inteligencia artificial. Su labor profesional se ha desarrollado en una multinacional de telecomunicaciones, donde ha ocupado diversos cargos relacionados con la tecnología.