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