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 am 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 יש את המושג 'סוכנים גדולים', שדומים במידה מסוימת ל-Flows. עם זאת, תשתמשו בתהליכים הרבה יותר לעיתים קרובות.
בהמשך הסדנה הזו נשתמש במפעילי מצב שיכולים לסיים תהליך (כדי שהוא יחזור לתהליך הבא או הקודם), או שתוכלו לסיים את הסשן המלא של הסוכן.
נתחיל ליצור תהליכים.
יצירת תהליכים
- ב-Dialogflow CX, לוחצים על הסמל + > Create flow.
- מציינים את השם:
Catalog
ומקישים על Enter.
תהליך העבודה הראשון Catalog נוצר. עכשיו יוצרים את שאר התהליכים:
Order Process
My Order
Customer Care
בהמשך שיעור ה-Lab הזה נגדיר טיפול במצבי דף, כדי לוודא שבסופו של דבר התצוגה החזותית תיראה כך:
סימולטור
בצד שמאל של מסוף Dialogflow CX אפשר לבדוק את הסוכן הווירטואלי באמצעות הסימולטור המובנה. אתם יכולים לבדוק את השיחה מההתחלה או מתהליך מסוים.
- לוחצים על הלחצן Test Agent (בדיקת סוכן) בפינה השמאלית העליונה של המסך.
- בשדה 'שיחה עם נציג', כותבים:
Hello
הסוכן הווירטואלי יגיב בהודעת פתיחה שמוגדרת כברירת מחדל: שלום! איך אוכל לעזור?
נשנה את הודעת הפתיחה שמוגדרת כברירת מחדל.
תהליך התחלה שמוגדר כברירת מחדל
נתחיל ביצירת ניתוב כוונה שיופעל אחרי שתברכו את הנציג הווירטואלי.
- בסרגל הצד Build > Flows (פיתוח > תהליכים), לוחצים על Default Start Flow (תהליך ברירת המחדל להתחלה) ובוחרים את צומת העץ Start (התחלה).
הדף התחלה ייפתח. הדף 'דף הבית' נבחר באופן אוטומטי בקטע פיתוח > דפים בסרגל הצד.
- בקטע התחלה > מסלולים, לוחצים על Default Welcome 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 (מטען נתונים מותאם אישית) ומשתמשים בקטע הקוד שבהמשך.
- משתמשים בקטע הקוד הבא כמטען מותאם אישית, ולוחצים על שמירה.
מידע נוסף על עומסי נתונים מותאמים אישית זמין במסמכי העזרה.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- אפשר לנסות את כוונת הפתיחה בסימולטור.
יכול להיות שאתם תוהים למה אתם לא רואים תוכן עשיר. הסיבה לכך היא שתוכן עשיר כמו צ'יפים של הצעות תלוי בשילוב. כדי לבצע את השלבים הבאים צריך חשבון לחיוב, אבל אפשר לדלג עליהם אם אין לכם חשבון כזה.
- בסרגל הצד ימין, לוחצים על ניהול > שילובים.
- בוחרים באפשרות Dialogflow Messenger ולוחצים על Connect (קישור).
- בחלון הקופץ, לוחצים על Enable.
תוצג הודעה קופצת נוספת, הפעם עם קוד JavaScript לשילוב שאפשר להדביק באתר כדי לשלב את הרכיב של Dialogflow Messenger באתר. מכיוון שעדיין אין לנו אתר, נבדוק את הנציג הווירטואלי ישירות בכלי.
- לוחצים על הקישור לניסיון.
- לוחצים על סמל ה-chatbot בפינה השמאלית התחתונה כדי לפתוח את חלון הצ'אט. כותבים
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-shirt
Longsleeve
(עם מילה נרדפת:Longsleeve shirt
)Tour Movie
Digital Album
(עם שם נרדף:MP3 Album
,MP3
)CD
(עם המילים הנרדפותDisc
, Physical CD
)
- לוחצים על שמירה.
נצטרך גם ישות לאלבום:
- לוחצים על ניהול > סוגי ישויות.
- לוחצים על + יצירה.
- השם המוצג:
Album
- יישויות:
Live
Greatest 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, צריך לקשר את כל הדברים לכוונה (פרמטרים, אירועים, השלמה וכו'). כוונות ב-Dialogflow CX מכילות רק משפטי אימון, ולכן אפשר לעשות בהן שימוש חוזר. הוא לא שולט יותר בשיחה. כך נראה התהליך של יצירת כוונות:
ביטויי האימון בכוונות יכולים להשתמש בישויות כדי לחלץ קלט של'משתנה'. לכן מומלץ ליצור מראש את סוגי הישויות, כפי שעשינו בדף הקודם של שלבי המעבדה.
יצירת כוונות
לפני שנוכל לעצב את הדפים בתהליך, נתחיל בהכנת כל הכוונות.
- לוחצים על ניהול > כוונות.
- לוחצים על + 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), פרמטרים ומפעילי מצב. השליטה בשיחה מתבצעת באמצעות טיפולי מצבים, שמאפשרים ליצור נתיבי מעבר שונים כדי לעבור לדף אחר של Dialogflow CX, כולל הפיכת הנתיבים לתנאי (לצורך הרחבת השיחות).
כדי לשלוט במצב של שיחה, מטפלים במעברים בין דפים באמצעות שלושה סוגים שונים של מסלולים:
- מסלולי כוונת השימוש: כשצריך להתאים כוונת שימוש (למשל, שינוי דף על סמך מה שמשתמש הקצה אומר). (קווים כחולים בתרשים החזותי).
- מסלולי תנאים: כשצריך לבדוק תנאי (למשל, שינוי דף על סמך פרמטרים מסוימים ששמורים בסשן) (קווים כתומים בתרשים החזותי).
- גורמים מטפלים באירועים: כשצריך לטפל באירוע חלופי מסוים (למשל, טיפול במקרים של ללא קלט, ללא התאמה, כדי להסיר את הספק של משתמש הקצה לגבי נתיב הכוונה או נתיב התנאי) (קווים ירוקים בתרשים החזותי).
משפטי השיחה (כלומר התוכן או התשובה שמוחזרים למשתמש) מוגדרים על ידי השלמה, שיכולה להיות סטטית או דינמית:
- מילוי סטטי: כשמתקבלת תשובה סטטית של מילוי
- מילוי דינמי: כשמתבצעת קריאה ל-webhook של מילוי להצגת תשובות דינמיות
בשביל הרובוט שלנו לקמעונאות, נוצר כמה מסלולי כוונת שימוש ונציע כמה תשובות למילוי נתונים סטטיים, שיוצגו למשתמש ברגע שהדף יופעל. בהמשך ניצור פרמטרים עם מסלולי תנאים כדי לאסוף את המידע הדרוש להזמנת מרצ'נדייז.
מסלולי כוונה (Intent) לדפים
יצירת הדפים בתהליך ההתחלה שמוגדר כברירת מחדל
תרשים תהליך של תהליך ההתחלה שמוגדר כברירת מחדל:
נלחץ עליו יחד:
- לוחצים על Build (פיתוח) > Default Start Flow (תהליך התחלה ברירת המחדל).
- לוחצים על דף הבית.
- לוחצים על הסמל + לצד מסלולים.
- הוספת redirect.artists.overview
- גוללים למטה לקטע Transition ומעברים לתהליך Catalog.
- לוחצים על שמירה.
- חוזרים על השלבים שלמעלה עבור
redirect.product.overview
ו-11 השורות האחרות בטבלה הזו:
דף (במהלך צפייה) | Routes > Intent | Routes (מסלולים) > Transition To (מעבר אל) |
התחלה |
| - |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: קטלוג |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: שירות לקוחות |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| תהליך: ההזמנה שלי |
התחלה |
| דף: סיום הסשן |
תהליך ההתחלה שמוגדר כברירת מחדל יפעל כמו תפריט אפשרויות כשמתקשרים למוקדי שירות. עם זאת, הנציג הווירטואלי הזה אומן באמצעות שפה טבעית, עם ביטויי האימון בכוונות (intents). לכן האינטראקציה מתבססת על שיחה ולא על אפשרויות 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 > Intent | Routes (מסלולים) > Transition To (מעבר אל) |
תחילת הקטלוג |
| סקירה כללית על האומן/ית |
תחילת הקטלוג |
| מוצר |
תחילת הקטלוג |
| סקירה כללית על המוצר |
תחילת הקטלוג |
| סקירה כללית על המוצר |
תחילת הקטלוג |
| חולצות |
תחילת הקטלוג |
| מוזיקה |
תחילת הקטלוג |
| סיום הסשן |
תחילת הקטלוג |
| סיום תהליך העבודה |
סקירה כללית על האומן/ית |
| סקירה כללית על המוצר |
עכשיו נמשיך ונוסיף עוד השלמות סטטיות.
- בתהליך העבודה בקטעים, לוחצים על הדף סקירה כללית של האומן.
- לוחצים על 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.
- משתמשים במילוי ההזמנה הסטטי הבא (Agent says):
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?
- מוסיפים אפשרות שנייה לדיאלוג שמציגה צ'יפים עשירים של הצעות. לוחצים על Add dialogue option ומשתמשים בקוד הזה (ב-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?
- עומס מותאם אישית:
{
"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
דף המחיר:
מאחר שההודעות לגבי המחירים יהיו תלויות בפריט או בקטגוריה של המרצ'נדייז שנבחרו (מוזיקה או חולצות), נתקן את החלק הזה בהמשך הסדנה. בשלב הזה, מספיק להזין placeholder.
- יוצרים את ההגדרות הבאות בדף Price:
- מילוי הבקשה:
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?
- נתוני עומס מותאמים אישית של השלמת הטופס:
{
"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?
- פרמטר > טיפול באירוע – נתונים מותאמים אישית של תגובה:
{
"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?
- פרמטר > טיפול באירוע – נתונים מותאמים אישית של תגובה:
{
"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?
- פרמטר > השלמה של טיפול באירוע: עומס נתונים מותאם אישית:
{
"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"
}
]
}
]
]
}
- מוסיפים נתיב מותנה:
- התאמה לכל הכלל (וגם)
- ביטוי:
$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
המסלול הבא יועבר לדף האישור כשהאמן ידוע והמשתמש יבחר באפשרות 'CD', וגם שם האלבום ייבחר.
- מוסיפים נתיב מותנה:
- ביטוי מותאם אישית:
$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
בחלק הבא של הסדנה נשתמש בהשלמות מותנות כדי להציג הודעות שונות בהתאם לקלט.
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()
)
נשליך את תהליך הקטלוג על ידי תיקון הדפים Confirmation ו-Price.
דף האישור:
עכשיו נבנה את דף האישור. הדרישות הן:
- אם merch הוא CD או אלבום דיגיטלי. בשדה האישור יוצגו השדות הבאים: artist, merch, album ו-price.
- אם merch הוא T-shirt או Longsleeve. בשדה האישור יוצגו השדות הבאים: artist, merch, size ו-price.
- אחרת (כלומר, אם merch הוא Tour Movie). בשדה האישור יוצגו השדות הבאים: אמן, מרצ'נדייז ומחיר.
- לוחצים על הדף 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!
- הוספת אפשרות לדיאלוג > טקסט:
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 ויוצרים את מעברי הכוונה הבאים:
דף (במהלך צפייה) | Routes > Intent | Routes (מסלולים) > Transition To (מעבר אל) |
תחילת העבודה עם Customer Care |
| משלוח |
תחילת העבודה עם Customer Care |
| החזר כספי |
תחילת העבודה עם Customer Care |
| החלפה |
תחילת העבודה עם Customer Care |
| סיום תהליך העבודה |
תחילת העבודה עם Customer Care |
| סיום הסשן |
- יוצרים את השלמות הנתונים הבאות לדף Shipping:
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 שמימין, בוחרים באפשרות ניהול > תרחישים לבדיקה.
- בוחרים את כל תרחישי הבדיקה ולוחצים על הלחצן הפעלה שמעל הטבלה.
מערכת 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. הבדיקה נכשלה. ציפינו לדף Shipping (משלוח), אבל לא קרה כלום או שמוצגת הודעת חלופית.
- חוזרים לתהליך שירות הלקוחות ומוסיפים את
redirect.shipping.info
כמסלול כוונה לדף Start. אל תשכחו לעבור לדף 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, היקף הבדיקה הוא מדד שמתאר את מידת הביצוע של הדיאלוג של הסוכן הווירטואלי (דפים וכוונות) כשמפעילים חבילת בדיקות מסוימת. לסוכן וירטואלי עם כיסוי בדיקה גבוה, שנמדד כאחוז, בוצעו יותר מהדיאלוגים שלו במהלך הבדיקה. כתוצאה מכך, יש לו סיכוי נמוך יותר להכיל באגים שלא זוהו (כמו בקשות שלא הובנו לידי הבנה) בהשוואה לסוכן וירטואלי עם כיסוי בדיקה נמוך.
- כדי להציג דוח של כיסוי הבדיקה לכל תרחישי הבדיקה, לוחצים על כיסוי.
- לוחצים על הכרטיסייה Transitions (מעברים).
כך תוכלו לראות את הכיסוי של הבדיקה בכל מעברי הדפים.
- לוחצים על הכרטיסייה Intents.
כך תוכלו לראות את כיסוי הבדיקה של כל הכוונות.
עכשיו כבר יצרתם ובדקתם דוגמה מלאה לשימוש בעולם האמיתי של בוט של קמעונאי. נעבור לדף הבא של ה-Lab כדי לקרוא את הסיכום ולמצוא כמה מקורות מידע שימושיים.
10. סיכום
Dialogflow CX היא פלטפורמת AI בממשק שיחה (CAIP) ליצירת סוכני וירטואליים כמו צ'אט בוטים או בוטים קוליים. בעזרת Dialogflow CX, הצוות שלכם יכול לזרז את תהליך היצירה של חוויות שיחה ברמת הארגון באמצעות כלים חזותיים ליצירת בוטים, כוונות לשימוש חוזר ויכולת לטפל בשיחות עם כמה סבבים.
בקודלאב הזה למדתם איך ליצור נציג וירטואלי לעסק קמעונאי בעולם האמיתי. התייחסנו למושגים הבאים:
- זרימות
- פרמטרים, ישויות מותאמות אישית וישויות מערכת
- iWork Pages
- מודולים לטיפול במצבים, כמו נתיבי כוונה ונתיבי תנאים
- הודעות סטטיות על השלמת הזמנה ותגובות מותנות
- כוונות רכישה חלופיות
- סימולטור, תרחישי בדיקה וכיסוי
קובצי עזר
למידע נוסף על Dialogflow CX, כדאי לעיין בבלוגים ובמסמכים הבאים.