Bölüm 10: DialogFlow ile bir Google Ana Sayfa Uygulaması oluşturma | Cloud Datastore ile Yerine Getirilmesi

Bu bölümde, Google Cloud’un veri deposunu farklı kategorilerden alıntılar yapmak ve bunları kullanıcı girişlerine dayandırmak için nasıl bağlayacağımızı göreceğiz.

Seri İçeriği:

6. Bölüm: Google Home App Eğitimi: Genel Bakış

Bölüm 7: Google Ev Uygulaması Öğreticisi: Konuşma Tasarımı

Bölüm 8: Google Ev Uygulaması Eğitimi: Ortam Kurulumu

Bölüm 9: Google Ev Uygulaması Eğitimi: Satır İçi Editör ile Yerine Getirme

Bölüm 10: Google Ev Uygulaması Eğitimi: Cloud Datastore ile Yerine Getirme

Bölüm 11: Google Home App Eğitimi: Webhook ile Yerleştirme

Bölüm 12: Google Ev Uygulaması Eğitimi: Uygulama Dağıtımı

Özetle ve büyük resmin hangi kısmını şimdi ele alıyoruz:

Veri deposunun ne olduğunu ve ilk önce nasıl farklı olduğunu anlayalım.

Google Cloud Datastore nedir?

Google Cloud Datastore, otomatik ölçeklendirme, yüksek performans ve uygulama geliştirme kolaylığı için oluşturulmuş bir NoSQL doküman veritabanıdır.

NoSQL veritabanı nedir?

NoSQL (başlangıçta “SQL olmayan” veya “ilişkisel olmayan”) atıfta bulunan veritabanı, ilişkisel veritabanlarında kullanılan tablo ilişkilerinden başka yollarla modellenen verilerin depolanması ve alınması için bir mekanizma sağlar.

Geleneksel veritabanları ile karşılaştırılması

Cloud Datastore arayüzü, geleneksel veritabanlarıyla aynı özelliklere sahip olsa da, bir NoSQL veritabanı olarak, veri nesneleri arasındaki ilişkileri tanımladığı şekilde onlardan farklıdır. İşte, Bulut Veri Mağazası ve ilişkisel veritabanı kavramlarının üst düzey bir karşılaştırmasını bulabilirsiniz:

İlişkisel veritabanı tablosundaki satırların aksine, aynı türde Cloud Datastore varlıkları farklı özelliklere sahip olabilir ve farklı varlıklar aynı ada sahip ancak farklı değer türlerinde özelliklere sahip olabilir. Bu benzersiz özellikler, otomatik ölçeklendirme özelliğinden yararlanmak için verileri tasarlamanın ve yönetmenin farklı bir yolunu ifade eder.

Teoriye yetecek kadar başlayalım.

Veri depomuzu şimdi kuralım

1. Adım: Google bulut konsolunuza giriş yapın:

Adım 2: Projenizi seçin ve Veri deposuna tıklayın.

3. Adım: Varlık Yaratın

Varlığın unutma sadece bir öğedir (satır). Tür (QuoteTable) tablo adıdır. Ad alanını varsayılan olarak bırakın.

Alıntı, QuoteID ve QuoteType özellikleri [sütun]. QuoteType ve QuoteId'ın endekslendiğinden ve bu özellikleri kullanıcı girişine göre filtrelemek için kullanacağımızdan emin olun.

Şimdi, temel veri deposunun bir sonraki bölümde kurulduğuna göre, bundan bulut verilerimizden nasıl veri alacağımızı göreceğiz.

Satır içi editörümüze geri dönelim.

Şimdiye kadar sadece index.js dosyasını düzenledik, ancak bu bulut veri deposu package.json dosyasına eklenmesi gereken bir bağımlılık.

"@ google-cloud / veri deposu": "1.1.0"

İndex.js dosyasına dön.

Kodu mümkün olduğu kadar basit hale getireceğim, kodlama standartlarını beklemeyin :)

  1. nesneyi başlat
const Veri deposu = zorunlu ('@ google-cloud / veri deposu');
// Bir veri deposu istemcisini tanıtın
const veri deposu = Veri deposu ();

2. Sorguları tanımlayın

const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivasyonel');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Arkadaşlık');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romantik");

3. Sorguyu çalıştırın, return JSON dosyasını yakalayın ve belirli bir Alıntı yazdırın.

