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

מה תלמדו
תלמדו על היתרונות של Dialogflow CX בהשוואה ל-Dialogflow ES תוך כדי עבודה. הוא כולל את המושגים הבאים:
- איך יוצרים סוכן וירטואלי של Dialogflow CX ב-Google Cloud
- איך יוצרים תהליכי עבודה
- איך יוצרים ישויות
- איך יוצרים כוונות
- איך יוצרים דפים ודפי מעבר באמצעות state handlers
- איך מעבירים דפים באמצעות נתיבי כוונות
- איך מעבירים דפים עם פרמטרים ומסלולים מותנים
- איך מחזירים תשובות מותנות באמצעות פונקציות מערכת
- איך יוצרים הודעות חלופיות
- איך משתמשים בסימולטור
- איך יוצרים מקרים לבדיקה וכיסוי בדיקה
העיצוב הסופי של סוכן Dialogflow CX ייראה כך:

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

הפעלת Dialogflow API
כדי להשתמש ב-Dialogflow, צריך להפעיל את Dialogflow API בפרויקט.
- בוחרים את הפרויקט שעבורו רוצים להפעיל את ה-API ולוחצים על המשך.
- מכווצים את התפריט APIs & Services (ממשקי API ושירותים) ולוחצים על Create Credentials (יצירת אמצעי אימות).
- לוחצים על נתוני אפליקציה.
- אומרים לא, אני לא משתמש בהם כי אתם לא משתמשים ב-Kubernetes Engine, ב-App Engine או ב-Cloud Functions בשלב הזה.
- לוחצים על סיום

יצירת סוכן חדש ב-Dialogflow CX
כדי ליצור סוכן חדש ב-Dialogflow CX, קודם פותחים את מסוף Dialogflow CX:
- בוחרים את הפרויקט שיצרתם ב-Google Cloud.
- לוחצים על יצירת סוכן.
ממלאים את הטופס להגדרות בסיסיות של נציגים:
- אתם יכולים לבחור כל שם לתצוגה.
- במיקום בוחרים באפשרות us-central1
- בוחרים את אזור הזמן המועדף.
- בחירה באפשרות en - English כשפת ברירת המחדל
לוחצים על יצירה.

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

הזרימות מאפשרות לצוותים לעבוד על נתיבי שיחה נפרדים. מומלץ לפשט את התהליך כדי שיתאים בקלות למסך ויהיה מודולרי יותר.
המושג 'תהליכי עבודה' הוא חדש ב-Dialogflow CX. ב-Dialogflow Essentials יש את הקונספט של סוכנים גדולים (Mega Agents), שדומים במידה מסוימת לזרימות. עם זאת, תשתמשו ב-Flows הרבה יותר פעמים.
בהמשך שיעור ה-Lab הזה נשתמש במטפלים במצבים שיכולים לסיים רצף (כך שהמערכת תחזור לרצף הבא או הקודם), או שתוכלו לסיים את הסשן המלא של הסוכן.
קדימה, נתחיל ליצור תהליכי עבודה.
יצירת תהליכים
- ב-Dialogflow CX, לוחצים על סמל + > יצירת תהליך.
- מזינים את השם:
Catalogומקישים על Enter.

התהליך הראשון Catalog נוצר. עכשיו יוצרים את שאר התהליכים:
Order ProcessMy OrderCustomer Care

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

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

נשנה את טקסט הפתיחה שמוגדר כברירת מחדל.
ברירת מחדל של תהליך התחלה
נתחיל ביצירה של Intent Route שיופעל ברגע שתגידו שלום לסוכן הווירטואלי.
- בסרגל הצד הימני Build > Flows (בנייה > תהליכים), לוחצים על Default Start Flow (תהליך התחלה שמוגדר כברירת מחדל) ובוחרים בצומת העץ Start (התחלה).
ייפתח הדף התחלה. הדף הראשי נבחר באופן אוטומטי בקטע Build > Pages (יצירה > דפים) בסרגל הצד.
- בקטע Start > Routes (התחלה > נתיבים), לוחצים על Default Welcome Intent (כוונת קבלת הפנים שמוגדרת כברירת מחדל).
כוונה מסווגת את הכוונה של משתמש הקצה בתור אחד של שיחה. ב-Dialogflow CX, כוונות יכולות להיות חלק מ-state handler (מטפל במצב) כדי להפנות את הדף או את הביצוע הפעיל הבא
- מסירים את כל הרשומות של Agent says ומוסיפים את הטקסט החדש:
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?
כדי לייעל את השיחה, נצטרך גם כמה לחצנים של תשובות מהירות או צ'יפים של הצעות.
- לוחצים על Add dialogue option > Custom payload (הוספת אפשרות לדיאלוג > מטען ייעודי (payload) בהתאמה אישית) ומשתמשים בקטע הקוד שבהמשך.
- משתמשים בקטע הקוד שלמטה כמטען ייעודי (payload) מותאם אישית ולוחצים על שמירה.
מידע נוסף על מטענים ייעודיים (payloads) מותאמים אישית זמין במאמר בנושא.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}

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

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

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

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

