دمج Vision API مع Dialogflow

1. قبل البدء

في هذا الدرس التطبيقي حول الترميز، ستدمج Vision API مع Dialogflow لتقديم ردود غنية وديناميكية مستندة إلى تعلُّم الآلة على مدخلات الصور التي يقدّمها المستخدم. ستنشئ تطبيق روبوت دردشة يأخذ صورة كمدخل، ويعالجها في Vision API، ويعرض معلمًا تم تحديده للمستخدم. على سبيل المثال، إذا حمّل المستخدم صورة لتاج محل، سيردّ عليه برنامج الدردشة الآلي بـ "تاج محل".

هذا مفيد لأنّه يمكنك تحليل العناصر في الصورة واتخاذ إجراء بشأن المعلومات التي تم الحصول عليها. يمكنك أيضًا إنشاء نظام لمعالجة عمليات ردّ الأموال لمساعدة المستخدمين في تحميل الإيصالات واستخراج تاريخ الشراء من الإيصال ومعالجة عملية ردّ الأموال إذا كان التاريخ مناسبًا.

اطّلِع على نموذج مربّع الحوار التالي:

المستخدم: مرحبًا

روبوت الدردشة: مرحبًا. يمكنك تحميل صورة لاستكشاف المعالم

المستخدم: حمِّل صورة يظهر فيها "تاج محل".

روبوت المحادثة: جارٍ معالجة الملف، إليك النتائج: تاج محل، حديقة تاج محل، تاج محل.

15a4243e453415ca.png

المتطلبات الأساسية

قبل المتابعة، عليك إكمال الدورات التدريبية التالية:

  1. إنشاء أداة جدولة مواعيد باستخدام Dialogflow
  2. دمج برنامج دردشة آلي من Dialogflow مع "المهام مع مساعد Google"
  3. التعرّف على الكيانات في Dialogflow
  4. إنشاء عميل Django للواجهة الأمامية لتطبيق Dialogflow

عليك أيضًا فهم المفاهيم الأساسية في Dialogflow، ويمكنك التعرّف عليها من خلال الفيديوهات التالية في مسار إنشاء روبوت محادثة باستخدام Dialogflow:

أهداف الدورة التعليمية

  • كيفية إنشاء وكيل Dialogflow
  • كيفية تعديل وكيل Dialogflow لتحميل الملفات
  • كيفية إعداد اتصال Vision API بخدمة تنفيذ Dialogflow
  • كيفية إعداد تطبيق واجهة أمامية يستند إلى Django وتشغيله في Dialogflow
  • كيفية نشر تطبيق الواجهة الأمامية Django على Google Cloud في App Engine
  • كيفية اختبار تطبيق Dialogflow من واجهة أمامية مخصّصة

ما ستنشئه

  • إنشاء وكيل في Dialogflow
  • تنفيذ واجهة مستخدم أمامية في Django لتحميل ملف
  • تنفيذ عملية إتمام Dialogflow لاستدعاء Vision API مقابل الصورة التي تم تحميلها

المتطلبات

  • معرفة أساسية بلغة Python
  • فهم أساسي لخدمة Dialogflow
  • فهم أساسي لواجهة Vision API

2. نظرة عامة على البنية

ستنشئ تجربة حوارية جديدة باستخدام واجهة أمامية مخصّصة في Django، ثم ستوسّعها لتتكامل مع Vision API. ستنشئ الواجهة الأمامية باستخدام إطار عمل Django، وستشغّلها وتختبرها على جهازك، ثم ستنشرها على App Engine. ستبدو الواجهة الأمامية على النحو التالي:

5b07e09dc4b84646.png

سيكون مسار الطلب على النحو التالي كما هو موضّح في الصورة التالية:

  1. سيرسل المستخدم طلبًا من خلال الواجهة الأمامية.
  2. سيؤدي ذلك إلى بدء طلب إلى واجهة برمجة التطبيقات detectIntent في Dialogflow لربط عبارة المستخدم بالنية الصحيحة.
  3. بعد رصد نية استكشاف المعالم، سترسل ميزة التنفيذ في Dialogflow طلبًا إلى Vision API، وستتلقّى ردًا، ثم سترسله إلى المستخدم.