app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivasyonel") {
         Datastore.runQuery döndürün (query1) .then (results => {
            conv.ask (sonuçlar: [0] [1] .Quote);
        });
     } else if (quote_type == "arkadaşlık") {
        datastore.runQuery (query2) döndürün. daha sonra (results => {
            conv.ask (sonuçlar: [0] [1] .Quote);
        });
     } else eğer (quote_type == "romantik") {
     datastore.runQuery (query3) döndürün. daha sonra (results => {
            conv.ask (sonuçlar: [0] [0] .Quote);
        });
     } Başka {
         conv.ask ("kıçını kaldır ve benimle konuşmak yerine çalış");
     }
});

Bundan bir parça alalım ve anlayalım.

if (quote_type == "arkadaşlık") {
        datastore.runQuery (query2) döndürün. daha sonra (results => {
            conv.ask (sonuçlar: [0] [1] .Quote);
        });

Sonuçlar, iki bölümden oluşan bir JSON nesnesidir. İlk bölüm filtrelenmiş verileri tutarken, ikinci bölüm bazı bilgileri tutar. Bu değerleri yazdırır ve firebase günlüğünü görürsek, aşağıdakileri bulacağız.

bu yüzden ilk nesneyi alıyoruz ve bunun içinde her zaman gösterilecek olan ikinci teklifi zor kodluyorum, bu boktan bir programlama ama her zaman döngüsel olarak rastgele bir alıntı gösterebilirsin.

4. index.js içindeki son kod

// Bkz. Https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// Dialogflow yerine getirme kütüphanesi dokümanları, örnekleri ve sorunları bildirmek için
'sıkı kullan';
 
const fonksiyonları = zorunlu ('firebase-fonksiyonları');
const {dialogflow} = request ('google'da eylemler');
const Veri deposu = zorunlu ('@ google-cloud / veri deposu');
// Bir veri deposu istemcisini tanıtın
const veri deposu = Veri deposu ();
const WELCOME_INTENT = 'Varsayılan Hoş Geldiniz Niyeti';
const FALLBACK_INTENT = 'Varsayılan Geri Dönüş Niyeti';
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote';
const QUOTE_TYPE_ENTITY = 'QuoteType';
const app = dialogflow ();
app.intent (WELCOME_INTENT, (conv) => {
    conv.ask ("Dr.Motivasyon'a hoş geldiniz! Arkadaşlık, romantizm veya motivasyon hakkında fiyat teklifi isteyin");
});
app.intent (FALLBACK_INTENT, (conv) => {
    conv.ask ("Mırıldanmayı kes & konuş");
});
const query1 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Motivasyonel');
const query2 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', 'Arkadaşlık');
const query3 = datastore.createQuery ('QuoteTable'). filter ('QuoteType', '=', "Romantik");
app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     if (quote_type == "motivasyonel") {
         Datastore.runQuery döndürün (query1) .then (results => {
            conv.ask (sonuçlar: [0] [1] .Quote);
        });
     } else if (quote_type == "arkadaşlık") {
        datastore.runQuery (query2) döndürün. daha sonra (results => {
            conv.ask (sonuçlar: [0] [1] .Quote);
        });
     } else eğer (quote_type == "romantik") {
     datastore.runQuery (query3) döndürün. daha sonra (results => {
            conv.ask (sonuçlar: [0] [0] .Quote);
        });
     } Başka {
         conv.ask ("kıçını kaldır ve benimle konuşmak yerine çalış");
     }
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest (app);

5. Dağıtma ve Test Etme

Harika, peki burada ne yaptık?

Kod içindeki sabit kodlama teklifleri yerine, şu anda Yerine Getirme’nin satır içi düzenleyicisini kullanarak google bulut veri deposundan fiyat teklifi alıyoruz.

Bu yeterli değil, değil mi? Karmaşık fonksiyonlar yazarken, daha iyi hata ayıklama ve kaldıracağımız kod ve paketler üzerinde daha iyi kontrole ihtiyacımız olabilir. Bu nedenle, bir geliştirme ortamı oluşturmak ve kodumuzu orada taramaya başlamak daha iyidir.

Bir sonraki bölümde, geliştirmeyi yerel makinemize taşımak ve onu bir bulut işlevi olarak dağıtmak ve aynısını yapmak için webhook'u kullanmak için firebase komut satırı arayüzünü ve bir JS editörünü nasıl kullanacağımızı göreceğiz.

Bu hikaye, Orta’ın en büyük girişimcilik yayını olan The Startup’ta ve ardından 358.974+ insan tarafından yayımlandı.

En iyi hikayelerimizi buradan almak için abone olun.