בדף הזה נסביר איך מוסיפים ווידג'טים ורכיבי ממשק משתמש לכרטיסים, כדי שהמשתמשים יוכלו לקיים אינטראקציה עם אפליקציית Google Chat, למשל ללחוץ על לחצן או לשלוח מידע.
אפליקציות Chat יכולות להשתמש בממשקי Chat הבאים כדי ליצור כרטיסים אינטראקטיביים:
- הודעות שמכילות כרטיס אחד או יותר.
- דפי בית, שהוא כרטיס שמופיע בכרטיסייה דף הבית בצ'אטים אישיים באפליקציית Chat.
- Dialogs, שהם כרטיסים שנפתחים בחלון חדש מהודעות ומדפי בית.
כשמשתמשים מקיימים אינטראקציה עם כרטיסים, אפליקציות Chat יכולות להשתמש בנתונים שהן מקבלות כדי לעבד אותם ולספק תגובה בהתאם. מידע נוסף זמין במאמר איסוף ועיבוד מידע ממשתמשים ב-Google Chat.
בעזרת הכלי ליצירת כרטיסים תוכלו לעצב ממשקי משתמש ותכונות שליחת הודעות לאפליקציות Chat ולראות תצוגה מקדימה שלהן:
פתיחת הכלי ליצירת כרטיסיםדרישות מוקדמות
אפליקציית Google Chat שמופעלות בה תכונות אינטראקטיביות. כדי ליצור אפליקציית Chat אינטראקטיבית, צריך להשלים את אחד מהמדריכים למתחילים הבאים, בהתאם לארכיטקטורת האפליקציה שבה רוצים להשתמש:
- שירות HTTP באמצעות Google Cloud Functions
- Google Apps Script
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
הוספת לחצן
בווידג'ט ButtonList
מוצגת קבוצה של לחצנים. בלחצנים יכולים להופיע טקסט, סמל או גם טקסט וגם סמל. כל Button
תומך בפעולת OnClick
שמתרחשת כשמשתמשים לוחצים על הלחצן. לדוגמה:
- פתיחת היפר-קישור באמצעות
OpenLink
כדי לספק למשתמשים מידע נוסף. - להריץ
action
שמריצה פונקציה בהתאמה אישית, כמו קריאה ל-API.
מטעמי נגישות, הלחצנים תומכים בטקסט חלופי.
הוספת לחצן שמפעיל פונקציה מותאמת אישית
זהו כרטיס שמורכב מווידג'ט ButtonList
עם שני לחצנים.
לחיצה על לחצן אחד פותחת את התיעוד למפתחים של Google Chat בכרטיסייה חדשה. הלחצן השני מפעיל פונקציה בהתאמה אישית שנקראת goToView()
ומעביר את הפרמטר viewType="BIRD EYE VIEW"
.
הוספת לחצן בסגנון Material Design
בהמשך מוצגת קבוצה של לחצנים בסגנונות שונים של לחצנים בעיצוב חדשני תלת-ממדי.
כדי להחיל את הסגנון של Material Design, לא כוללים את המאפיין 'color'.
הוספת לחצן עם צבע בהתאמה אישית ולחצן מושבת
אפשר למנוע ממשתמשים ללחוץ על לחצן על ידי הגדרת "disabled": "true"
.
בתמונה הבאה מוצג כרטיס שמכיל ווידג'ט ButtonList
עם שני לחצנים. בלחצן אחד נעשה שימוש בשדה Color
כדי להתאים אישית את צבע הרקע של הלחצן. הלחצן השני מושבת באמצעות השדה Disabled
, וכך המשתמש לא יכול ללחוץ על הלחצן ולהפעיל את הפונקציה.
הוספת לחצן עם סמל
בתמונה הבאה מוצג כרטיס שמכיל ווידג'ט ButtonList
עם שני ווידג'טים של סמלים Button
. לחצן אחד משתמש בשדה knownIcon
כדי להציג את סמל האימייל המובנה של Google Chat. הלחצן השני משתמש בשדה iconUrl
כדי להציג ווידג'ט של סמל בהתאמה אישית.
הוספת לחצן עם סמל וטקסט
בתמונה הבאה מוצג כרטיס שכולל ווידג'ט של ButtonList
שמבקש מהמשתמש לשלוח אימייל. בלחצן הראשון מוצג סמל אימייל ובלחצן השני מוצג טקסט. המשתמש יכול ללחוץ על הסמל או על לחצן הטקסט כדי להריץ את הפונקציה sendEmail
.
התאמה אישית של הלחצן לקטע שניתן לכווץ
התאמה אישית של לחצן הבקרה שמכווץ ומרחיב קטעים בכרטיס. אפשר לבחור מתוך מגוון של סמלים או תמונות כדי לייצג באופן חזותי את התוכן של הקטע, וכך להקל על המשתמשים להבין את המידע ולנהל איתו אינטראקציה.
הוספת תפריט אפשרויות נוספות
אפשר להשתמש בסמל Overflow menu
בכרטיסים ב-Chat כדי להציע אפשרויות ופעולות נוספות. כך תוכלו לכלול יותר אפשרויות בלי להעמיס על ממשק הכרטיס, וכך להבטיח עיצוב נקי ומסודר.
הוספת רשימת צ'יפים
הווידג'ט ChipList
הוא דרך גמישה ומושכת להצגת מידע.
אפשר להשתמש ברשימות צ'יפים כדי לייצג תגים, קטגוריות או נתונים רלוונטיים אחרים, וכך להקל על המשתמשים לנווט בתוכן וליצור איתו אינטראקציה.
איסוף מידע ממשתמשים
בקטע הזה מוסבר איך מוסיפים ווידג'טים שאוספים מידע, כמו טקסט או בחירות.
במאמר איך אוספים ומעבדים מידע ממשתמשי Google Chat מוסבר איך מעבדים את הקלט של המשתמשים.
איסוף טקסט
ווידג'ט TextInput
כולל שדה שבו המשתמשים יכולים להזין טקסט. הווידג'ט תומך בהצעות, שעוזרות למשתמשים להזין נתונים אחידים, ובפעולות שמתבצעות כשמתרחש שינוי בשדה הקלט של הטקסט, כמו הוספה או מחיקה של טקסט על ידי משתמש. הפעולות האלה הן Actions
.
כשצריך לאסוף ממשתמשים נתונים מופשטים או לא ידועים, משתמשים בווידג'ט TextInput
. כדי לאסוף נתונים מוגדרים ממשתמשים, צריך להשתמש בווידג'ט SelectionInput
במקום זאת.
הכרטיס הבא מורכב מווידג'ט TextInput
:
איסוף תאריכים או שעות
הווידג'ט DateTimePicker
מאפשר למשתמשים להזין תאריך, שעה או תאריך ושעה. לחלופין, המשתמשים יכולים להשתמש בבורר כדי לבחור תאריכים ושעות. אם המשתמשים מזינים תאריך או שעה לא חוקיים, בבורר תופיע הודעת שגיאה עם בקשה להזין את המידע בצורה נכונה.
בתמונה הבאה מוצג כרטיס שמכיל שלושה סוגים שונים של ווידג'טים של DateTimePicker
:
לאפשר למשתמשים לבחור פריטים
הווידג'ט SelectionInput
מספק קבוצה של פריטים לבחירה, כמו תיבות סימון, לחצני בחירה, מתגים או תפריט נפתח. אפשר להשתמש בווידג'ט הזה כדי לאסוף ממשתמשים נתונים מוגדרים וסטנדרטיים. כדי לאסוף נתונים לא מוגדרים ממשתמשים, צריך להשתמש בווידג'ט TextInput
במקום זאת.
הווידג'ט SelectionInput
תומך בהצעות, שעוזרות למשתמשים להזין נתונים אחידים, ובפעולות שמתבצעות כשמתרחש שינוי בשדה קלט של בחירה, למשל כאשר משתמש בוחר פריט או מבטל את הבחירה בו. הפעולות האלה הן Actions
שפועלות כשמתרחש שינוי בשדה קלט של בחירה, למשל כאשר משתמש בוחר פריט או מבטל את הבחירה בו.
אפליקציות צ'אט יכולות לקבל ולעבד את הערך של הפריטים שנבחרו. למידע נוסף על עבודה עם נתונים שהוזנו בטפסים, ראו עיבוד מידע שהוזן על ידי משתמשים.
בקטע הזה מפורטות דוגמאות לכרטיסים שמשתמשים בווידג'ט SelectionInput
.
בדוגמאות נעשה שימוש בסוגים שונים של קלט של קטעים:
הוספת תיבת סימון
בדוגמה הבאה מוצג כרטיס שבו המשתמש מתבקש לציין אם איש הקשר הוא אישי, מקצועי או שניהם, באמצעות ווידג'ט SelectionInput
שמשתמש בתיבות סימון:
הוספת לחצן בחירה
בדוגמה הבאה מוצג כרטיס עם ווידג'ט SelectionInput
שמשתמש בלחצני רדיו כדי לבקש מהמשתמש לציין אם איש הקשר הוא אישי או מקצועי:
הוספת מתג
בדוגמה הבאה מוצג כרטיס עם ווידג'ט SelectionInput
שמשתמש במתגים, שמבקש מהמשתמש לציין אם איש הקשר הוא אישי, מקצועי או שניהם:
הוספת תפריט נפתח
בדוגמה הבאה מוצג כרטיס עם ווידג'ט SelectionInput
שמשתמש בתפריט נפתח כדי לבקש מהמשתמש לציין אם איש הקשר הוא אישי או מקצועי:
הוספת תפריט לבחירת מספר פריטים
בכרטיס הבא מוצגת בקשה למשתמש לבחור אנשי קשר מתוך תפריט עם אפשרויות מרובות:
אתם יכולים לאכלס פריטים בתפריט לבחירת כמה פריטים ממקורות הנתונים הבאים ב-Google Workspace:
- משתמשי Google Workspace: אפשר לאכלס משתמשים רק באותו ארגון ב-Google Workspace.
- מרחבים משותפים ב-Chat: המשתמש שמזין פריטים בתפריט הבחירה בכמה פריטים יכול להציג ולבחור רק מרחבים משותפים שהוא חבר בהם בארגון ב-Google Workspace.
כדי להשתמש במקורות נתונים של Google Workspace, מציינים את השדה platformDataSource
. בניגוד לסוגים אחרים של קלט של אפשרויות בחירה, צריך להשמיט אובייקטים מסוג SelectionItem
, כי פריטים אלה של אפשרויות בחירה מגיעים באופן דינמי מ-Google Workspace.
בקוד הבא מוצג תפריט של משתמשי Google Workspace לבחירת כמה משתמשים בו-זמנית.
כדי לאכלס משתמשים, קלט הבחירה מגדיר את commonDataSource
כ-USER
:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"commonDataSource": "USER"
}
}
}
הקוד הבא מציג תפריט לבחירת כמה מרחבים משותפים ב-Chat. כדי לאכלס את המרחבים, מזינים את השדה hostAppDataSource
בתור קלט הבחירה. תפריט הבחירה בכמה פריטים מגדיר גם את defaultToCurrentSpace
כ-true
, כך שהמרחב המשותף הנוכחי יהיה ברירת המחדל בתפריט:
JSON
{
"selectionInput": {
"name": "spaces",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"hostAppDataSource": {
"chatDataSource": {
"spaceDataSource": {
"defaultToCurrentSpace": true
}
}
}
}
}
}
אפשר גם לאכלס פריטים מתפריט עם בחירה מרובה ממקור נתונים חיצוני או מצד שלישי. לדוגמה, אפשר להשתמש בתפריטי בחירה מרובה כדי לעזור למשתמש לבחור מתוך רשימה של לידים למכירות ממערכת לניהול קשרי לקוחות (CRM).
כדי להשתמש במקור נתונים חיצוני, צריך להשתמש בשדה externalDataSource
כדי לציין פונקציה שמחזירה פריטים ממקור הנתונים.
כדי לצמצם את הבקשות למקור נתונים חיצוני, אפשר לכלול הצעות לפריטים שיופיעו בתפריט לבחירת מספר פריטים לפני שהמשתמשים יטפסו בתפריט. לדוגמה, אפשר לאכלס את אנשי הקשר שהמשתמש חיפש לאחרונה. כדי לאכלס הצעות לפריטים ממקור נתונים חיצוני, מציינים אובייקטים מסוג SelectionItem
.
הקוד הבא מציג תפריט של פריטים לבחירה מרשימת אנשי קשר חיצונית של המשתמש. בתפריט מוצג איש קשר אחד כברירת מחדל, והפונקציה getContacts
מופעלת כדי לאחזר ולאכלס פריטים ממקור הנתונים החיצוני:
Node.js
Python
Java
Apps Script
במקורות נתונים חיצוניים, אפשר גם להשלים אוטומטית פריטים שהמשתמשים מתחילים להקליד בתפריט הבחירה מרובה. לדוגמה, אם משתמש מתחיל להקליד Atl
כדי לפתוח תפריט עם רשימת ערים בארצות הברית, אפליקציית Chat יכולה להציע את הערך Atlanta
באופן אוטומטי לפני שהמשתמש מסיים להקליד. אפשר להשתמש בהשלמה אוטומטית של עד 100 פריטים.
כדי לבצע השלמה אוטומטית של פריטים, יוצרים פונקציה שמריצה שאילתה במקור הנתונים החיצוני ומחזירה פריטים בכל פעם שמשתמש מקלידים בתפריט הבחירה מרובה. הפונקציה צריכה לבצע את הפעולות הבאות:
- מעבירים אובייקט אירוע שמייצג את האינטראקציה של המשתמש עם התפריט.
- בודקים שהערך של
invokedFunction
באירוע האינטראקציה תואם לפונקציה מהשדהexternalDataSource
. - כשהפונקציות תואמות, המערכת מחזירה הצעות לפריטים ממקור הנתונים החיצוני. כדי להציע פריטים על סמך מה שהמשתמש מקלידים, מקבלים את הערך של המפתח
autocomplete_widget_query
. הערך הזה מייצג את מה שהמשתמש מקלידים בתפריט.
הקוד הבא משלים באופן אוטומטי פריטים ממקור נתונים חיצוני. לפי הדוגמה הקודמת, אפליקציית Chat מציעה פריטים על סמך הזמן שבו הפונקציה getContacts
מופעלת:
Node.js
Python
Java
Apps Script
אימות הנתונים שמוזנים לכרטיסים
בדף הזה מוסבר איך לאמת נתונים שמוזנים לaction
ולווידג'טים של כרטיס.
לדוגמה, אפשר לאמת ששדה קלט טקסט מכיל טקסט שהמשתמש הזין, או שהוא מכיל מספר מסוים של תווים.
הגדרת ווידג'טים נדרשים לפעולות
כחלק מaction
של הכרטיס, מוסיפים את השמות של הווידג'טים הנדרשים לפעולה לרשימה requiredWidgets
שלה.
אם לאף אחד מהווידג'טים שמפורטים כאן אין ערך כשהפעולה הזו מופעלת, שליחת הטופס תבוטל.
כשהאפשרות "all_widgets_are_required": "true"
מוגדרת לפעולה, כל הווידג'טים בכרטיס נדרשים לפעולה הזו.
הגדרת פעולת all_widgets_are_required
בבחירה מרובה
JSON
{
"sections": [
{
"header": "Select contacts",
"widgets": [
{
"selectionInput": {
"type": "MULTI_SELECT",
"label": "Selected contacts",
"name": "contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"onChangeAction": {
"all_widgets_are_required": true
},
"items": [
{
"value": "contact-1",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 1",
"bottomText": "Contact one description",
"selected": false
},
{
"value": "contact-2",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 2",
"bottomText": "Contact two description",
"selected": false
},
{
"value": "contact-3",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 3",
"bottomText": "Contact three description",
"selected": false
},
{
"value": "contact-4",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 4",
"bottomText": "Contact four description",
"selected": false
},
{
"value": "contact-5",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 5",
"bottomText": "Contact five description",
"selected": false
}
]
}
}
]
}
]
}
הגדרת פעולת all_widgets_are_required
ב-dateTimePicker
JSON
{
"sections": [
{
"widgets": [
{
"textParagraph": {
"text": "A datetime picker widget with both date and time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_and_time",
"label": "meeting",
"type": "DATE_AND_TIME"
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just date:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_only",
"label": "Choose a date",
"type": "DATE_ONLY",
"onChangeAction":{
"all_widgets_are_required": true
}
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_time_only",
"label": "Select a time",
"type": "TIME_ONLY"
}
}
]
}
]
}
הגדרת פעולה all_widgets_are_required
בתפריט הנפתח
JSON
{
"sections": [
{
"header": "Section Header",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"selectionInput": {
"name": "location",
"label": "Select Color",
"type": "DROPDOWN",
"onChangeAction": {
"all_widgets_are_required": true
},
"items": [
{
"text": "Red",
"value": "red",
"selected": false
},
{
"text": "Green",
"value": "green",
"selected": false
},
{
"text": "White",
"value": "white",
"selected": false
},
{
"text": "Blue",
"value": "blue",
"selected": false
},
{
"text": "Black",
"value": "black",
"selected": false
}
]
}
}
]
}
]
}
הגדרת האימות לווידג'ט של קלט טקסט
בשדה האימות של הווידג'ט textInput
אפשר לציין את מגבלת התווים ואת סוג הקלט של הווידג'ט הזה להזנת טקסט.
הגדרת מגבלת תווים לווידג'ט של קלט טקסט
JSON
{
"sections": [
{
"header": "Tell us about yourself",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "favoriteColor",
"label": "Favorite color",
"type": "SINGLE_LINE",
"validation": {"character_limit":15},
"onChangeAction":{
"all_widgets_are_required": true
}
}
}
]
}
]
}
הגדרת סוג הקלט של ווידג'ט להזנת טקסט
JSON
{
"sections": [
{
"header": "Validate text inputs by input types",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "mailing_address",
"label": "Please enter a valid email address",
"type": "SINGLE_LINE",
"validation": {
"input_type": "EMAIL"
},
"onChangeAction": {
"all_widgets_are_required": true
}
}
},
{
"textInput": {
"name": "validate_integer",
"label": "Please enter a number",
"type": "SINGLE_LINE",
"validation": {
"input_type": "INTEGER"
}
}
},
{
"textInput": {
"name": "validate_float",
"label": "Please enter a number with a decimal",
"type": "SINGLE_LINE",
"validation": {
"input_type": "FLOAT"
}
}
}
]
}
]
}
פתרון בעיות
כשכרטיס או אפליקציית Google Chat מחזירים שגיאה, בממשק Chat מופיעה ההודעה "משהו השתבש". או "לא ניתן לעבד את הבקשה שלך". לפעמים בממשק המשתמש של Chat לא מוצגת הודעת שגיאה, אבל באפליקציה או בכרטיס של Chat מתקבלת תוצאה לא צפויה. לדוגמה, יכול להיות שלא תוצג הודעה בכרטיס.
יכול להיות שהודעת שגיאה לא תוצג בממשק המשתמש של Chat, אבל כשיומני השגיאות של אפליקציות Chat מופעלים, יהיו זמינות הודעות שגיאה תיאוריות ונתוני יומנים שיעזרו לכם לתקן שגיאות. במאמר פתרון בעיות ושגיאות ב-Google Chat מוסבר איך מציגים, מאתרים באגים ומתקנים שגיאות.