Глава 10: Как да създадете начално приложение на Google с DialogFlow | Изпълнение чрез Cloud Datastore

В тази глава ще видим как да свържем хранилището на данни в google cloud, за да имаме набор от кавички с различни категории и да ги изтеглим въз основа на потребителските данни.

Съдържание на серията:

Глава 6: Урок за домашно приложение на Google: Преглед

Глава 7: Урок за домашно приложение на Google: Дизайн за разговори

Глава 8: Урок за домашно приложение на Google: Настройка на околната среда

Глава 9: Урок за домашно приложение на Google: Изпълнение чрез Inline Editor

Глава 10: Урок за домашно приложение на Google: Изпълнение чрез Cloud Datastore

Глава 11: Урок за домашно приложение на Google: Изпълнение чрез Webhook

Глава 12: Урок за домашно приложение на Google: Разгръщане на приложението

Резюме и коя част от голямата картина се справяме сега:

Нека разберем какво е хранилище за данни и как се различава първо.

Какво представлява Google Cloud Datastore?

Google Cloud Datastore е база данни с документи на NoSQL, създадена за автоматично мащабиране, висока производителност и лекота на разработване на приложения.

Какво е база данни на NoSQL?

База данни NoSQL (първоначално отнасяща се до "не SQL" или "нерелационна") предоставя механизъм за съхранение и извличане на данни, който се моделира по начин, различен от табличните отношения, използвани в релационни бази данни.

Сравнение с традиционните бази данни

Докато интерфейсът Cloud Datastore има много от същите функции като традиционните бази данни, като база данни NoSQL, той се различава от тях по начина, по който описва взаимоотношенията между обекти на данни. Ето сравняване на високо ниво на Cloud Datastore и релационни бази данни:

За разлика от редовете в таблица с релационни бази данни, Cloud Datastore обекти от един и същи вид могат да имат различни свойства, а различни единици могат да имат свойства със същото име, но различни типове стойности. Тези уникални характеристики предполагат различен начин за проектиране и управление на данни, за да се възползват от възможността за автоматично мащабиране.

Стига с теорията, нека започнем

Да настроим нашия магазин за данни сега

Стъпка 1: Влезте в облачната си конзола google:

Стъпка 2: Изберете вашия проект и щракнете върху Datastore.

Стъпка 3: Създайте субект

Не забравяйте, че образуването е просто елемент (ред). Kind (QuoteTable) е името на таблицата. Оставете място за име по подразбиране.

Quote, QuoteID & QuoteType са свойствата [колони]. Уверете се, че QuoteType и QuoteId са индексирани, тъй като ще използваме тези свойства за филтриране въз основа на потребителския вход.

Сега, когато в следващата глава е инсталиран основен магазин за данни, ще видим как да изтегляме данни от това от нашата облачна функция.

Да се ​​върнем към нашия вграден редактор.

Досега сме редактирали само файла index.js, но този облачен хранилище за данни е зависимост, която трябва да се добави към файла package.json.

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

Обратно към файла index.js.

Ще направя кода възможно най-прост, не очаквайте стандарти за кодиране :)

  1. инстанция на обекта
const Datastore = изисквам ('@ google-cloud / datastore');
// Незабавно клиент на хранилище на данни
const datastore = Datastore ();

2. Определете заявките

const query1 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', 'Приятелство');
const query3 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', "Romantic");

3. Изпълнете заявката, заснемете връщащия се JSON файл и отпечатайте конкретна оферта.

app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     ако (quote_type == "motivational") {
         върнете datastore.runQuery (query1) .then (резултати => {
            conv.ask (резултати [0] [1] .Quote);
        });
     } else if (quote_type == "приятелство") {
        върнете datastore.runQuery (query2) .then (резултати => {
            conv.ask (резултати [0] [1] .Quote);
        });
     } else if (quote_type == "романтичен") {
     върнете datastore.runQuery (query3) .then (резултати => {
            conv.ask (резултати [0] [0] .Quote);
        });
     } else {
         conv.ask („махни се от задника и работи, вместо да говориш с мен“);
     }
});

Нека вземем едно парче от това и да разберем.

ако (quote_type == "приятелство") {
        върнете datastore.runQuery (query2) .then (резултати => {
            conv.ask (резултати [0] [1] .Quote);
        });

Резултатите са JSON обект, който има две части. Първата част съдържа филтрираните данни, а втората съдържа информация. Ако отпечатаме тези стойности и видим дневника на firebase, ще открием по-долу.

така че ние вземаме първия обект и в рамките на това трудно кодирам втория цитат, който да бъде показан през цялото време, това е лайно програмиране, но винаги можете да циклирате и да покажете произволен цитат.

4. Краен код в index.js

// Вижте https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// за документи, образци и докладване на проблеми в библиотеката за изпълнение на Dialogflow
„използвайте стриктно“;
 
const функции = изискват ('firebase-функции');
const {dialogflow} = изискване ('действия-в-google');
const Datastore = изисквам ('@ google-cloud / datastore');
// Незабавно клиент на хранилище на данни
const datastore = Datastore ();
const WELCOME_INTENT = 'Намерение за посрещане по подразбиране';
const FALLBACK_INTENT = 'Намерено по подразбиране Fallback';
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote';
const QUOTE_TYPE_ENTITY = 'QuoteType';
const app = dialogflow ();
app.intent (WELCOME_INTENT, (conv) => {
    conv.ask ("добре дошли в Dr.Motivation! Поискайте оферта за приятелство или романтика или мотивация");
});
app.intent (FALLBACK_INTENT, (conv) => {
    conv.ask („Спрете да мрънкате и говорете нагоре“);
});
const query1 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', 'Motivational');
const query2 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', 'Приятелство');
const query3 = datastore.createQuery ('QuoteTable'). филтър ('QuoteType', '=', "Romantic");
app.intent (LOOKING_FOR_QUOTE_INTENT, (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ();
     ако (quote_type == "motivational") {
         върнете datastore.runQuery (query1) .then (резултати => {
            conv.ask (резултати [0] [1] .Quote);
        });
     } else if (quote_type == "приятелство") {
        върнете datastore.runQuery (query2) .then (резултати => {
            conv.ask (резултати [0] [1] .Quote);
        });
     } else if (quote_type == "романтичен") {
     върнете datastore.runQuery (query3) .then (резултати => {
            conv.ask (резултати [0] [0] .Quote);
        });
     } else {
         conv.ask („махни се от задника и работи, вместо да говориш с мен“);
     }
});
export.dialogflowFirebaseFulfillment = функции.https.onRequest (приложение);

5. Разгръщане и тестване

Готино, така че какво направихме тук?

Вместо твърдо кодиране на кодове в рамките на кода, ние сега дърпаме цитати от хранилището за данни в облака на Google, използвайки вградения редактор на Fulfillment.

Е, това не е достатъчно, нали? Когато пишем сложни функции, може да се нуждаем от по-добро отстраняване на грешки и по-добър контрол върху кода и пакетите, които използваме. Така че е по-добре да създадете среда за разработка и да започнете да опитваме кода си там

В следващата глава ще видим как да използваме интерфейса на командния ред firebase и JS редактора, за да преместим разработката към нашата локална машина и да я разгърнем като облачна функция и да използваме webhook за това.

Тази история е публикувана в най-голямото предприемаческо издание The Startup, последвано от 358 974+ души.

Абонирайте се, за да получавате нашите топ истории тук.