Kapitel 10: Erstellen einer Google Home-App mit DialogFlow | Erfüllung über Cloud-Datenspeicher

In diesem Kapitel erfahren Sie, wie Sie den Google Cloud-Datenspeicher verbinden, um eine Reihe von Anführungszeichen mit verschiedenen Kategorien zu erhalten und diese anhand der Benutzereingaben abzurufen.

Serieninhalt:

Kapitel 6: Google Home App-Lernprogramm: Übersicht

Kapitel 7: Google Home App-Lernprogramm: Konversationsdesign

Kapitel 8: Google Home App-Lernprogramm: Einrichtung der Umgebung

Kapitel 9: Google Home App-Lernprogramm: Erfüllung über den Inline-Editor

Kapitel 10: Google Home App-Lernprogramm: Erfüllung über Cloud-Datenspeicher

Kapitel 11: Google Home App-Lernprogramm: Erfüllung über Webhook

Kapitel 12: Google Home App-Lernprogramm: App-Bereitstellung

Fassen Sie zusammen und welchen Teil des Gesamtüberblicks wir jetzt angehen:

Lassen Sie uns zunächst verstehen, was ein Datenspeicher ist und wie er sich unterscheidet.

Was ist der Google Cloud-Datenspeicher?

Google Cloud Datastore ist eine NoSQL-Dokumentendatenbank, die für automatische Skalierung, hohe Leistung und einfache Anwendungsentwicklung entwickelt wurde.

Was ist eine NoSQL-Datenbank?

Eine NoSQL-Datenbank (ursprünglich "non SQL" oder "non relational") bietet einen Mechanismus zum Speichern und Abrufen von Daten, die mit anderen Mitteln als den in relationalen Datenbanken verwendeten tabellarischen Beziehungen modelliert wurden.

Vergleich mit traditionellen Datenbanken

Während die Cloud-Datenspeicher-Schnittstelle viele der gleichen Funktionen wie herkömmliche Datenbanken aufweist, unterscheidet sich eine NoSQL-Datenbank von diesen durch die Beschreibung der Beziehungen zwischen Datenobjekten. Hier ein allgemeiner Vergleich von Cloud-Datenspeicher- und relationalen Datenbankkonzepten:

Im Gegensatz zu Zeilen in einer relationalen Datenbanktabelle können Cloud-Datenspeicher-Entitäten derselben Art unterschiedliche Eigenschaften aufweisen, und verschiedene Entitäten können Eigenschaften mit demselben Namen, aber unterschiedlichen Werttypen aufweisen. Diese einzigartigen Merkmale erfordern eine andere Art der Gestaltung und Verwaltung von Daten, um die Möglichkeit der automatischen Skalierung zu nutzen.

Schluss mit der Theorie.

Richten wir jetzt unseren Datenspeicher ein

Schritt 1: Melden Sie sich bei Ihrer Google Cloud-Konsole an:

Schritt 2: Wählen Sie Ihr Projekt aus und klicken Sie auf Datenspeicher.

Schritt 3: Entität erstellen

Entität merken ist nur ein Element (Zeile). Art (QuoteTable) ist der Tabellenname. Belassen Sie den Namensraum als Standard.

Quote, QuoteID & QuoteType sind die Eigenschaften [Spalten]. Stellen Sie sicher, dass QuoteType und QuoteId indiziert sind, da wir diese Eigenschaften zum Filtern basierend auf der Benutzereingabe verwenden.

Nachdem im nächsten Kapitel ein grundlegender Datenspeicher eingerichtet wurde, erfahren Sie, wie Sie Daten aus unserer Cloud-Funktion abrufen können.

Kehren wir zu unserem Inline-Editor zurück.

Bisher haben wir nur die Datei index.js bearbeitet, aber dieser Cloud-Datenspeicher ist eine Abhängigkeit, die der Datei package.json hinzugefügt werden muss.

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

Zurück zur Datei index.js.

Ich werde den Code so einfach wie möglich gestalten. Erwarten Sie keine Kodierungsstandards :)

  1. Instanziiere das Objekt
const Datastore = require ('@ google-cloud / datastore');
// Instanziiere einen Datenspeicher-Client
const datastore = Datastore ();

