कार्ड और डायलॉग से जुड़ी समस्याएं हल करना और उन्हें ठीक करना

इस गाइड में, कार्ड से जुड़ी आम गड़बड़ियों के बारे में बताया गया है. साथ ही, उन्हें ठीक करने का तरीका भी बताया गया है.


Chat ऐप्लिकेशन के लिए मैसेजिंग और यूज़र इंटरफ़ेस डिज़ाइन करने और उनकी झलक देखने के लिए, कार्ड बिल्डर का इस्तेमाल करें:

कार्ड बिल्डर खोलना

कार्ड से जुड़ी गड़बड़ियां कैसे दिखती हैं

कार्ड से जुड़ी गड़बड़ियां कई तरह से दिखती हैं:

  • कार्ड का कोई हिस्सा, जैसे कि विजेट या कॉम्पोनेंट, नहीं दिखता या अनचाहे तरीके से रेंडर होता है.
  • पूरा कार्ड नहीं दिखता.
  • डायलॉग बॉक्स बंद हो जाता है, खुलता नहीं है या लोड नहीं होता.

अगर आपको इस तरह की समस्या आती है, तो इसका मतलब है कि आपके ऐप्लिकेशन के कार्ड में कोई गड़बड़ी है.

रेफ़रंस के लिए: काम करने वाला, गड़बड़ी के बिना कार्ड का मैसेज और डायलॉग

गलत कार्ड के उदाहरणों की जांच करने से पहले, कार्ड के काम करने वाले इस मैसेज और डायलॉग को देखें. गड़बड़ी के हर उदाहरण और उसे ठीक करने के तरीके को दिखाने के लिए, इस कार्ड के JSON में गड़बड़ियां जोड़ी गई हैं.

गड़बड़ी के बिना कार्ड का मैसेज

यहां संपर्क जानकारी देने वाला ऐसा कार्ड मैसेज दिया गया है जिसमें हेडर, सेक्शन, और सजाए गए टेक्स्ट और बटन जैसे विजेट शामिल हैं. इसमें कोई गड़बड़ी नहीं है:

गड़बड़ी वाला डायलॉग

यहां गड़बड़ी के बिना काम करने वाला डायलॉग बॉक्स दिया गया है. यह उपयोगकर्ताओं से जानकारी इकट्ठा करके संपर्क बनाता है. इसमें फ़ुटर और टेक्स्ट इनपुट, स्विच, और बटन जैसे बदलाव किए जा सकने वाले विजेट शामिल हैं:

गड़बड़ी: कार्ड का कुछ हिस्सा नहीं दिख रहा है

कभी-कभी कार्ड रेंडर हो जाते हैं, लेकिन कार्ड का वह हिस्सा नहीं दिखता जिसे आपको देखना था. इसकी ये वजहें हो सकती हैं:

  • ज़रूरी JSON फ़ील्ड मौजूद नहीं है.
  • JSON फ़ील्ड में स्पेलिंग गलत है या अंग्रेज़ी के बड़े अक्षरों का गलत इस्तेमाल हुआ है.

वजह: ज़रूरी JSON फ़ील्ड मौजूद नहीं है

इस गड़बड़ी के उदाहरण में, ज़रूरी JSON फ़ील्ड title मौजूद नहीं है. इस वजह से, कार्ड रेंडर हो जाता है, लेकिन कार्ड के वे हिस्से नहीं दिखते जो दिखने चाहिए. ज़रूरी फ़ील्ड को छोड़ने पर, यह अनुमान लगाना मुश्किल हो सकता है कि कार्ड कैसे रेंडर होंगे.

इस गड़बड़ी को ठीक करने के लिए, ज़रूरी JSON फ़ील्ड जोड़ें. इस उदाहरण में, title.

JSON फ़ील्ड की ज़रूरत है या नहीं, यह जानने के लिए Cards v2 का रेफ़रंस दस्तावेज़ देखें. इस उदाहरण में, CardHeader पर title फ़ील्ड की जानकारी देखें.

यहां दो उदाहरण दिए गए हैं:

पहला उदाहरण: subtitle की वैल्यू देने के बावजूद, ज़रूरी title को शामिल न करने पर, पूरा हेडर खाली दिखता है:

इस कार्ड का हेडर नहीं दिखता, क्योंकि टाइटल नाम का ज़रूरी फ़ील्ड मौजूद नहीं है.
पहली इमेज: इस कार्ड का हेडर नहीं दिखता, क्योंकि ज़रूरी फ़ील्ड title मौजूद नहीं है.

गड़बड़ी वाला कार्ड JSON स्निपेट देखना

