Dialogflow CX: בניית סוכן קמעונאי

1. לפני שמתחילים

בקודלאב הזה תלמדו איך ליצור צ'אטבוט לקמעונאות באמצעות Dialogflow CX, פלטפורמת AI לדיאלוג (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 ייראה כך:

התוצאה הסופית

מה נדרש

  • כדי ליצור נציג של Dialogflow CX, תצטרכו כתובת Gmail או כתובת Google Identity.
  • גישה ל-Google Cloud.

2. הגדרת הסביבה

יצירת פרויקט של Google Cloud

Dialogflow CX פועל ב-Google Cloud, ולכן עליכם ליצור פרויקט ב-Google Cloud. בפרויקט מאורגנים כל המשאבים שלכם ב-Google Cloud. הוא כולל קבוצה של שותפי עריכה, קבוצה של ממשקי API שמופעלים (וכן משאבים אחרים), כלי מעקב, נתוני חיוב ואמצעי בקרה לאימות ולגישה.

כשיוצרים פרויקט חדש, צריך להזין שם פרויקט. בנוסף, תצטרכו לקשר אותו לחשבון לחיוב ולארגון קיימים.

חשבון לחיוב משמש כדי לקבוע מי משלם על קבוצה מסוימת של משאבים, ואפשר לקשר אותו לפרויקט אחד או יותר. השימוש בפרויקט מחויב בחשבון שמקושר לחיוב ב-Cloud. ברוב המקרים, מגדירים את החיוב בזמן שיוצרים פרויקט. מידע נוסף זמין במסמכי העזרה בנושא חיוב. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud.

יצירת פרויקט חדש

הפעלת Dialogflow API

כדי להשתמש ב-Dialogflow, צריך להפעיל את Dialogflow API בפרויקט.

  1. בוחרים את הפרויקט שעבורו רוצים להפעיל את ה-API ולוחצים על המשך.
  2. מכווצים את התפריט של ממשקי ה-API והשירותים ולוחצים על Create Credentials.
  3. לוחצים על Application Data (נתוני האפליקציה).
  4. ציינו No, I not using them (לא, אני לא משתמש בהם) כי בשלב זה אתם לא משתמשים ב-Kubernetes Engine, ב-App Engine או ב-Cloud Functions.
  5. לוחצים על סיום

הגדרת פרטי כניסה

יצירת סוכן חדש ב-Dialogflow CX

כדי ליצור סוכן חדש ב-Dialogflow CX, פותחים קודם את מסוף Dialogflow CX:

  1. בוחרים את הפרויקט ב-Google Cloud שיצרתם קודם.
  2. לוחצים על Create agent.

ממלאים את הטופס להגדרות הבסיסיות של הנציג:

  • אפשר לבחור כל שם מוצג.
  • בתור מיקום, בוחרים באפשרות: us-central1
  • בוחרים את אזור הזמן המועדף.
  • בוחרים באפשרות en – אנגלית כשפת ברירת המחדל

לוחצים על יצירה.

יצירת נציג

בסדר, הכול מוכן. עכשיו אנחנו יכולים להתחיל לבנות את המודל של הנציג הווירטואלי.

3. זרימות

תיבות דו-שיח מורכבות בדרך כלל כוללות כמה נושאים. במקרה של הצ'אט בוט שאנחנו בונים עבור רשומות G-Records, למכירת מרצ'נדייז של להקות, נקיים תיבות דו-שיח לגבי קטלוג המוצרים, התשלום, סטטוס ההזמנה ושאלות בנושא שירות לקוחות. נוכל לפצל את נושאי השיחות האלה לזרום.

תהליך המכירה בקמעונאות

תהליכים מאפשרים לצוותים לעבוד על נתיבי שיחה נפרדים. מומלץ לפשט את התהליך כדי שיהיה קל להציג אותו במסך, וגם כדי שיהיה מורכב ממודולים.

תהליכים הם קונספט חדש ב-Dialogflow CX. Dialogflow Essentials כולל את הקונספט 'סוכני Mega', הדומה ל-Flow. עם זאת, תשתמשו בתהליכים הרבה יותר לעיתים קרובות.

בהמשך הסדנה הזו נשתמש במפעילי מצב שיכולים לסיים תהליך (כך שהוא יחזור לתהליך הבא או הקודם), או שתוכלו לסיים את הסשן המלא של הסוכן.

נתחיל ליצור תהליכים.

יצירת תהליכים

  1. ב-Dialogflow CX, לוחצים על הסמל + > Create flow.
  2. מציינים את השם: Catalog ומקישים על Enter.

יצירת זרימה

הקטלוג בתהליך הראשון נוצר. עכשיו יוצרים את התהליכים האחרים:

  • Order Process
  • My Order
  • Customer Care