153725eb50e008d4.png

في ما يلي الشكل الذي ستبدو عليه البنية العامة.

a2fcea32222a9cb4.png

3- ما هي Vision API؟

‫Vision API هو نموذج تعلُّم آلة مُدرَّب مسبقًا يستخلص إحصاءات من الصور. يمكن أن تقدّم لك هذه الخدمة العديد من الإحصاءات، بما في ذلك تصنيف الصور، والتعرّف على الوجوه والمعالم، والتعرّف البصري على الأحرف، ووضع علامات على المحتوى الفاضح. لمزيد من المعلومات، يُرجى الاطّلاع على Vision AI.

4. إنشاء وكيل في Dialogflow

  1. انتقِل إلى وحدة تحكّم Dialogflow.
  2. سجِّل الدخول. (إذا كنت تستخدم التطبيق للمرة الأولى، استخدِم عنوان بريدك الإلكتروني للاشتراك).
  3. يُرجى قبول الأحكام والشروط، وسيتم نقلك إلى وحدة التحكّم.
  4. انقر على d9e90c93fc779808.png، وانتقِل إلى أسفل الصفحة، ثم انقر على إنشاء وكيل جديد. 3b3f9677e2a26d93.png
  5. أدخِل "VisionAPI" في حقل اسم الموظّف.
  6. انقر على إنشاء.

ينشئ Dialogflow الغرضَين التلقائيَين التاليَين كجزء من البرنامج الوكيل:

  1. تُرحّب نية الترحيب التلقائية بالمستخدمين.
  2. تتلقّى نية الاحتياطية التلقائية جميع الأسئلة التي لا يفهمها برنامج الدردشة الآلي.

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

تعديل نية الترحيب التلقائية لإعلام المستخدم بتحميل صورة

  1. انقر على نية الترحيب التلقائية.
  2. انتقِل إلى الردود > تلقائي > رد نصي أو SSML وأدخِل "مرحبًا. يمكنك تحميل صورة لاستكشاف المعالم البارزة".

f9cd9ba6917a7aa9.png

إنشاء كيان

  1. انقر على الكيانات.

432fff294b666c93.png

  1. انقر على إنشاء عنصر، وأطلِق عليه الاسم "اسم الملف"، ثم انقر على حفظ.

602d001d684485de.png

إنشاء نية جديدة

  1. انقر على النوايا > إنشاء نية.
  2. أدخِل "استكشاف الصورة التي تم تحميلها" في اسم الغرض.
  3. انقر على عبارات التدريب > إضافة عبارات تدريب وأدخِل "الملف هو demo.jpg" و "الملف هو taj.jpeg" كعبارات مستخدم مع ‎@filename ككيان.

dd54ebda59c6b896.png

  1. انقر على الردود > إضافة رد > الرد التلقائي > رد نصي أو رد بتنسيق SSML. أدخِل "تقييم الملف" وانقر على إضافة ردود.
  2. انقر على التنفيذ > تفعيل التنفيذ وفعِّل تفعيل طلب webhook لهذا الغرض.

b32b7ac054fcc938.png

5- إعداد التنفيذ للدمج مع Vision API

  1. انقر على التنفيذ.
  2. فعِّل أداة التعديل المضمّنة.

c8574c6ef899393f.png

  1. عدِّل index.js باستخدام الرمز التالي وعدِّل YOUR-BUCKET-NAME باستخدام اسم حزمة Cloud Storage.
'use strict';

const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');
const vision = require('@google-cloud/vision');
  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
const bucketName = 'YOUR-BUCKET-NAME';
const timeZone = 'America/Los_Angeles';
const timeZoneOffset = '-07:00';

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log("Parameters", agent.parameters);

  function applyML(agent){
    const filename = agent.parameters.filename;
    console.log("filename is: ", filename);

    // call vision API to detect text
    return callVisionApi(agent, bucketName, filename).then(result => {
                      console.log(`result is ${result}`);
                      agent.add(`file is being processed, here are the results:  ${result}`);
            //agent.add(`file is being processed ${result}`);
        }).catch((error)=> {
            agent.add(`error occurred at apply ml function`  + error);
        });
  }

  let intentMap = new Map();
  intentMap.set('Explore uploaded image', applyML);
  agent.handleRequest(intentMap);
});