2. Definieren Sie die Abfragen

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. Führen Sie die Abfrage aus, erfassen Sie die zurückgegebene JSON-Datei und drucken Sie ein bestimmtes Angebot.

app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivational") {
         gib datastore.runQuery (query1) .then zurück (results => {
            conv.ask (results [0] [1] .Quote);
        });
     } else if (quote_type == "Freundschaft") {
        Rückgabe datastore.runQuery (query2) .then (results => {
            conv.ask (results [0] [1] .Quote);
        });
     } else if (quote_type == "romantisch") {
     Rückgabe datastore.runQuery (query3) .then (results => {
            conv.ask (results [0] [0] .Quote);
        });
     } else {
         conv.ask ("Geh runter und arbeite anstatt mit mir zu reden");
     }
});

Nehmen wir ein Stück davon und verstehen wir.

if (quote_type == "Freundschaft") {
        Rückgabe datastore.runQuery (query2) .then (results => {
            conv.ask (results [0] [1] .Quote);
        });

Das Ergebnis ist ein JSON-Objekt, das aus zwei Teilen besteht. Der erste Teil enthält die gefilterten Daten und der zweite Teil enthält einige Informationen. Wenn wir diese Werte drucken und das Firebase-Protokoll anzeigen, finden wir Folgendes.

Also nehmen wir das erste Objekt und programmieren das zweite Zitat, das ständig angezeigt werden soll, hart. Das ist beschissene Programmierung, aber Sie können immer eine Schleife ausführen und ein zufälliges Zitat anzeigen.

4. Endgültiger Code in index.js

// Siehe https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// für Dialogflow Fulfillment Library-Dokumente, Beispiele und zum Melden von Problemen
'use strict';
 
const functions = require ('firebase-funktionen');
const {dialogflow} = require ('actions-on-google');
const Datastore = require ('@ google-cloud / datastore');
// Instanziiere einen Datenspeicher-Client
const datastore = Datastore ();
const WELCOME_INTENT = 'Default Welcome Intent';
const FALLBACK_INTENT = 'Default Fallback Intent';
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote';
const QUOTE_TYPE_ENTITY = 'QuoteType';
const app = dialogflow ();
app.intent (WELCOME_INTENT, (conv) => {
    conv.ask ("Willkommen bei Dr.Motivation! Fordern Sie ein Zitat über Freundschaft, Romantik oder Motivation an");
});
app.intent (FALLBACK_INTENT, (conv) => {
    conv.ask ("Hör auf zu murmeln & zu sprechen");
});
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.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivational") {
         gib datastore.runQuery (query1) .then zurück (results => {
            conv.ask (results [0] [1] .Quote);
        });
     } else if (quote_type == "Freundschaft") {
        Rückgabe datastore.runQuery (query2) .then (results => {
            conv.ask (results [0] [1] .Quote);
        });
     } else if (quote_type == "romantisch") {
     Rückgabe datastore.runQuery (query3) .then (results => {
            conv.ask (results [0] [0] .Quote);
        });
     } else {
         conv.ask ("Geh runter und arbeite anstatt mit mir zu reden");
     }
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest (App);

5. Bereitstellen und testen

Cool, also was haben wir hier gemacht?

Anstatt Anführungszeichen im Code fest zu codieren, ziehen wir jetzt Anführungszeichen aus dem Google Cloud-Datenspeicher mithilfe des Inline-Editors des Fulfillments.

Nun, das ist nicht genug, oder? Wenn wir komplexe Funktionen schreiben, benötigen wir möglicherweise ein besseres Debugging und eine bessere Kontrolle über den Code und die Pakete, die wir nutzen. Es ist daher besser, eine Entwicklungsumgebung einzurichten und dort mit dem Basteln unseres Codes zu beginnen

Im nächsten Kapitel erfahren Sie, wie Sie mithilfe der Firebase-Befehlszeilenschnittstelle und eines JS-Editors die Entwicklung auf unseren lokalen Computer verschieben und als Cloud-Funktion bereitstellen und Webhook verwenden.

Diese Geschichte wurde in The Startup veröffentlicht, der größten Veröffentlichung zu Unternehmertum von Medium, gefolgt von über 358.974 Personen.

Abonnieren Sie hier unsere Top Stories.