इस गाइड में, कार्ड से जुड़ी उन सामान्य गड़बड़ियों के बारे में बताया गया है जो आपको मिल सकती हैं. साथ ही, उन्हें ठीक करने का तरीका भी बताया गया है.
Card Builder का इस्तेमाल करके, Chat ऐप्लिकेशन के लिए मैसेजिंग और यूज़र इंटरफ़ेस डिज़ाइन करें और उनकी झलक देखें:
कार्ड बिल्डर खोलेंकार्ड से जुड़ी गड़बड़ियां कैसे दिखती हैं
कार्ड से जुड़ी गड़बड़ियां कई तरह से दिख सकती हैं:
- कार्ड का कोई हिस्सा, जैसे कि विजेट या कॉम्पोनेंट नहीं दिखता या उम्मीद के मुताबिक रेंडर नहीं होता.
- पूरा कार्ड नहीं दिखता.
- डायलॉग बॉक्स बंद हो जाता है, खुलता नहीं है या लोड नहीं होता है.
अगर आपको इस तरह की समस्या आती है, तो इसका मतलब है कि आपके ऐप्लिकेशन के कार्ड में कोई गड़बड़ी है.
संदर्भ के लिए: काम करने वाला, बिना किसी गड़बड़ी वाला कार्ड मैसेज और डायलॉग
कार्ड के गलत उदाहरणों की जांच करने से पहले, कार्ड के इस सही मैसेज और डायलॉग को देखें. हर उदाहरण में गड़बड़ी और उसे ठीक करने का तरीका दिखाने के लिए, इस कार्ड के JSON में गड़बड़ियां जोड़ी गई हैं.
कार्ड में गड़बड़ी न होने की जानकारी देने वाला मैसेज
यहां कार्ड मैसेज का एक ऐसा उदाहरण दिया गया है जिसमें संपर्क की जानकारी दी गई है. इसमें हेडर, सेक्शन, और सजावटी टेक्स्ट और बटन जैसे विजेट शामिल हैं. यह कार्ड मैसेज सही तरीके से काम करता है और इसमें कोई गड़बड़ी नहीं है:
गड़बड़ी से मुक्त डायलॉग
यहां काम करने वाला, बिना किसी गड़बड़ी वाला ऐसा डायलॉग दिया गया है जो उपयोगकर्ताओं से जानकारी इकट्ठा करके संपर्क बनाता है. इसमें फ़ुटर, टेक्स्ट इनपुट और स्विच जैसे बदलाव किए जा सकने वाले विजेट, और बटन शामिल हैं:
गड़बड़ी: कार्ड का कुछ हिस्सा नहीं दिखता
कभी-कभी कार्ड रेंडर हो जाते हैं, लेकिन कार्ड का वह हिस्सा नहीं दिखता जो आपको दिखना चाहिए. इसकी ये वजहें हो सकती हैं:
- ज़रूरी JSON फ़ील्ड मौजूद नहीं है.
- किसी JSON फ़ील्ड की स्पेलिंग गलत है या उसमें अंग्रेज़ी के बड़े अक्षरों का गलत इस्तेमाल हुआ है.
वजह: ज़रूरी JSON फ़ील्ड मौजूद नहीं है
इस उदाहरण में, ज़रूरी JSON फ़ील्ड title
मौजूद नहीं है. इस वजह से, कार्ड रेंडर हो जाता है. हालांकि, कार्ड के वे हिस्से नहीं दिखते जो दिखने चाहिए. ज़रूरी फ़ील्ड में जानकारी न होने पर, यह अनुमान लगाना मुश्किल हो सकता है कि कार्ड कैसे रेंडर होंगे.
इस गड़बड़ी को ठीक करने के लिए, ज़रूरी JSON फ़ील्ड जोड़ें. इस उदाहरण में, title
.
यह जानने के लिए कि कोई JSON फ़ील्ड ज़रूरी है या नहीं, Cards v2 का रेफ़रंस दस्तावेज़ देखें. इस उदाहरण में, CardHeader
पर मौजूद title
फ़ील्ड की जानकारी देखें.
यहां दो उदाहरण दिए गए हैं:
उदाहरण 1: subtitle
को तय करने पर, ज़रूरी title
को शामिल न करने से पूरा हेडर खाली दिखता है:

title
मौजूद नहीं है.गड़बड़ी वाले कार्ड का JSON स्निपेट देखना
गड़बड़ी: ज़रूरी फ़ील्ड title
, header
में मौजूद नहीं है.
. . . "header": { "subtitle": "Software Engineer" } . . .
कार्ड के JSON स्निपेट को सही तरीके से देखना
ठीक किया गया: ज़रूरी फ़ील्ड title
, header
के स्पेसिफ़िकेशन का हिस्सा है.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer" } . . .
दूसरा उदाहरण: subtitle
, imageUrl
, imageType
, और imageAltText
की जानकारी देने पर, इमेज को उम्मीद के मुताबिक रेंडर किया जाता है. हालांकि, ज़रूरी title
की जानकारी न देने पर, इमेज के साथ दिखने वाले टेक्स्ट को रेंडर नहीं किया जाता:

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 की जांच करें.

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
फ़ील्ड है. इसमें `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 स्निपेट देखें
गड़बड़ी: 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 API तरीका.
डायलॉग खोलने, सबमिट करने या रद्द करने के लिए, DialogEventType
वाले Chat ऐप्लिकेशन से सिंक्रोनस रिस्पॉन्स की ज़रूरत होती है.
इसलिए, एसिंक्रोनस आर्किटेक्चर का इस्तेमाल करके बनाए गए ऐप्लिकेशन में डायलॉग का इस्तेमाल नहीं किया जा सकता.
इसके बजाय, डायलॉग के बजाय कार्ड मैसेज का इस्तेमाल करें.
कार्ड और डायलॉग से जुड़ी अन्य गड़बड़ियां
अगर इस पेज पर बताई गई समस्याओं को ठीक करने के तरीकों से, आपके ऐप्लिकेशन में कार्ड से जुड़ी गड़बड़ी ठीक नहीं होती है, तो ऐप्लिकेशन के गड़बड़ी लॉग के बारे में क्वेरी करें. लॉग की क्वेरी करने से, कार्ड के JSON या ऐप्लिकेशन कोड में मौजूद गड़बड़ियों का पता लगाया जा सकता है. साथ ही, लॉग में गड़बड़ी के बारे में जानकारी देने वाले मैसेज शामिल होते हैं, ताकि उन्हें ठीक करने में आपको मदद मिल सके.
मिलते-जुलते विषय
Google Chat ऐप्लिकेशन से जुड़ी गड़बड़ियों को ठीक करने के लिए, Google Chat ऐप्लिकेशन से जुड़ी समस्याओं को हल करना और उन्हें ठीक करना और Chat ऐप्लिकेशन डीबग करना लेख पढ़ें.