async function callVisionApi(agent, bucketName, fileName){
    // [START vision_text_detection_gcs]
  // Imports the Google Cloud client libraries
  // Creates a client
  
  const client = new vision.ImageAnnotatorClient();
    try {
        // Performs text detection on the gcs file
        const [result] = await client.landmarkDetection(`gs://${bucketName}/${fileName}`);
        const detections = result.landmarkAnnotations;
        var detected = [];
        detections.forEach(text => {
            console.log(text.description);
            detected.push(text.description);
        });
        return detected;
    }
    catch(error) {
        console.log('fetch failed', error);
        return [];
    }
}
  1. الصِق ما يلي في package.json لاستبدال محتواه.
{
  "name": "dialogflowFirebaseFulfillment",
  "description": "Dialogflow fulfillment for the bike shop sample",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "6"
  },
  "scripts": {
    "lint": "semistandard --fix \"**/*.js\"",
    "start": "firebase deploy --only functions",
    "deploy": "firebase deploy --only functions"
  },
  "dependencies": {
    "firebase-functions": "2.0.2",
    "firebase-admin": "^5.13.1",
    "actions-on-google": "2.2.0", 
    "googleapis": "^27.0.0",
    "dialogflow-fulfillment": "^0.6.1",
    "@google-cloud/bigquery": "^1.3.0",
    "@google-cloud/storage": "^2.0.0",
    "@google-cloud/vision": "^0.25.0"
  }
}
  1. انقر على حفظ.

6. تنزيل تطبيق الواجهة الأمامية وتشغيله

  1. أنشئ نسخة طبق الأصل من هذا المستودع على جهازك المحلي:
https://github.com/priyankavergadia/visionapi-dialogflow.git
  1. انتقِل إلى الدليل الذي يحتوي على الرمز. يمكنك بدلاً من ذلك تنزيل العيّنة كملف مضغوط واستخراجها.
cd visionapi-dialogflow

7. إعداد البيئة المحلية

عند نشر تطبيقك، يستخدم وكيل Cloud SQL المضمّن في بيئة App Engine العادية للتواصل مع مثيل Cloud SQL. ومع ذلك، لاختبار تطبيقك محليًا، يجب تثبيت نسخة محلية من Cloud SQL Proxy واستخدامها في بيئة التطوير. لمزيد من المعلومات، اطّلِع على المقالة لمحة عن Cloud SQL Proxy.

لتنفيذ مهام المشرف الأساسية على مثيل Cloud SQL، يمكنك استخدام عميل Cloud SQL لـ MySQL.

تثبيت Cloud SQL Proxy

نزِّل خادم Cloud SQL الوكيل وثبِّته باستخدام الأمر التالي. يتم استخدام Cloud SQL Proxy للاتصال بمثيل Cloud SQL عند التشغيل محليًا.

نزِّل الخادم الوكيل:

curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64

اجعل الخادم الوكيل قابلاً للتنفيذ.

chmod +x cloud_sql_proxy

إنشاء مثيل Cloud SQL

  1. أنشئ مثيلاً من الجيل الثاني من Cloud SQL for MySQL. أدخِل "polls-instance" أو اسمًا مشابهًا. قد يستغرق تجهيز الجهاز الافتراضي بضع دقائق. بعد أن يصبح جاهزًا، من المفترض أن يظهر في قائمة الآلات الافتراضية.
  2. الآن، استخدِم أداة سطر الأوامر gcloud لتنفيذ الأمر التالي حيث يمثّل [YOUR_INSTANCE_NAME] اسم مثيل Cloud SQL. دوِّن القيمة المعروضة في connectionName للخطوة التالية. ويظهر بالتنسيق [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].
gcloud sql instances describe [YOUR_INSTANCE_NAME]

بدلاً من ذلك، يمكنك النقر على المثيل في وحدة التحكّم للحصول على اسم اتصال المثيل.