זרימות

בהמשך שיעור ה-Lab הזה נגדיר טיפול במצבי דף, כדי לוודא שבסופו של דבר התצוגה החזותית תיראה כך:

זרימות

סימולטור

בצד שמאל של מסוף Dialogflow CX אפשר לבדוק את הסוכן הווירטואלי באמצעות הסימולטור המובנה. אתם יכולים לבדוק את השיחה מההתחלה או מתהליך מסוים.

  1. לוחצים על הלחצן Test Agent (בדיקת סוכן) בפינה השמאלית העליונה של המסך.
  2. בשדה 'שיחה עם נציג', כותבים: Hello הסוכן הווירטואלי יגיב בהודעת פתיחה שמוגדרת כברירת מחדל: שלום! איך אפשר לעזור?

סימולטור

בואו נשנה את ברירת המחדל של טקסט קבלת הפנים.

תהליך התחלה שמוגדר כברירת מחדל

נתחיל ביצירת ניתוב כוונה שיופעל אחרי שתברכו את הנציג הווירטואלי.

  1. בסרגל הצד Build > Flows (פיתוח > תהליכים), לוחצים על Default Start Flow (תהליך ברירת המחדל להתחלה) ובוחרים את צומת העץ Start (התחלה).

הדף התחלה ייפתח. הדף 'דף הבית' נבחר באופן אוטומטי בקטע פיתוח > דפים בסרגל הצד.

  1. בקטע 'התחלה' > 'מסלולים' לוחצים על ברירת המחדל של Intent היכרות.

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. לוחצים על Add dialogue option > Custom payload (הוספת אפשרות לדיאלוג > עומס נתונים מותאם אישית) ומשתמשים בקטע הקוד שבהמשך.
  2. משתמשים בקטע הקוד הבא בתור מטען ייעודי (payload) בהתאמה אישית ולוחצים על שמירה.

מידע נוסף על עומסי נתונים מותאמים אישית זמין במסמכי העזרה.

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

כוונה ברירת המחדל של 'הצגת הודעה'

  1. אפשר לנסות את כוונת הפתיחה בסימולטור.

יכול להיות שאתם תוהים למה אתם לא רואים תוכן עשיר. הסיבה לכך היא שתוכן עשיר כמו צ'יפים של הצעות תלוי בשילוב. כדי לבצע את השלבים הבאים צריך חשבון לחיוב, אבל אפשר לדלג עליהם אם אין לכם חשבון כזה.

  1. בסרגל הצד השמאלי, לוחצים על Manage > Integrations (ניהול > שילובים).
  2. בוחרים באפשרות Dialogflow Messenger ולוחצים על Connect.
  3. בחלון הקופץ, לוחצים על Enable.

הפעלת השילוב

יוצג חלון קופץ נוסף, הפעם עם קוד JavaScript לשילוב שאותו אפשר להדביק באתר כדי לשלב את הרכיב Dialogflow Messenger באתר. מכיוון שעדיין אין לנו אתר, נבדוק את הסוכן הווירטואלי ישירות בכלי.

Dialogflow Messenger Try Now

  1. לוחצים על הקישור לניסיון.
  2. לוחצים על סמל הצ'אט בוט שבפינה השמאלית התחתונה כדי לפתוח את חלון הצ'אט. כותבים Hello כדי להתחיל את השיחה.

Dialogflow Messenger Try Now

בינתיים, כשלוחצים על הצ'יפים של ההצעות, הסוכן הווירטואלי לא יבין למה התכוונת. הסיבה לכך היא שהסוכן הווירטואלי שלנו עדיין לא עובר בין מדינות. אפשר לעשות זאת ב-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
  • לוחצים על 'אפשרויות מתקדמות' ומסמנים את האפשרות Fuzzy match. (אם האיות של שם הלהקה שגוי, יכול להיות שהוא עדיין יתאים לישות הנכונה.)
  • בקטע 'אפשרויות מתקדמות', מסמנים גם את האפשרות צנזור ביומן. (אם האיות של שם הלהקה שגוי, השם יתוקן ביומן.)
  1. לוחצים על שמירה.

נדרשת ישות גם בשביל פריט ה-Merch:

  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. לוחצים על + Create.
  • השם המוצג: 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
  • ישויות Regexp
  • ישות: [A-Z]{4}[0-9]{3}
  1. לוחצים על שמירה.

הגדרת הישות אמורה להיראות כך:

‎@Artist: סוג הישות של @Artist

‎@Merch: סוג הישות של @Merch

‎@Album: @סוג ישות האלבום

@ShirtSize: סוג הישות של @ShirtSize

‎@OrderNumber: סוג הישות של @OrderNumber