יצירת ישויות
ניצור ישות אומן.
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
Artist - יישויות:
The Google Dolls(עם מילה נרדפת:Google Dolls)The Goo Fighters(עם מילה נרדפת:Goo Fighters)G's N' Roses(עם מילה נרדפת:Gs and Roses)Alice Googler- לוחצים על 'אפשרויות מתקדמות' ומסמנים את התיבה התאמה משוערת. (גם אם תאייתו את שם הלהקה בצורה שגויה, יכול להיות שהמערכת עדיין תתאים אותו לישות הנכונה).
- בקטע 'אפשרויות מתקדמות' מסמנים גם את האפשרות צנזורה ביומן. (אם תאייתו את שם הלהקה בצורה שגויה, השם יתוקן ביומן).
- לוחצים על שמירה.
נצטרך גם ישות לפריט Merch:
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
Merch - יישויות:
T-shirtLongsleeve(עם מילה נרדפת:Longsleeve shirt)Tour MovieDigital Album(עם מילה נרדפת:MP3 Album,MP3)CD(עם מילים נרדפותDisc,Physical CD)
- לוחצים על שמירה.
נצטרך גם ישות בשביל האלבום:
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
Album - יישויות:
LiveGreatest Hits(עם מילה נרדפת:Hits)
- לוחצים על שמירה.
אנחנו צריכים גם ישות למידות של בגדים:
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
ShirtSize - יישויות:
XS(עם מילה נרדפת:Extra Small)S(עם מילה נרדפת:Small)M(עם מילה נרדפת:Medium)L(עם מילה נרדפת:Large)XL(עם מילה נרדפת:Extra Large)2XL(עם מילה נרדפת:Extra Extra Large)3XL
- לוחצים על שמירה.
וישות למספרי הזמנות, שמורכבים בדרך כלל מ-4 תווים אלפאנומריים ו-3 מספרים. (לדוגמה, ABCD123)
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
OrderNumber - ישויות Regexp
- ישות: [A-Z]{4}[0-9]{3}
- לוחצים על שמירה.
הגדרת הישות שלכם אמורה להיראות בערך כך:
@Artist: 
@Merch: 
@Album: 
@ShirtSize: 
@OrderNumber: 
אחרי שמכינים את הישויות המותאמות אישית, אפשר להכין את הכוונות. נמשיך עם שיעור ה-Lab.
5. כוונות
כוונה מסווגת את הכוונה של משתמש הקצה בתור אחד של שיחה. הן פשוטות הרבה יותר ב-Dialogflow CX, והן כבר לא אבן בניין לשליטה בשיחה. Dialogflow CX משתמש רק בכוונות כדי להתאים את מה שהמשתמשים אומרים. ב-Dialogflow ES, הייתם צריכים לקשר כל דבר (פרמטרים, אירועים, הגדרת מענה וכו') לישות Intent. הכוונה ב-Dialogflow CX מכילה רק ביטויי אימון, ולכן אפשר לעשות בה שימוש חוזר. הוא לא שולט יותר בשיחה. לכן, תהליך יצירת הכוונות יהיה פשוט:
בביטויים לאימון בכוונות אפשר להשתמש בישויות כדי לחלץ קלט'משתנה'. לכן מומלץ ליצור מראש את סוגי הישויות, כמו שעשינו בדף הקודם של שלבי הסדנה.
יצירת כוונות
לפני שמתחילים לעצב את הדפים בתהליך, צריך להכין את כל הכוונות.
- לוחצים על ניהול > כוונות.
- לוחצים על + יצירה.
משתמשים בפרטים הבאים:
- השם המוצג
redirect.artists.overview - תיאור
Artists overview: The bands supported by the label

גוללים למטה ויוצרים את הביטויים הבאים לאימון:
Which bands are signed?Which bandsWhich artistsWhich artists are part of the record labelWho is part of the labelFrom which bands can I buy merchandiseBand merchandiseWhich music do you have?I would like to know who are signed to the labelWho are supported by the labelFrom who can I buy shirtsWhat music can I orderCan I get an overview of all the artists

- לוחצים על שמירה.
- עכשיו נמשיך וניצור את כל הכוונות האחרות. אתם יכולים להשתמש בדמיון שלכם כדי להמציא עוד ביטויים לאימון. מומלץ להשתמש לפחות ב-10 ביטויי אימון לכל כוונה, כדי לכסות את הדרכים השונות שבהן משתמש עשוי להפעיל את הכוונה הזו. למטרות ה-Lab הזה, גם אם יש לכם פחות מ-100 מוצרים זה בסדר.
כמה דברים שכדאי לבדוק:
- שימו לב: כשמזינים את הביטוי לאימון, מערכת Dialogflow CX מוסיפה אוטומטית הערות לישויות. אם היא לא עושה את זה, יכול להיות שתצטרכו לעדכן את הישות (על ידי הוספת מילה נרדפת) או להוסיף בעצמכם הערה לביטוי האימון.
- ביטויי אימון קצרים יותר: מערכת ה-NLU של Dialogflow יכולה לעבוד גם עם ביטויי אימון קצרים יותר, וסיפקנו כאן כמה דוגמאות.
- אימון יתר: שימוש ביותר מדי ביטויי אימון לזיהוי כוונות עלול לגרום לאימון יתר ולתוצאה פחות רצויה. מומלץ להשתמש בבדיקות חוזרות ובהדרגה, ולהוסיף ביטויי הדרכה אם לא נמצאה התאמה ל-Intent.
השם המוצג | משפטים לאימון |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
אחרי שהכנו את הרכיבים לשימוש חוזר (תהליכי עבודה, ישויות וכוונות), אנחנו יכולים ליצור דפים ומטפלי מצבים כדי להרכיב את הכל ביחד.
6. דפים ומטפלים במצבים
אפשר לתאר שיחה ב-Dialogflow CX (סשן) כמכונת מצבים סופית. ניקח לדוגמה מכונת ממכר אוטומטית, שאפשר ליצור לה מודל כמכונת מצבים סופית. הוא יכול להיות במצבים הבאים: 'המתנה למטבעות', 'בחירת ממתק', 'מתן ממתק'. בהינתן קבוצה של נתוני קלט, הוא עובר בין המצבים האלה. לדוגמה, הכנסת מטבע מעבירה את מכונת הממכר האוטומטית מהמצב 'המתנה למטבעות' למצב 'בחירת ממתק'. דפים הם הדרך שבה אנחנו יכולים ליצור מודל של המצבים האלה לסוכן וירטואלי של Dialogflow CX.
כשמשתמש קצה מנהל שיחה עם Dialogflow CX, השיחה עוברת מדף לדף. בכל רגע נתון, יש רק דף אחד שהוא הדף הנוכחי, הדף הנוכחי נחשב פעיל, וגם ה-Flow שמשויך לדף הזה נחשב פעיל.
בכל זרימה מגדירים הרבה דפים, והדפים המשולבים יכולים לנהל שיחה מלאה בנושאים שהזרימה מיועדת להם. לכל תהליך יש דף התחלה מיוחד. כשתהליך הופך לפעיל בפעם הראשונה, דף ההתחלה הופך לדף הנוכחי. בכל תור בשיחה, הדף הנוכחי יישאר אותו הדבר או יעבור לדף אחר. הקונספט הזה יאפשר לכם ליצור סוכנים גדולים יותר עם הרבה דפים ומספר רב של תורות לשיחה.
הדפים מכילים מילויים (דיאלוגים סטטיים להזנת נתונים או וווב-הוקים), פרמטרים ומטפלים במצבים. השליטה בשיחה מתבצעת באמצעות רכיבי handler של מצבים, שמאפשרים ליצור נתיבי מעבר שונים כדי לעבור לדף אחר ב-Dialogflow CX, כולל יצירת מעבר מותנה (לפיצול השיחה לענפים).
הסטטוס של שיחה נשלט על ידי טיפול במעברים בין דפים באמצעות שלושה סוגים שונים של נתיבים:
- ניתוב כוונות: כשצריך להתאים כוונה (למשל, שינוי הדף על סמך מה שמשתמש הקצה אומר). (קווים כחולים בתרשים החזותי).
- מסלולים של תנאים: כשצריך לבדוק תנאי (למשל, שינוי דף על סמך פרמטרים מסוימים שמאוחסנים בסשן) (קווים כתומים בתרשים הוויזואלי).
- גורמים מטפלים באירועים: כשצריך לטפל באירוע מסוים של חזרה למצב הקודם (למשל, טיפול במצב שבו אין קלט או אין התאמה, כדי להבחין בין משתמש הקצה לבין מסלול של כוונה או תנאי) (הקווים הירוקים בתרשים הוויזואלי).
ההגדרות של האמירות בשיחה (כלומר, התוכן או התשובה שמוצגים למשתמש) נקבעות על ידי ההשלמה, שיכולה להיות סטטית או דינמית:
- מילוי סטטי: כשמספקים תשובה של מילוי סטטי
- מילוי דינמי: כשמפעילים webhook של מילוי דינמי לתגובות דינמיות
לצורך הבוט הקמעונאי שלנו, ניצור כמה נתיבי כוונות ונספק כמה תשובות סטטיות למילוי בקשות, שיוצגו למשתמש ברגע שהדף יופעל. בהמשך ניצור פרמטרים עם נתיבי תנאים כדי לאסוף את המידע שדרוש לכם כדי לבצע הזמנה של מוצרים.
מסלולי כוונה (Intent) בדף
יצירת הדפים בתהליך ברירת המחדל של דף ההתחלה
תרשים זרימה של תהליך ההתחלה שמוגדר כברירת מחדל:

בואו נלחץ על הקישור הזה ביחד:
- לוחצים על Build > Default Start Flow (יצירה > זרימת התחלה שמוגדרת כברירת מחדל)
- לוחצים על דף הפתיחה.
- לוחצים על הסמל + לצד מסלולים.
- הוספת redirect.artists.overview
- גוללים למטה אל Transition (מעבר) ועוברים לתהליך Catalog (קטלוג).
- לוחצים על שמירה.
- חוזרים על השלבים שלמעלה עבור
redirect.product.overviewועוד 11 שורות מהטבלה הזו:
Page (In Flow) | מסלולים > כוונה | Routes > Transition To |
התחלה |
| - |
התחלה |
| Flow: Catalog |
התחלה |
| Flow: Catalog |
התחלה |
| Flow: Catalog |
התחלה |
| Flow: Catalog |
התחלה |
| Flow: Catalog |
התחלה |
| Flow: Catalog |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| Flow: My Order |
התחלה |
| Flow: My Order |
התחלה |
| Flow: My Order |
התחלה |
| דף: סיום הסשן |

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

יצירת הדפים ב-Catalog Flow
התמליל הבא של הצ'אט שייך לזרימת העבודה של הקטלוג:
> "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?
תרשים הזרימה הבא מציג את כל הדפים בתהליך של קטלוג:

שימו לב למורכבות של התהליך הזה:
- אפשר לדלג על השאלה לגבי האומנים ולשאול מיד "אילו פריטי מרצ'נדייז זמינים".
- מתוך זרימת ההתחלה שמוגדרת כברירת מחדל, אפשר לשאול: "אני רוצה לקנות חולצת טישרט של The 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?"
קודם נתחיל בחיבור הדפים.
- לוחצים על Build > Catalog (בנייה > קטלוג).
- לוחצים על דף הפתיחה.
- לוחצים על הסמל + לצד מסלולים.
- הוספת redirect.artists.overview
- גוללים למטה אל מעבר, בוחרים באפשרות דף ובוחרים באפשרות: + דף חדש
- משתמשים בשם הדף:
Artist Overviewולוחצים על שמירה.
עכשיו נסיים את שאר התהליך:
- אפשר לחזור על השלבים הקודמים עם הדפים, הכוונות וההשלמות הבאים. השתלטות על השולחן הזה דף הוא הדף שתבחרו בתהליך, נתיבים > מעבר אל הוא התהליך או הדף החדש שתיצרו ותעברו אליו.
Page (In Flow) | מסלולים > כוונה | Routes > Transition To |
התחלת קטלוג |
| סקירה כללית על אומנים |
התחלת קטלוג |
| מוצר |
התחלת קטלוג |
| סקירה כללית על המוצר |
התחלת קטלוג |
| סקירה כללית על המוצר |
התחלת קטלוג |
| חולצות |
התחלת קטלוג |
| מוזיקה |
התחלת קטלוג |
| סיום הסשן |
התחלת קטלוג |
| סיום תהליך העבודה |
סקירה כללית על אומנים |
| סקירה כללית על המוצר |
עכשיו נמשיך ונוסיף עוד תשובות סטטיות.
- בתהליך העבודה של הקטלוג, לוחצים על הדף סקירה כללית של האומן.
- בקטע Entry fulfillment (השלמת פרטי הכניסה), לוחצים על Edit fulfillment (עריכת פרטי הכניסה).
- משתמשים בערכי המילוי הסטטיים הבאים (מה הסוכן אומר):
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- לוחצים על שמירה.
- בתהליך העבודה של הקטלוג, לוחצים על הדף סקירת מוצרים.
- בקטע Entry fulfillment (השלמת פרטי הכניסה), לוחצים על Edit fulfillment (עריכת פרטי הכניסה).
- משתמשים בסטטוס הסטטי הבא של מילוי הזמנה (הסוכן אומר):
We sell shirts, music or the tour movie.
- לוחצים על שמירה.
פרמטרים של דפים
פרמטרים משמשים לתיעוד ערכים שסופקו על ידי משתמש הקצה במהלך סשן ולהפניה אליהם. לכל פרמטר יש שם וסוג ישות. @Artist ו-@Merch הם הפרמטרים המינימליים שאנחנו צריכים לאסוף כדי לבצע הזמנה של מוצרים. אם אתם רוצים להזמין חולצות טי או חולצות עם שרוולים ארוכים, תצטרכו גם @ShirtSize, ואם אתם רוצים להזמין מוזיקה, תצטרכו גם שם של @Carrier ושל @Album.
צריך לסמן את הפרמטרים האלה כנדרשים. וכשזה יהיה נדרש, תצטרכו לספק הנחיות מותאמות אישית כדי שהמודל יזכור את משתמש הקצה ויספק את התשובות הנכונות, וכך יוכל לאסוף את הפרמטרים האלה. יש כמה מנגנונים ב-Dialogflow CX שיכולים לעזור לכם בכך.
לדוגמה, אפשר לספק הודעות סטטיות מותאמות אישית לגבי אספקת המוצר בקטע פרמטר. אם הפרמטר נדרש, יוצגו ההשלמות האלה של הפרמטר. הודעות התגובה האלה יתווספו לתור התגובות. במהלך תור של סוכן, אפשר (ולפעמים מומלץ) להפעיל כמה תהליכי מילוי, שכל אחד מהם יכול להפיק הודעת תגובה. Dialogflow שומר את התשובות האלה בתור תשובות. מידע נוסף על מחזור החיים של הדף ועל הסדר שבו יתווספו המילויים האלה לתור התגובות זמין במסמכי הדפים של Dialogflow CX.
יצירת הפרמטרים בדף הסקירה הכללית של האומן
נניח שרוצים להגדיר כמה פרמטרים של דף:
- בתהליך העבודה של קטלוג, לוחצים על הדף סקירה כללית של האומן.
- לוחצים על + בבלוק Parameters (פרמטרים). מוסיפים את הפרמטר artist:
- השם המוצג:
artist - סוג הישות:
@Artist - חובה: סימון
- השמטה ביומן: מסומן
- עכשיו נוסיף כמה הודעות מילוי של פרמטרים מותאמים אישית. אם הפרמטר artist עדיין לא נאסף על ידי הסוכן הווירטואלי, משתמש הקצה יקבל את התגובה הבאה של הסוכן שנוספה לתור התגובות:
From which of these artists would you like to order merchandise?
- מוסיפים אפשרות שנייה לדיאלוג שמספקת צ'יפים עשירים של הצעות. לוחצים על Add dialogue option ומשתמשים בקוד הזה (ב-JSON):
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
אפשר לטפל בהנחיות שונות של מילוי חסר בהתאם למספר הניסיונות של משתמש הקצה לענות על השאלות. כדי לעשות את זה, משתמשים בhandlers של פרמטרים של אירועים. יש מגוון רחב של מטפלי אירועים מובנים שאפשר לבחור מתוכם, כמו Invalid Parameters, Utterances too long, No input, No input 1st try, 2nd try או No Match. ההבדל בין 'ללא קלט' לבין 'ללא התאמה' הוא שבמקרה של 'ללא קלט' המשתמש לא סיפק תשובה, ואילו במקרה של 'ללא התאמה' המשתמש סיפק תשובה אבל מערכת Dialogflow CX לא הצליחה להתאים אותה לדף.
- גוללים למטה לקטע Reprompt event handlers (הפעלת הגורמים שמטפלים באירועים שנטענו).
- לוחצים על הוספת handler של אירוע ובוחרים את האירוע:
No-match default - משתמשים בטקסט סטטי למילוי האירוע הבא:
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?
- לוחצים על שמירה.
- לוחצים על הוספת handler לאירוע ובוחרים את האירוע:
No-input default - משתמשים בטקסט סטטי למילוי האירוע הבא:
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?
- לוחצים על שמירה.
נתיבי תנאי בדף
הפרמטרים שימושיים מאוד בשילוב עם נתיבי ניתוב מותנים בדף. כשתנאי מסוים מקבל את הערך true, נתיב הדף המשויך יופעל. דוגמאות לתנאים: פרמטר שווה לערך ספציפי, פרמטר לא יכול להיות חסר, טופס שהושלם ועוד. מידע נוסף על פרמטרים ותנאים זמין במסמכי התיעוד של Dialogflow CX.
כדי להגדיר את הנציג הווירטואלי שלנו לקמעונאות, נצטרך לאסוף רצף של פרמטרים, ולכן נצטרך ליצור תנאי כדי לבדוק אם 'טופס' הושלם. טופס הוא רשימה של פרמטרים שצריך לאסוף ממשתמש הקצה עבור הדף. הסוכן הווירטואלי מנהל אינטראקציה עם משתמש הקצה בכמה תורות שיחה, עד שהוא אוסף את כל הפרמטרים הנדרשים בטופס, שנקראים גם פרמטרים של הדף.
מערכת Dialogflow CX מגדירה באופן אוטומטי את ערכי הפרמטרים שמשתמש הקצה מספק במהלך מילוי הטופס. כדי לבדוק אם הטופס המלא בדף הנוכחי מולא, משתמשים בתנאי הבא: $page.params.status = "FINAL"
יצירת מסלולים מותנים בדף 'סקירת אומן'
ניצור מסלול מותנה שיעבור לדף הבא אחרי שהאומן יהיה ידוע:
- בדף סקירה כללית של האומן, לוחצים על הסמל + בקטע נתיבים.
- גוללים למטה לקטע מצב.
- בוחרים באפשרות לפחות אחד (או)
- בשלב הבא נכתוב ביטוי
- פרמטר:
$page.params.status - אופרטור:
= - ערך:
"FINAL"
- עכשיו ניצור הודעת אישור סטטית ספציפית במסלול, כדי לאשר את הבחירה של משתמש הקצה. גוללים למטה אל הבלוק Fulfillment וכותבים את הודעות ה-Fulfillment הבאות:
$session.params.artist, great choice! Rock on!You want to rock with $session.params.artist merchandise. Awesome!
- כשהתנאי מתקיים, המערכת צריכה להעביר אתכם לדף סקירת המוצר. גוללים למטה לקטע מעבר ומשתמשים בדף הבא:
Product Overview - לוחצים על שמירה.

יצירת המסלולים בדף סקירת המוצר
אחרי שהסברנו איך יוצרים פרמטרים ומסלולים מותנים, נראה איך יוצרים עוד פרמטרים לדפים הבאים:
סקירה כללית על המוצר
- יוצרים פרמטר
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? - מטען ייעודי (payload) בהתאמה אישית:
{
"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? - מטען ייעודי (payload) בהתאמה אישית:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- יצירת פרמטר
merch:
- השם המוצג:
merch - סוג הישות:
@Merch - חובה: סימון
- השמטה ביומן: מסומן
- מימוש:
Which merchandise item do you want? - לוחצים על הוספת אפשרות לדיאלוג > מטען ייעודי (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? - מטען ייעודי (payload) בהתאמה אישית:
{
"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"
}
]
}
]
]
}
- יוצרים מסלול שיעבור לדף Product אם הערך
artistיסופק והפריטmerchיסופק.
- תנאי:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.artist != null - ביטוי:
$session.params.merch != null - מימוש:
Alright! $session.params.merch of $session.params.artist, let's go! - מעבר: דף:
Product
- יצירת מסלול למקרה שהמשתמש אומר 'חולצות'
- Intent: redirect.shirts
- מעבר: דף:
Shirts
- יצירת מסלול לשיחה כשהמשתמש אומר 'מוזיקה'
- Intent: redirect.music
- מעבר: דף:
Music
- יצירת מסלול לתרחיש שבו המשתמש מבקש מידע על מחירים
- Intent: redirect.price
- מעבר: יצירת דף חדש:
Price
אחרי שמגדירים את ההגדרה שלמעלה, מוצגת תצוגה חזותית שדומה לתמונה שלמטה. שימו לב: מסלולי כוונות הם כחולים בתרשים, ומסלולי תנאים הם כתומים. לא מוצג כאן, אבל מטפלי אירועים הם ירוקים, וכמה סוגים של מסלולים עוברים לדף, הקו יהיה אפור.

