Capítulo 10: Cómo construir una aplicación Google Home con DialogFlow | Cumplimiento a través de Cloud Datastore

En este capítulo veremos cómo conectar el almacén de datos de Google Cloud para tener un conjunto de citas con diferentes categorías y extraerlas según las entradas del usuario.

Contenido de la serie:

Capítulo 6: Tutorial de la aplicación Google Home: descripción general

Capítulo 7: Tutorial de la aplicación Google Home: diseño de conversación

Capítulo 8: Tutorial de la aplicación Google Home: configuración del entorno

Capítulo 9: Página principal de Google App Tutorial: Cumplimiento a través Inline Editor

Capítulo 10: Tutorial de la aplicación Google Home: cumplimiento mediante el almacén de datos en la nube

Capítulo 11: Tutorial de la aplicación Google Home: cumplimiento a través de Webhook

Capítulo 12: Tutorial de la aplicación Google Home: implementación de la aplicación

Resumen y qué parte del panorama general estamos abordando ahora:

Vamos a entender qué es el almacén de datos y cómo es diferente primero.

¿Qué es Google Cloud Datastore?

Google Cloud Datastore es una base de datos de documentos NoSQL creada para escalado automático, alto rendimiento y facilidad de desarrollo de aplicaciones.

¿Qué es una base de datos NoSQL?

Una base de datos NoSQL (originalmente referida a "no SQL" o "no relacional") proporciona un mecanismo para el almacenamiento y la recuperación de datos que se modela en medios distintos de las relaciones tabulares utilizadas en las bases de datos relacionales.

Comparación con bases de datos tradicionales

Mientras que la interfaz de almacén de datos de la nube tiene muchas de las mismas características que las bases de datos tradicionales, como una base de datos NoSQL se diferencia de ellos en la forma en que describe las relaciones entre los objetos de datos. Aquí hay una comparación de alto nivel de Cloud Datastore y conceptos de bases de datos relacionales:

A diferencia de las filas en una tabla de base de datos relacional, las entidades de Cloud Datastore del mismo tipo pueden tener diferentes propiedades, y diferentes entidades pueden tener propiedades con el mismo nombre pero diferentes tipos de valores. Estas características únicas implican una forma diferente de diseñar y administrar datos para aprovechar la capacidad de escalar automáticamente.

Basta con la teoría, comencemos.

Vamos a configurar nuestro almacén de datos ahora

Paso 1: Inicie sesión en su Google Cloud Console:

Paso 2: Seleccione su proyecto y haga clic en Almacén de datos.

Paso 3: crear entidad

Recuerde que la entidad es solo un elemento (fila). Tipo (QuoteTable) es el nombre de la tabla. Deje el espacio de nombre como predeterminado.

Quote, QuoteID y QuoteType son las propiedades [columnas]. Asegúrese de que QuoteType y QuoteId estén indexados, ya que utilizaremos estas propiedades para filtrar según la entrada del usuario.

Ahora que se configura un almacén de datos básico en el próximo capítulo, veremos cómo extraer datos de esta función de la nube.

Volvamos a nuestro editor en línea.

Hasta ahora solo hemos editado el archivo index.js, pero este almacén de datos en la nube es una dependencia que debe agregarse al archivo package.json.

"@ google-cloud / datastore": "1.1.0"

Volver al archivo index.js.

Voy a hacer que el código sea lo más simple posible, no esperes estándares de codificación :)

  1. instanciar el objeto
const Datastore = require ('@ google-cloud / datastore');
// Instancia un cliente de almacén de datos
const datastore = Datastore ();

2. Definir las consultas.

const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Amistad');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romántico");

3. Ejecute la consulta, capture el archivo JSON de retorno e imprima una Cotización específica.

app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivacional") {
         return datastore.runQuery (query1) .then (results => {
            conv.ask (resultados [0] [1] .Cita);
        });
     } else if (quote_type == "amistad") {
        return datastore.runQuery (query2) .then (results => {
            conv.ask (resultados [0] [1] .Cita);
        });
     } else if (quote_type == "romantic") {
     return datastore.runQuery (query3) .then (results => {
            conv.ask (resultados [0] [0] .Cita);
        });
     } más {
         conv.ask ("quítate el culo y trabaja en lugar de hablar conmigo");
     }
});

Tomemos una parte de esto y comprendamos.

if (quote_type == "amistad") {
        return datastore.runQuery (query2) .then (results => {
            conv.ask (resultados [0] [1] .Cita);
        });

El resultado es un objeto JSON que tiene dos partes. La primera parte contiene los datos filtrados y la segunda parte contiene información. Si imprimimos estos valores y vemos el registro de Firebase, encontraremos el siguiente.

así que tomamos el primer objeto y dentro de eso estoy codificando la segunda cita para que se muestre todo el tiempo, esta es una programación de mierda, pero siempre puedes hacer un bucle y mostrar una cita aleatoria.

4. Código final dentro de index.js

// Ver https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// para documentos de la biblioteca de cumplimiento de Dialogflow, muestras y para informar problemas
'uso estricto';
 
funciones const = require ('firebase-functions');
const {dialogflow} = require ('actions-on-google');
const Datastore = require ('@ google-cloud / datastore');
// Instancia un cliente de almacén de datos
const datastore = Datastore ();
const WELCOME_INTENT = 'Intento de bienvenida predeterminado';
const FALLBACK_INTENT = 'Intento de reserva predeterminado';
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote';
const QUOTE_TYPE_ENTITY = 'QuoteType';
aplicación const = dialogflow ();
app.intent (WELCOME_INTENT, (conv) => {
    conv.ask ("¡bienvenido a Dr.Motivation! Solicite una cita sobre amistad, romance o motivación");
});
app.intent (FALLBACK_INTENT, (conv) => {
    conv.ask ("Deja de murmurar y habla");
});
const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Amistad');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romántico");
app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivacional") {
         return datastore.runQuery (query1) .then (results => {
            conv.ask (resultados [0] [1] .Cita);
        });
     } else if (quote_type == "amistad") {
        return datastore.runQuery (query2) .then (results => {
            conv.ask (resultados [0] [1] .Cita);
        });
     } else if (quote_type == "romantic") {
     return datastore.runQuery (query3) .then (results => {
            conv.ask (resultados [0] [0] .Cita);
        });
     } más {
         conv.ask ("quítate el culo y trabaja en lugar de hablar conmigo");
     }
});
exportaciones.dialogflowFirebaseFulfillment = funciones.https.onRequest (aplicación);

5. Implementar y probar

Genial, entonces, ¿qué hicimos aquí?

En lugar de codificar las citas dentro del código, ahora estamos sacando citas del almacén de datos de la nube de Google utilizando el editor en línea de Fulfillment.

Bueno, esto no es suficiente, ¿verdad? Cuando escribimos funciones complejas, es posible que necesitemos una mejor depuración y un mejor control sobre el código y los paquetes que estamos aprovechando. Por lo tanto, es mejor configurar un entorno de desarrollo y comenzar a modificar nuestro código allí

En el próximo capítulo, veremos cómo usar la interfaz de línea de comandos de Firebase y un editor JS para mover el desarrollo a nuestra máquina local e implementarlo como una función en la nube y usar webhook para hacer lo mismo.

Esta historia se publica en The Startup, la publicación de emprendimiento más grande de Medium, seguida de más de 358,974 personas.

Suscríbase para recibir nuestras principales historias aquí.