Dialogflow CX: إنشاء وكيل افتراضي للبيع بالتجزئة

1. قبل البدء

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية إنشاء محادثة بين مستخدم وبوت في مجال البيع بالتجزئة باستخدام Dialogflow CX، وهي منصة ذكاء اصطناعي قائم على المحادثات (CAIP) لإنشاء واجهات مستخدم قائمة على المحادثات. يمكن لخدمة Dialogflow CX استخدام موظّفي دعم افتراضيين، مثل محادثات الدردشة والروبوتات الصوتية وبوابات الهاتف، ويمكنها إتاحة قنوات متعدّدة بأكثر من 50 لغة مختلفة.

سيرشدك هذا الدرس التطبيقي حول الترميز إلى كيفية إنشاء روبوت دردشة لموقع إلكتروني للبيع بالتجزئة. يُطلق على النشاط التجاري الخيالي الذي ننشئ له محادثة آلية اسم: G-Records. ‫G-Records هي شركة لتسجيل الأغاني الروك ومقرها في كاليفورنيا. تضمّ شركة الإنتاج 4 فرق روك، وهي Alice Googler وG's N' Roses وThe Goo Fighters وThe Google Dolls. تبيع شركة G-Records سلعًا خاصة بفرقة موسيقية لجميع محبّي موسيقى الروك.

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

النتيجة النهائية

المُعطيات

وستتعرّف على مزايا Dialogflow CX مقارنةً بمنصّة Dialogflow ES. ويشمل ذلك المفاهيم التالية:

  • كيفية إنشاء وكيل افتراضي في Dialogflow CX ضمن Google Cloud
  • تعلم كيفية إنشاء التدفقات
  • التعرّف على كيفية إنشاء الكيانات
  • التعرّف على كيفية إنشاء النوايا
  • تعرَّف على كيفية إنشاء الصفحات وصفحات الانتقال باستخدام عناصر معالجة الحالات.
  • تعرَّف على كيفية نقل الصفحات باستخدام مسارات الأهداف.
  • التعرّف على كيفية نقل الصفحات باستخدام المسارات المشروطة والمَعلمات
  • التعرّف على كيفية عرض إجابات مشروطة باستخدام دوال النظام
  • التعرّف على كيفية إنشاء رسائل احتياطية
  • التعرّف على كيفية استخدام المحاكي
  • التعرّف على كيفية إنشاء حالات الاختبار وتغطية الاختبار

سيظهر تصميم موظّف دعم Dialogflow CX النهائي على النحو التالي:

النتيجة النهائية

المتطلبات

  • ستحتاج إلى عنوان Gmail أو هوية Google لإنشاء موظّف دعم في Dialogflow CX.
  • إمكانية الوصول إلى Google Cloud:

2. إعداد البيئة

إنشاء مشروع على Google Cloud

بما أنّ Dialogflow CX يعمل في Google Cloud، عليك إنشاء مشروع على Google Cloud. ينظّم المشروع جميع موارد Google Cloud. ويتألف من مجموعة من المتعاونين وواجهات برمجة التطبيقات المفعّلة (والموارد الأخرى) وأدوات المراقبة ومعلومات الفوترة وعناصر التحكّم في المصادقة والوصول.

عند إنشاء مشروع جديد، عليك إدخال اسم المشروع. وعليك ربطه بحساب فوترة ومؤسسة حاليَين.

يُستخدَم حساب الفوترة لتحديد الجهة المكلّفة بدفع رسوم مجموعة معيّنة من الموارد، ويمكن ربطه بمشروع واحد أو أكثر. يتم تحصيل رسوم استخدام المشروع من حساب الفوترة المرتبط. في معظم الحالات، يتم ضبط إعدادات الفوترة عند إنشاء مشروع. لمزيد من المعلومات، اطّلِع على مستندات الفوترة. تأكَّد من تفعيل الفوترة لمشروعك على Cloud.

إنشاء مشروع جديد

تفعيل Dialogflow API

لاستخدام Dialogflow، عليك تفعيل واجهة برمجة التطبيقات Dialogflow API لمشروعك.

  1. اختَر المشروع الذي تريد تفعيل واجهة برمجة التطبيقات له، ثم انقر على متابعة.
  2. أغلِق قائمة "واجهات برمجة التطبيقات والخدمات" وانقر على إنشاء بيانات اعتماد.
  3. انقر على بيانات التطبيق.
  4. يمكنك الإجابة لا، لا أستخدمها لأنّك لا تستخدم Kubernetes Engine أو App Engine أو Cloud Functions في الوقت الحالي.
  5. 3. انقر على تم.

إعداد بيانات اعتماد

إنشاء موظّف دعم جديد في Dialogflow CX

لإنشاء موظّف دعم جديد في Dialogflow CX، افتح أولاً وحدة تحكّم Dialogflow CX:

  1. اختَر مشروع Google Cloud الذي تم إنشاؤه سابقًا.
  2. انقر على إنشاء وكيل.

أكمِل نموذج الإعدادات الأساسية للوكيل:

  • يمكنك اختيار أي اسم معروض.
  • اختَر us-central1 كموقع جغرافي.
  • اختَر المنطقة الزمنية المفضّلة لديك.
  • اختَر ar - الإنجليزية كلغة تلقائية.

انقر على إنشاء.

إنشاء وكيل

حسنًا، لقد انتهينا. يمكننا أخيرًا البدء في إعداد نموذج وكيلنا الافتراضي.

3- التدفقات

غالبًا ما تتضمّن المحادثات المعقدة مواضيع محادثات متعددة. في حال استخدام برنامج الدردشة المبرمَجة الذي سننشئه من أجل G-Records، لبيع سلع الفرقة، سيكون لدينا مربّعات حوار حول كتالوج المنتجات والدفع وحالة الطلب وأسئلة عن خدمة العملاء. يمكننا تقسيم موضوعات المحادثة هذه إلى تدفقات.

مسار البيع بالتجزئة

تسمح المخططات للفِرق بالعمل على مسارات محادثات فردية. من الممارسات الجيدة تبسيط المسار، حتى يتلاءم بسهولة مع الشاشة ويكون أكثر وحدات.

تُعدّ التدفقات مفهومًا جديدًا بالنسبة إلى شركة Dialogflow CX. تعتمد Dialogflow Essentials على مفهوم "الوكلاء الكبرى"، والذي يشبه بطريقة ما "التدفقات". ومع ذلك، ستستخدم مسارات الإحالات الناجحة بشكلٍ متكرّر أكثر.

في وقت لاحق من هذا الدرس العملي، سنستخدم معالجات الحالات التي يمكنها إنهاء مسار (حتى يتم الرجوعه إلى مسار لاحق أو سابق)، أو يمكنك إنهاء جلسة موظّف الدّعم بالكامل.

لنبدأ في إنشاء بعض المسارات.

إنشاء المسارات

  1. في Dialogflow CX، انقر على رمز + > إنشاء مسار.
  2. حدِّد الاسم: Catalog واضغط على مفتاح Enter.

إنشاء تدفق

تم إنشاء مسار الإحالة الناجحة الأول القائمة. الآن قم بإنشاء التدفقات الأخرى:

  • Order Process
  • My Order
  • Customer Care

التدفقات

في وقت لاحق من هذا الدرس التطبيقي، سنضبط عناصر معالجة حالة الصفحة، ما سيضمن أن يظهر العرض المركّز على الشاشة على النحو التالي:

التدفقات

مُحاكي

على يسار Dialogflow CX Console، يمكنك اختبار موظّف الدعم الافتراضي باستخدام المحاكي المضمّن. يمكنك اختبار المحادثة من بداية المحادثة أو من مسار معيّن.

  1. انقر على زر وكيل الاختبار في أعلى يسار الشاشة.
  2. في حقل "التحدّث إلى موظّف الدعم"، اكتب: Hello سيردّ موظّف الدعم الافتراضي برسالة ترحيب تلقائية: مرحبًا. كيف يمكنني مساعدتك؟

مُحاكي

لنعدِّل نص الترحيب التلقائي هذا.

مسار البدء التلقائي

لنبدأ بإنشاء مسار نية سيتم تفعيله بعد الترحيب بالوكيل الافتراضي.

  1. في الشريط الجانبي الأيمن إنشاء > التدفقات، انقر على تدفق البدء التلقائي، واختَر عقدة العرض التدرّجي البدء.

سيؤدي ذلك إلى فتح صفحة ابدأ. تم اختيار صفحة "البدء" تلقائيًا في قسم الشريط الجانبي الإنشاء > الصفحات.

  1. في البدء > المسارات، انقر على Intent الترحيب التلقائي.