c11e94464bf4fcf8.png

إعداد مثيل Cloud SQL

ابدأ خادم Cloud SQL الوكيل باستخدام connectionName من القسم السابق.

./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

استبدِل [YOUR_INSTANCE_CONNECTION_NAME] بالقيمة التي سجّلتها في القسم السابق. يؤدي ذلك إلى إنشاء اتصال من جهاز الكمبيوتر إلى مثيل Cloud SQL لأغراض الاختبار المحلية. أبقِ خادم Cloud SQL الوكيل قيد التشغيل طوال الوقت الذي تختبر فيه تطبيقك على جهازك.

بعد ذلك، أنشئ مستخدمًا وقاعدة بيانات جديدَين في Cloud SQL.

  1. أنشئ قاعدة بيانات جديدة باستخدام Google Cloud Console لمثيل Cloud SQL باسم polls-instance. على سبيل المثال، يمكنك إدخال "استطلاعات" كاسم. a3707ec9bc38d412.png
  2. أنشئ مستخدمًا جديدًا باستخدام Cloud Console لمثيل Cloud SQL باسم polls-instance. f4d098fca49cccff.png

ضبط إعدادات قاعدة البيانات

  1. افتح mysite/settings-changeme.py للتعديل.
  2. أعِد تسمية الملف إلى setting.py.
  3. في موضعَين، استبدِل [YOUR-USERNAME] و[YOUR-PASSWORD] باسم المستخدم وكلمة المرور لقاعدة البيانات اللذين أنشأتهما في القسم السابق. يساعد ذلك في إعداد الاتصال بقاعدة البيانات من أجل نشر App Engine والاختبار المحلي.
  4. في السطر ‘HOST': ‘cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]' استبدِل [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME] باسم مثيلك الذي حصلت عليه في القسم السابق.
  5. نفِّذ الأمر التالي وانسخ قيمة connectionName التي تم إخراجها للانتقال إلى الخطوة التالية.
gcloud sql instances describe [YOUR_INSTANCE_NAME]
  1. استبدِل [YOUR-CONNECTION-NAME] بالقيمة التي سجّلتها في الخطوة السابقة.
  2. استبدِل [YOUR-DATABASE] بالاسم الذي اخترته في القسم السابق.
# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]'
        }
    }
# [END db_setup]
  1. أغلِق النافذة واحفظ التغييرات ووفِّر ‎settings.py.

8. إعداد حساب خدمة

  1. في وحدة تحكّم Dialogflow، انقر على 21a21c1104f5fdf3.png. في علامة التبويب عام، انتقِل إلى مشروع Google > رقم تعريف المشروع وانقر على Google Cloud 7b2236f5627c37a0.png لفتح Cloud Console. a4cfb880b3c8e789.png
  2. انقر على قائمة التنقّل ☰ > إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة، ثم انقر على 796e7c9e65ae751f.png بجانب عمليات الدمج في Dialogflow وانقر على إنشاء مفتاح.

3d72abc0c184d281.png

  1. سيتم تنزيل ملف JSON على جهاز الكمبيوتر، وستحتاج إليه في أقسام الإعداد التالية.

9- إعداد نقطة نهاية detectIntent في Dialogflow ليتم استدعاؤها من التطبيق

  1. في مجلد المحادثة، استبدِل key-sample.json بملف JSON لبيانات الاعتماد وسمِّه key.json.
  2. في views.py في مجلد المحادثة، غيِّر GOOGLE_PROJECT_ID = "<YOUR_PROJECT_ID>" إلى رقم تعريف مشروعك.

10. إنشاء حِزم Cloud Storage

إنشاء حزمة Cloud Storage للعناصر الثابتة في الواجهة الأمامية

  1. في Cloud Console، انقر على "التنقّل" قائمة التنقّل ☰ > مساحة التخزين.

87ff9469db4eb77f.png

  1. انقر على إنشاء حزمة.
  2. أدخِل اسمًا فريدًا عالميًا.

a15a6612e92a39d3.png

  1. اختَر مكان تخزين بياناتك. اختَر المنطقة وحدِّد الموقع الجغرافي الأنسب لاحتياجاتك.
  2. اختَر Standard كفئة التخزين التلقائية.

