פתרון בעיות ותיקון כרטיסים ותיבות דו-שיח

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


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

פתיחת הכלי ליצירת כרטיסים

איך מופיעות שגיאות בכרטיסים

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

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

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

לעיונך: הודעה וכרטיס שפועלים ללא שגיאות

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

הודעה על כרטיס ללא שגיאות

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

תיבת דו-שיח ללא שגיאות

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

שגיאה: חלק מהכרטיס לא מופיע

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

  • חסר שדה JSON נדרש.
  • שגיאת איות או שימוש שגוי באותיות רישיות בשדה JSON.

סיבה: חסר שדה JSON נדרש

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

כדי לתקן את השגיאה הזו, צריך להוסיף את שדה ה-JSON הנדרש. בדוגמה הזו, title.

כדי לבדוק אם שדה JSON נדרש, אפשר לעיין במסמכי העזרה של Cards v2. בדוגמה הזו, אפשר לעיין בתיאור של השדה title בדף CardHeader.

להלן שתי דוגמאות:

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

הכותרת של הכרטיס הזה לא מוצגת כי חסרה כותרת, שדה חובה.
איור 1: הכותרת של הכרטיס הזה לא מוצגת כי חסר שדה חובה, title.

הצגת קטע הקוד הלא תקין של כרטיס בפורמט JSON

שגיאה: חסר שדה חובה, title, ב-header.

    . . .
    "header": {

            "subtitle": "Software Engineer"
          }
    . . .
    

הצגת קטע הקוד הנכון של כרטיס JSON

תוקנה: השדה הנדרש, title, הוא חלק מהמפרט של header.

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer"
          }
    . . .
    

דוגמה 2: אם מציינים את הערכים subtitle,‏ imageUrl,‏ imageType ו-imageAltText אבל משמיטים את הערך הנדרש title, התמונה תומרן כצפוי אבל הכתוביות לא:

הכותרת של הכרטיס הזה לא מוצגת כי חסרה כותרת, שדה חובה.
איור 2: הכותרת של הכרטיס הזה לא מציגה את כותרת המשנה כי חסר שדה נדרש, title, אבל התמונה מוצגת כצפוי.

הצגת קטע הקוד הלא תקין של כרטיס בפורמט JSON

שגיאה: חסר שדה חובה, title, ב-header.

    . . .
    "header": {

            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

הצגת קטע הקוד הנכון של כרטיס JSON

תוקנה: השדה הנדרש, title, הוא חלק מהמפרט של header.

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

סיבה: שגיאות איות או שימוש שגוי באותיות רישיות ב-JSON

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

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

הכותרת של הכרטיס הזה לא מוצגת כי חסרה כותרת, שדה חובה.
איור 3: הכותרת של הכרטיס הזה לא מציגה את הכותרת המשנה כי חסר שדה נדרש, title, אבל התמונה מוצגת כצפוי.

הצגת קטע הקוד הלא תקין של כרטיס בפורמט JSON

שגיאה: שגיאת אותיות רישיות בשדה imageURL. הערך צריך להיות imageUrl.

    . . .
    "header": {
      "title": "Sasha",
      "subtitle": "Software Engineer",
      "imageURL":
      "https://developers.google.com/chat/images/quickstart-app-avatar.png",
      "imageType": "CIRCLE",
      "imageAltText": "Avatar for Sasha",
    }
    . . .
    

הצגת קטע הקוד הנכון של כרטיס בפורמט JSON

תוקן: השדה imageUrl כתוב באותיות רישיות בצורה נכונה.

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

שגיאה: כרטיס שלם לא מופיע

לפעמים הכרטיס עצמו לא מופיע. הסיבות האפשריות לכך הן:

סיבה: הערך של buttonList או cardFixedFooter שצוין שגוי

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

כדי לתקן את השגיאה הזו, צריך לבדוק את קובץ ה-JSON של הכרטיס בהתאם למסמך העזרה של הכרטיס. באופן ספציפי, כדאי להשוות בין ווידג'טים של ButtonList לבין המדריך לווידג'טים של ButtonList.

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

הצגת קטע ה-JSON השגוי של הכרטיס

שגיאה: לא צוינו שדות באובייקט onClick, ולכן הכרטיס כולו לא מופיע.

    . . .
    {
      "buttonList": {
        "buttons": [
          {
            "text": "Share",
            "onClick": {


              }
            }
          },
          {
            "text": "Edit",
            "onClick": {
              "action": {
                "function": "goToView",
                "parameters": [
                  {
                    "key": "viewType",
                    "value": "EDIT",
                  }
                ],
              }
            }
          },
        ],
      },
    }
    . . .
    

הצגת קטע ה-JSON הנכון של הכרטיס

