الفصل العاشر: كيفية إنشاء تطبيق Google Home App مع DialogFlow | وفاء عبر سحابة مخزن البيانات

في هذا الفصل ، سنرى كيفية توصيل مخزن بيانات google cloud للحصول على مجموعة من علامات الاقتباس مع فئات مختلفة وسحبها بناءً على مدخلات المستخدم.

محتوى السلسلة:

الفصل السادس: البرنامج التعليمي لتطبيق Google Home: نظرة عامة

الفصل السابع: برنامج Google Home App التعليمي: تصميم المحادثة

الفصل الثامن: البرنامج التعليمي لتطبيق Google Home: إعداد البيئة

الفصل التاسع: برنامج Google Home App التعليمي: الإيفاء عبر محرر Inline Editor

الفصل العاشر: البرنامج التعليمي لتطبيق Google Home: Fulfillment via Cloud Datastore

الفصل 11: برنامج Google Home App التعليمي: الإيفاء عبر Webhook

الفصل 12: برنامج Google Home App التعليمي: تطبيق النشر

خلاصة وأي جزء من الصورة الكبيرة التي نعالجها الآن:

دعونا نفهم ماهية مخزن البيانات وكيف يختلف أولاً.

ما هو Google Cloud Datastore؟

Google Cloud Datastore هي قاعدة بيانات لمستندات NoSQL تم تصميمها للتحجيم التلقائي والأداء العالي وسهولة تطوير التطبيق.

ما هي قاعدة بيانات NoSQL؟

توفر قاعدة بيانات NoSQL (تشير أصلاً إلى قاعدة البيانات "غير SQL" أو "غير العلائقية") آلية لتخزين واسترجاع البيانات التي تم تصميمها بوسائل غير العلاقات الجدولية المستخدمة في قواعد البيانات العلائقية.

مقارنة مع قواعد البيانات التقليدية

بينما تحتوي واجهة Cloud Datastore على العديد من الميزات نفسها مثل قواعد البيانات التقليدية ، فهي تختلف عنهم كقاعدة بيانات NoSQL بالطريقة التي تصف بها العلاقات بين كائنات البيانات. إليك مقارنة عالية المستوى بين Cloud Datastore ومفاهيم قاعدة البيانات العلائقية:

على عكس الصفوف الموجودة في جدول قاعدة البيانات العلائقية ، يمكن أن تحتوي كيانات Cloud Datastore من نفس النوع على خصائص مختلفة ، ويمكن أن يكون للكيانات المختلفة خصائص لها نفس الاسم ولكن أنواع قيمة مختلفة. تتضمن هذه الخصائص الفريدة طريقة مختلفة لتصميم وإدارة البيانات للاستفادة من القدرة على القياس تلقائيًا.

بما فيه الكفاية مع النظرية ، لنبدأ.

لنعد الآن إلى مخزن البيانات الخاص بنا

الخطوة 1: تسجيل الدخول إلى وحدة التحكم السحابية في google:

الخطوة 2: حدد المشروع الخاص بك وانقر على Datastore.

الخطوة 3: إنشاء الكيان

تذكر الكيان هو مجرد عنصر (صف). النوع (QuoteTable) هو اسم الجدول. اترك مساحة الاسم الافتراضية.

اقتباس ، QuoteID و QuoteType هي الخصائص [الأعمدة]. تأكد من فهرسة QuoteType و QuoteId لأننا سنستخدم هذه الخصائص للتصفية استنادًا إلى إدخال المستخدم.

الآن بعد إعداد مخزن البيانات الأساسي في الفصل التالي ، سنرى كيفية سحب البيانات من هذا من خلال وظيفة السحابة الخاصة بنا.

دعنا نعود إلى محررنا المضمّن.

حتى الآن ، قمنا بتحرير ملف index.js فقط ، ولكن مخزن البيانات السحابي هذا هو عنصر تابع يجب إضافته إلى ملف package.json.

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

العودة إلى ملف index.js.

سأجعل الكود بسيطًا قدر الإمكان ، ولا نتوقع معايير الترميز :)

  1. إنشاء مثيل الكائن
const Datastore = require ('@ google-cloud / datastore') ؛
// إنشاء مثيل لعميل مخزن البيانات
const مخزن البيانات = Datastore () ؛

2. تحديد الاستعلامات

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. قم بتشغيل الاستعلام والتقاط ملف JSON المرتجع وطباعة عرض أسعار محدد.