אחרי שתכינו את הישויות בהתאמה אישית, תוכלו להכין את כוונת הרכישה. בואו נמשיך בשיעור ה-Lab.

5. כוונות

Intent מסווג את הכוונה של משתמש הקצה בתורת שיחה אחת. ב-Dialogflow CX הם עכשיו הרבה יותר פשוטים, והם כבר לא אבן בניין של שליטה בשיחות. מערכת Dialogflow CX משתמשת בכוונות רק כדי להתאים את התשובות למה שהמשתמשים אומרים. ב-Dialogflow ES, צריך לקשר את כל הדברים לכוונה (פרמטרים, אירועים, השלמה וכו'). כוונות ב-Dialogflow CX מכילות רק משפטי אימון, ולכן אפשר לעשות בהן שימוש חוזר. הוא לא שולט יותר בשיחה. לכן, התהליך של יצירת Intent יהיה ישיר:

ביטויי האימון באובייקטים יכולים להשתמש בישויות כדי לחלץ קלט 'משתנה'. לכן מומלץ ליצור מראש את סוגי הישויות, כפי שעשינו בדף הקודם של השלבים בשיעור ה-Lab.

יצירת כוונות

לפני שנוכל לעצב את הדפים בתהליך, נתחיל בהכנת כל הכוונות.

  1. לוחצים על ניהול > כוונות.
  2. לוחצים על + Create.

משתמשים בפרטים הבאים:

  • השם המוצג 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 ביטויים לפחות לכל כוונת שימוש כדי לכסות את הדרכים השונות שבהן משתמש יכול להפעיל את כוונת השימוש הזו. למטרות שיעור ה-Lab הזה, גם מספר קטן יותר של מודעות יהיה בסדר.

כמה דברים שכדאי לבדוק:

  • שימו לב שכשמזינים את ביטוי האימון, Dialogflow CX מוסיף הערות לישויות באופן אוטומטי. אם לא, ייתכן שתצטרכו לעדכן את הישות (על ידי הוספת מילה נרדפת) או על ידי הוספת הערות ידניות לביטוי האימון.
  • ביטויי אימון קצרים יותר: מערכת ה-NLU של 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" (הערה: Alice Googler, צריכה להיחשב כישות עם הכינוי @Artist!), "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), פרמטרים ורכיבי handler של מצבים. השליטה בשיחה מתבצעת באמצעות טיפולי מצבים, שמאפשרים ליצור נתיבי מעבר שונים כדי לעבור לדף אחר של Dialogflow CX, כולל הפיכת הנתיבים לתנאי (לצורך הרחבת השיחות).

המצב של שיחה נקבע על ידי טיפול במעברים בין דפים עם שלושה סוגי מסלולים:

  • מסלולי כוונת השימוש: כשצריך להתאים כוונת שימוש (למשל, שינוי דף על סמך מה שמשתמש הקצה אומר). (קווים כחולים בתרשים החזותי).
  • נתיבים של תנאים: מתי צריך לבדוק תנאי (למשל, שינוי דף על סמך פרמטרים מסוימים שמאוחסנים בסשן) (קווים כתומים בתרשים החזותי).
  • גורמים מטפלים באירועים: כאשר צריך לטפל באירוע מסוים חלופי (למשל, טיפול ללא קלט או ללא התאמה, כדי להבחין בין משתמש הקצה למסלול של אובייקט Intent או תנאי) (קווים ירוקים בתרשים החזותי).

משפטי השיחה (כלומר התוכן או התשובה שמוחזרים למשתמש) מוגדרים על ידי השלמה, שיכולה להיות סטטית או דינמית:

  • מילוי סטטי: כשמתקבלת תשובה סטטית של מילוי
  • מילוי דינמי של מילוי הזמנות: כשנשלחת קריאה ל-webhook של מילוי הבקשות כדי לקבל תשובות דינמיות

בשביל הרובוט שלנו לקמעונאות, נוצר כמה מסלולי כוונת שימוש ונציע כמה תשובות של מילוי נתונים סטטיים, שיוצגו למשתמש ברגע שהדף יופעל. בהמשך ניצור פרמטרים עם מסלולים לתנאים כדי לאסוף את המידע הדרוש כדי לבצע הזמנת מרצ'נדייז.

מסלולי כוונה (Intent) לדפים

יצירת הדפים בתהליך ההתחלה שמוגדר כברירת מחדל

תרשים תהליך של תהליך ההתחלה שמוגדר כברירת מחדל:

דפים מחוברים לקטלוג

נלחץ עליו יחד:

  1. לוחצים על Build (פיתוח) > Default Start Flow (תהליך התחלה ברירת המחדל).
  2. לוחצים על דף הבית.
  3. לוחצים על הסמל + לצד מסלולים.
  4. מוסיפים את המאפיין redirect.artists.overview.
  5. גוללים למטה אל מעבר ועוברים לתהליך קטלוג.
  6. לוחצים על שמירה.
  7. חוזרים על השלבים שלמעלה עבור redirect.product.overview ו-11 השורות האחרות בטבלה הזו:

