इस गाइड में, कार्ड से जुड़ी आम गड़बड़ियों के बारे में बताया गया है. साथ ही, उन्हें ठीक करने का तरीका भी बताया गया है.
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
एट्रिब्यूट की वैल्यू गलत दी गई है
अगर कार्ड मैसेज या डायलॉग में गलत तरीके से तय किया गया 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
विजेट के किसी बटन मेंonClick
ऐक्शन नहीं है या उसकीonClick
ऐक्शन की जानकारी गलत तरीके से दी गई है.TextInput
विजेट मेंname
फ़ील्ड मौजूद नहीं है.
वजह: 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 ऐप्लिकेशन डीबग करना लेख पढ़ें.