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 בפרויקט.
- בוחרים את הפרויקט שעבורו רוצים להפעיל את ה-API ולוחצים על המשך.
- מכווצים את התפריט של ממשקי ה-API והשירותים ולוחצים על Create Credentials.
- לוחצים על Application Data (נתוני האפליקציה).
- ציינו No, I not using them (לא, אני לא משתמש בהם) כי בשלב זה אתם לא משתמשים ב-Kubernetes Engine, ב-App Engine או ב-Cloud Functions.
- לוחצים על סיום
יצירת סוכן חדש ב-Dialogflow CX
כדי ליצור סוכן חדש ב-Dialogflow CX, פותחים קודם את מסוף Dialogflow CX:
- בוחרים את הפרויקט ב-Google Cloud שיצרתם קודם.
- לוחצים על Create agent.
ממלאים את הטופס להגדרות הבסיסיות של הנציג:
- אפשר לבחור כל שם מוצג.
- בתור מיקום, בוחרים באפשרות: us-central1
- בוחרים את אזור הזמן המועדף.
- בוחרים באפשרות en – אנגלית כשפת ברירת המחדל
לוחצים על יצירה.
בסדר, הכול מוכן. עכשיו אנחנו יכולים להתחיל לבנות את המודל של הנציג הווירטואלי.
3. זרימות
תיבות דו-שיח מורכבות בדרך כלל כוללות כמה נושאים. במקרה של הצ'אט בוט שאנחנו בונים עבור רשומות G-Records, למכירת מרצ'נדייז של להקות, נקיים תיבות דו-שיח לגבי קטלוג המוצרים, התשלום, סטטוס ההזמנה ושאלות בנושא שירות לקוחות. נוכל לפצל את נושאי השיחות האלה לזרום.
תהליכים מאפשרים לצוותים לעבוד על נתיבי שיחה נפרדים. מומלץ לפשט את התהליך כדי שיהיה קל להציג אותו במסך, וגם כדי שיהיה מורכב ממודולים.
תהליכים הם קונספט חדש ב-Dialogflow CX. Dialogflow Essentials כולל את הקונספט 'סוכני Mega', הדומה ל-Flow. עם זאת, תשתמשו בתהליכים הרבה יותר לעיתים קרובות.
בהמשך הסדנה הזו נשתמש במפעילי מצב שיכולים לסיים תהליך (כך שהוא יחזור לתהליך הבא או הקודם), או שתוכלו לסיים את הסשן המלא של הסוכן.
נתחיל ליצור תהליכים.
יצירת תהליכים
- ב-Dialogflow CX, לוחצים על הסמל + > Create flow.
- מציינים את השם:
Catalog
ומקישים על Enter.
הקטלוג בתהליך הראשון נוצר. עכשיו יוצרים את התהליכים האחרים:
Order Process
My Order
Customer Care
בהמשך שיעור ה-Lab הזה נגדיר טיפול במצבי דף, כדי לוודא שבסופו של דבר התצוגה החזותית תיראה כך:
סימולטור
בצד שמאל של מסוף Dialogflow CX אפשר לבדוק את הסוכן הווירטואלי באמצעות הסימולטור המובנה. אתם יכולים לבדוק את השיחה מההתחלה או מתהליך מסוים.
- לוחצים על הלחצן Test Agent (בדיקת סוכן) בפינה השמאלית העליונה של המסך.
- בשדה 'שיחה עם נציג', כותבים:
Hello
הסוכן הווירטואלי יגיב בהודעת פתיחה שמוגדרת כברירת מחדל: שלום! איך אפשר לעזור?
בואו נשנה את ברירת המחדל של טקסט קבלת הפנים.
תהליך התחלה שמוגדר כברירת מחדל
נתחיל ביצירת ניתוב כוונה שיופעל אחרי שתברכו את הנציג הווירטואלי.
- בסרגל הצד Build > Flows (פיתוח > תהליכים), לוחצים על Default Start Flow (תהליך ברירת המחדל להתחלה) ובוחרים את צומת העץ Start (התחלה).
הדף התחלה ייפתח. הדף 'דף הבית' נבחר באופן אוטומטי בקטע פיתוח > דפים בסרגל הצד.
- בקטע 'התחלה' > 'מסלולים' לוחצים על ברירת המחדל של Intent היכרות.
Intent מסווג את הכוונה של משתמש הקצה בתורת שיחה אחת. ב-Dialogflow CX, כוונות יכולות להיות חלק ממנגנון טיפול במצבים כדי לנתב את הדף הפעיל או את הטיפול הבא
- מסירים את כל הרשומות של נציג התמיכה ומוסיפים את הטקסט החדש:
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) בהתאמה אישית ולוחצים על שמירה.
מידע נוסף על עומסי נתונים מותאמים אישית זמין במסמכי העזרה.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- אפשר לנסות את כוונת הפתיחה בסימולטור.
יכול להיות שאתם תוהים למה אתם לא רואים תוכן עשיר. הסיבה לכך היא שתוכן עשיר כמו צ'יפים של הצעות תלוי בשילוב. כדי לבצע את השלבים הבאים צריך חשבון לחיוב, אבל אפשר לדלג עליהם אם אין לכם חשבון כזה.
- בסרגל הצד השמאלי, לוחצים על Manage > Integrations (ניהול > שילובים).
- בוחרים באפשרות Dialogflow Messenger ולוחצים על Connect.
- בחלון הקופץ, לוחצים על Enable.
יוצג חלון קופץ נוסף, הפעם עם קוד 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
- לוחצים על 'אפשרויות מתקדמות' ומסמנים את האפשרות Fuzzy match. (אם האיות של שם הלהקה שגוי, יכול להיות שהוא עדיין יתאים לישות הנכונה.)
- בקטע 'אפשרויות מתקדמות', מסמנים גם את האפשרות צנזור ביומן. (אם האיות של שם הלהקה שגוי, השם יתוקן ביומן.)
- לוחצים על שמירה.
נדרשת ישות גם בשביל פריט ה-Merch:
- לוחצים על ניהול > סוגי ישויות
- לוחצים על + יצירה.
- השם המוצג:
Merch
- יישויות:
T-shirt
Longsleeve
(עם מילה נרדפת:Longsleeve shirt
)Tour Movie
Digital Album
(עם שם נרדף:MP3 Album
,MP3
)CD
(עם המילים הנרדפותDisc
,Physical CD
)
- לוחצים על שמירה.
נצטרך גם ישות לאלבום:
- לוחצים על ניהול > סוגי ישויות
- לוחצים על + יצירה.
- השם המוצג:
Album
- יישויות:
Live
Greatest Hits
(עם מילה נרדפת:Hits
)
- לוחצים על שמירה.
נצטרך גם ישות לגדלים של ביגוד:
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + Create.
- השם המוצג:
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. כוונות
Intent מסווג את הכוונה של משתמש הקצה בתורת שיחה אחת. ב-Dialogflow CX הם עכשיו הרבה יותר פשוטים, והם כבר לא אבן בניין של שליטה בשיחות. מערכת Dialogflow CX משתמשת בכוונות רק כדי להתאים את התשובות למה שהמשתמשים אומרים. ב-Dialogflow ES, צריך לקשר את כל הדברים לכוונה (פרמטרים, אירועים, השלמה וכו'). כוונות ב-Dialogflow CX מכילות רק משפטי אימון, ולכן אפשר לעשות בהן שימוש חוזר. הוא לא שולט יותר בשיחה. לכן, התהליך של יצירת Intent יהיה ישיר:
ביטויי האימון באובייקטים יכולים להשתמש בישויות כדי לחלץ קלט 'משתנה'. לכן מומלץ ליצור מראש את סוגי הישויות, כפי שעשינו בדף הקודם של השלבים בשיעור ה-Lab.
יצירת כוונות
לפני שנוכל לעצב את הדפים בתהליך, נתחיל בהכנת כל הכוונות.
- לוחצים על ניהול > כוונות.
- לוחצים על + 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
- לוחצים על שמירה.
- עכשיו נמשיך וניצור את כל הכוונות האחרות. אתם יכולים להשתמש בדמיון שלכם כדי לחשוב על עוד ביטויים לאימון. מומלץ להשתמש ב-10 ביטויים לפחות לכל כוונת שימוש כדי לכסות את הדרכים השונות שבהן משתמש יכול להפעיל את כוונת השימוש הזו. למטרות שיעור ה-Lab הזה, גם מספר קטן יותר של מודעות יהיה בסדר.
כמה דברים שכדאי לבדוק:
- שימו לב שכשמזינים את ביטוי האימון, Dialogflow CX מוסיף הערות לישויות באופן אוטומטי. אם לא, ייתכן שתצטרכו לעדכן את הישות (על ידי הוספת מילה נרדפת) או על ידי הוספת הערות ידניות לביטוי האימון.
- ביטויי אימון קצרים יותר: מערכת ה-NLU של Dialogflow יכולה לפעול גם עם ביטויי אימון קצרים יותר, ואנחנו מספקים כאן כמה דוגמאות.
- אימון יתר: שימוש ביותר מדי ביטויים לאימון של כוונת רכישה מסוימת עלול לגרום לאימון יתר ולתוצאה פחות רצויה. השיטה המומלצת היא להשתמש בבדיקות חוזרות ומצטברות ולהוסיף ביטויי אימון במקרה שאין התאמה לכוונה.
שם לתצוגה | ביטויים לאימון |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
עכשיו, אחרי שהרכיבים לשימוש חוזר (תהליכים, ישויות וכוונות) מוכנים, אפשר ליצור דפים ומטפלי מצבים כדי לשלב אותם.
6. דפים ומטפלי מצבים
אפשר לתאר שיחה ב-Dialogflow CX (סשן) ולהציג אותה כמכונה עם מצבים מוגבלים. ניקח לדוגמה מכונה אוטומטית לממכר מוצרים. אפשר ליצור מודל שלה כמכונה עם מצבים מוגבלים. יש לו את המצבים הבאים: 'המתנה למטבעות', 'בחירת ממתק', 'מתן ממתק', והוא עובר בין המצבים האלה בהתאם לקבוצת הקלט. לדוגמה, הכנסת מטבע מעבירה את מכונת הממתקים ממצב 'המתנה להכנסת מטבעות' למצב 'בחירת ממתקים'. דפים מאפשרים לנו ליצור מודלים של המצבים האלה לסוכן וירטואלי של Dialogflow CX.
כשמשתמש קצה מקיים אינטראקציה עם Dialogflow CX בשיחה, השיחה עוברת מדף לדף כך שבכל רגע נתון, דף אחד בדיוק הוא הדף הנוכחי, הדף הנוכחי נחשב פעיל והתהליך המשויך לדף הזה נחשב פעיל.
לכל זרימה אתם מגדירים דפים רבים, שבהם הדפים המשולבים יכולים לטפל בשיחה שלמה בנושאים שבהם התהליך נועד. לכל תהליך יש דף התחלה מיוחד. כשתהליך הופך לפעיל בפעם הראשונה, דף ההתחלה הופך לדף הנוכחי. בכל תור בשיחת הצ'אט, הדף הנוכחי יישאר ללא שינוי או יועבר לדף אחר. כך תוכלו ליצור סוכני תמיכה גדולים יותר עם הרבה דפים ומספר סבבים של שיחה.
דפים מכילים מילויים (תיבות דו-שיח של ערכים סטטיים ו/או webhooks), פרמטרים ורכיבי handler של מצבים. השליטה בשיחה מתבצעת באמצעות טיפולי מצבים, שמאפשרים ליצור נתיבי מעבר שונים כדי לעבור לדף אחר של Dialogflow CX, כולל הפיכת הנתיבים לתנאי (לצורך הרחבת השיחות).
המצב של שיחה נקבע על ידי טיפול במעברים בין דפים עם שלושה סוגי מסלולים:
- מסלולי כוונת השימוש: כשצריך להתאים כוונת שימוש (למשל, שינוי דף על סמך מה שמשתמש הקצה אומר). (קווים כחולים בתרשים החזותי).
- נתיבים של תנאים: מתי צריך לבדוק תנאי (למשל, שינוי דף על סמך פרמטרים מסוימים שמאוחסנים בסשן) (קווים כתומים בתרשים החזותי).
- גורמים מטפלים באירועים: כאשר צריך לטפל באירוע מסוים חלופי (למשל, טיפול ללא קלט או ללא התאמה, כדי להבחין בין משתמש הקצה למסלול של אובייקט Intent או תנאי) (קווים ירוקים בתרשים החזותי).
משפטי השיחה (כלומר התוכן או התשובה שמוחזרים למשתמש) מוגדרים על ידי השלמה, שיכולה להיות סטטית או דינמית:
- מילוי סטטי: כשמתקבלת תשובה סטטית של מילוי
- מילוי דינמי של מילוי הזמנות: כשנשלחת קריאה ל-webhook של מילוי הבקשות כדי לקבל תשובות דינמיות
בשביל הרובוט שלנו לקמעונאות, נוצר כמה מסלולי כוונת שימוש ונציע כמה תשובות של מילוי נתונים סטטיים, שיוצגו למשתמש ברגע שהדף יופעל. בהמשך ניצור פרמטרים עם מסלולים לתנאים כדי לאסוף את המידע הדרוש כדי לבצע הזמנת מרצ'נדייז.
מסלולי כוונה (Intent) לדפים
יצירת הדפים בתהליך ההתחלה שמוגדר כברירת מחדל
תרשים תהליך של תהליך ההתחלה שמוגדר כברירת מחדל:
נלחץ עליו יחד:
- לוחצים על Build (פיתוח) > Default Start Flow (תהליך התחלה ברירת המחדל).
- לוחצים על דף הבית.
- לוחצים על הסמל + לצד מסלולים.
- מוסיפים את המאפיין redirect.artists.overview.
- גוללים למטה אל מעבר ועוברים לתהליך קטלוג.
- לוחצים על שמירה.
- חוזרים על השלבים שלמעלה עבור
redirect.product.overview
ו-11 השורות האחרות בטבלה הזו:
דף (במהלך צפייה) | מסלולים > כוונה | Routes (מסלולים) > Transition To (מעבר אל) |
התחלה |
| - |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| דף: סיום הסשן |
תהליך ההתחלה שמוגדר כברירת מחדל יפעל כמו תפריט אפשרויות כשמתקשרים למוקדי שירות. אבל בסוכן הווירטואלי הזה הוא אומן לפי שפה טבעית, והביטויים לאימון הם בכוונות. לכן האינטראקציה מתבססת על שיחה ולא על אפשרויות 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?"
נתחיל בקישור הדפים.
- לוחצים על Build (פיתוח) > Catalog (קטלוג).
- לוחצים על דף הבית.
- לוחצים על הסמל + לצד מסלולים.
- הוספת redirect.artists.overview
- גוללים למטה לקטע Transition, בוחרים באפשרות Page ובוחרים באפשרות: + new Page
- נותנים שם לדף:
Artist Overview
ולוחצים על שמירה.
עכשיו נמשיך בתהליך:
- אפשר לחזור על השלבים הקודמים עם הדפים, הכוונות והביצועים הבאים. השתלטות על הטבלה הזו. דף – הדף שתבחרו בתהליך. מסלולים > מעבר אל – התהליך או הדף החדשים שתיצרו ותעבירו אליהם את המשתמשים.
דף (במהלך צפייה) | מסלולים > כוונה | Routes (מסלולים) > Transition To (מעבר אל) |
תחילת הקטלוג |
| סקירה כללית על האומן/ית |
תחילת הקטלוג |
| מוצר |
תחילת הקטלוג |
| סקירה כללית על המוצר |
תחילת הקטלוג |
| סקירה כללית על המוצר |
תחילת הקטלוג |
| חולצות |
תחילת הקטלוג |
| מוזיקה |
תחילת הקטלוג |
| סיום הסשן |
תחילת הקטלוג |
| סיום תהליך העבודה |
סקירה כללית על האומן/ית |
| סקירה כללית על המוצר |
עכשיו נמשיך ונוסיף עוד מילוי הזמנות סטטיות.
- בתהליך ניהול הקטלוג, לוחצים על הדף Artist Overview.
- לוחצים על Edit fulfillment (עריכת מילוי) בקטע Entry fulfillment (מילוי של פרטי כניסה).
- משתמשים בהשלמות הסטטיות הבאות (Agent says):
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- לוחצים על שמירה.
- בתהליך העבודה בקטגוריה, לוחצים על הדף סקירה כללית של המוצר.
- לוחצים על Edit fulfillment (עריכת מילוי) בקטע Entry fulfillment (מילוי של פרטי כניסה).
- צריך להשתמש במילוי האוטומטי הבא (מספר הנציג):
We sell shirts, music or the tour movie.
- לוחצים על שמירה.
פרמטרים של דפים
פרמטרים משמשים לתיעוד ולהפניה לערכים שסופקו על ידי משתמש הקצה במהלך סשן. לכל פרמטר יש שם וסוג ישות. @Artist
ו-@Merch
הם הפרמטרים המינימליים שאנחנו צריכים לאסוף כדי לבצע הזמנה של מרצ'נדייז. אם רוצים להדפיס חולצות או חולצות ארוכות, צריך גם לאסוף את השדה @ShirtSize
. אם רוצים להזמין מוזיקה, צריך גם שם של @Carrier
ו-@Album
.
צריך לסמן את הפרמטרים האלה כחובה. כשהבקשה תופיע, כדאי לספק הנחיות מותאמות אישית כדי לזכור את משתמש הקצה, ולספק את התשובות הנכונות כדי שניתן יהיה לאסוף את הפרמטרים האלה. יש כמה מנגנונים ב-Dialogflow CX שיכולים לעזור לכם בכך.
לדוגמה, אפשר לספק הודעות סטטיות של מילוי הזמנות בקטע פרמטר. אם הפרמטר נדרש, יוצגו מועדי מילוי של הפרמטרים האלה. הודעות התגובה האלה יתווספו לתור התשובות. כשתור הנציג, אפשר (ולפעמים רצוי) להפעיל מספר מילויים, וכל אחד מהם עשוי ליצור הודעת תשובה. התשובות האלה נשמרות ב-Dialogflow בתור לתגובות. מידע נוסף על מחזור החיים של הדף ועל הסדר שבו ההשלמות האלה יתווספו לתור התשובות זמין במסמכי העזרה של דפי Dialogflow CX.
יצירת הפרמטרים בדף הסקירה הכללית של האומן
נגדיר כמה פרמטרים של דף:
- בתהליך Catalog, לוחצים על הדף Artist Overview.
- לוחצים על + בבלוק Parameters. מוסיפים את הפרמטר artist:
- השם המוצג:
artist
- סוג הישות:
@Artist
- חובה: סימון
- השמטת יומן: בדיקה
- עכשיו נוסיף כמה הודעות אישיות להשלמת הזמנות עם פרמטרים מותאמים אישית. אם הפרמטר artist עדיין לא נאסף על ידי הסוכן הווירטואלי, משתמש הקצה יקבל את התשובה הבאה של הנציג לתור התגובות:
From which of these artists would you like to order merchandise?
- מוסיפים אפשרות שנייה לדיאלוג שמציגה צ'יפים עשירים של הצעות. לוחצים על הוספת אפשרות של תיבת דו-שיח ומשתמשים בקוד הבא (ב-JSON):
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
אפשר לטפל בהנחיות שונות למילוי חלופי על סמך מספר הניסיונות של משתמש הקצה להשיב להנחיות האלה. אפשר לעשות זאת באמצעות גורמים מטפלים באירועים של פרמטרים. יש טיפולים מובנים שונים לאירועים שאפשר לבחור מביניהם, כמו פרמטרים לא חוקיים, הודעות ארוכות מדי, אין קלט, אין קלט בניסיון הראשון, ניסיון שני או אין התאמה. ההבדל בין 'ללא קלט' לבין 'ללא התאמה' הוא שבמקרה של 'ללא קלט', המשתמש מעולם לא סיפק תשובה, ואילו במקרה של 'ללא התאמה', המשתמש אכן סיפק תשובה אבל ל-Dialogflow CX לא הייתה אפשרות להתאים אותה לדף.
- גוללים למטה לקטע גורמים שמטפלים באירועים של בקשה חוזרת.
- לוחצים על Add event 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?
- לוחצים על שמירה.
- לוחצים על Add event 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 וכותבים את הודעות המילוי הבאות:
$session.params.artist, great choice! Rock on!
You want to rock with $session.params.artist merchandise. Awesome!
- כשהתנאי מתקיים, צריך לעבור לדף סקירה כללית של המוצר. גוללים למטה לקטע Transition ומשתמשים בדף הבא:
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?
- עומס מותאם אישית:
{
"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"
}
]
]
}
- יוצרים את הפרמטר
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"
}
]
}
]
]
}
- יוצרים מסלול שיעבור לדף Product כשהערך
artist
מסופק והפריטmerch
מסופק.
- תנאי:
- התאמה לכל הכלל (וגם)
- ביטוי:
$session.params.artist != null
- ביטוי:
$session.params.merch != null
- מילוי הזמנה:
Alright! $session.params.merch of $session.params.artist, let's go!
- מעבר: דף:
Product
- יצירת מסלול כשהמשתמש אומר "חולצות"
- כוונה: redirect.shirts
- מעבר: דף:
Shirts
- יצירת מסלול למקרה שהמשתמש אומר "מוזיקה"
- כוונה: redirect.music
- מעבר: דף:
Music
- יצירת מסלול למקרה שהמשתמש יבקש מידע על מחירים
- כוונה: redirect.price
- מעבר: יצירת דף חדש:
Price
אחרי שתגדירו את ההגדרות שלמעלה, תופיע תצוגה חזותית שדומה לתמונה שבהמשך. שימו לב שבתרשים, מסלולי הכוונה מסומנים בכחול ומסלולי התנאים מסומנים בכתום. כאשר הגורמים המטפלים באירועים אינם מוצגים, הם ירוקים, וכשסוגי נתיבים מרובים עוברים לדף, הקו יהיה אפור.
עד עכשיו למדתם איך ליצור תהליכים, ישויות, כוונות ודפים עם מפעילי מצב כמו מסלולי כוונות ומסלולים מותנים שמבוססים על פרמטרים. בהמשך שיעור ה-Lab הזה נשתמש בהסתעפות מותנית במימוש, כדי לספק דיאלוגים שונים בהתאם לקלט.
אפשר להשתמש בהגדרות הבאות כדי לסיים את התהליך של הסוכן הווירטואלי שלנו.
בדף 'חולצות':
- יוצרים את ההגדרות הבאות בדף Shirts:
- מילוי הזמנות:
Do you want a longsleeve or a t-shirt?
- נתוני עומס מותאמים אישית של השלמת הטופס:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.price
עם מעבר לדףPrice
- יוצרים את הפרמטר הבא:
- פרמטר:
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"
}
]
}
]
]
}
- לוחצים על מילוי הערך של הערך ומגללים אל הגדרות קבועות מראש של פרמטרים. בכל פעם שהדף Shirts (חולצות) יהפוך לפעיל, פרמטר הקטגוריה יוגדר כ-shirts:
פרמטר | ערך |
|
|
- מוסיפים נתיב מותנה:
- התאמה לכלל אחד לפחות (או)
- ביטוי:
$session.params.merch = "T-shirt"
- ביטוי:
$session.params.merch = "Longsleeve"
- מעבר לדף חדש:
Shirt Size
דף המחיר:
ההודעות לגבי המחירים יהיו בהתאם לפריט המרצ'נדייז או לקטגוריה שבחרתם (מוזיקה או חולצות), ולכן נתקן את החלק הזה בהמשך שיעור ה-Lab. בשלב הזה, מספיק להזין placeholder.
- יוצרים את ההגדרות הבאות בדף Price:
- מילוי הבקשה:
PRICE TODO
אתם יכולים לבקש את המחיר במקומות שונים בשיחה, לכן בכל מקרה אמורים להופיע תשובות ולחזור לחלק הקודם של תיבת הדו-שיח כדי להמשיך בהזמנה. יש 5 מקומות בעץ הדיאלוג שבהם אפשר לקבל מידע על מחירים. (חולצה, גודל חולצה, מוזיקה, ספק וגם ישירות דרך נתיב כוונה), לכן נצטרך כמה מסלולים מותנים כדי לחזור אחורה:
- מוסיפים מסלול מותנה:
- התאמה לכל כלל (AND)
- ביטוי:
$session.params.category = "shirts"
- ביטוי:
$session.params.merch = "null"
- מעבר לדף חדש:
Shirts
- מוסיפים נתיב מותנה:
- התאמה לכל הכלל (וגם)
- ביטוי:
$session.params.category = "shirts"
- ביטוי:
$session.params.size = "null"
- מעבר לדף חדש:
Shirt Size
- הוספת נתיב מותנה:
- התאמה לכל כלל (AND)
- ביטוי:
$session.params.category = "music"
- ביטוי:
$session.params.album = "null"
- מעבר לדף חדש:
Music
- מוסיפים נתיב מותנה:
- התאמה לכל כלל (AND)
- ביטוי:
$session.params.category = "music"
- ביטוי:
$session.params.merch = "null"
- מעבר לדף חדש:
Carrier
- מוסיפים נתיב מותנה:
- התאמה לכל כלל (AND)
- ביטוי:
$session.params.category = "null"
- מעבר לדף חדש:
Product Overview
דף המידה של החולצה:
- יוצרים את ההגדרות הבאות בדף 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"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.price
עם מעבר לדףPrice
. - יוצרים את הפרמטר הבא:
- פרמטר:
shirtsize
– סוג ישות:@ShirtSize
–Required
,Redact In Log
- פרמטר > טיפול באירוע >
No-match default
- פרמטר > השלמה של טיפול באירוע:
Please tell me the shirt size, such as XL.
- פרמטר > טיפול באירוע – נתוני עומס מותאמים אישית:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- פרמטר > טיפול באירוע >
No-input default
- פרמטר > השלמה של טיפול באירוע:
I couldn't understand the shirt size. What size do you want?
- 'פרמטר' > 'מטען ייעודי (payload) מותאם אישית של 'טיפול באירועים':
{
"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?
- נתוני עומס מותאמים אישית של השלמת הטופס:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.price
עם מעבר לדף:Price
. - יוצרים את הפרמטר הבא:
- פרמטר:
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"
}
]
}
]
]
}
- לוחצים על מילוי הערך של הרשומה וגוללים למטה אל הגדרות קבועות מראש של פרמטרים. בכל פעם שדף המוזיקה יהפוך לפעיל, פרמטר הקטגוריה יוגדר כ-music:
פרמטר | ערך |
|
|
- מוסיפים נתיב מותנה:
- התאמה לכל הכלל (וגם)
- ביטוי:
$page.params.album != "null"
- מעבר לדף:
Carrier
דף הספק:
- יוצרים את ההגדרות הבאות בדף Carrier:
- מילוי הבקשה:
Do you want this album on CD or MP3?
- נתוני עומס מותאמים אישית של השלמת הטופס:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- יוצרים מסלול כוונה:
redirect.price
שמעבר אליו הוא לעמודPrice
. - יוצרים את הפרמטר הבא:
- פרמטר:
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"
}
]
}
]
]
}
- מוסיפים נתיב מותנה:
- התאמה לכל כלל (AND)
- ביטוי:
$page.params.merch != "null"
- מעבר לדף:
Product
דף המוצר:
- יוצרים את הפרמטרים הבאים:
Parameter Displayname | סוג ישות הפרמטר | בדיקות |
|
| חובה, מחיקת פרטים מהיומן |
|
| חובה, מחיקת פרטים מהיומן |
- הפרמטר 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.
- גם לפרמטר 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?
המסלול הבא יעבור לדף האישור כשהאומן מוכר והמשתמש יבחר ב'סרט סיור'.
- הוספת נתיב מותנה:
- התאמה לכל הכלל (וגם)
- ביטוי:
$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
בשלב הבא נוסיף כמה תנאים מתקדמים עם הנחיות לזיהוי מידע חסר. המסלול הבא יועבר חזרה לדף המוזיקה כשהאומן ידוע והמשתמש יבחר באפשרות 'CD' או 'אלבום דיגיטלי', אבל לא יבחר את שם האלבום.
- מוסיפים נתיב מותנה:
- ביטוי מותאם אישית:
$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, כשהתשובות המותנות נקבעו בקצה העורפי. דוגמה לדף כזה:
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 הוא סרט סיור). בשדה האישור יוצגו השדות הבאים: אמן, מרצ'נדייז ומחיר.
- לוחצים על הדף Confirmation.
- לוחצים על 'עריכת מילוי' > 'תשובות של נציגים' > האפשרות הוספת שיחה > תגובה מותנית:
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.order
transitions to:Order Process
Flow.decline.proceed.order
transitions 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.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
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.end
intent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
- 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.
- 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 Googler
I am not a fan of G's N' Roses
I 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-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:
- 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-default
event 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!
- Add Dialogue Option (הוספת אפשרות לדיאלוג) > Text (טקסט):
Here's the order number: ABCD123
. - הוספת אפשרות לדיאלוג > טקסט:
Have a good day!
- מעבר:
End Session
- בוחרים את הדף Start ולוחצים על כוונת הרכישה
redirect.end
. צריך ליצור את מילוי ההזמנה הבא:Thank you for contacting G-Records! Have a nice day!
- בוחרים את הדף Start ולוחצים על כוונת הרכישה
redirect.home
. יוצרים את הגדרת ברירת המחדל הבאה של הפרמטר:restart = true
מדהים! עכשיו יש לנו צ'אטבוט פעיל לחלוטין של קמעונאי בעולם האמיתי! בשיעור ה-Lab הבא נבדוק את הביצועים של הנציג הווירטואלי.
9. בדיקת הנציג הווירטואלי
אפשר להשתמש בסימולטור המובנה כדי לבדוק את הדיאלוגים של הנציג הווירטואלי. היתרון של בדיקת התהליכים בסימולטור הוא שתראו סקירה כללית יפה של התהליכים, הדפים, הפרמטרים והאירועים (DTMF) שהסימולטור אסף במהלך ההליכה בתהליכים. כך קל יותר לבדוק את הקוד מאשר לבדוק אותו ישירות בשילוב, כי סוגי המידע האלה מוסתרים ממשתמש הקצה. אפשר אפילו ליצור מקרי בדיקה, לשמור אותם ולהשתמש בהם שוב. זה הגיוני מאוד כשאתם שומרים או עורכים את התהליכים לאורך זמן, ואתם רוצים לוודא שאף אחד מהשינויים לא יפגע בעבודה הקודמת שלכם.
אפשר גם לייצא ולייבא תרחישי בדיקה שנוצרו בעבר, על ידי שמירת הבדיקות ב-Google Cloud Storage או באופן מקומי. ייצוא בדיקה יגרום להורדה של קובץ blob. מידע נוסף על הסימולטור ועל תרחישים לדוגמה זמין במסמכי העזרה של הסימולטור / תרחישים לדוגמה.
לפני שנוצר כמה תרחישי בדיקה, נשלים קודם את שאר הרכיבים של הנציג הווירטואלי:
יצירת תהליך שירות הלקוחות
- עוברים לתהליך Customer Care ויוצרים את מעברי הכוונה הבאים:
דף (בזרימה) | מסלולים > כוונה | מסלולים > מעבר אל |
תחילת שירות Customer Care |
| משלוח |
תחילת שירות Customer Care |
| החזר כספי |
תחילת העבודה עם Customer Care |
| החלפה |
תחילת העבודה עם Customer Care |
| סיום תהליך העבודה |
תחילת העבודה עם Customer Care |
| סיום הסשן |
- יוצרים את מועדי ההזמנות הבאים בדף משלוח:
Shipping physical merchandise items can take up to 2 weeks.
Is there anything else I can help you with?
- יוצרים את השלמות הרשומות הבאות לדף 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?
- יוצרים את מילוי ההזמנות הבאות עבור הדף החלפה:
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?
- בוחרים את הדף Start ולוחצים על כוונת הרכישה
redirect.end
. יוצרים את ההשלמה הבאה:Thank you for contacting G-Records! Have a nice day!
- בוחרים את הדף Start ולוחצים על כוונת הרכישה
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
- לוחצים על שמירה.
נמשיך ליצור עוד תרחישי בדיקה.
- קודם צריך לנקות את תיבת הדו-שיח הנוכחית בלחיצה על סמל האיפוס (פח האשפה).
- יוצרים את תרחישי הבדיקה הבאים:
קונים את חולצת הטישרט של 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
- תיאור: בדיקת פרטי מחיר בנקודות שונות בתיבת הדו-שיח
בדיקת תרחישי בדיקה שהוקלטו מראש
- בתפריט הראשי של Dialogflow שנמצא משמאל, בוחרים באפשרות Manage (ניהול) > Test Cases.
- בוחרים את כל תרחישי הבדיקה ולוחצים על הלחצן הפעלה שמעל הטבלה.
Dialogflow CX יריץ את כל מקרי הבדיקה שנבחרו להקלטה שנשמרה בתור 'מקרה בדיקה של הזהב'. אם התוצאות זהות לאופן שבו שמרתם אותן, הבדיקות יעברו בהצלחה. - אם משהו השתנה בתהליכים, כמו דפים שלא הוגדרו בצורה נכונה או כוונות שהובילו אתכם לדפים הלא נכונים, הבדיקות ייכשל.
- בסימולטור, שואלים את השאלה הבאה:
How long will shipping take?
- מציינים את התוצאה ושומרים את תיקיית הבדיקה בתור
Shipping
עם התג:#shipping
. - עוברים לחלונית Manage (ניהול) > Test Cases (תרחישים לבדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של התצוגה, כדי להריץ רק את תרחיש הבדיקה
Shipping
.
הבדיקה הזו אמורה לעבור.
- חוזרים לתהליך שירות הלקוחות, בוחרים את הדף Start ולוחצים על הכותרת Routes.
יוצג מסך עם רשת שבה מוצגים כל המסלולים.
- מסירים את
redirect.shipping.info route
- עוברים לחלונית Manage (ניהול) > Test Cases (תרחישים לבדיקה) ולוחצים על הלחצן Run (הפעלה) בפינה השמאלית העליונה של התצוגה, כדי להריץ רק את תרחיש הבדיקה
Shipping
.
הבדיקה הזו אמורה להיכשל.
- אפשר ללחוץ על 'הבדיקה שנכשלה' כדי לראות את פרטי הכשל.
במקרה הזה, הבדיקה נכשלה עם הודעת השגיאה הבאה:
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
הסיבה לכך היא שהדף כבר לא קיים בתהליך. ציפינו לדף Shipping
, אבל במקום זאת לא עזבנו את הדף Start
. (או שמשתמשי הקצה יקבלו הודעת חלופית).
במילים אחרות, זוהי בקשה שלא התקבלה, תוצאת בדיקה של False Negative. הבדיקה נכשלה. ציפינו לדף משלוחים אבל לא קורה דבר או שהוצגה הודעה חלופית.
- חוזרים לתהליך Customer Care ומוסיפים את
redirect.shipping.info
כמסלול Intent, לדף ההתחלה. אל תשכחו לעבור לדף Shipping (משלוחים) וללחוץ על Save (שמירה). - מתעדים בסימולטור את תרחיש הבדיקה הבא:
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
. - חוזרים אל ניהול > תרחישי בדיקה, בוחרים את תרחיש הבדיקה החלפה תמורת החזר כספי ומריצים אותו.
הבדיקה האחרונה נכשלה עם הודעת השגיאה הבאה:
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) מופעל כשחבילת בדיקות מסוימת פועלת. לסוכן וירטואלי עם כיסוי בדיקה גבוה, שנמדד כאחוז, בוצעו יותר מהדיאלוגים שלו במהלך הבדיקה. כתוצאה מכך, יש לו סיכוי נמוך יותר להכיל באגים שלא זוהו (כמו בקשות שלא הובנו לידי הבנה) בהשוואה לסוכן וירטואלי עם כיסוי בדיקה נמוך.
- כדי להציג דוח של כיסוי הבדיקה לכל תרחישי הבדיקה, לוחצים על כיסוי.
- לוחצים על הכרטיסייה Transitions (מעברים).
כך תוכלו לראות את הכיסוי של הבדיקה בכל מעברי הדפים.
- לוחצים על הכרטיסייה Intents.
כך תוכלו לראות את כיסוי הבדיקה של כל הכוונות.
מזל טוב, עכשיו יש לכם דוגמה מלאה לשימוש בעולם האמיתי בבניית בוט של קמעונאי, וגם בדקתם אותו. נעבור לדף הבא של ה-Lab כדי לקרוא את הסיכום ולמצוא כמה מקורות מידע שימושיים.
10. סיכום
Dialogflow CX היא פלטפורמת AI בממשק שיחה (CAIP) ליצירת נציגים וירטואליים, כמו צ'אט או בוטים קוליים. בעזרת Dialogflow CX, הצוות שלכם יכול לזרז את תהליך היצירה של חוויות שיחה ברמת הארגון באמצעות כלים חזותיים ליצירת בוטים, כוונות לשימוש חוזר ויכולת לטפל בשיחות עם כמה סבבים.
ב-Codelab הזה למדת איך לפתח סוכן קמעונאי וירטואלי בעולם האמיתי. עסקנו במושגים הבאים:
- זרימות
- פרמטרים, ישויות מותאמות אישית וישויות מערכת
- iWork Pages
- גורמי handler של מדינות, כמו נתיבי Intent ונתיבי תנאים
- הודעות סטטיות למילוי הזמנות ותגובות מותנות
- כוונות רכישה חלופיות
- סימולטור, מקרי בדיקה וכיסוי
קובצי עזר
למידע נוסף על Dialogflow CX, כדאי לעיין בבלוגים ובמסמכים הבאים.