דף (במהלך צפייה)

מסלולים > כוונה

Routes (מסלולים) > Transition To (מעבר אל)

התחלה

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. לוחצים על Build (פיתוח) > Catalog (קטלוג).
  2. לוחצים על דף הבית.
  3. לוחצים על הסמל + לצד מסלולים.
  4. הוספת redirect.artists.overview
  5. גוללים למטה לקטע Transition, בוחרים באפשרות Page ובוחרים באפשרות: + new Page
  6. נותנים שם לדף: Artist Overview ולוחצים על שמירה.

עכשיו נמשיך בתהליך:

  1. אפשר לחזור על השלבים הקודמים עם הדפים, הכוונות והביצועים הבאים. השתלטות על הטבלה הזו. דף – הדף שתבחרו בתהליך. מסלולים > מעבר אל – התהליך או הדף החדשים שתיצרו ותעבירו אליהם את המשתמשים.

דף (במהלך צפייה)

מסלולים > כוונה

Routes (מסלולים) > Transition To (מעבר אל)

תחילת הקטלוג

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. בתהליך ניהול הקטלוג, לוחצים על הדף Artist Overview.
  2. לוחצים על Edit fulfillment (עריכת מילוי) בקטע Entry fulfillment (מילוי של פרטי כניסה).
  3. משתמשים בהשלמות הסטטיות הבאות (Agent says):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. לוחצים על שמירה.
  2. בתהליך העבודה בקטגוריה, לוחצים על הדף סקירה כללית של המוצר.
  3. לוחצים על Edit fulfillment (עריכת מילוי) בקטע Entry fulfillment (מילוי של פרטי כניסה).
  4. צריך להשתמש במילוי האוטומטי הבא (מספר הנציג):
  • We sell shirts, music or the tour movie.
  1. לוחצים על שמירה.

פרמטרים של דפים

פרמטרים משמשים לתיעוד ולהפניה לערכים שסופקו על ידי משתמש הקצה במהלך סשן. לכל פרמטר יש שם וסוג ישות. @Artist ו-@Merch הם הפרמטרים המינימליים שאנחנו צריכים לאסוף כדי לבצע הזמנה של מרצ'נדייז. אם רוצים להדפיס חולצות או חולצות ארוכות, צריך גם לאסוף את השדה @ShirtSize. אם רוצים להזמין מוזיקה, צריך גם שם של @Carrier ו-@Album.

צריך לסמן את הפרמטרים האלה כחובה. כשהבקשה תופיע, כדאי לספק הנחיות מותאמות אישית כדי לזכור את משתמש הקצה, ולספק את התשובות הנכונות כדי שניתן יהיה לאסוף את הפרמטרים האלה. יש כמה מנגנונים ב-Dialogflow CX שיכולים לעזור לכם בכך.

לדוגמה, אפשר לספק הודעות סטטיות של מילוי הזמנות בקטע פרמטר. אם הפרמטר נדרש, יוצגו מועדי מילוי של הפרמטרים האלה. הודעות התגובה האלה יתווספו לתור התשובות. כשתור הנציג, אפשר (ולפעמים רצוי) להפעיל מספר מילויים, וכל אחד מהם עשוי ליצור הודעת תשובה. התשובות האלה נשמרות ב-Dialogflow בתור לתגובות. מידע נוסף על מחזור החיים של הדף ועל הסדר שבו ההשלמות האלה יתווספו לתור התשובות זמין במסמכי העזרה של דפי Dialogflow CX.

יצירת הפרמטרים בדף הסקירה הכללית של האומן

נגדיר כמה פרמטרים של דף:

  1. בתהליך Catalog, לוחצים על הדף Artist Overview.
  2. לוחצים על + בבלוק Parameters. מוסיפים את הפרמטר 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. לוחצים על Add event handler (הוספת טיפול באירוע) ובוחרים את האירוע: 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. לוחצים על Add event handler ובוחרים את האירוע: 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. לוחצים על שמירה.

נתיבים של תנאי דף

פרמטרים הם כלי יעיל מאוד בשילוב עם ניתוב מותנה לדפים. כשתנאי מסוים מקבל את הערך true, תתבצע קריאה למסלול הדף המשויך. תנאי יכול להיות פרמטר שווה לערך ספציפי, אי אפשר של פרמטר חסר, טופס שהושלם ועוד סיבות רבות. מידע נוסף על פרמטרים ובתנאים במסמכים של Dialogflow CX.