गड़बड़ी: header में ज़रूरी फ़ील्ड, title मौजूद नहीं है.

    . . .
    "header": {

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

कार्ड का सही JSON स्निपेट देखना

ठीक किया गया: title ज़रूरी फ़ील्ड, header स्पेसिफ़िकेशन का हिस्सा है.

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

दूसरा उदाहरण: subtitle, imageUrl, imageType, और imageAltText की वैल्यू सबमिट करने पर, इमेज सही तरीके से रेंडर होती है, लेकिन सबटाइटल नहीं:title

इस कार्ड का हेडर नहीं दिखता, क्योंकि टाइटल नाम का ज़रूरी फ़ील्ड मौजूद नहीं है.
दूसरी इमेज: इस कार्ड के हेडर में सबटाइटल नहीं दिखता, क्योंकि ज़रूरी फ़ील्ड title मौजूद नहीं है. हालांकि, इमेज उम्मीद के मुताबिक रेंडर होती है.

गड़बड़ी वाला कार्ड JSON स्निपेट देखना

गड़बड़ी: header में ज़रूरी फ़ील्ड, title मौजूद नहीं है.

    . . .
    "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 को कार्ड के रेफ़रंस दस्तावेज़ के साथ देखें.

इस कार्ड का हेडर नहीं दिखता, क्योंकि टाइटल नाम का ज़रूरी फ़ील्ड मौजूद नहीं है.
तीसरा इलस्ट्रेशन: इस कार्ड के हेडर में सबटाइटल नहीं दिखता, क्योंकि ज़रूरी फ़ील्ड 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 स्निपेट देखना

ठीक किया गया: onClick ऑब्जेक्ट में अब openLink फ़ील्ड है, ताकि कार्ड उम्मीद के मुताबिक दिखे.

    . . .
    {
      "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 स्निपेट देखना

गड़बड़ी: fixedFooter ऑब्जेक्ट में कोई primaryButton फ़ील्ड नहीं है. इस वजह से, डायलॉग लोड या खुल नहीं पा रहा है.

    . . .
    "fixedFooter": {

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

कार्ड का सही JSON स्निपेट देखना

ठीक किया गया: fixedFooter में अब primaryButton फ़ील्ड तय किया गया है, ताकि डायलॉग बॉक्स उम्मीद के मुताबिक काम करे.

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

वजह: FixedFooter में onClick की गलत सेटिंग

CardFixedFooter विजेट वाले डायलॉग बॉक्स में, किसी बटन पर onClick सेटिंग को गलत तरीके से बताना या उसे छोड़ना. इससे डायलॉग बॉक्स बंद हो सकता है, लोड नहीं हो सकता या खुल नहीं सकता.

इस गड़बड़ी को ठीक करने के लिए, पक्का करें कि हर बटन में सही onClick सेटिंग शामिल हो.

गलत कार्ड का JSON स्निपेट देखना

गड़बड़ी: primaryButton ऑब्जेक्ट में onClick फ़ील्ड है, जिसमें `पैरामीटर` ऐरे की स्पेलिंग गलत है. इस वजह से, डायलॉग बॉक्स लोड या खुल नहीं पा रहा है.

    . . .
    "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 फ़ील्ड है, जिसमें `पैरामीटर` कलेक्शन की स्पेलिंग सही है. इसलिए, डायलॉग बॉक्स उम्मीद के मुताबिक काम करता है.

    . . .
    "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 स्निपेट देखना

गड़बड़ी: textInput ऑब्जेक्ट में कोई name फ़ील्ड नहीं है. इस वजह से, डायलॉग बॉक्स बंद हो जाता है, लोड नहीं होता या खुल नहीं पाता.

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

      }
    }
    . . .
    

कार्ड का सही JSON स्निपेट देखना

ठीक किया गया: textInput में अब name फ़ील्ड तय किया गया है, ताकि डायलॉग बॉक्स उम्मीद के मुताबिक काम कर सके.

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

असाइनमेंट के साथ काम न करने वाले ऐप्लिकेशन आर्किटेक्चर के साथ, डायलॉग बॉक्स खोलने, सबमिट करने या रद्द करने की कार्रवाइयां काम नहीं करतीं

अगर आपका Chat ऐप्लिकेशन, डायलॉग के साथ काम करते समय गड़बड़ी का मैसेज Could not load dialog. Invalid response returned by bot. दिखाता है, तो हो सकता है कि आपका ऐप्लिकेशन, Cloud Pub/Sub या Create Message एपीआई के तरीके जैसे असाइनोक्रोनस आर्किटेक्चर का इस्तेमाल करता हो.

डायलॉग बॉक्स खोलने, सबमिट करने या रद्द करने के लिए, Chat ऐप्लिकेशन से DialogEventType के साथ सिंक किया गया जवाब ज़रूरी है. इसलिए, ऐसे ऐप्लिकेशन में डायलॉग बॉक्स का इस्तेमाल नहीं किया जा सकता जिन्हें असाइनोक्रोनस आर्किटेक्चर के साथ बनाया गया है.

इस समस्या को हल करने के लिए, डायलॉग बॉक्स के बजाय कार्ड मैसेज का इस्तेमाल करें.

कार्ड और डायलॉग से जुड़ी अन्य गड़बड़ियां

अगर इस पेज पर बताए गए तरीके से, आपके ऐप्लिकेशन में कार्ड से जुड़ी गड़बड़ी ठीक नहीं होती है, तो ऐप्लिकेशन के गड़बड़ी लॉग से जुड़ी क्वेरी करें. लॉग में क्वेरी करने से, कार्ड के JSON या ऐप्लिकेशन कोड में गड़बड़ियां ढूंढने में मदद मिल सकती है. साथ ही, लॉग में गड़बड़ी के बारे में जानकारी देने वाले मैसेज शामिल होते हैं, ताकि उन्हें ठीक करने में आपकी मदद की जा सके.

Google Chat ऐप्लिकेशन से जुड़ी गड़बड़ियों को ठीक करने में मदद पाने के लिए, Google Chat ऐप्लिकेशन से जुड़ी समस्या हल करना और उसे ठीक करना और Chat ऐप्लिकेशन डीबग करना लेख पढ़ें.