يصنف الغرض نية المستخدم النهائي في جولة محادثة واحدة. في Dialogflow CX، يمكن أن تكون النوايا جزءًا من معالِج حالة لتوجيه الصفحة النشطة التالية أو الإجراء التالي.

  1. أزِل جميع إدخالات يقول الوكيل وأضِف هذا النص الجديد:

Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?

لتبسيط المحادثة، سنحتاج أيضًا إلى بعض أزرار الردود السريعة أو شرائح الاقتراحات.

  1. انقر على إضافة خيار حوار > الحمولة المخصّصة واستخدِم مقتطف الرمز أدناه.
  2. استخدِم مقتطف الرمز البرمجي أدناه كحمولة مخصّصة، وانقر على حفظ.

لقراءة المزيد من المعلومات عن الحمولات المخصّصة، اطّلِع على المستندات.

{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

الغاية التلقائية للترحيب

  1. يمكنك اختبار نية الترحيب في المحاكي.

قد تتساءل عن سبب عدم ظهور أي محتوى وافٍ. ويرجع ذلك إلى أنّ المحتوى المنسَّق، مثل شرائح الاقتراحات، يعتمد على عملية دمج. تتطلّب الخطوات التالية حساب فوترة، ولكن يمكنك تخطّيها إذا لم يكن لديك حساب.

  1. في الشريط الجانبي الأيمن، انقر على إدارة > عمليات الدمج.
  2. اختَر Dialogflow Messenger وانقر على ربط.
  3. في النافذة المنبثقة، انقر على تفعيل.

تفعيل الدمج

ستظهر نافذة منبثقة أخرى، هذه المرة تتضمّن رمز JavaScript للدمج الذي يمكنك لصقه في موقعك الإلكتروني لدمج مكوّن Dialogflow Messenger في موقعك الإلكتروني. بما أنّنا لا نملك موقعًا إلكترونيًا بعد، سنختبر موظّف الدعم الافتراضي مباشرةً في الأداة.

تجربة المراسلة الآن من Dialogflow

  1. انقر على رابط التجربة الآن.
  2. انقر على رمز محادثة الدردشة في أسفل يسار الصفحة لفتح نافذة المحادثة. اكتب Hello لبدء المحادثة.

تجربة Dialogflow Messenger الآن

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

4. أنواع الكيانات

تُستخدَم أنواع الكيانات للتحكّم في كيفية استخراج البيانات من إدخال المستخدم النهائي. تتشابه أنواع الكيانات في Dialogflow CX إلى حد كبير مع أنواع الكيانات في Dialogflow ES. توفّر منصة Dialogflow كيانات نظام محدّدة مسبقًا يمكنها مطابقة العديد من أنواع البيانات الشائعة. على سبيل المثال، هناك عناصر نظام لمطابقة التواريخ والأوقات والألوان وعناوين البريد الإلكتروني وما إلى ذلك. يمكنك أيضًا إنشاء كيانات مخصّصة لمطابقة البيانات المخصّصة.

لنبدأ بإعداد جميع الكيانات المخصّصة قبل أن نتمكّن من تصميم الصفحات في التدفق. سننشئ العناصر التالية:

عناصر Dialogflow

إنشاء الكيانات

لننشئ عنصر فنان.

  1. انقر على إدارة > أنواع الكيانات.
  2. انقر على + إنشاء.
  • الاسم المعروض: Artist
  • الفئات:
  • The Google Dolls (مع مرادف: Google Dolls)
  • The Goo Fighters (مع مرادف: Goo Fighters)
  • G's N' Roses (بالمرادف: Gs and Roses)
  • Alice Googler
  • انقر على "الخيارات المتقدّمة" وضَع علامة في المربّع بجانب المطابقة التقريبية. (في حال كتابة اسم الفرقة بشكل غير صحيح، قد يظلّ مطابقًا للكيان الصحيح).
  • في "الخيارات المتقدّمة"، ضَع علامة أيضًا في المربّع بجانب إخفاء المعلومات في السجلّ. (إذا كتبت اسم الفرقة بشكل خاطئ، فسيتم تصحيح الاسم في السجل.)
  1. انقر على حفظ.

نحتاج أيضًا إلى كيان للسلعة التجارية:

  1. انقر على إدارة > أنواع الكيانات.
  2. انقر على + إنشاء.
  • الاسم المعروض: Merch
  • الفئات:
  • T-shirt
  • Longsleeve (مع مرادف: Longsleeve shirt)
  • Tour Movie
  • Digital Album (مع مرادف: MP3 Album، MP3)
  • CD (مع المرادفات Disc، Physical CD)
  1. انقر على حفظ.

سنحتاج أيضًا إلى عنصر للألبوم:

  1. انقر على إدارة > أنواع الكيانات.
  2. انقر على + إنشاء
  • الاسم المعروض: Album
  • الفئات:
  • Live
  • Greatest Hits (بالمرادف: Hits)
  1. انقر على حفظ.

سنحتاج أيضًا إلى عنصر مقاسات الملابس:

  1. انقر على إدارة > أنواع الكيانات.
  2. انقر على + إنشاء.
  • الاسم المعروض: ShirtSize
  • الفئات:
  • XS (مع مرادف: Extra Small)
  • S (مع مرادف: Small)
  • M (مع مرادف: Medium)
  • L (مع مرادف: Large)
  • XL (مع مرادف: Extra Large)
  • 2XL (مع مرادف: Extra Extra Large)
  • 3XL
  1. انقر على حفظ.

وعنصر أرقام الطلبات التي تتكوّن عادةً من 4 أحرف أبجدية رقمية و3 أرقام. (مثل ABCD123)

  1. انقر على إدارة > أنواع الكيانات.
  2. انقر على + إنشاء.
  • الاسم المعروض: OrderNumber
  • كيانات التعبير العادي
  • العنصر: [A-Z]{4}[0-9]{3}
  1. انقر على حفظ.

من المفترض أن تظهر إعدادات الكيان على النحو التالي:

@Artist: نوع العنصر "‎@Artist"

‎@Merch: نوع الكيان في @Merch

@ الألبوم: نوع الكيانات @Album

‫@ShirtSize: نوع الكيانات @ShirtSize

‫@OrderNumber: نوع عنصر ‎@OrderNumber

وبعد الانتهاء من تجهيز الكيانات المخصّصة، يمكننا تجهيز الأهداف. لنواصل الدرس التطبيقي.

5- مكان ووقت الاستماع إلى الموسيقى

يصنف الهدف نية المستخدِم النهائي في جولة محادثة واحدة. وقد تم تبسيطها بشكل كبير في Dialogflow CX، ولم تعُد لبنة أساسية للتحكّم في المحادثات. لا يستخدم Dialogflow CX سوى النوايا لمطابقة ما يقوله المستخدمون. في Dialogflow ES، كان عليك ربط كل العناصر بهدف (المَعلمات والأحداث وعمليات التنفيذ وما إلى ذلك). تحتوي الأهداف في Dialogflow CX فقط على عبارات تدريبية، وبالتالي يمكن إعادة استخدامها. لم تعُد هذه العبارة تتحكّم في المحادثة. لذا ستكون عملية إنشاء النوايا مباشرة:

يمكن أن تستخدِم عبارات التدريب في النوايا الكيانات لاستخراج إدخال "متغيّر"، ولهذا السبب، من الممارسات الجيدة إنشاء أنواع الكيانات مسبقًا، وهو ما فعلناه في الصفحة السابقة من خطوات المختبر.

إنشاء الأهداف

لنبدأ بإعداد جميع الأهداف قبل أن نتمكن من تصميم الصفحات في تدفق.

  1. انقر على إدارة > الأهداف.
  2. انقر على + إنشاء.

استخدِم التفاصيل التالية:

  • الاسم المعروض redirect.artists.overview
  • الوصف Artists overview: The bands supported by the label

نية جديدة

انتقِل للأسفل وأنشئ عبارات التدريب التالية:

  • Which bands are signed?
  • Which bands
  • Which artists
  • Which artists are part of the record label
  • Who is part of the label
  • From which bands can I buy merchandise
  • Band merchandise
  • Which music do you have?
  • I would like to know who are signed to the label
  • Who are supported by the label
  • From who can I buy shirts
  • What music can I order
  • Can I get an overview of all the artists

عبارات التدريب

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

في ما يلي بعض النقاط التي يجب الانتباه إليها:

  • يُرجى العِلم أنّه عند إدخال عبارة التدريب، سيضيف Dialogflow CX تعليقات توضيحية تلقائيًا إلى الكيانات. وإذا لم يتم إجراء ذلك، قد تحتاج إلى تعديل الكيان (من خلال إضافة مرادف) أو من خلال وضع تعليقات توضيحية يدويًا على عبارة التدريب بنفسك.
  • عبارات التدريب الأقصر: يمكن أن يعمل نظام الذكاء الاصطناعي اللغوي في Dialogflow أيضًا مع عبارات التدريب الأقصر، وقد قدّمنا بعض الأمثلة هنا.
  • التدريب المفرط: قد يؤدي استخدام عدد كبير جدًا من عبارات التدريب لطلب معيّن إلى التدريب المفرط وتحقيق نتيجة أقلّ مرغوبًا فيها. من أفضل الممارسات استخدام الاختبار المتكرّر والمتزايد وإضافة عبارات تدريبية في حال عدم تطابق أيّ نية.

الاسم المعروض

عبارات التدريب

redirect.product.overview

"Which products do you sell?", "What merchandise items do you have?", "What are you selling?", "What are the items?", "Which products?" "What merchandise?", "Please tell me what you have"

confirm.artists.overview

"Yeah, let me buy merchandise", "Yes, I want to purchase something", "Yes, I would like to order merchandise from Alice Googler" (ملاحظة: يجب التعرّف على "منى"، موظفة Google، ككيان على شكل علامة تجارية على YouTube‏)، "Ok, let's buy stuff."

redirect.price

"How much does a t-shirt cost?", "What's the price for the tour movie?", "The album is how much?", "I want to know the price of a longsleeve shirt", "What's the price difference?", "What does each product costs?", "What does it cost?", "What is the price?"

redirect.product

"Tour movie", "I am interested in a t-shirt", "Can I buy a digital album?", "I want the CD", "I want to buy something", "Can I purchase a record?", "I want to buy a t-shirt size M of The Google Dolls", "Can I purchase the Alice Googler digital album?"

redirect.product.of.artist

"Yeah, let's shop", "Give me merch of Alice Googler", "Shirts of The Google Dolls that would be nice.", "Yes", "I want The Goo Fighters stuff", "Yes, I want to order merchandise", "Yep, give me items of G's N' Roses", "Go for it", "Anything Alice Googler", "I am a G's N' Roses fan!", "Google Dolls", "Yes of The Google Dolls"

redirect.shirts

"Shirts", "I want to buy shirts", "I am interested in shirts", "I want a shirt", "Shirts of G's N' Roses please", "Give me shirts of the Google Dolls", "I want to buy shirts of Alice Googler"

redirect.music

"Music", "I want to buy music", "I am interested in music", "Give me music of the Goo Fighters", "Music of Goo Fighters please", "Interested in buying the Alice Googler album", "Purchase Alice Googler music"

redirect.album

"Hits", "Live Album", "I want the Greatest Hits Digital Album", "Give me the Greatest Hits CD", "Hits on MP3"

redirect.shirt.size

"XS", "I have M", "I want Large", "My size is 3XL", "Extra Large is the size"

redirect.my.order

"About my order", "I have a question about my order", "My order is ABCD123, I have a question about my order."

status

redirect.my.order.status

redirect.my.order.canceled

"I want to cancel my order", "I want to cancel order ABCD123", "Please cancel order ABCD123", "Undo my order", "Stop my order", "Cancel"

redirect.shipping.info

"How long will it take?", "How long is shipping?", "How long does shipping take?", "When will I receive it?"

redirect.refund.info

"I want a refund.", "Can I get a refund", "I want to return the CD", "I want to return my t-shirt"

redirect.swapping.info

"I want to swap my item", "Can I change my t-shirt for a larger size?", "Can I change my product?", "I want to swap the CD"

redirect.order.process

"I want to buy a t-shirt of the Google Dolls, size S", "Let me buy the digital CD of Alice Googler", "Get me the tour movie of G's N' Roses", "Buy a longsleeve shirt of The Goo Fighters", "Purchase the Alice Googler t-shirt", "Please order me the Google Dolls CD"

confirm.proceed.order

"Yes", "Yes, please continue", "Yes order", "I want to order", "Yeah", "Yep", "I confirm", "Agree", "Go ahead", "Order", "Buy it", "Purchase", "Okay"

decline.proceed.order

"No", "I rather not", "I don't want it anymore", "Don't order", "Stop", "Not anymore", "Nope", "Go back", "Reset", "Decline", "I don't need it"

redirect.home

"Go back", "Home", "Help", "What else can I ask", "Restart", "Can you tell me what I can order?", "What questions can I ask", "I need help", "Advice please", "Hi", "Hello", "Good day!"

redirect.end

"No that's it, goodbye", "Bye", "Cheers", "End", "That's it", "No more questions", "Exit", "Have a good day", "End Call", "Close"

والآن بعد أن تم إعداد العناصر القابلة لإعادة الاستخدام (التدفقات والكيانات والنوايا)، يمكننا تجميع هذه العناصر معًا من خلال إنشاء معالِجات الصفحات والحالة.

6- الصفحات ومعالجات الحالات

يمكن وصف محادثة Dialogflow CX (جلسة) وعرضها على أنّها جهاز في الحالة المحدودة. لنأخذ آلة البيع كمثال، يمكن تصميمها على أنها آلة حالة محدودة. تتضمّن الحالات التالية: "في انتظار العملات" و"اختيار الحلوى" و"إعطاء الحلوى"، ويتم الانتقال بين هذه الحالات استنادًا إلى مجموعة من المدخلات. على سبيل المثال، يؤدي إدخال عملة معدنية إلى نقل آلة البيع من "انتظار العملات" إلى "اختيار الحلوى". الصفحات هي الطريقة التي يمكننا بها وضع نماذج لهذه الحالات لوكيل افتراضي في Dialogflow CX.

عندما يتفاعل المستخدم النهائي مع Dialogflow CX في المحادثة، يتم نقل المحادثة من صفحة إلى أخرى، وبالتالي في أي لحظة معيّنة، تكون صفحة واحدة بالضبط هي الصفحة الحالية، ويتم اعتبار الصفحة الحالية نشطة، كما يُعتبر المسار المرتبط بهذه الصفحة نشطًا.

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

تحتوي الصفحات على عمليات المعالجة (محادثات إدخال ثابتة و/أو وحدات ربط webhooks) والمَعلمات ومعالجات الحالات. يتم التحكّم في المحادثة من خلال معالجات الحالات، ما يتيح لك إنشاء مسارات انتقال مختلفة للانتقال إلى صفحة أخرى في تجربة عملاء Dialogflow، بما في ذلك جعلها مشروطة (لتقسيم المحادثات).

يتم التحكّم في حالة المحادثة من خلال معالجة الانتقالات بين الصفحات باستخدام ثلاثة أنواع مختلفة من المسارات:

  • مسارات الأهداف: الحالات التي يجب فيها مطابقة هدف (مثل تغيير الصفحة استنادًا إلى ما يقوله المستخدم النهائي) (الخطوط الزرقاء في المخطّط البياني المرئي)
  • مسارات الشروط: عندما يجب التحقّق من شرط معيّن (مثل تغيير الصفحة استنادًا إلى مَعلمات معيّنة مخزّنة في الجلسة) (الخطوط البرتقالية في المخطّط البياني المرئي)
  • معالجات الأحداث: عندما يجب معالجة حدث احتياطي معيّن (مثل عدم معالجة أي إدخال أو مطابقة، وذلك لإزالة الغموض لدى المستخدم النهائي بشأن مسار الإجراء المستنِد إلى النيّة أو الشرط) (الخطوط الخضراء في المخطّط البياني المرئي)

يتم تحديد عبارات المحادثة (أي المحتوى أو الردّ على المستخدم) من خلال الاستيفاء، والذي يمكن أن يكون ثابتًا أو ديناميكيًا:

  • الاستجابة الثابتة: عند تقديم استجابة ثابتة للامتثال
  • التنفيذ الديناميكي: عند استدعاء ردّ تلقائي على الويب لتنفيذ الاستجابات من أجل الاستجابات الديناميكية

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

مسارات Intent من الصفحة

إنشاء الصفحات في مسار البدء التلقائي

في ما يلي مخطّط تدفق لمسار البدء التلقائي:

الصفحات المرتبطة بالكتالوج

لننقر على هذا الرابط معًا:

  1. انقر على إنشاء > مسار البدء التلقائي.
  2. انقر على صفحة البدء.
  3. انقر على رمز + بجانب الخطوط.
  4. أضِف redirect.artists.overview.
  5. انتقِل للأسفل إلى الانتقال، وانتقِل إلى مسار القائمة.
  6. انقر على حفظ.
  7. كرِّر الخطوات أعلاه للصف redirect.product.overview والصفوف الـ 11 الأخرى من هذا الجدول:

الصفحة (في مسار الإحالة الناجحة)

المسارات > الغرض

المسارات > الانتقال إلى

بدء

Default Welcome Intent

-

بدء

redirect.artists.overview

المسار: الكتالوج

بدء

redirect.product.overview

المسار: الكتالوج

بدء

redirect.shirts

المسار: الكتالوج

بدء

redirect.music

المسار: الكتالوج

بدء

redirect.product

المسار: الكتالوج

بدء

redirect.product.of.artist

المسار: الكتالوج

بدء

redirect.refund.info

المسار: خدمة العملاء

بدء

redirect.shipping.info

المسار: خدمة العملاء

بدء

redirect.swapping.info

المسار: خدمة العملاء

بدء

redirect.my.order

المسار: طلبي

بدء

redirect.my.order.canceled

المسار: طلبي

بدء

redirect.my.order.status

المسار: طلبي

بدء

redirect.end

الصفحة: إنهاء الجلسة

مسارات الصفحة الرئيسية الافتراضية

سيعمل "تدفق البدء التلقائي" بالطريقة التي تعمل بها قائمة الخيارات عند الاتصال بمركز اتصال. ومع ذلك، في هذا الوكيل الافتراضي، يتم تدريبه باستخدام اللغة الطبيعية، مع عبارات التدريب في النوايا. وبالتالي، يتم التفاعل من خلال المحادثة وليس من خلال خيارات DTMF، كما أنّه أكثر طبيعية وإنسانية.

مسارات الصفحة الرئيسية التلقائية

إنشاء الصفحات في مسار إنشاء الكتالوج

ينتمي نص المحادثة التالي إلى مسار "القائمة":

> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.

From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!

We sell shirts, music or the tour movie.

Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.

Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"

سيختلف مربّع الحوار عند اختيار موسيقى أو فيلم الجولة: بالنسبة إلى الموسيقى، سيظهر مربّع الحوار على النحو التالي:

 > "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"

بالنسبة إلى "فيلم الجولة"، سيظهر الحوار على النحو التالي:

 > "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?

في ما يلي مخطط انسيابي لجميع الصفحات ضمن عملية "الكتالوج":

الصفحات المرتبطة بالكتالوج

لاحِظ مدى تعقيد هذه العملية:

  • يمكنني تخطّي سؤال "ما هي أسماء الفنانين؟" وطرح "ما هي السلع المتوفّرة؟" على الفور.
  • من مسار البدء التلقائي، يمكنني أن أسأل: "أريد شراء قميص Google Dolls" أو "أريد شراء منتج". وهذا يعني أنّ موظّف الدعم الافتراضي سيطرح أسئلة متابعة لملء خانات هذه المَعلمات المطلوبة. وستنتقل مباشرةً إلى صفحة المنتج.
  • تأتي مربّع حوار "السعر" من صفحة "السعر" التي ستتم إعادة استخدامها.
  • على الرغم من أنّ الحوار في فيلم الجولة يبدو أنّه أبسط الحوارات، سنضيف إليه لمسة خاصة. سنعيد استخدام هذا الجزء من المحادثة، حتى يتمكّن المستخدمون النهائيون أيضًا من إدخاله مباشرةً لأحد المنتجات الأخرى، إذا كانوا يريدون تخصيص كل المعلومات في آنٍ واحد:
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"

لنبدأ أولاً بربط الصفحات.

  1. انقر على إنشاء > الكتالوج
  2. انقر على صفحة البدء.
  3. انقر على رمز + بجانب الخطوط.
  4. أضِف redirect.artists.overview.
  5. انتقِل للأسفل إلى الانتقال، واختَر الصفحة، ثم اختَر + صفحة جديدة.
  6. استخدِم اسم الصفحة: Artist Overview وانقر على حفظ.

لننهي الآن بقية الخطوات:

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

الصفحة (في مسار الإحالة الناجحة)

المسارات > الغرض

المسارات > الانتقال إلى

بدء الكتالوج

redirect.artists.overview

نظرة عامة على الفنّان

بدء الكتالوج

redirect.product

المنتج

بدء الكتالوج

redirect.product.overview

نظرة عامة على المنتج

بدء الكتالوج

redirect.product.of.artist

نظرة عامة على المنتج

بدء الكتالوج

redirect.shirts

قمصان

بدء الكتالوج

redirect.music

موسيقى

بدء الكتالوج

redirect.end

إنهاء الجلسة

بدء الكتالوج

redirect.home

مسار الإحالة الناجحة

نظرة عامة على الفنّان

redirect.product.of.artist

نظرة عامة على المنتج

لنواصل الآن عملية إضافة المزيد من عمليات التسليم الثابتة.

  1. في مسار "القائمة"، انقر على صفحة نظرة عامة على الفنّان.
  2. انقر على تعديل عملية الإنجاز في قسم إكمال الإدخال.
  3. استخدام عمليات التنفيذ الثابتة التالية (يقول الوكيل):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. انقر على حفظ.
  2. في مسار "القائمة"، انقر على صفحة نظرة عامة على المنتج.
  3. انقر على تعديل عملية الإنجاز في قسم إكمال الإدخال.
  4. استخدِم الردّ الثابت التالي (يقول موظّف الدّعم):
  • We sell shirts, music or the tour movie.
  1. انقر على حفظ.

مَعلمات الصفحة

تُستخدَم المَعلمات لتسجيل القيم التي قدّمها المستخدم النهائي أثناء الجلسة والإشارة إليها. ولكل مَعلمة اسم ونوع كيان. إنّ @Artist و@Merch هما الحد الأدنى للمَعلمتَين اللتين نحتاج إلى جمعهما لإجراء طلب السلع. بالنسبة إلى القمصان أو الأكمام الطويلة، تريد أيضًا جمع @ShirtSize، وإذا أردت طلب موسيقى، عليك أيضًا إدخال اسمَين @Carrier و@Album.

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

على سبيل المثال، يمكنك تقديم رسائل تنفيذ ثابتة مخصّصة في قسم المَعلمة. إذا كانت المَعلمة مطلوبة، سيتم عرض عمليات إكمال هذه المَعلمة. ستتم إضافة رسائل الرد هذه إلى قائمة الانتظار للرد. خلال دور موظّف الدّعم، من الممكن (ومرغوب فيه أحيانًا) طلب تنفيذات متعددة، قد تؤدي كلّ منها إلى إنشاء رسالة ردّ. يحتفظ Dialogflow بهذه الردود في قائمة انتظار الردود. للاطّلاع على مزيد من المعلومات عن دورة حياة الصفحة، وترتيب إضافة عمليات المعالجة هذه إلى قائمة الانتظار الخاصة بالردود، يُرجى قراءة مستندات صفحة تجربة المستخدم في Dialogflow.

إنشاء المعلَمات على صفحة "نظرة عامة حول الفنّان"

لنحدِّد بعض مَعلمات الصفحة:

  1. في مسار القائمة، انقر على صفحة نظرة عامة على الفنّان.
  2. انقر على + في مجموعة المَعلمات. أضِف المَعلمة artist:
  • الاسم المعروض: artist
  • نوع الكيان: @Artist
  • مطلوب: وضع علامة في المربّع
  • إخفاء المحتوى في السجلّ: وضع علامة في المربّع
  1. سنضيف الآن بعض رسائل الامتثال للمَعلمات المخصّصة. إذا لم يجمع موظّف الدعم الافتراضي المَعلمة artist إلى الآن، سيتلقّى المستخدم النهائي ردّ موظّف الدعم هذا الذي تمت إضافته إلى قائمة الانتظار:

From which of these artists would you like to order merchandise?

  1. يمكنك إضافة خيار مربّع حوار ثانٍ يوفّر شرائح اقتراحات تفاعلية. انقر على إضافة خيار حوار واستخدِم هذا الرمز (بتنسيق JSON):
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

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

  1. انتقِل للأسفل إلى قسم معالجات أحداث إعادة الطلب.
  2. انقر على إضافة معالِج للحدث واختَر الحدث: No-match default
  3. استخدِم استيفاء النص الثابت التالي للحدث:

I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

  1. انقر على حفظ.
  2. انقر على إضافة معالج الحدث ثم اختَر الحدث: No-input default.
  3. استخدِم استيفاء النص الثابت التالي للحدث:

I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

  1. انقر على حفظ.

مسارات شرط الصفحة

تكون المَعلمات فعّالة جدًا عند استخدامها مع المسارات الشَرطية للصفحات. عندما يكون تقييم الشرط صحيحًا، سيتمّ استدعاء مسار الصفحة المرتبط. يمكن أن يكون الشرط مَعلمة تساوي قيمة محدّدة، أو لا يمكن فقدان مَعلمة، أو نموذج مكتمل، وغير ذلك. يمكنك العثور على مزيد من المعلومات حول المَعلمات والشروط في مستندات Dialogflow CX.

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

تضبط خدمة Dialogflow CX تلقائيًا قيم المَعلمات التي يقدّمها المستخدم النهائي أثناء ملء النموذج. للتحقّق مما إذا كان النموذج الكامل للصفحة الحالية مملوءًا، استخدِم الشرط التالي: $page.params.status = "FINAL"

إنشاء المسارات الشَرطية في صفحة "نظرة عامة على الفنّان"

لننشئ مسارًا مشروطًا يؤدي إلى الانتقال إلى الصفحة التالية بعد معرفة اسم الفنان:

  1. في الصفحة نظرة عامة حول الفنّان، انقر على الرمز + في قسم المسارات.
  2. انتقِل للأسفل وصولاً إلى قسم الحالة.
  3. اختَر واحد على الأقل (أو)
  4. بعد ذلك، سنكتب تعبيرًا
  • المَعلمة: $page.params.status
  • عامل التشغيل: =
  • القيمة: "FINAL"
  1. سننشئ الآن رسالة استيفاء ثابتة محدّدة في المسار تؤكّد اختيار المستخدم النهائي. انتقِل للأسفل إلى مجموعة التسليم واكتب رسائل التسليم التالية:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. عندما يكون الشرط صحيحًا، يجب الانتقال إلى صفحة نظرة عامة على المنتج. انتقِل للأسفل إلى قسم الانتقال واستخدِم الصفحة التالية: Product Overview
  2. انقر على حفظ.

المعلمات

إنشاء المسارات في صفحة "نظرة عامة على المنتج"

بعد أن عرفنا كيفية إنشاء المَعلمات والمسارات الشَرطية، لننشئ المزيد من المَعلمات للصفحات التالية:

نظرة عامة على المنتج

  1. أنشئ المَعلمة artist في صفحة نظرة عامة على المنتج:
  • الاسم المعروض: artist
  • نوع الكيان: @Artist
  • مطلوب: وضع علامة في المربّع
  • إخفاء المحتوى في السجلّ: وضع علامة في المربّع
  • الاستجابة الأولية للطلب: From which of these artists would you like to order merchandise?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Event Handler (معالج الأحداث) > No-match default: To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
  • الحمولة المخصّصة:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Event Handler (معالج الأحداث) > No-input default: To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention?
  • الحمولة المخصّصة:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. أنشئ مَعلمة merch:
  • الاسم المعروض: merch
  • نوع الكيان: @Merch
  • مطلوب: وضع علامة في المربّع
  • إخفاء المحتوى في السجلّ: وضع علامة في المربّع
  • التسليم: Which merchandise item do you want?
  • انقر على: إضافة خيار حوار > الحمولة المخصّصة:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • معالج الحدث > No-match default
  • توصيل معالج الحدث: We sell Shirts, Music or the Tour movie. Which of these items do you want?
  • الحمولة المخصّصة:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • معالج الحدث > No-input default
  • تنفيذ معالِج الحدث: I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want?
  • الحمولة المخصّصة:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  1. أنشئ مسارًا سينتقل إلى صفحة المنتج عند توفير السمة artist وتقديم سمة merch.
  • الشرط:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.artist != null
  • التعبير: $session.params.merch != null
  • التسليم: Alright! $session.params.merch of $session.params.artist, let's go!
  • النقل: الصفحة: Product
  1. أنشئ مسارًا عندما يقول المستخدم "قمصان".
  • النية: redirect.shirts
  • الانتقال: الصفحة: Shirts
  1. إنشاء مسار عندما يقول المستخدم "موسيقى"
  • الطلب: redirect.music
  • النقل: الصفحة: Music
  1. أنشئ مسارًا عندما يطلب المستخدم معلومات عن السعر.
  • الغرض: redirect.price
  • انتقال: إنشاء صفحة جديدة: Price

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

بداية عملية إنشاء القائمة

لقد تعلمت الآن كيفية إنشاء عمليات وعناصر ونوايا وصفحات باستخدام معالجات الحالات، مثل: مسارات النوايا والمسارات الشَرطية استنادًا إلى المَعلمات. لاحقًا في هذا التمرين المعملي، سنستخدم التشعّب الشرطي في تنفيذ العملية، لتقديم مربّعات حوار مختلفة بناءً على المدخلات.

يمكنك استخدام الإعدادات التالية لإنهاء إعداد موظّف الدعم الافتراضي.

صفحة القمصان:

  1. أنشئ الإعدادات التالية في صفحة القمصان:
  • إكمال الإدخال: Do you want a longsleeve or a t-shirt?
  • الحمولة المخصّصة لإكمال الإدخال:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. إنشاء مسار Intent: redirect.price مع الانتقال إلى صفحة Price
  2. أنشئ المَعلمة التالية:
  • المَعلمة: merch - نوع العنصر: @Merch وRequired وRedact in log
  • المَعلمة > معالج الأحداث > No-match default
  • المَعلمة > استيفاء معالِج الأحداث: You can choose between a t-shirt or a longsleeve. Which of these do you want?
  • المَعلمة > الحمولة المخصّصة لمعالجة الحدث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  • المَعلمة > معالج الأحداث > No-input default
  • المَعلمة > استيفاء معالِج الأحداث: I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
  • المعلمة > الحمولة المخصصة لتنفيذ معالج الأحداث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  1. انقر على ميزة ملء الإدخال وانتقِل للأسفل إلى الإعدادات المُسبَقة للمَعلمات. في كل مرة تصبح فيها صفحة "قمصان" نشطة، سيتم ضبط مَعلمة الفئة على قمصان:

المعلَمة

القيمة

category

shirts

  1. أضِف مسارًا مشروطًا:
  • مطابقة قاعدة واحدة على الأقل (أو)
  • التعبير: $session.params.merch = "T-shirt"
  • التعبير: $session.params.merch = "Longsleeve"
  • الانتقال إلى صفحة جديدة: Shirt Size

صفحة الأسعار:

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

  1. أنشئ الإعدادات التالية في صفحة السعر:
  • إكمال الإدخال: PRICE TODO

بما أنّه يمكنك طلب السعر من مواضع مختلفة في المحادثة، من المفترض أن يمنحك الردّ دائمًا ويعيدك إلى الجزء السابق من الحوار لمواصلة الطلب. هناك 5 مواضع في شجرة المحادثة يمكنك من خلالها التنقّل للحصول على معلومات الأسعار. (قميص، مقاس القميص، موسيقى، مشغّل شبكة الجوّال، ومسار مباشر أيضًا من خلال مسار نية)، وبالتالي سنحتاج إلى بعض المسارات الشَرطية للرجوع إلى الخلف:

  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.category = "shirts"
  • التعبير: $session.params.merch = "null"
  • الانتقال إلى صفحة جديدة: Shirts
  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.category = "shirts"
  • التعبير: $session.params.size = "null"
  • الانتقال إلى صفحة جديدة: Shirt Size
  1. إضافة مسار شرطي:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.category = "music"
  • التعبير: $session.params.album = "null"
  • الانتقال إلى صفحة جديدة: Music
  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.category = "music"
  • التعبير: $session.params.merch = "null"
  • الانتقال إلى صفحة جديدة: Carrier
  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.category = "null"
  • الانتقال إلى صفحة جديدة: Product Overview

صفحة مقاس القميص:

  1. أنشئ الإعدادات التالية في صفحة حجم القميص:
  • إكمال الإدخال: What shirt size do you want?
  • الحمولة المخصّصة لإكمال الإدخال:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. أنشئ مسارًا لطلب البحث: redirect.price مع انتقال إلى صفحة Price.
  2. أنشئ المَعلمة التالية:
  • المَعلمة: shirtsize - نوع العنصر: @ShirtSize - Required، Redact In Log
  • المَعلمة > معالِج الأحداث > No-match default
  • المَعلمة > استيفاء معالِج الأحداث: Please tell me the shirt size, such as XL.
  • المَعلمة > الحمولة المخصّصة لمعالجة الحدث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  • المَعلمة > معالِج الأحداث > No-input default
  • المَعلمة > استيفاء معالِج الأحداث: I couldn't understand the shirt size. What size do you want?
  • المَعلمة > الحمولة المخصّصة لمعالجة الحدث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $page.params.shirtsize != "null"
  • الانتقال إلى الصفحة: Product

صفحة الموسيقى:

  1. أنشئ الإعدادات التالية في صفحة الموسيقى:
  • إكمال الإدخال: We have a Greatest Hits Album or the Live Album. Which one do you want?
  • الحمولة المخصّصة لإكمال الإدخال:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. أنشئ مسار نية: redirect.price مع انتقال إلى الصفحة: Price.
  2. أنشئ المَعلمة التالية:
  • المَعلمة: album - نوع العنصر: @Album - Required، Redact In Log
  • المَعلمة > معالِج الأحداث > No-match default
  • المَعلمة > استيفاء معالِج الأحداث: You can choose between Greatest Hits and Live Album. Which of these do you want?
  • المَعلمة > الحمولة المخصّصة لمعالجة الحدث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  • المَعلمة > معالِج الأحداث > No-input default
  • المَعلمة > استيفاء معالِج الأحداث: I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
  • المَعلمة > الحمولة المخصّصة لمعالجة الحدث:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  1. انقر على ميزة ملء الإدخال وانتقِل للأسفل إلى الإعدادات المُسبَقة للمَعلمات. في كل مرة يتم فيها تفعيل صفحة "الموسيقى"، سيتم ضبط مَعلمة الفئة على موسيقى:

المعلَمة

القيمة

category

music

  1. أضِف مسارًا مشروطًا:
  • مطابقة كل قاعدة (و)
  • التعبير: $page.params.album != "null"
  • الانتقال إلى الصفحة: Carrier

صفحة مشغّل شبكة الجوّال:

  1. أنشئ الإعدادات التالية في صفحة مشغِّل شبكة الجوّال:
  • إكمال الإدخال: Do you want this album on CD or MP3?
  • الحمولة المخصّصة لإتمام عملية الإدخال:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. أنشئ مسارًا للنية: redirect.price الذي يؤدي إلى الانتقال إلى صفحة Price.
  2. أنشئ المَعلمة التالية:
  • المَعلمة: merch - نوع العنصر: @Merch - Required، Redact In Log
  • المَعلمة > معالِج الأحداث > No-match default
  • المَعلمة > تنفيذ معالج الأحداث: Do you want a physical CD or the digital album?
  • المَعلمة > تنفيذ معالِج الحدث: الحمولة المخصّصة:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
  • المَعلمة > معالِج الأحداث > No-input default
  • المَعلمة > تنفيذ معالج الأحداث: I couldn't understand if you mean CD or MP3. Which one do you want?
  • المعلمة > تنفيذ معالج الأحداث: الحمولة المخصصة:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
  1. إضافة مسار شرطي:
  • مطابقة كل قاعدة (و)
  • التعبير: $page.params.merch != "null"
  • الانتقال إلى الصفحة: Product

صفحة المنتج:

  1. أنشئ المَعلمات التالية:

الاسم المعروض للمَعلمة

نوع عنصر المَعلمة

الشيكات

artist

@Artist

مطلوب، إخفاء المعلومات في السجلّ

merch

@Merch

مطلوب، إخفاء المعلومات في السجلّ

  1. تحتاج المَعلمة artist إلى استيفاء الطلب الأوّلي التالي، والذي سيتم عرضه عندما يكون الفنّان غير معروف. You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Which artists?"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • أضِف أيضًا معالِج حدث No-input default مع الامتثال: I couldn't understand what you just said. Ask me which artists are signed.
  • ومعالج حدث No-match default مع الامتثال: I missed that. Please ask me which artists are signed.
  1. تحتاج المَعلمة merch إلى عناصر معالجة الأحداث لإعادة الطلب أيضًا.
  • إضافة معالج أحداث No-input default مع عملية التنفيذ: I couldn't understand what you just said. Which merchandise item do you want?
  • ومعالج حدث No-match default مع الامتثال: I missed that. Which merchandise item do you want?

سينتقل المسار التالي إلى صفحة التأكيد عندما يكون الفنّان معروفًا ويختار المستخدم "فيلم جولة".

  1. إضافة مسار شرطي:
  • مطابقة كل قاعدة (و)
  • التعبير: $session.params.artist != null
  • التعبير: $session.params.merch = "Tour Movie"
  • إضافة مَعلمة إلى الإعدادات المسبقة للمَعلمة > price = 25
  • الانتقال إلى صفحة جديدة: Confirmation

سينتقل المسار التالي إلى صفحة التأكيد عندما يكون الفنان معروفًا ويختار المستخدم "قميصًا قصير الأكمام" ويتم اختيار مقاس القميص.

  1. أضِف مسارًا مشروطًا:
  • التعبير المخصّص: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • الإعدادات المُسبَقة للمَعلمات إضافة مَعلمة > price = 25
  • الانتقال إلى الصفحة: Confirmation

سينتقل المسار التالي إلى صفحة التأكيد عندما يكون الفنّان معروفًا ويختار المستخدم "قميص بأكمام طويلة" ويتم اختيار مقاس القميص.

  1. أضِف مسارًا مشروطًا:
  • تعبير مخصَّص: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • الإعدادات المُسبَقة للمَعلمات إضافة مَعلمة > price = 30
  • الانتقال إلى الصفحة: Confirmation

سينتقل المسار التالي إلى صفحة التأكيد عندما يكون الفنّان معروفًا ويختار المستخدم "قرصًا مضغوطًا"، كما يتم اختيار اسم الألبوم.

  1. أضِف مسارًا مشروطًا:
  • التعبير المخصّص: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • الإعدادات المُسبَقة للمَعلمات إضافة مَعلمة > price = 15
  • الانتقال إلى الصفحة: Confirmation

سينتقل المسار التالي إلى صفحة التأكيد عندما يكون الفنّان معروفًا ويختار المستخدم "ألبومًا رقميًا" ويتم اختيار اسم الألبوم.

  1. أضِف مسارًا مشروطًا:
  • التعبير المخصّص: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • الإعدادات المُسبَقة للمَعلمات إضافة مَعلمة > price = 10
  • الانتقال إلى الصفحة: Confirmation

بعد ذلك، سنُنشئ بعض الشروط المتقدّمة باستخدام طلبات ترصد المعلومات غير المتوفّرة. سيؤدي المسار التالي إلى العودة إلى صفحة الموسيقى عندما يكون الفنّان معروفًا ويختار المستخدم "قرصًا مضغوطًا" أو "ألبومًا رقميًا" ولكن لم يتم اختيار اسم الألبوم.

  1. أضِف مسارًا مشروطًا:
  • التعبير المخصّص: $session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
  • التسليم: I would also need to know which album you would like to buy!
  • الانتقال إلى الصفحة: Music

سينتقل المسار الأخير إلى صفحة التأكيد عندما يكون الفنان معروفًا ويختار المستخدم "قميصًا قصير الأكمام" أو "قميصًا طويل الأكمام"، ولكن عندما لا يتم اختيار مقاس القميص.

  1. أضِف مسارًا مشروطًا:
  • تعبير مخصَّص: $session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
  • التسليم: I would also need to know which shirt size you need!
  • الانتقال إلى الصفحة: Shirt Size

في الجزء التالي من البرنامج التدريبي، سنستخدم عمليات التسليم الشَرطية لتقديم رسائل تسليم مختلفة استنادًا إلى الإدخال.

7- الردود الشَرطية

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

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
  • مثال على حالة [condition]: $session.params.user-age >= 21. ويستخدم تنسيقًا مشابهًا للشروط في المسارات.
  • يأخذ العنصر [response] الاستجابة النصية الثابتة.
  • تبدأ الردود الشرطية دائمًا بـ if
  • تكون الوحدتَان elif وelse اختياريتين.

يمكن أن يستخدِم Dialogflow CX أيضًا وظائف النظام المضمّنة. على سبيل المثال، لتنسيق تاريخ أو وقت أو لعرض الوقت الحالي ($sys.func.NOW())

لننهي عملية الكتالوج من خلال إصلاح صفحتَي التأكيد والسعر.

صفحة التأكيد:

سننشئ الآن صفحة التأكيد. يجب استيفاء المتطلبات التالية:

  • إذا كان سلعة ألبومًا رقميًا أو ألبومًا على قرص مدمج سنعرض الحقول التالية في رسالة التأكيد: artist وmerch وalbum وprice.
  • إذا كان merch هو قميص قصير الأكمام أو قميص بأكمام طويلة سنعرض الحقول التالية في رسالة التأكيد: الفنان والسلعة والحجم والسعر.
  • غير ذلك (وبذلك إذا كان merch هو Tour Movie). سنعرض الحقول التالية في رسالة التأكيد: الفنان والسلع والسعر.
  1. انقر على صفحة التأكيد.
  2. انقر على "تعديل المعالجة" > "ردود موظّفي الدعم" > إضافة حوار > ردّ مشروط:
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
  The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
  A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
  The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
  It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
  1. Create the following Custom payload:
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Next, create two intent routes:

  1. confirm.proceed.order transitions to: Order Process Flow.
  2. decline.proceed.order transitions to End Flow

When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.

  1. In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:

Parameter

Value

artist

null

merch

null

shirtsize

null

category

null

album

null

price

null

restart

true

Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.

  1. Click on the Default Start Flow, Start Page, and create another Conditional Route:
  • $session.params.restart = "true"
  • Fulfillment: "Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?"
  • Custom payload:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!

Price Page:

Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:

  • Delete the Agent Says entry fulfillment.
  • Create a new Conditional Response:
if $session.params.category = "shirts"
  A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
  A CD costs $15. The digital album on MP3 costs $10.
else
  A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Conditional Responses

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:

8. Wrapping up the agent

We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.

Creating the My Order Flow

  1. Go to the My Order Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

My Order Start

redirect.my.order

My Order

My Order Start

redirect.my.order.status

My Order Status

My Order Start

redirect.my.order.canceled

My Order Cancellation

My Order Start

redirect.end

End Session

My Order Start

redirect.home

End Flow

My Order

redirect.my.order.status

My Order Status

My Order

redirect.my.order.canceled

My Order Cancellation

Default Start Flow

redirect.my.order.canceled

Flow: My Order

Default Start Flow

redirect.my.order.status

Flow: My Order

  1. Let's create the following entry fulfillment for the My Order Page:
  • Entry fulfillment: I can look up the status of your order, or I can cancel an order.
  1. In the My Order Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required: checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Fulfillment: And do you want to Cancel your order, or should I look up the status?
  1. Click on Add state handler > Event Handlers and create the Event Handler: No-input default
  • Fulfillment: I'm sorry, what was that? Would you like me to cancel an order or look up the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. Create the Event Handler: No-match default
  • Fulfillment: Would you like me to cancel an order or lookup the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. In the My Order Status Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Status Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. In the My Order Cancelation Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Cancelation Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been canceled.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"

And:

>"What's the status of order DEFG222"
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!
  2. Select the Start Page and click on the redirect.home intent. Create the following parameter preset: restart = true

Default Negative intents (Fallback)

When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.

  1. Try in the simulator: I don't like Alice Googler.

You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.

  1. Go to Manage > Intents and select the Default Negative Intent.
  2. Add the following training phrases that will trigger the No-match event.
  • I don't like Alice Googler
  • I am not a fan of G's N' Roses
  • I can't stand the music of the Google Dolls
  1. Hit Save and test the following sentence in the simulator: I am really not a fan of the Goo Fighters

This time the No-match event was triggered, you stayed on the Start Page.

Default Fallback Messages

  1. Click the Default Start Flow, select the sys.no-input-default event handler.

The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:

  1. Remove all answers, and add these text dialogues:
  • I'm sorry, I didn't receive an answer. Can you say it again?
  • I missed your answer, can you say it again?
  • Sorry, I didn't hear anything. Can you say it again?
  • I couldn't hear what you were saying, what was that?
  • I'm sorry, I missed your answer. What were you trying to say?

Don't forget to click Save.

  1. Click the Default Start Flow, select the sys.no-match-default event handler.

The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.

  1. Remove all answers, and add these text dialogues:
  • Sorry, I didn't get that. Can you please rephrase?
  • I'm sorry, I don't understand. Can you please rephrase?
  • I don't understand, please rephrase.
  • Sorry, I didn't get that. What was that?
  • I didn't get that, can you please rephrase?

Don't forget to click Save.

  1. It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.

Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.

Creating the Order Process Flow

  1. Go to the Order Process Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

Order Process Start

redirect.end

End Session

Order Process Start

redirect.home

End Flow

Order Process Start

confirm.proceed.order

New Page: Shipping Details

  1. Let's create the following entry fulfillment for the Shipping Details Page:
  • Entry fulfillment: To complete your order I will first need to collect your shipping details.
  1. Create the following parameters:

These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.

Parameter Display name

Entity

Required?

Initial prompt fulfillment

No-match default

No-input default

firstname

@sys.person

Required

What's your first name?

I'm sorry I missed that. What's the first name?

I'm sorry, I didn't understand. What's the first name?

lastname

@sys.person

Required

What's your last name?

I'm sorry I missed that. What's the last name?

I'm sorry, I didn't understand. What's the last name?

address

@sys.address

Required

What's your address?

I missed that. What's the address?

I'm sorry, I didn't understand. What's the address?

zipcode

@sys.any

Required

What postal code or zipcode do you have?

I'm sorry, what's the zip or postal code? For example: 1234AB or 10001.

I'm sorry, I didn't understand. What's the zip or postal code? For example: 1234AB or 10001.

city

@sys.geo-city

Required

What's the name of the city?

I missed that, what's the name of the city?

I'm sorry, I didn't understand. What's the name of the city?

country

@sys.geo-country

Required

What's the name of the country?

I missed that, what's the name of the country?

I'm sorry, I didn't understand. What's the name of the country?

email

@sys.email

Required

Lastly, what's your email address?

I am sorry. What's the email address? For example name@domain.com.

I am sorry, I didn't understand. What's the email address? For example name@domain.com.

  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Transition to new Page: Payment Details
  1. Create the following entry fulfillment.

Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:

  • Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
  • Conditional Response
if $session.params.merch != "Digital Album"
  Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
  Your merchandise will be shipped to:
  $session.params.firstname $session.params.lastname
  $session.params.address
  $session.params.zipcode $session.params.city
  $session.params.country
  To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
  The total costs will be: $$session.params.price.
  After purchasing the digital album, you will receive an email with the download link.
  To continue the order process please explicitly say "I confirm".
  Do you want to confirm your $session.params.artist $session.params.merch order?
endif
  1. أنشئ مسار Intent التالي.
  • النية: confirm.proceed.order
  • يقول موظّف الدعم: Thank you for your order! Your merchandise will be shipped today!
  • أضِف خيارًا للمربّع الحوار > النص: Here's the order number: ABCD123.
  • إضافة خيار حوار > النص: Have a good day!
  • النقل: End Session
  1. اختَر صفحة البدء وانقر على طلب redirect.end. أنشئ عملية التسليم التالية: Thank you for contacting G-Records! Have a nice day!
  2. اختَر صفحة البدء وانقر على طلب redirect.home. أنشئ الإعداد المُسبَق للمَعلمة التالي: restart = true

رائع! أصبح لدينا الآن برنامج دردشة متكامل فعلي للبيع بالتجزئة. في التمرين المعملي التالي، سنختبر مستوى أداء الوكيل الافتراضي.

9. اختبار الوكيل الافتراضي

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

من الممكن أيضًا تصدير حالات الاختبار التي تم إنشاؤها سابقًا واستيرادها، وذلك من خلال تخزين الاختبارات في Google Cloud Storage أو على الجهاز. سيؤدي تصدير اختبار إلى تنزيل ملف ملفّ أرشيف ثنائي. للاطّلاع على مزيد من المعلومات عن المحاكي وحالات الاختبار، يمكنك الاطّلاع على مستندات المحاكي / حالات الاختبار.

قبل إنشاء بعض حالات الاختبار، لننهِ أولاً بقية الخطوات المتعلقة بالوكيل الافتراضي:

إنشاء مسار خدمة العملاء

  1. انتقِل إلى مسار دعم العملاء، وأنشئ عمليات نقل الأهداف التالية:

الصفحة (في مسار الإحالة الناجحة)

المسارات > الغرض

المسارات > الانتقال إلى

بدء خدمة العملاء

redirect.shipping.info

الشحن

بدء خدمة العملاء

redirect.refund.info

ردّ الأموال

بدء خدمة العملاء

redirect.swapping.info

التبديل

بدء خدمة العملاء

redirect.home

مسار الإحالة الناجحة

بدء خدمة العملاء

redirect.end

إنهاء الجلسة

مسار خدمة العملاء

  1. أنشئ عمليات تنفيذ الإدخال التالية في صفحة الشحن:
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. أنشئ عمليات إكمال الإدخال التالية لصفحة ردّ الأموال:
  • We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. أنشئ عمليات إكمال الإدخال التالية لصفحة التبديل:
  • If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. اختَر صفحة البدء وانقر على طلب redirect.end. أنشئ عملية التسليم التالية: Thank you for contacting G-Records! Have a nice day!
  2. اختَر صفحة البدء وانقر على طلب redirect.home. أنشئ الإعداد المُسبَق للمَعلمة التالي: restart = true

إنشاء حالات الاختبار

  1. انقر على الزر وكيل الاختبار على يسار الشاشة.

عند فتح المحاكي لأول مرة، عليك اختيار بيئة موظّف دعم ومسار نشط. في معظم الحالات، عليك استخدام بيئة المسودة ومسارات البدء التلقائية.

  1. النوع: Hi

مسار خدمة العملاء

  1. السؤال: Which artists are signed with your label?
  2. قُل: The Google Dolls
  3. يُرجى قول: "I am interested in buying a shirt"
  4. قُل: A t-shirt
  5. قُل: Medium
  6. انقر الآن على زر حفظ حالة الاختبار. يمكنك العثور عليه في أعلى المحاكي (بجانب سهم إعادة التنفيذ ورمز إعادة ضبط سلة المهملات).

مسار خدمة العملاء

  1. أدخِل التفاصيل التالية:
  • اسم حالة الاختبار: Buy Google Dolls t-shirt size M
  • العلامات: #catalog، و#قمصان، و#قميص، و#TheGoogleDolls
  1. انقر على حفظ.

لننشئ المزيد من حالات الاختبار.

  1. أولاً، امسح مربّع الحوار الحالي من خلال النقر على رمز إعادة الضبط (المهملات).
  2. أنشئ حالات الاختبار التالية:

يمكنك شراء قميص Alice Googler:

>"Buy the Alice Googler t-shirt."
>"XL"
  • اسم الحالة الاختبارية: Buy the Alice Googler t-shirt
  • العلامات: #catalog, #shirts, #t-shirt, #AliceGoogler

شراء قميص مقاس M: (يُرجى العِلم أنّه لم يتم ذكر اسم الفنان، ولكنك تريد تخطّي النظرة العامة على الفرق الموسيقية والنظرة العامة على المنتجات وصفحات القمصان ومقاساتها)

>"Buy a t-shirt size M"
>"The Google Fighters"
  • اسم حالة الاختبار: Buy a t-shirt size M
  • العلامات: #catalog, #shirts, #t-shirt, #TheGoogleFighters
  • الوصف: (لم يتم ذكر اسم الفنان، ولكنّك تريد تخطّي صفحات النظرة العامة حول الأساور، ونظرة عامة على المنتجات، والقمصان ومقاسات القمصان)

شراء موسيقى G's N' Roses (يُرجى العِلم أنّ هذا الإجراء سيتخطّى صفحة النظرة العامة على الفرق الموسيقية والمنتجات)

>"Purchase music of G's N' Roses"
>"Live"
>"CD"
  • اسم الحالة الاختبارية: Purchase music of G's N' Roses
  • العلامات: #catalog, #music, #CD, #GsNRoses, #live
  • الوصف: (يُرجى العلم أنّ هذا الإجراء سيؤدي إلى تخطّي صفحة النظرة العامة على الأساور وصفحة "نظرة عامة على المنتجات")

التحقّق من معلومات السعر:

>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
  • اسم الحالة الاختبارية: Price info
  • العلامات: #catalog, #music, #tourmovie, #shirts
  • الوصف: اختبار معلومات الأسعار في نقاط مختلفة من المحادثة

اختبار حالات الاختبار المسجّلة مسبقًا

  1. اختَر إدارة > حالات الاختبار في قائمة Dialogflow الرئيسية على اليمين.
  2. اختَر جميع حالات الاختبار واضغط على الزر تشغيل أعلى الجدول.

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

حالات الاختبار

  1. في المحاكي، اطرح السؤال التالي: How long will shipping take?
  2. دوِّن النتيجة واحفظ نموذج الاختبار باسم Shipping باستخدام العلامة: #shipping.
  3. انتقِل إلى لوحة "الإدارة" > "حالات الاختبار" واضغط على الزر تشغيل في أعلى يسار الشبكة لتشغيل حالة الاختبار Shipping فقط.

من المفترض أن يجتاز هذا الاختبار.

  1. ارجع إلى مسار خدمة العملاء، واختَر صفحة البدء وانقر على عنوان المسارات.

سيؤدي ذلك إلى عرض شاشة بها شبكة تعرض جميع المسارات.

  1. إزالة redirect.shipping.info route
  2. انتقِل إلى لوحة الإدارة > حالات الاختبار واضغط على الزر تشغيل في أعلى يسار الشبكة لتشغيل حالة الاختبار Shipping فقط.

من المفترض أن أخفق هذا الاختبار.

  1. يمكنك النقر على الاختبار الذي لم يتم اجتيازه، للاطّلاع على تفاصيل التعذُّر.

في هذه الحالة، تعذّر إكمال الاختبار وظهرت رسالة الخطأ التالية:

Page: Page mismatch:
Expected: Shipping
Actual: Start Page

يرجع سبب ذلك إلى أنّ الصفحة لم تعُد متوفرة في المسار. توقّعنا أن تظهر لنا صفحة Shipping، ولكنّنا لم نغادر صفحة Start. (أو سيتلقّى المستخدمون النهائيون رسالة احتياطية).

بعبارة أخرى، هذا طلب لم يتم رصده، أي نتيجة اختبار سلبية خاطئة. تعذّر الاختبار. توقّعنا صفحة الشحن، ولكن لم يحدث أي تغيير أو تم عرض رسالة احتياطية.

  1. ارجع إلى مسار خدمة العملاء وأضِف redirect.shipping.info كمسار نية إلى صفحة البدء. لا تنس الانتقال إلى صفحة الشحن والنقر على حفظ.
  2. في المحاكي، سجِّل حالة الاختبار التالية: I want to swap my item، واحفظ حالة الاختبار هذه باسم Swapping #swapping.
  3. افتح إدارة >الدوافع > redirect.refund.info وأضِف عبارة التدريب التالية: I want to swap this item for a refund

بدون هذه العبارة التدريبية، عندما يطلب أحد المستخدمين تغيير منتج لاسترداد الأموال المدفوعة، سيؤدي ذلك إلى استهداف النية redirect.swapping.info، ولكن لا نريد تقديم معلومات عن تغيير المنتجات، بل نريد تقديم معلومات عن عمليات ردّ الأموال.

  1. أنشئ نموذج الاختبار الذهبي التالي: I want to swap this item for a refund في المحاكي، واحفظ نموذج الاختبار هذا باسم Swap for Refund #refund.
  2. ارجع إلى النية إدارة > النيات > redirect.refund.info وأزِل السطر I want to swap this item for a refund.
  3. ارجِع إلى الإدارة > حالات الاختبار، واختَر حالة الاختبار تبديل ردّ الأموال، ثم انقر على تشغيل.

تعذّر إكمال آخر اختبار، وظهرت رسالة الخطأ التالية:

If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
 Page: Page mismatch:
Expected: Refund
Actual: Swapping

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

التغطية

في Dialogflow CX، تغطية الاختبار هي مقياس يُستخدَم لوصف درجة تنفيذ حوار موظّف الدعم الافتراضي (الصفحات والنوايا) عند تشغيل مجموعة اختبار معيّنة. إنّ موظّف الدعم الافتراضي الذي يتمتع بتغطية اختبار عالية، يتم قياسها كنسبة مئوية، تم تنفيذ المزيد من محادثاته أثناء الاختبار، ما يشير إلى أنّه من غير المرجّح أن يحتوي على أخطاء غير مكتشفة (مثل الطلبات غير المُفهمة) مقارنةً بموظّف الدعم الافتراضي الذي يتمتع بتغطية اختبار منخفضة.

  1. لعرض تقرير تغطية الاختبار لجميع حالات الاختبار، انقر على التغطية.
  2. انقر على علامة التبويب الانتقالات.

سيعرض لك ذلك تغطية الاختبار لجميع عمليات انتقال الصفحة.

تغطية الانتقالات

  1. انقر على علامة التبويب Intents (النوايا).

سيعرض لك ذلك تغطية الاختبار لجميع النوايا.

تغطية الأهداف

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

10. الخاتمة

‫Dialogflow CX هي منصة ذكاء اصطناعي حواري (CAIP) لإنشاء وكلاء افتراضيين مثل برامج الدردشة أو برامج التتبُّع الصوتي. تمكّن خدمة Dialogflow CX فريقك من تسريع إنشاء تجارب محادثات على مستوى المؤسسة من خلال أدوات إنشاء برامج التتبّع المرئية والنوايا القابلة لإعادة الاستخدام والقدرة على معالجة المحادثات المتعدّدة المقاطع.

في هذا الدرس التطبيقي حول الترميز، تعرّفت على كيفية إنشاء وكيل افتراضي في مجال البيع بالتجزئة في العالم الواقعي. لقد تناولنا المفاهيم التالية:

  • التدفقات
  • المعلمات والكيانات المخصصة والنظام
  • Pages
  • معالجات الحالات، مثل مسارات الأهداف ومسارات الشروط
  • رسائل التسليم الثابتة والردود الشَرطية
  • النوايا الاحتياطية
  • ألعاب المحاكاة وحالات الاختبار والتغطية

النتيجة النهائية

المراجع

لمزيد من المعلومات حول Dialogflow CX، يمكنك الاطّلاع على المدونات والمستندات التالية.