כדי להשתמש בנציג הווירטואלי שלנו לקמעונאות, נצטרך לאסוף רצף של פרמטרים, ולכן נצטרך ליצור תנאי כדי לבדוק אם 'טופס' הושלם. טופס הוא רשימה של פרמטרים שצריך לאסוף ממשתמש הקצה עבור הדף. הנציג הווירטואלי יוצר אינטראקציה עם משתמש הקצה במספר סבבים של שיחה, עד שהוא אוסף את כל הפרמטרים הנדרשים של הטופס, שנקראים גם פרמטרים של דף.

מערכת Dialogflow CX מגדירה באופן אוטומטי את ערכי הפרמטרים שסופקו על ידי משתמש הקצה במהלך מילוי הטופס. כדי לבדוק אם הטופס המלא של הדף הנוכחי מלא, משתמשים בתנאי הבא: $page.params.status = "FINAL"

יצירת נתיבים מותנים בדף 'סקירה כללית של האומן'

נוצר נתיב מותנה שיעבור לדף הבא ברגע שהאמן יהיה ידוע:

  1. בדף סקירה כללית של אומנים, לוחצים על הסמל + בקטע מסלולים.
  2. גוללים למטה לקטע מצב.
  3. בוחרים באפשרות לפחות אחת (או)
  4. בשלב הבא נכתוב ביטוי
  • פרמטר: $page.params.status
  • אופרטור: =
  • ערך: "FINAL"
  1. עכשיו ניצור הודעה סטטית ספציפית למילוי הזמנות במסלול, המאשרת את הבחירה של משתמש הקצה. גוללים למטה אל הבלוק Fulfillment וכותבים את הודעות המילוי הבאות:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. כשהתנאי מתקיים, צריך לעבור לדף סקירה כללית של המוצר. גוללים למטה לקטע Transition ומשתמשים בדף הבא: 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"
      }
    ]
  ]
}
  • מטפל באירועים > 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"
      }
    ]
  ]
}
  • גורם מטפל באירועים > 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?
  • לוחצים על: Add dialogue option (הוספת אפשרות לדיאלוג) > Custom payload (מטען נתונים מותאם אישית):
{
    "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?
  • מטען ייעודי (payload) מותאם אישית:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  1. יוצרים מסלול שיעבור לדף Product כשהערך 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

אחרי שתגדירו את ההגדרות שלמעלה, תופיע תצוגה חזותית שדומה לתמונה שבהמשך. שימו לב שבתרשים, מסלולי הכוונה מסומנים בכחול ומסלולי התנאים מסומנים בכתום. כאשר הגורמים המטפלים באירועים אינם מוצגים, הם ירוקים, וכשסוגי נתיבים מרובים עוברים לדף, הקו יהיה אפור.

תחילת התהליך של קטלוג

עד עכשיו למדתם איך ליצור תהליכים, ישויות, כוונות ודפים עם מפעילי מצב כמו מסלולי כוונות ומסלולים מותנים שמבוססים על פרמטרים. בהמשך שיעור ה-Lab הזה נשתמש בהסתעפות מותנית במימוש, כדי לספק דיאלוגים שונים בהתאם לקלט.

אפשר להשתמש בהגדרות הבאות כדי לסיים את התהליך של הסוכן הווירטואלי שלנו.

בדף 'חולצות':

  1. יוצרים את ההגדרות הבאות בדף Shirts:
  • מילוי הזמנות: Do you want a longsleeve or a t-shirt?
  • נתוני עומס מותאמים אישית של השלמת הטופס:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. יוצרים מסלול כוונה: 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. לוחצים על מילוי הערך של הערך ומגללים אל הגדרות קבועות מראש של פרמטרים. בכל פעם שהדף Shirts (חולצות) יהפוך לפעיל, פרמטר הקטגוריה יוגדר כ-shirts:

פרמטר

ערך

category

shirts

  1. מוסיפים נתיב מותנה:
  • התאמה לכלל אחד לפחות (או)
  • ביטוי: $session.params.merch = "T-shirt"
  • ביטוי: $session.params.merch = "Longsleeve"
  • מעבר לדף חדש: Shirt Size

דף המחיר:

ההודעות לגבי המחירים יהיו בהתאם לפריט המרצ'נדייז או לקטגוריה שבחרתם (מוזיקה או חולצות), ולכן נתקן את החלק הזה בהמשך שיעור ה-Lab. בשלב הזה, מספיק להזין placeholder.

  1. יוצרים את ההגדרות הבאות בדף Price:
  • מילוי הבקשה: PRICE TODO

אתם יכולים לבקש את המחיר במקומות שונים בשיחה, לכן בכל מקרה אמורים להופיע תשובות ולחזור לחלק הקודם של תיבת הדו-שיח כדי להמשיך בהזמנה. יש 5 מקומות בעץ הדיאלוג שבהם אפשר לקבל מידע על מחירים. (חולצה, גודל חולצה, מוזיקה, ספק וגם ישירות דרך נתיב כוונה), לכן נצטרך כמה מסלולים מותנים כדי לחזור אחורה:

  1. מוסיפים מסלול מותנה:
  • התאמה לכל כלל (AND)
  • ביטוי: $session.params.category = "shirts"
  • ביטוי: $session.params.merch = "null"
  • מעבר לדף חדש: Shirts
  1. מוסיפים נתיב מותנה:
  • התאמה לכל הכלל (וגם)
  • ביטוי: $session.params.category = "shirts"
  • ביטוי: $session.params.size = "null"
  • מעבר לדף חדש: Shirt Size
  1. הוספת נתיב מותנה:
  • התאמה לכל כלל (AND)
  • ביטוי: $session.params.category = "music"
  • ביטוי: $session.params.album = "null"
  • מעבר לדף חדש: Music
  1. מוסיפים נתיב מותנה:
  • התאמה לכל כלל (AND)
  • ביטוי: $session.params.category = "music"
  • ביטוי: $session.params.merch = "null"
  • מעבר לדף חדש: Carrier
  1. מוסיפים נתיב מותנה:
  • התאמה לכל כלל (AND)
  • ביטוי: $session.params.category = "null"
  • מעבר לדף חדש: Product Overview

דף המידה של החולצה:

  1. יוצרים את ההגדרות הבאות בדף Shirt Size:
  • מילוי הבקשה: 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 – סוג ישות: @ShirtSizeRequired,‏ 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?
  • 'פרמטר' > 'מטען ייעודי (payload) מותאם אישית של 'טיפול באירועים':
{
    "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. יוצרים את ההגדרות הבאות בדף Music:
  • מילוי הבקשה: 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?
  • 'פרמטר' > 'מטען ייעודי (payload) מותאם אישית של 'טיפול באירועים':
{
    "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. לוחצים על מילוי הערך של הרשומה וגוללים למטה אל הגדרות קבועות מראש של פרמטרים. בכל פעם שדף המוזיקה יהפוך לפעיל, פרמטר הקטגוריה יוגדר כ-music:

פרמטר

ערך

category

music

  1. מוסיפים נתיב מותנה:
  • התאמה לכל הכלל (וגם)
  • ביטוי: $page.params.album != "null"
  • מעבר לדף: Carrier

דף הספק:

  1. יוצרים את ההגדרות הבאות בדף Carrier:
  • מילוי הבקשה: 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?
  • פרמטר > מימוש של מטפל באירועים: מטען ייעודי (payload) מותאם אישית:
{
    "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. מוסיפים נתיב מותנה:
  • התאמה לכל כלל (AND)
  • ביטוי: $page.params.merch != "null"
  • מעבר לדף: Product

דף המוצר:

  1. יוצרים את הפרמטרים הבאים:

Parameter Displayname

סוג ישות הפרמטר

בדיקות

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

בשלב הבא נוסיף כמה תנאים מתקדמים עם הנחיות לזיהוי מידע חסר. המסלול הבא יועבר חזרה לדף המוזיקה כשהאומן ידוע והמשתמש יבחר באפשרות 'CD' או 'אלבום דיגיטלי', אבל לא יבחר את שם האלבום.

  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

בחלק הבא של שיעור ה-Lab נשתמש בהשלמות מותנות כדי להציג הודעות שונות בהתאם לקלט.

7. תשובות מותנות

חלק מהתשובות יחזירו דו-שיח שונה על סמך הקלט. דיאלוגים יתפצלו, שנקרא תשובות מותנות. זה יכול להיות מעניין, כשלא משתמשים באספקה של webhook, כשהתשובות המותנות נקבעו בקצה העורפי. דוגמה לדף כזה:

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())

כדי לסיים את התהליך קטלוג, צריך לתקן את הדפים אישור ו-Price.

דף האישור:

בשלב הזה ניצור את דף האישור. הדרישות הן:

  • אם merch הוא CD או Digital Album (אלבום דיגיטלי). בשדה האישור יוצגו השדות הבאים: artist,‏ merch,‏ album ו-price.
  • אם merch הוא T-shirt או Longsleeve. בפרטי האישור נציג את השדות הבאים: artist (אומן), merch (מרצ'נדייז), size [מידה] ו-price (מחיר).
  • אחרת (וכך אם merch הוא סרט סיור). בשדה האישור יוצגו השדות הבאים: אמן, מרצ'נדייז ומחיר.
  1. לוחצים על הדף Confirmation.
  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. יוצרים את מסלול הכוונה הבא:
  • כוונה: confirm.proceed.order
  • הנציג/ה אומר/ת: Thank you for your order! Your merchandise will be shipped today!
  • Add Dialogue Option (הוספת אפשרות לדיאלוג) > Text (טקסט): Here's the order number: ABCD123.
  • הוספת אפשרות לדיאלוג > טקסט: Have a good day!
  • מעבר: End Session
  1. בוחרים את הדף Start ולוחצים על כוונת הרכישה redirect.end. צריך ליצור את מילוי ההזמנה הבא: Thank you for contacting G-Records! Have a nice day!
  2. בוחרים את הדף Start ולוחצים על כוונת הרכישה redirect.home. יוצרים את הגדרת ברירת המחדל הבאה של הפרמטר: restart = true

מדהים! עכשיו יש לנו צ'אטבוט פעיל לחלוטין של קמעונאי בעולם האמיתי! בשיעור ה-Lab הבא נבדוק את הביצועים של הנציג הווירטואלי.

9. בדיקת הנציג הווירטואלי

אפשר להשתמש בסימולטור המובנה כדי לבדוק את הדיאלוגים של הנציג הווירטואלי. היתרון של בדיקת התהליכים בסימולטור הוא שתראו סקירה כללית יפה של התהליכים, הדפים, הפרמטרים והאירועים (DTMF) שהסימולטור אסף במהלך ההליכה בתהליכים. כך קל יותר לבדוק את הקוד מאשר לבדוק אותו ישירות בשילוב, כי סוגי המידע האלה מוסתרים ממשתמש הקצה. אפשר אפילו ליצור מקרי בדיקה, לשמור אותם ולהשתמש בהם שוב. זה הגיוני מאוד כשאתם שומרים או עורכים את התהליכים לאורך זמן, ואתם רוצים לוודא שאף אחד מהשינויים לא יפגע בעבודה הקודמת שלכם.

אפשר גם לייצא ולייבא תרחישי בדיקה שנוצרו בעבר, על ידי שמירת הבדיקות ב-Google Cloud Storage או באופן מקומי. ייצוא בדיקה יגרום להורדה של קובץ blob. מידע נוסף על הסימולטור ועל תרחישים לדוגמה זמין במסמכי העזרה של הסימולטור / תרחישים לדוגמה.

לפני שנוצר כמה תרחישי בדיקה, נשלים קודם את שאר הרכיבים של הנציג הווירטואלי:

יצירת תהליך שירות הלקוחות

  1. עוברים לתהליך Customer Care ויוצרים את מעברי הכוונה הבאים:

דף (בזרימה)

מסלולים > כוונה

מסלולים > מעבר אל

תחילת שירות Customer Care

redirect.shipping.info

משלוח

תחילת שירות Customer Care

redirect.refund.info

החזר כספי

תחילת העבודה עם Customer Care

redirect.swapping.info

החלפה

תחילת העבודה עם Customer Care

redirect.home

סיום תהליך העבודה

תחילת העבודה עם Customer Care

redirect.end

סיום הסשן

תהליך שירות הלקוחות

  1. יוצרים את מועדי ההזמנות הבאים בדף משלוח:
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. יוצרים את השלמות הרשומות הבאות לדף Refund:
  • 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. בוחרים את הדף Start ולוחצים על כוונת הרכישה redirect.end. יוצרים את ההשלמה הבאה: Thank you for contacting G-Records! Have a nice day!
  2. בוחרים את הדף Start ולוחצים על כוונת הרכישה redirect.home. יוצרים את הגדרת ברירת המחדל הבאה של הפרמטר: restart = true

יצירת תרחישי בדיקה

  1. לוחצים על הלחצן Test Agent (בדיקת סוכן) בצד שמאל של המסך.

כשפותחים את הסימולטור בפעם הראשונה, בוחרים סביבת סוכן ותהליך פעיל. ברוב המקרים כדאי להשתמש בסביבת הטיוטה ובתהליך ההתחלה שמוגדר כברירת מחדל.

  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,‏ #shirts,‏ #t-shirt,‏ #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 שנמצא משמאל, בוחרים באפשרות Manage (ניהול) > Test Cases.
  2. בוחרים את כל תרחישי הבדיקה ולוחצים על הלחצן הפעלה שמעל הטבלה.

Dialogflow CX יריץ את כל מקרי הבדיקה שנבחרו להקלטה שנשמרה בתור 'מקרה בדיקה של הזהב'. אם התוצאות זהות לאופן שבו שמרתם אותן, הבדיקות יעברו בהצלחה. - אם משהו השתנה בתהליכים, כמו דפים שלא הוגדרו בצורה נכונה או כוונות שהובילו אתכם לדפים הלא נכונים, הבדיקות ייכשל.

מקרי בדיקה

  1. בסימולטור, שואלים את השאלה הבאה: How long will shipping take?
  2. מציינים את התוצאה ושומרים את תיקיית הבדיקה בתור Shipping עם התג: #shipping.
  3. עוברים לחלונית Manage (ניהול) > Test Cases (תרחישים לבדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של התצוגה, כדי להריץ רק את תרחיש הבדיקה Shipping.

הבדיקה הזו אמורה לעבור.

  1. חוזרים לתהליך שירות הלקוחות, בוחרים את הדף Start ולוחצים על הכותרת Routes.

יוצג מסך עם רשת שבה מוצגים כל המסלולים.

  1. מסירים את redirect.shipping.info route
  2. עוברים לחלונית Manage (ניהול) > Test Cases (תרחישים לבדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של התצוגה, כדי להריץ רק את תרחיש הבדיקה Shipping.

הבדיקה הזו אמורה להיכשל.

  1. אפשר ללחוץ על 'הבדיקה שנכשלה' כדי לראות את פרטי הכשל.

במקרה הזה, הבדיקה נכשלה עם הודעת השגיאה הבאה:

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

הסיבה לכך היא שהדף כבר לא קיים בתהליך. ציפינו לדף Shipping, אבל במקום זאת לא עזבנו את הדף Start. (או שמשתמשי הקצה יקבלו הודעת חלופית).

במילים אחרות, זוהי בקשה שלא התקבלה, תוצאת בדיקה של False Negative. הבדיקה נכשלה. ציפינו לדף משלוחים אבל לא קורה דבר או שהוצגה הודעה חלופית.

  1. חוזרים לתהליך Customer Care ומוסיפים את redirect.shipping.info כמסלול Intent, לדף ההתחלה. אל תשכחו לעבור לדף Shipping (משלוחים) וללחוץ על Save (שמירה).
  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

במילים אחרות, זוהי בקשה מובנת שלא נענתה, תוצאת בדיקה חיובית שגויה. הבדיקה נכשלה. ציפינו לדף Refund (החזר כספי), אבל הדף Swapping (החלפה) הפך לפעיל.

כיסוי

ב-Dialogflow CX, testage הוא מדד שמשמש לתיאור עד כמה הדו-שיח של הסוכן הווירטואלי (דפים ו-Intents) מופעל כשחבילת בדיקות מסוימת פועלת. לסוכן וירטואלי עם כיסוי בדיקה גבוה, שנמדד כאחוז, בוצעו יותר מהדיאלוגים שלו במהלך הבדיקה. כתוצאה מכך, יש לו סיכוי נמוך יותר להכיל באגים שלא זוהו (כמו בקשות שלא הובנו לידי הבנה) בהשוואה לסוכן וירטואלי עם כיסוי בדיקה נמוך.

  1. כדי להציג דוח של כיסוי הבדיקה לכל תרחישי הבדיקה, לוחצים על כיסוי.
  2. לוחצים על הכרטיסייה Transitions (מעברים).

כך תוכלו לראות את הכיסוי של הבדיקה בכל מעברי הדפים.

כיסוי של מעברים

  1. לוחצים על הכרטיסייה Intents.

כך תוכלו לראות את כיסוי הבדיקה של כל הכוונות.

היקף הכיסוי של הכוונות

מזל טוב, עכשיו יש לכם דוגמה מלאה לשימוש בעולם האמיתי בבניית בוט של קמעונאי, וגם בדקתם אותו. נעבור לדף הבא של ה-Lab כדי לקרוא את הסיכום ולמצוא כמה מקורות מידע שימושיים.

10. סיכום

Dialogflow CX היא פלטפורמת AI בממשק שיחה (CAIP) ליצירת נציגים וירטואליים, כמו צ'אט או בוטים קוליים. בעזרת Dialogflow CX, הצוות שלכם יכול לזרז את תהליך היצירה של חוויות שיחה ברמת הארגון באמצעות כלים חזותיים ליצירת בוטים, כוונות לשימוש חוזר ויכולת לטפל בשיחות עם כמה סבבים.

ב-Codelab הזה למדת איך לפתח סוכן קמעונאי וירטואלי בעולם האמיתי. עסקנו במושגים הבאים:

  • זרימות
  • פרמטרים, ישויות מותאמות אישית וישויות מערכת
  • iWork Pages
  • גורמי handler של מדינות, כמו נתיבי Intent ונתיבי תנאים
  • הודעות סטטיות למילוי הזמנות ותגובות מותנות
  • כוונות רכישה חלופיות
  • סימולטור, מקרי בדיקה וכיסוי

התוצאה הסופית

קובצי עזר

למידע נוסף על Dialogflow CX, כדאי לעיין בבלוגים ובמסמכים הבאים.