9c56abe632cf61db.png

  1. اختَر ضبط الأذونات بشكل موحّد على مستوى الحزمة (سياسة الحزمة فقط)، ثم انقر على متابعة لإنشاء الحزمة.

f175ac794049df04.png

  1. بعد إنشاء الحزمة، انقر على قائمة التنقّل ☰ > التخزين > المتصفّح وابحث عن الحزمة التي أنشأتها.

9500ee19b427158c.png

  1. انقر على 796e7c9e65ae751f.png بجانب الحزمة المعنيّة، ثمّ انقر على تعديل أذونات الحزمة.

fd0a310bc3656edd.png

  1. انقر على إضافة أعضاء، ثم انقر على أعضاء جدد، وأدخِل allUsers، ثم انقر على اختيار دور > عارض كائنات التخزين. يمنح هذا الإذن allUsers إذن الاطّلاع على ملفات الواجهة الأمامية الثابتة. هذا ليس إعداد أمان مثاليًا للملفات، ولكنّه مناسب لغرض هذا الدرس التطبيقي حول الترميز.

7519116abd56d5a3.png

إنشاء حزمة في Cloud Storage للصور التي حمّلها المستخدمون

اتّبِع التعليمات نفسها لإنشاء حزمة منفصلة لتحميل صور المستخدمين. اضبط الأذونات على "allUsers" مرة أخرى، ولكن اختَر إنشاء كائنات في Cloud Storage والاطّلاع على الكائنات في Cloud Storage كأدوار.

11. إعداد حِزم Cloud Storage في تطبيق الواجهة الأمامية

ضبط حزمة Cloud Storage في ملف settings.py

  1. فتح "mysite/setting.py"
  2. ابحث عن المتغيّر GCS_BUCKET واستبدِل ‘<YOUR-GCS-BUCKET-NAME>' بحزمة Cloud Storage الثابتة.
  3. ابحث عن المتغيّر GS_MEDIA_BUCKET_NAME واستبدِل ‘<YOUR-GCS-BUCKET-NAME-MEDIA>' باسم حزمة Cloud Storage للصور.
  4. ابحث عن المتغيّر GS_STATIC_BUCKET_NAME واستبدِل ‘<YOUR-GCS-BUCKET-NAME-STATIC>' باسم حزمة Cloud Storage للملفات الثابتة.
  5. احفظ الملف.
GCS_BUCKET = '<YOUR-GCS-BUCKET-NAME>'
GS_MEDIA_BUCKET_NAME = '<YOUR-GCS-BUCKET-NAME-MEDIA>'
GS_STATIC_BUCKET_NAME = '<YOUR-GCS-BUCKET-NAME-STATIC>'

إعداد حزمة Cloud Storage في ملف home.html

  • افتح مجلد المحادثة، ثم افتح templates وأعِد تسمية home-changeme.html إلى home.html.
  • ابحث عن <YOUR-GCS-BUCKET-NAME-MEDIA> واستبدِله باسم الحزمة التي تريد حفظ الملف الذي حمّله المستخدم فيها. يمنعك ذلك من تخزين الملف الذي حمّله المستخدم في الواجهة الأمامية والاحتفاظ بالأصول الثابتة في حزمة Cloud Storage. تطلب Vision API من حزمة Cloud Storage استلام الملف وإجراء التوقّع.

12. إنشاء التطبيق وتشغيله محليًا

لتشغيل تطبيق Django على الكمبيوتر المحلي، عليك إعداد بيئة تطوير Python، بما في ذلك Python وpip وvirtualenv. للحصول على التعليمات، يُرجى الرجوع إلى مقالة إعداد بيئة تطوير Python.

  1. أنشئ بيئة Python معزولة وثبِّت التبعيات.
virtualenv env
source env/bin/activate
pip install -r requirements.txt
  1. نفِّذ عمليات نقل بيانات Django لإعداد النماذج.
python3 manage.py makemigrations
python3 manage.py makemigrations polls
python3 manage.py migrate
  1. ابدأ تشغيل خادم ويب محلي.