תוקן: עכשיו יש שדה openLink באובייקט onClick, כך שהכרטיס מופיע כצפוי.

    . . .
    {
      "buttonList": {
        "buttons": [
          {
            "text": "Share",
            "onClick": {
              "openLink": {
                "url": "https://example.com/share",
              }
            }
          },
          {
            "text": "Edit",
            "onClick": {
              "action": {
                "function": "goToView",
                "parameters": [
                  {
                    "key": "viewType",
                    "value": "EDIT",
                  }
                ],
              }
            }
          },
        ],
      },
    }
    . . .
    

שגיאה: תיבת דו-שיח נסגרת, נתקעת או לא נפתחת

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

אלה הסיבות הנפוצות ביותר:

סיבה: ל-CardFixedFooter אין primaryButton

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

כדי לתקן את השגיאה הזו, צריך לוודא שהווידג'ט CardFixedFooter כולל primaryButton שצוין בצורה נכונה.

הצגת קטע ה-JSON השגוי של הכרטיס

שגיאה: לא צוין שדה primaryButton באובייקט fixedFooter, ולכן תיבת הדו-שיח לא נטענת או נפתחת.

    . . .
    "fixedFooter": {

        "onClick": {
          . . .
      },
      "secondaryButton": {
        . . .
        }
      }
    }
    . . .
    

הצגת קטע ה-JSON הנכון של הכרטיס

תוקנה: עכשיו fixedFooter כולל שדה primaryButton, כך שהתיבת הדו-שיח פועלת כמצופה.

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          . . .
      },
      "secondaryButton": {
        . . .
        }
      }
    }
    . . .
    

סיבה: הגדרה שגויה של onClick ב-FixedFooter

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

כדי לתקן את השגיאה הזו, צריך לוודא שכל לחצן כולל הגדרה נכונה של onClick.

הצגת קטע ה-JSON השגוי של הכרטיס

שגיאה: באובייקט primaryButton יש שדה onClick עם מערך 'parameters' שכתוב בו שגיאת איות, וכתוצאה מכך תיבת הדו-שיח לא נטענת או נפתחת.

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          "action": {
            "function": "setLanguageType",
            "parrammetters": [
              {
                "key": "languageType",
                "value": "C++"
              }
            ]
          }
        }
      },
      "secondaryButton": {
        "text": "Cancel",
        "onClick": {
          "action": {
            "function": "reset"
          }
        }
      }
    }
    . . .
    

הצגת קטע ה-JSON הנכון של הכרטיס

תוקנה: באובייקט primaryButton יש שדה onClick עם מערך 'parameters' שכתוב בצורה נכונה, ולכן תיבת הדו-שיח פועלת כצפוי.

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          "action": {
            "function": "setLanguageType",
            "parameters": [
              {
                "key": "languageType",
                "value": "C++"
              }
            ]
          }
        }
      },
      "secondaryButton": {
        "text": "Cancel",
        "onClick": {
          "action": {
            "function": "reset"
          }
        }
      }
    }
    . . .
    

סיבה: ל-TextInput אין name

אם תיבת דו-שיח כוללת ווידג'ט TextInput שלא כולל את השדה name, תיבת הדו-שיח לא פועלת כצפוי. יכול להיות שהיא תיסגר, תיפתח אבל לא תיטען או לא תיפתח בכלל.

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

הצגת קטע ה-JSON השגוי של הכרטיס

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

    . . .
    {
      "textInput": {
        "label": "Name",
        "type": "SINGLE_LINE",

      }
    }
    . . .
    

הצגת קטע ה-JSON הנכון של הכרטיס

תוקנה: עכשיו textInput כולל שדה name, כך שהתיבת הדו-שיח פועלת כמצופה.

    . . .
    {
      "textInput": {
        "label": "Name",
        "type": "SINGLE_LINE",
        "name": "contactName"
      }
    }
    . . .
    

פעולות פתיחה, שליחה או ביטול של תיבת דו-שיח נכשלות בארכיטקטורה של אפליקציה אסינכררונית

אם הודעת השגיאה Could not load dialog. Invalid response returned by bot. מופיעה באפליקציית Chat בזמן העבודה עם תיבות דו-שיח, יכול להיות שהסיבה לכך היא שהאפליקציה משתמשת בארכיטקטורה אסינכררונית, כמו Cloud Pub/Sub או שיטת ה-API Create Message.

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

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

שגיאות אחרות בכרטיסים ובתיבות דו-שיח

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

לקבלת עזרה בתיקון שגיאות באפליקציית Google Chat, אפשר לעיין במאמרים פתרון בעיות באפליקציית Google Chat ותיקון שגיאות וניפוי באגים באפליקציות Chat.