עד עכשיו למדתם איך ליצור תהליכים, ישויות, כוונות ודפים באמצעות מטפלי מצבים כמו נתיבי כוונות ונתיבים מותנים על סמך פרמטרים. בהמשך שיעור ה-Lab הזה נשתמש בהסתעפות מותנית בתהליך מילוי הבקשה, כדי לספק דיאלוגים שונים בהתאם לקלט.
כדי להשלים את הסוכן הווירטואלי שלנו, אפשר להשתמש בהגדרות הבאות.
דף חולצות:
- יוצרים את ההגדרות הבאות בדף Shirts:
- השלמת כניסה:
Do you want a longsleeve or a t-shirt? - מטען ייעודי (payload) בהתאמה אישית של אספקת הזמנה:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- יצירת מסלול כוונה:
redirect.priceעם מעבר לPricePage - יוצרים את הפרמטר הבא:
- פרמטר:
merch– סוג ישות:@Merch, RequiredוRedact in log - פרמטר > Event Handler >
No-match default - פרמטר > מילוי פרטים של מטפל באירוע:
You can choose between a t-shirt or a longsleeve. Which of these do you want? - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- פרמטר > Event Handler >
No-input default - פרמטר > מילוי פרטים של מטפל באירוע:
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want? - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- לוחצים על הרשומה fulfillment (השלמת הזמנה) וגוללים למטה אל Parameter presets (הגדרות קבועות מראש של פרמטרים). בכל פעם שהדף Shirts (חולצות) יהיה פעיל, פרמטר הקטגוריה יוגדר לערך shirts (חולצות):
פרמטר | ערך |
|
|
- הוספת נתיב מותנה:
- התאמה לכלל אחד לפחות (OR)
- ביטוי:
$session.params.merch = "T-shirt" - ביטוי:
$session.params.merch = "Longsleeve" - מעבר לדף חדש:
Shirt Size
דף מחיר:
ההודעות לגבי המחירים יהיו תלויות בפריט או בקטגוריה של המוצרים שנבחרו (מוזיקה או חולצות), ולכן נתקן את החלק הזה בהמשך במעבדה. בשלב הזה מספיק להזין רק מציין מיקום.
- יוצרים את ההגדרות הבאות בדף מחיר:
- השלמת כניסה:
PRICE TODO
מכיוון שאפשר לבקש את המחיר ממקומות שונים בשיחה, הוא תמיד ייתן לכם תשובה ויחזיר אתכם לחלק הקודם של הדיאלוג כדי להמשיך את ההזמנה. יש 5 מקומות בעץ הדיאלוג שבהם אפשר להסתעף כדי לקבל מידע על מחירים. (חולצה, מידת חולצה, מוזיקה, ספק וגם ישירות דרך נתיב כוונות), ולכן נצטרך כמה נתיבים מותנים כדי לחזור:
- הוספת מסלול מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.category = "shirts" - ביטוי:
$session.params.merch = "null" - מעבר לדף חדש:
Shirts
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.category = "shirts" - ביטוי:
$session.params.size = "null" - מעבר לדף חדש:
Shirt Size
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.category = "music" - ביטוי:
$session.params.album = "null" - מעבר לדף חדש:
Music
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.category = "music" - ביטוי:
$session.params.merch = "null" - מעבר לדף חדש:
Carrier
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.category = "null" - מעבר לדף חדש:
Product Overview
דף מידת החולצה:
- יוצרים את ההגדרות הבאות בדף Shirt Size:
- השלמת כניסה:
What shirt size do you want? - מטען ייעודי (payload) בהתאמה אישית של אספקת הזמנה:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.priceעם מעבר לPricePage. - יוצרים את הפרמטר הבא:
- פרמטר:
shirtsize– סוג הישות:@ShirtSize–Required, Redact In Log - פרמטר > Event Handler >
No-match default - פרמטר > מילוי פרטים של מטפל באירוע:
Please tell me the shirt size, such as XL. - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- פרמטר > Event Handler >
No-input default - פרמטר > מילוי פרטים של מטפל באירוע:
I couldn't understand the shirt size. What size do you want? - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$page.params.shirtsize != "null" - מעבר לדף:
Product
דף המוזיקה:
- יוצרים את ההגדרות הבאות בדף Music:
- השלמת כניסה:
We have a Greatest Hits Album or the Live Album. Which one do you want? - מטען ייעודי (payload) בהתאמה אישית של אספקת הזמנה:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.priceעם מעבר לדף:Price. - יוצרים את הפרמטר הבא:
- פרמטר:
album– סוג הישות:@Album–Required, Redact In Log - פרמטר > Event Handler >
No-match default - פרמטר > מילוי פרטים של מטפל באירוע:
You can choose between Greatest Hits and Live Album. Which of these do you want? - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- פרמטר > Event Handler >
No-input default - פרמטר > מילוי פרטים של מטפל באירוע:
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want? - פרמטר > מטען ייעודי מותאם אישית של Event Handler Fulfillment:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- לוחצים על רשומה של מילוי פרטים וגוללים למטה אל Parameter presets (הגדרות קבועות מראש של פרמטרים). בכל פעם שהדף Music (מוזיקה) הופך לפעיל, פרמטר הקטגוריה מוגדר ל-music:
פרמטר | ערך |
|
|
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$page.params.album != "null" - מעבר לדף:
Carrier
דף של ספק:
- יוצרים את ההגדרות הבאות בדף Carrier:
- השלמת כניסה:
Do you want this album on CD or MP3? - מטען ייעודי (payload) בהתאמה אישית של אספקת הזמנה:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.priceשמוביל לדףPrice. - יוצרים את הפרמטר הבא:
- פרמטר:
merch– סוג הישות:@Merch–Required, Redact In Log - פרמטר > Event Handler >
No-match default - פרמטר > מילוי פרטים של מטפל באירוע:
Do you want a physical CD or the digital album? - פרמטר > Event Handler Fulfillment: Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- פרמטר > Event Handler >
No-input default - פרמטר > מילוי פרטים של מטפל באירוע:
I couldn't understand if you mean CD or MP3. Which one do you want? - פרמטר > Event Handler Fulfillment: Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$page.params.merch != "null" - מעבר לדף:
Product
דף המוצר:
- יוצרים את הפרמטרים הבאים:
שם התצוגה של הפרמטר | סוג הישות של הפרמטר | בדיקות |
|
| חובה, צנזורה ביומן |
|
| חובה, צנזורה ביומן |
- הפרמטר 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. - וגורם מטפל באירועים עם מילוי:
I missed that. Please ask me which artists are signed.No-match default
- גם הפרמטר merch צריך לכלול מטפלים באירועים של בקשות חוזרות.
- מוסיפים handler לאירוע
No-input defaultעם ביצוע פעולה:I couldn't understand what you just said. Which merchandise item do you want? - וגורם מטפל באירועים עם מילוי:
I missed that. Which merchandise item do you want?No-match default
המסלול הבא יוביל לדף האישור אם האומן מוכר והמשתמש יבחר באפשרות 'סרטון סיור'.
- הוספת נתיב מותנה:
- התאמה לכל כלל (וגם)
- ביטוי:
$session.params.artist != null - ביטוי:
$session.params.merch = "Tour Movie" - הגדרות קבועות מראש של פרמטרים הוספת פרמטר >
price = 25 - מעבר לדף חדש:
Confirmation
המסלול הבא יוביל לדף האישור אם האומן מוכר והמשתמש בוחר חולצת טי וגודל חולצה.
- הוספת נתיב מותנה:
- ביטוי מותאם אישית:
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null - הגדרות קבועות מראש של פרמטרים הוספת פרמטר >
price = 25 - מעבר לדף:
Confirmation
המסלול הבא יוביל לדף האישור אם האומן מוכר והמשתמש יבחר בחולצת 'שרוול ארוך' ויציין את מידת החולצה.
- הוספת נתיב מותנה:
- ביטוי מותאם אישית:
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null - הגדרות קבועות מראש של פרמטרים הוספת פרמטר >
price = 30 - מעבר לדף:
Confirmation
המסלול הבא יוביל לדף האישור אם האומן מוכר והמשתמש בוחר באפשרות 'תקליטור' וגם בשם האלבום.
- הוספת נתיב מותנה:
- ביטוי מותאם אישית:
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null - הגדרות קבועות מראש של פרמטרים הוספת פרמטר >
price = 15 - מעבר לדף:
Confirmation
במסלול הבא, המשתמש יועבר לדף האישור אם האומן מוכר והמשתמש יבחר באפשרות 'אלבום דיגיטלי' ויבחר את שם האלבום.
- הוספת נתיב מותנה:
- ביטוי מותאם אישית:
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null - הגדרות קבועות מראש של פרמטרים הוספת פרמטר >
price = 10 - מעבר לדף:
Confirmation
בשלב הבא, ניצור כמה תנאים מתקדמים עם הנחיות לזיהוי מידע חסר. המסלול הבא יחזיר את המשתמש לדף המוזיקה אם האומן מוכר והמשתמש בוחר באפשרות 'תקליטור' או 'אלבום דיגיטלי', אבל לא בחר את שם האלבום.
- הוספת נתיב מותנה:
- ביטוי מותאם אישית:
$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
המסלול האחרון יוביל לדף האישור כשהאומן ידוע והמשתמש בוחר בחולצת טי או בחולצה עם שרוולים ארוכים, אבל לא בוחר את המידה של חולצת הטי.
- הוספת מסלול מותנה:
- ביטוי מותאם אישית:
$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 fulfillments, שבהם התשובות המותנות נקבעות ב-back-end. דוגמה:
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- דוגמה ל[תנאי]:
$session.params.user-age >= 21. הפורמט דומה לפורמט של התנאים בנתיבים. - [response] מקבל את התשובה הסטטית
- תשובות מותנות תמיד מתחילות ב-
if - החסימות
elifוגםelseהן אופציונליות
ב-Dialogflow CX אפשר גם להשתמש בפונקציות מערכת מובנות. לדוגמה, כדי לעצב תאריך או שעה, או כדי להציג את השעה הנוכחית ($sys.func.NOW())
בואו נסיים את התהליך של הקטלוג על ידי תיקון הדפים אישור ומחיר.
דף האישור:
עכשיו ניצור את דף האישור. הדרישות הן:
- אם המוצר הוא CD או אלבום דיגיטלי. בשדות האישור יוצגו השדות הבאים: artist, merch, album ו-price.
- אם המוצר הוא חולצת טישרט או חולצה ארוכת שרוולים. באישור יוצגו השדות הבאים: אומן, מוצרים, מידה ומחיר.
- אחרת (כלומר, אם merch הוא Tour Movie). בשדות הבאים יוצגו פרטי האישור: artist, merch ו-price.
- לוחצים על דף האישור.
- לוחצים על עריכת ביצוע > תגובות של נציג > האפשרות הוספת דיאלוג > תגובה מותנית:
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
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.ordertransitions to:Order ProcessFlow.decline.proceed.ordertransitions toEnd 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.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
- 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..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.endintent. 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

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
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- 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.
- 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?
- 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?
- 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"
}
]
]
}
- 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"
}
]
]
}
- 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?
- 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?
- 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?
- 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?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! - Select the Start Page and click on the
redirect.homeintent. 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.
- 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.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice GooglerI am not a fan of G's N' RosesI can't stand the music of the Google Dolls
- 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
- Click the Default Start Flow, select the
sys.no-input-defaultevent 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:
- 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.
- Click the Default Start Flow, select the
sys.no-match-defaultevent handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- 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.
- 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
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- 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.
- 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 |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Transition to new Page:
Payment Details
- 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
- יוצרים את מסלול הכוונה הבא
- כוונה:
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
- בוחרים את דף ההתחלה ולוחצים על כוונת
redirect.end. יוצרים את המימוש הבא:Thank you for contacting G-Records! Have a nice day! - בוחרים את דף ההתחלה ולוחצים על כוונת
redirect.home. יוצרים את ההגדרה הקבועה מראש של הפרמטר הבא:restart = true
מדהים! עכשיו יש לנו צ'אטבוט קמעונאי אמיתי שפועל באופן מלא! בשיעור ה-Lab הבא נבדוק את הביצועים של הסוכן הווירטואלי.
9. בדיקת הנציג הווירטואלי
אתם יכולים להשתמש בסימולטור המובנה כדי לבדוק את הדיאלוגים של הנציג הווירטואלי. היתרון בבדיקת התהליכים בסימולטור הוא שתוכלו לראות סקירה כללית של התהליכים, הדפים, הפרמטרים והאירועים (DTMF) שהסימולטור אסף במהלך התהליכים. כך קל יותר לבדוק את השילוב מאשר לבדוק אותו ישירות, כי סוגי המידע האלה מוסתרים ממשתמש הקצה. אפשר אפילו ליצור תרחישי בדיקה, לשמור אותם ולעשות בהם שימוש חוזר. זה מאוד הגיוני כשמנהלים או עורכים את התהליכים לאורך זמן, ורוצים לוודא שאף אחד מהשינויים לא ישבש את העבודה הקודמת.
אפשר גם לייצא ולייבא תרחישי בדיקה שנוצרו בעבר, על ידי אחסון הבדיקות ב-Google Cloud Storage או באופן מקומי. כשמייצאים בדיקה, קובץ blob יורד. מידע נוסף על הסימולטור ועל מקרים לבדיקה זמין במסמכי העזרה בנושא סימולטורים ומקרים לבדיקה.
לפני שיוצרים תרחישי בדיקה, צריך קודם לסיים את שאר ההגדרות של הסוכן הווירטואלי:
יצירת התהליך של שירות הלקוחות
- עוברים אל התהליך Customer Care ויוצרים את מעברי הכוונות הבאים:
Page (In Flow) | מסלולים > כוונה | Routes > Transition To |
Customer Care Start |
| משלוח |
Customer Care Start |
| החזר כספי |
Customer Care Start |
| החלפה |
Customer Care Start |
| סיום תהליך העבודה |
Customer Care Start |
| סיום הסשן |

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