python3 manage.py runserver
  1. في متصفّح الويب، انتقِل إلى http://localhost:8000/. من المفترض أن تظهر لك صفحة ويب بسيطة بالشكل التالي:

8f986b8981f80f7b.png

يتم عرض صفحات نموذج التطبيق من خلال خادم الويب Django الذي يعمل على جهاز الكمبيوتر. عندما تكون مستعدًا للمتابعة، اضغط على Control+C (Command+C على جهاز Macintosh) لإيقاف خادم الويب المحلي.

استخدام وحدة تحكّم المشرف في Django

  1. إنشاء مستخدم متميّز
python3 manage.py createsuperuser
  1. ابدأ تشغيل خادم ويب محلي.
python3 manage.py runserver
  1. انتقِل إلى http://localhost:8000/admin/ في متصفّح الويب. لتسجيل الدخول إلى موقع المشرف، أدخِل اسم المستخدم وكلمة المرور اللذين أنشأتهما عند تشغيل createsuperuser.

13. نشر التطبيق في بيئة App Engine العادية

اجمع كل المحتوى الثابت في مجلد واحد عن طريق تنفيذ الأمر التالي، الذي ينقل جميع الملفات الثابتة للتطبيق إلى المجلد المحدّد بواسطة STATIC_ROOT في settings.py:

python3 manage.py collectstatic

حمِّل التطبيق من خلال تنفيذ الأمر التالي من دليل التطبيق الذي يتضمّن ملف app.yaml:

gcloud app deploy

انتظِر إلى أن تتلقّى الرسالة التي تُعلمك باكتمال التحديث.

14. اختبار تطبيق الواجهة الأمامية

في متصفح الويب، انتقِل إلى https://<your_project_id>.appspot.com

في هذه المرة، سيتم عرض طلبك من خلال خادم ويب يعمل في بيئة App Engine العادية.

ينشر الأمر app deploy التطبيق كما هو موضّح في app.yaml ويضبط الإصدار الذي تم نشره حديثًا كإصدار تلقائي، ما يؤدي إلى عرضه لجميع الزيارات الجديدة.

15. الإنتاج

عندما تكون مستعدًا لعرض المحتوى في مرحلة الإنتاج، غيِّر المتغيّر DEBUG إلى False في mysite/settings.py.

16. اختبار روبوت الدردشة

يمكنك اختبار روبوت المحادثة في المحاكي أو استخدام عملية الدمج مع الويب أو Google Home التي سبق أن أنشأتها.

  1. المستخدم: "مرحبًا"
  2. روبوت الدردشة: "مرحبًا. يمكنك تحميل صورة لاستكشاف المعالم البارزة".
  3. يحمّل المستخدم صورة.

نزِّل هذه الصورة وأطلِق عليها الاسم demo.jpg واستخدِمها.

c3aff843c9f132e4.jpeg

  1. روبوت المحادثة: "جارٍ معالجة الملف، إليك النتائج: جسر البوابة الذهبية، منطقة البوابة الذهبية الوطنية الترفيهية، جسر البوابة الذهبية، جسر البوابة الذهبية، جسر البوابة الذهبية".

من المفترض أن يبدو على النحو التالي:

228df9993bfc001d.png

17. تَنظيم

إذا كنت تريد إكمال برامج تعليمية أخرى من Dialogflow، يمكنك تخطّي هذا القسم والعودة إليه لاحقًا.

حذف وكيل Dialogflow

  1. انقر على الرمز ca4337eeb5565bcb.png بجانب وكيلك الحالي.

520c1c6bb9f46ea6.png

  1. في علامة التبويب الإعدادات العامة، مرِّر للأسفل وانقر على حذف هذا الوكيل.
  2. اكتب حذف في النافذة التي تظهر وانقر على حذف.

18 تهانينا

أنشأت برنامج محادثة آليًا في Dialogflow ودمجته مع Vision API. أصبحت الآن مطوّر برامج محادثة مبرمَجة.

مزيد من المعلومات

لمزيد من المعلومات، اطّلِع على نماذج الرموز البرمجية في صفحة Dialogflow Github.