app.intent (LOOKING_FOR_QUOTE_INTENT، (conv) => {
     const quote_type = conv.parameters [QUOTE_TYPE_ENTITY] .toLowerCase ()؛
     إذا (quote_type == "تحفيزي") {
         إرجاع datastore.runQuery (query1). ثم (النتائج => {
            conv.ask (النتائج [0] [1] .Quote)؛
        })؛
     } آخر إذا (quote_type == "صداقة") {
        إرجاع datastore.runQuery (query2). ثم (النتائج => {
            conv.ask (النتائج [0] [1] .Quote)؛
        })؛
     } آخر إذا (quote_type == "romantic") {
     إرجاع datastore.runQuery (query3). ثم (النتائج => {
            conv.ask (النتائج [0] [0] .Quote)؛
        })؛
     } آخر {
         conv.ask ("انزل عن مؤخرتك واعمل بدلاً من التحدث معي") ؛
     }
})؛

دعونا نأخذ قطعة واحدة من هذا ونفهم.

إذا (quote_type == "صداقة") {
        إرجاع datastore.runQuery (query2). ثم (النتائج => {
            conv.ask (النتائج [0] [1] .Quote)؛
        })؛

النتائج هي كائن JSON يحتوي على جزأين. الجزء الأول يحمل البيانات التي تمت تصفيتها والجزء الثاني يحمل بعض المعلومات. إذا طبعنا هذه القيم وشاهدنا سجل firebase ، فسنجد أدناه.

لذلك نحن نأخذ الكائن الأول وضمن ذلك الترميز الثابت للعرض الثاني ليتم عرضه طوال الوقت ، فهذه هي برمجة جذابة ولكن يمكنك دائمًا تنفيذ حلقة وإظهار عرض أسعار عشوائي.

4. الرمز النهائي داخل index.js

// انظر https://github.com/dialogflow/dialogflow-fulfillment-nodejs
/ / لمستندات مكتبة إتمام Dialogflow والعينات والإبلاغ عن المشكلات
"استخدام صارم" ؛
 
وظائف const = require ('firebase-jobs') ؛
const {dialogflow} = require ('Actions-on-google')؛
const Datastore = require ('@ google-cloud / datastore') ؛
// إنشاء مثيل لعميل مخزن البيانات
const مخزن البيانات = Datastore () ؛
const WELCOME_INTENT = 'هدف الترحيب الافتراضي'؛
const FALLBACK_INTENT = 'Default Fallback Intent'؛
const LOOKING_FOR_QUOTE_INTENT = 'LookingForQuote'؛
const QUOTE_TYPE_ENTITY = 'QuoteType' ؛
التطبيق const = dialogflow () ؛
app.intent (WELCOME_INTENT، (conv) => {
    conv.ask ("مرحبًا بك في Dr.Motivation! اسأل عن اقتباس عن الصداقة أو الرومانسية أو الدافع") ؛
})؛
app.intent (FALLBACK_INTENT، (conv) => {
    conv.ask ("توقف عن الغمغمة والتحدث") ؛
})؛
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 ()؛
     إذا (quote_type == "تحفيزي") {
         إرجاع datastore.runQuery (query1). ثم (النتائج => {
            conv.ask (النتائج [0] [1] .Quote)؛
        })؛
     } آخر إذا (quote_type == "صداقة") {
        إرجاع datastore.runQuery (query2). ثم (النتائج => {
            conv.ask (النتائج [0] [1] .Quote)؛
        })؛
     } آخر إذا (quote_type == "romantic") {
     إرجاع datastore.runQuery (query3). ثم (النتائج => {
            conv.ask (النتائج [0] [0] .Quote)؛
        })؛
     } آخر {
         conv.ask ("انزل عن مؤخرتك واعمل بدلاً من التحدث معي") ؛
     }
})؛
export.dialogflowFirebaseFulfillment = jobs.https.onRequest (التطبيق) ؛

5. نشر واختبار

رائع ، إذن ماذا فعلنا هنا؟

بدلاً من علامات الاقتباس الثابت داخل الشفرة ، نحن الآن نسحب علامات الاقتباس من متجر بيانات سحابة google باستخدام محرر Fulfillment المضمن.

حسنًا ، هذا لا يكفي ، أليس كذلك؟ عندما نكتب وظائف معقدة ، قد نحتاج إلى تصحيح أفضل وتحكم أفضل في الشفرة والحزم التي نستخدمها. لذلك من الأفضل إعداد بيئة تطوير والبدء في ترقيع التعليمات البرمجية الخاصة بنا هناك

في الفصل التالي ، سنرى كيفية استخدام واجهة سطر أوامر firebase ومحرر JS لنقل التطوير إلى الجهاز المحلي لدينا ونشره كدالة سحابية واستخدام webhook لفعل الشيء نفسه.

تم نشر هذه القصة في The Startup ، أكبر منشور لريادة الأعمال في Medium ، يليه 358974 شخصًا.

اشترك لتلقي أهم الأخبار هنا.