- שאלה:
Which artists are signed with your label? - אומרים:
The Google Dolls - אומרים:
I am interested in buying a shirt - אומרים:
A t-shirt - אומרים:
Medium - עכשיו לוחצים על לחצן שמירת תרחיש הבדיקה. הוא נמצא בחלק העליון של הסימולטור (לצד חץ הביטול וסמל פח האשפה לאיפוס).

- מזינים את הפרטים הבאים:
- שם תרחיש הבדיקה:
Buy Google Dolls t-shirt size M - תגים: #catalog, #shirts, #t-shirt, #TheGoogleDolls
- לוחצים על שמירה.
בואו ניצור עוד מקרים לבדיקה.
- קודם מנקים את תיבת הדו-שיח הנוכחית על ידי לחיצה על סמל האיפוס (פח האשפה).
- יוצרים את תרחישי הבדיקה הבאים:
קונים את חולצת הטישרט של אליס, עובדת Google:
>"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 - תיאור: (שימו לב ששם האומן לא מוזכר, אבל אתם רוצים לדלג על דף הסקירה הכללית של הלהקות, דף הסקירה הכללית של המוצרים, דף החולצות ודף מידות החולצות)
רכישת מוזיקה של Guns 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 - תיאור: בדיקת פרטי המחיר בנקודות שונות בשיחה
בדיקת מקרי בדיקה שהוקלטו מראש
- בתפריט הראשי של Dialogflow שמימין, בוחרים באפשרות ניהול > תרחישי בדיקה.
- בוחרים את כל תרחישי הבדיקה ולוחצים על הלחצן הפעלה שמעל הטבלה.
מערכת Dialogflow CX תריץ את כל מקרי הבדיקה שנבחרו מול ההקלטה שנשמרה כ'מקרה בדיקה מושלם'. אם התוצאות יהיו זהות לתוצאות ששמרתם, הבדיקות יעברו בהצלחה. – אם משהו השתנה בתהליכים, כמו דפים שלא הוגדרו בצורה נכונה או כוונות שהפנו אתכם לדפים הלא נכונים, הבדיקות ייכשלו.

