Capitolul 10: Cum se construiește o aplicație Google Home cu DialogFlow | Realizarea prin Cloud Datastore

În acest capitol, vom vedea cum să conectați baza de date Google Cloud pentru a avea un set de ghilimele cu categorii diferite și să le tragem pe baza intrărilor utilizatorilor.

Conținut seria:

Capitolul 6: Tutorial pentru aplicații Google Home: Prezentare generală

Capitolul 7: Tutorial pentru aplicații Google Home: Proiectare conversație

Capitolul 8: Tutorial pentru aplicații Google Home: Configurare mediu

Capitolul 9: Tutorial pentru aplicații Google Home: Împlinire prin Inline Editor

Capitolul 10: Tutorial pentru aplicații Google Home: îndeplinire prin Cloud Datastore

Capitolul 11: Tutorial pentru aplicații Google Home: îndeplinirea prin Webhook

Capitolul 12: Tutorial pentru aplicații Google Home: implementare aplicație

Recapitulare și care parte a imaginii mari abordăm acum:

Să înțelegem ce este stocarea de date și cum este mai întâi diferit.

Ce este Google Cloud Datastore?

Google Cloud Datastore este o bază de date de documente NoSQL, creată pentru scalare automată, performanță ridicată și ușurință în dezvoltarea aplicațiilor.

Ce este o bază de date NoSQL?

O bază de date NoSQL (care se referă inițial la baza de date „non SQL” sau „non-relațională”) oferă un mecanism de stocare și recuperare a datelor care este modelată în alte mijloace decât relațiile tabulare utilizate în bazele de date relaționale.

Comparație cu baze de date tradiționale

În timp ce interfața Cloud Datastore are multe dintre aceleași caracteristici ca bazele de date tradiționale, deoarece o bază de date NoSQL diferă de ele în modul în care descrie relațiile dintre obiectele de date. Iată o comparație la nivel înalt a conceptului de baze de date relaționale Cloud și a bazelor de date relaționale:

Spre deosebire de rândurile dintr-un tabel de baze de date relaționale, entitățile Cloud Datastore de același fel pot avea proprietăți diferite și entități diferite pot avea proprietăți cu același nume, dar tipuri de valori diferite. Aceste caracteristici unice implică un mod diferit de proiectare și gestionare a datelor pentru a profita de abilitatea de a scala automat.

Suficient cu teoria, să începem.

Vom configura acum pagina noastră de date

Pasul 1: conectați-vă la consola dvs. Google google

Pasul 2: Selectați proiectul dvs. și faceți clic pe Datastore.

Pasul 3: Creează entitate

Nu uitați că entitatea este doar un element (rând). Kind (QuoteTable) este numele tabelei. Lăsați spațiul de nume ca implicit.

Quote, QuoteID și QuoteType sunt proprietățile [coloane]. Asigurați-vă că QuoteType și QuoteId sunt indexate, deoarece vom folosi aceste proprietăți pentru filtrare pe baza intrării utilizatorului.

Acum că este configurat un depozit de date de bază în capitolul următor, vom vedea cum să extragem date din acestea din funcția noastră cloud.

Revenim la editorul nostru inline.

Până acum, am editat doar fișierul index.js, dar această bancă de date cloud este o dependență care trebuie adăugată la fișierul package.json.

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

Înapoi la fișierul index.js.

Voi face codul cât mai simplu posibil, nu vă așteptați la standardele de codare :)

  1. instantaneu obiectul
const Datastore = require ('@ google-cloud / datastore');
// Instantează un client de stocare de date
const datastore = Datastore ();

2. Definiți interogările

const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Friendship');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romantic");

3. Rulați interogarea, capturați fișierul returnat JSON și imprimați un citat specific.

app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parametri [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivational") {
         return datastore.runQuery (query1) .then (rezultate => {
            conv.ask (rezultate [0] [1] .Quote);
        });
     } altceva if (quote_type == "prietenie") {
        return datastore.runQuery (query2) .then (rezultate => {
            conv.ask (rezultate [0] [1] .Quote);
        });
     } else if (quote_type == "romantic") {
     return datastore.runQuery (query3) .then (rezultate => {
            conv.ask (rezultate [0] [0] .Quote);
        });
     } altfel {
         conv.ask („scoate-ți fundul și muncește în loc să-mi vorbești”);
     }
});

Să luăm o bucată din asta și să înțelegem.

if (quote_type == "prietenie") {
        return datastore.runQuery (query2) .then (rezultate => {
            conv.ask (rezultate [0] [1] .Quote);
        });

Rezultatele sunt un obiect JSON care are două părți. Prima parte ține datele filtrate, iar a doua parte conține câteva informații. Dacă imprimăm aceste valori și vedem jurnalul firebase, vom găsi mai jos.

deci luăm primul obiect și în interiorul acestei codificări durează a doua ofertă care va fi afișată tot timpul, aceasta este o programare shitty, dar puteți oricând să vă buclați și să afișați un citat la întâmplare.

4. Codul final în index.js

// Vezi https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// pentru documente, mostre și biblioteci pentru îndeplinirea dialogului Dialogflow
„utilizați strict”;
 
funcții const = necesita ('funcții firebase');
const {dialogflow} = require ('actions-on-google');
const Datastore = require ('@ google-cloud / datastore');
// Instantează un client de stocare de date
const datastore = Datastore ();
const WELCOME_INTENT = 'Intenție de întâmpinare implicită';
const FALLBACK_INTENT = 'Intenție de retragere implicită';
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote';
const QUOTE_TYPE_ENTITY = 'QuoteType';
const app = flux de dialog ();
app.intent (WELCOME_INTENT, (conv) => {
    conv.ask ("Bine ați venit la Dr.Motivare! Cereți o ofertă despre prietenie sau romantism sau motivație");
});
app.intent (FALLBACK_INTENT, (conv) => {
    conv.ask („Nu mai murmurați și vorbiți”);
});
const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Friendship');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romantic");
app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parametri [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivational") {
         return datastore.runQuery (query1) .then (rezultate => {
            conv.ask (rezultate [0] [1] .Quote);
        });
     } altceva if (quote_type == "prietenie") {
        return datastore.runQuery (query2) .then (rezultate => {
            conv.ask (rezultate [0] [1] .Quote);
        });
     } else if (quote_type == "romantic") {
     return datastore.runQuery (query3) .then (rezultate => {
            conv.ask (rezultate [0] [0] .Quote);
        });
     } altfel {
         conv.ask („scoate-ți fundul și muncește în loc să-mi vorbești”);
     }
});
export.dialogflowFirebaseFulfillment = funcții.https.onRequest (aplicație);

5. Deploy & Test

Misto, deci ce am făcut aici?

În loc de citate care codifică în interiorul codului, acum tragem ghilimele din magazinul de date Google Cloud folosind editorul inline al îndeplinirii.

Ei bine, nu este suficient, nu-i așa? Când scriem funcții complexe, este posibil să avem nevoie de o mai bună depanare și un control mai bun asupra codului și a pachetelor pe care le utilizăm. Așadar, este mai bine să configurați un mediu de dezvoltare și să începeți să ne legați codul acolo

În capitolul următor, vom vedea cum să utilizăm interfața liniei de comandă firebase și un editor JS pentru a muta dezvoltarea la mașina noastră locală și a o implementa ca o funcție de cloud și vom folosi webhook pentru a face la fel.

Această poveste este publicată în „Startup”, cea mai mare publicație de antreprenoriat mediu, urmată de peste 358.974 de persoane.

Abonați-vă pentru a primi poveștile noastre de top aici.