- בסימולטור, שואלים את השאלה הבאה:
How long will shipping take? - רושמים את התוצאה ושומרים את תרחיש הבדיקה בשם
Shippingעם התג:#shipping. - עוברים לחלונית Manage > Test Cases (ניהול > תרחישי בדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של הרשת, כדי להפעיל רק את תרחיש הבדיקה
Shipping.
הבדיקה הזו אמורה לעבור.
- חוזרים לזרימת שירות הלקוחות, בוחרים בדף התחלה ולוחצים על הכותרת נתיבים.
יוצג מסך עם רשת שכוללת את כל המסלולים.
- הסרת
redirect.shipping.info route - עוברים לחלונית Manage > Test Cases (ניהול > תרחישי בדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של הרשת, כדי להפעיל רק את תרחיש הבדיקה
Shipping.
הבדיקה הזו אמורה להיכשל.
- אפשר ללחוץ על הבדיקה שנכשלה כדי לראות את פרטי הכישלון.
במקרה הזה, הבדיקה נכשלה והתקבלה הודעת השגיאה הבאה:
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
הסיבה לכך היא שהדף כבר לא קיים בתהליך. ציפינו להגיע לדף Shipping, אבל במקום זאת לא עברנו מדף Start. (או שמשתמשי הקצה יקבלו הודעת גיבוי).
במילים אחרות, זו בקשה שהמערכת פספסה, תוצאת בדיקה של שלילה כוזבת. הבדיקה נכשלה. ציפינו לראות את הדף Shipping, אבל לא קורה כלום או שמוצגת הודעת ברירת מחדל.
- חוזרים לזרימת שירות הלקוחות ומוסיפים את
redirect.shipping.infoכנתיב להפניה לכוונת משתמש, לדף התחלה. אל תשכחו לעבור לדף משלוח וללחוץ על שמירה. - בסימולטור, מקליטים את תרחיש הבדיקה הבא:
I want to swap my item, ושומרים את תרחיש הבדיקה הזה בשםSwapping#swapping. - פותחים את ניהול > כוונות > redirect.refund.info ומוסיפים את משפט האימון הבא:
I want to swap this item for a refund
בלי הביטוי הזה לאימון, כשמשתמש יבקש לשנות פריט כדי לקבל החזר כספי, הוא יגיע אל הכוונה redirect.swapping.info, אבל אנחנו לא רוצים לתת מידע על שינוי פריטים, אלא על החזרים כספיים.
- יוצרים את תרחיש הבדיקה המוזהב הבא:
I want to swap this item for a refundבסימולטור, ושומרים את תרחיש הבדיקה הזה בשםSwap for Refund#refund - חוזרים אל הכוונה ניהול > כוונות > redirect.refund.info ומסירים את השורה
I want to swap this item for a refund. - חוזרים אל Manage > Test Cases (ניהול > תרחישי בדיקה), בוחרים את תרחיש הבדיקה Swap for Refund (החלפה לקבלת החזר כספי) ולוחצים על Run (הפעלה).
הבדיקה האחרונה שלך נכשלה, עם הודעת השגיאה הבאה:
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
במילים אחרות, זו בקשה שהובנה לא נכון, תוצאת בדיקה של False Positive. הבדיקה נכשלה. ציפינו שהדף החזר כספי יהפוך לפעיל, אבל הדף החלפה הפך לפעיל.
כיסוי
ב-Dialogflow CX, כיסוי הבדיקה הוא מדד שמתאר את מידת הביצוע של הדיאלוג של הסוכן הווירטואלי (דפים וכוונה) כשחבילת בדיקה מסוימת מופעלת. לסוכן וירטואלי עם כיסוי בדיקה גבוה, שנמדד באחוזים, היו יותר דיאלוגים שהופעלו במהלך הבדיקה. זה מצביע על כך שהסיכוי שהוא יכיל באגים שלא זוהו (כמו בקשות שלא הובנו) נמוך יותר בהשוואה לסוכן וירטואלי עם כיסוי בדיקה נמוך.
- כדי להציג דוח כיסוי בדיקות לכל תרחישי הבדיקה, לוחצים על כיסוי.
- לוחצים על הכרטיסייה מעברים.
כך תוכלו לראות את כיסוי הבדיקה של כל מעברי הדפים.

- לוחצים על הכרטיסייה Intents (כוונות).
כך תוכלו לראות את כיסוי הבדיקה לכל הכוונות.

מזל טוב! בשלב הזה כבר יצרתם ובדקתם דוגמה מלאה מהעולם האמיתי של בוט קמעונאי. בואו נעבור לדף הבא של שיעור ה-Lab כדי לקרוא את המסקנה ולמצוא כמה הפניות שימושיות.
10. סיכום
Dialogflow CX היא פלטפורמת AI בממשק שיחה (CAIP) ליצירת סוכנים וירטואליים כמו בוטים לצ'אט או בוטים קוליים. Dialogflow CX מאפשר לצוות שלכם ליצור מהר יותר חוויות שיחה ברמה ארגונית באמצעות כלי ויזואלי ליצירת בוטים, כוונות לשימוש חוזר ויכולת לנהל שיחות מורכבות.
בשיעור הזה למדתם איך ליצור סוכן וירטואלי למכירות בעולם האמיתי. התייחסנו למושגים הבאים:
- זרימות
- פרמטרים, ישויות מותאמות אישית וישויות מערכת
- iWork Pages
- רכיבי State Handler כמו Intent Routes ו-Condition Routes
- הודעות סטטיות של מילוי בקשות ותשובות מותנות
- כוונות רכישה חלופיות
- סימולטור, תרחישי בדיקה וכיסוי

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