इस गाइड में बताया गया है कि Google Ads API, गड़बड़ियों को कैसे मैनेज करता है और उनकी जानकारी कैसे देता है. एपीआई से जुड़ी गड़बड़ियों के स्ट्रक्चर और उनके मतलब को समझना ज़रूरी है. इससे ऐसे मज़बूत ऐप्लिकेशन बनाए जा सकते हैं जो अमान्य इनपुट से लेकर सेवा के अस्थायी तौर पर उपलब्ध न होने जैसी समस्याओं को आसानी से हल कर सकते हैं.
Google Ads API, Google API के स्टैंडर्ड गड़बड़ी मॉडल का पालन करता है. यह gRPC स्टेटस कोड पर आधारित है. गड़बड़ी की वजह से मिले हर एपीआई जवाब में, Status ऑब्जेक्ट शामिल होता है. इसमें ये चीज़ें होती हैं:
- यह संख्या के तौर पर गड़बड़ी का कोड है.
- गड़बड़ी का मैसेज.
- गड़बड़ी के बारे में ज़्यादा जानकारी (ज़रूरी नहीं).
कैननिकल से जुड़ी गड़बड़ी के कोड
Google Ads API, gRPC और HTTP की ओर से तय किए गए कैननिकल गड़बड़ी कोड के सेट का इस्तेमाल करता है. इन कोड से, गड़बड़ी के टाइप के बारे में खास जानकारी मिलती है. समस्या की बुनियादी वजह जानने के लिए, आपको हमेशा इस संख्या वाले कोड की जांच करनी चाहिए.
यहां दी गई टेबल में, Google Ads API का इस्तेमाल करते समय दिखने वाले सबसे सामान्य कोड के बारे में खास जानकारी दी गई है:
| gRPC कोड | एचटीटीपी कोड | Enum का नाम | ब्यौरा | दिशा-निर्देश |
|---|---|---|---|---|
| 0 | 200 | OK |
कोई गड़बड़ी नहीं है; इससे पता चलता है कि कार्रवाई पूरी हो गई है. | लागू नहीं |
| 1 | 499 | CANCELLED |
कार्रवाई रद्द कर दी गई थी. आम तौर पर, ऐसा क्लाइंट करता है. | इसका आम तौर पर मतलब है कि क्लाइंट ने इंतज़ार करना बंद कर दिया है. क्लाइंट-साइड पर टाइम आउट की जांच करें. |
| 2 | 500 | UNKNOWN |
कोई अज्ञात गड़बड़ी हुई. गड़बड़ी के मैसेज या जानकारी में ज़्यादा जानकारी मौजूद हो सकती है. | इसे सर्वर की गड़बड़ी के तौर पर माना जाता है. बैकऑफ़ के साथ अक्सर फिर से कोशिश की जा सकती है. |
| 3 | 400 | INVALID_ARGUMENT |
क्लाइंट ने एक अमान्य तर्क बताया. इससे ऐसी समस्या का पता चलता है जिसकी वजह से एपीआई, अनुरोध को प्रोसेस नहीं कर पाता. जैसे, गलत तरीके से बनाया गया रिसॉर्स का नाम या अमान्य वैल्यू. | क्लाइंट की गड़बड़ी: अपने अनुरोध के पैरामीटर की समीक्षा करें और पक्का करें कि वे एपीआई की ज़रूरी शर्तों को पूरा करते हों. गड़बड़ी की जानकारी से आम तौर पर यह पता चलता है कि कौनसा तर्क अमान्य था और क्यों. अनुरोध को ठीक करने के लिए, इस जानकारी का इस्तेमाल करें. अनुरोध में सुधार किए बिना, फिर से कोशिश न करें. |
| 4 | 504 | DEADLINE_EXCEEDED |
कार्रवाई पूरी होने से पहले ही समयसीमा खत्म हो गई. | सर्वर की गड़बड़ी: अक्सर कुछ समय के लिए होती है. एक्स्पोनेंशियल बैकऑफ़ के साथ फिर से कोशिश करें. |
| 5 | 404 | NOT_FOUND |
अनुरोध की गई कुछ इकाइयां, जैसे कि कैंपेन या विज्ञापन ग्रुप नहीं मिला. | क्लाइंट की गड़बड़ी: जिन संसाधनों को ऐक्सेस करने की कोशिश की जा रही है उनकी मौजूदगी और आईडी की पुष्टि करें. गड़बड़ी ठीक किए बिना फिर से कोशिश न करें. |
| 6 | 409 | ALREADY_EXISTS |
क्लाइंट ने जिस इकाई को बनाने की कोशिश की है वह पहले से मौजूद है. | क्लाइंट की गड़बड़ी: डुप्लीकेट संसाधन न बनाएं. संसाधन बनाने की कोशिश करने से पहले, देखें कि वह मौजूद है या नहीं. |
| 7 | 403 | PERMISSION_DENIED |
कॉलर के पास, तय की गई कार्रवाई को पूरा करने की अनुमति नहीं है. | क्लाइंट की गड़बड़ी: Google Ads खाते के लिए, पुष्टि, अनुमति, और उपयोगकर्ता की भूमिकाओं की जांच करें. अनुमतियों से जुड़ी समस्या हल किए बिना, फिर से कोशिश न करें. |
| 8 | 429 | RESOURCE_EXHAUSTED |
ऐसा तब होता है, जब कोई संसाधन खत्म हो गया हो. उदाहरण के लिए, आपने अपना कोटा पूरा कर लिया हो या सिस्टम ओवरलोड हो गया हो. | क्लाइंट/सर्वर से जुड़ी गड़बड़ी: आम तौर पर, इसके लिए इंतज़ार करना पड़ता है. एक्स्पोनेंशियल बैकऑफ़ लागू करें और अनुरोध की दर को कम करें. एपीआई के लिए तय सीमाएं और कोटा देखें. |
| 9 | 400 | FAILED_PRECONDITION |
इस कार्रवाई को अस्वीकार कर दिया गया है, क्योंकि सिस्टम उस स्थिति में नहीं है जिसमें कार्रवाई को पूरा किया जा सकता है. उदाहरण के लिए, कोई ज़रूरी फ़ील्ड मौजूद नहीं है. | क्लाइंट की गड़बड़ी: अनुरोध मान्य है, लेकिन state गलत है. प्रीकंडिशन पूरी न होने की वजह जानने के लिए, गड़बड़ी की जानकारी देखें. राज्य की जानकारी ठीक किए बिना, फिर से कोशिश न करें. |
| 10 | 409 | ABORTED |
कार्रवाई को रोक दिया गया है. आम तौर पर, ऐसा एक साथ कई अनुरोध मिलने की वजह से होता है. जैसे, लेन-देन में टकराव. | सर्वर की गड़बड़ी: कुछ समय बाद फिर से कोशिश करना आम तौर पर सुरक्षित होता है. |
| 11 | 400 | OUT_OF_RANGE |
मान्य सीमा से ज़्यादा वैल्यू डालने की कोशिश की गई. | क्लाइंट की गड़बड़ी: रेंज या इंडेक्स को ठीक करें. |
| 12 | 501 | UNIMPLEMENTED |
यह कार्रवाई, एपीआई के ज़रिए लागू नहीं की गई है या एपीआई इसे सपोर्ट नहीं करता. | क्लाइंट की गड़बड़ी: एपीआई वर्शन और उपलब्ध सुविधाओं की जांच करें. फिर से कोशिश न करें. |
| 13 | 500 | INTERNAL |
कोई आंतरिक गड़बड़ी हुई. यह सर्वर-साइड की समस्याओं के लिए एक सामान्य सीआर है. | सर्वर से जुड़ी गड़बड़ी: आम तौर पर, एक्स्पोनेंशियल बैकऑफ़ के साथ फिर से कोशिश की जा सकती है. अगर समस्या बनी रहती है, तो इसकी शिकायत करें. |
| 14 | 503 | UNAVAILABLE |
फ़िलहाल, सेवा उपलब्ध नहीं है. यह समस्या कुछ समय के लिए हो सकती है. | सर्वर की गड़बड़ी: हमारा सुझाव है कि आप एक्स्पोनेंशियल बैकऑफ़ के साथ फिर से कोशिश करें. |
| 15 | 500 | DATA_LOSS |
डेटा को वापस नहीं पाया जा सकता या डेटा खराब हो गया. | सर्वर की गड़बड़ी: कभी-कभी. इससे किसी गंभीर समस्या का पता चलता है. फिर से कोशिश न करें. अगर समस्या बनी रहती है, तो इसकी शिकायत करें. |
| 16 | 401 | UNAUTHENTICATED |
अनुरोध में पुष्टि करने के मान्य क्रेडेंशियल नहीं हैं. | क्लाइंट की गड़बड़ी: अपने पुष्टि करने वाले टोकन और क्रेडेंशियल की पुष्टि करें. पुष्टि की समस्या ठीक किए बिना, फिर से कोशिश न करें. |
इन कोड के बारे में ज़्यादा जानने के लिए, एपीआई डिज़ाइन गाइड - गड़बड़ी के कोड देखें.
गड़बड़ी की जानकारी समझना
टॉप-लेवल कोड के अलावा, Google Ads API, Status ऑब्जेक्ट के details फ़ील्ड में गड़बड़ी के बारे में ज़्यादा जानकारी देता है. इस फ़ील्ड में अक्सर GoogleAdsFailure प्रोटो होता है. इसमें अलग-अलग GoogleAdsError ऑब्जेक्ट की सूची शामिल होती है.
हर GoogleAdsFailure ऑब्जेक्ट में ये शामिल हैं:
errors:GoogleAdsErrorऑब्जेक्ट की सूची. इसमें हर ऑब्जेक्ट में, हुई किसी गड़बड़ी की जानकारी दी जाती है.request_id: अनुरोध के लिए यूनीक आईडी. यह डीबग करने और सहायता पाने के लिए काम आता है.
हर GoogleAdsError ऑब्जेक्ट ये जानकारी देता है:
errorCode: यह Google Ads API से जुड़ा ज़्यादा जानकारी वाला गड़बड़ी कोड होता है. जैसे,AuthenticationError.NOT_ADS_USER.message: इसमें गड़बड़ी के बारे में ऐसी जानकारी होती है जिसे आसानी से पढ़ा जा सकता है.trigger: वह वैल्यू जिसकी वजह से गड़बड़ी हुई. हालांकि, यह जानकारी सिर्फ़ तब दिखती है, जब लागू हो.location: इससे पता चलता है कि अनुरोध में गड़बड़ी कहां हुई है. इसमें फ़ील्ड के पाथ भी शामिल होते हैं.details: गड़बड़ी के बारे में ज़्यादा जानकारी. जैसे, पब्लिश न होने की वजहें.
गड़बड़ी की जानकारी का उदाहरण
गड़बड़ी होने पर, आपकी क्लाइंट लाइब्रेरी से आपको यह जानकारी मिलेगी. उदाहरण के लिए, INVALID_ARGUMENT (कोड 3) में GoogleAdsFailure की जानकारी इस तरह हो सकती है:
{
"code": 3,
"message": "The request was invalid.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v17.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"fieldError": "REQUIRED"
},
"message": "The required field was not present.",
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "name" }
]
}
},
{
"errorCode": {
"stringLengthError": "TOO_SHORT"
},
"message": "The provided string is too short.",
"trigger": {
"stringValue": ""
},
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "description" }
]
}
}
]
}
]
}
इस उदाहरण में, सबसे ऊपर के लेवल के INVALID_ARGUMENT के बावजूद, GoogleAdsFailure की जानकारी से पता चलता है कि name और description फ़ील्ड की वजह से समस्या हुई है. साथ ही, यह भी पता चलता है कि ऐसा क्यों हुआ (REQUIRED और TOO_SHORT).
गड़बड़ी की जानकारी ढूंढना
गड़बड़ी की जानकारी को ऐक्सेस करने का तरीका इस बात पर निर्भर करता है कि स्टैंडर्ड एपीआई कॉल, कुछ अनुरोध पूरे न होने या स्ट्रीमिंग का इस्तेमाल किया जा रहा है या नहीं.
स्टैंडर्ड और स्ट्रीमिंग एपीआई कॉल
जब एपीआई कॉल, आंशिक गड़बड़ी का इस्तेमाल किए बिना फ़ेल हो जाता है, तो स्ट्रीमिंग कॉल सहित, GoogleAdsFailure ऑब्जेक्ट को gRPC रिस्पॉन्स हेडर में ट्रेलिंग मेटाडेटा के हिस्से के तौर पर दिखाया जाता है. अगर स्टैंडर्ड कॉल के लिए REST का इस्तेमाल किया जा रहा है, तो एचटीटीपी रिस्पॉन्स में GoogleAdsFailure दिखता है. क्लाइंट लाइब्रेरी आम तौर पर, इसे GoogleAdsFailure एट्रिब्यूट के साथ अपवाद के तौर पर दिखाती हैं.
कुछ फ़ाइलों का फ़ॉर्मैट नहीं बदला जा सका
अगर partial
failure का इस्तेमाल किया जा रहा है, तो फ़ेल हुए
ऑपरेशन से जुड़ी गड़बड़ियों को रिस्पॉन्स के partial_failure_error फ़ील्ड में दिखाया जाता है. इन्हें रिस्पॉन्स हेडर में नहीं दिखाया जाता. इस मामले में, GoogleAdsFailure को जवाब में मौजूद google.rpc.Status ऑब्जेक्ट में एम्बेड किया जाता है.
बैच जॉब
बैच प्रोसेसिंग के लिए, अलग-अलग कार्रवाइयों से जुड़ी गड़बड़ियों का पता लगाया जा सकता है. इसके लिए, नौकरी पूरी होने के बाद बैच जॉब के नतीजे वापस पाएं. अगर कोई कार्रवाई पूरी नहीं होती है, तो उसके नतीजे में status फ़ील्ड शामिल होगा. इसमें गड़बड़ी की जानकारी होगी.
अनुरोध का आईडी
request-id एक यूनीक स्ट्रिंग है. इससे आपके एपीआई अनुरोध की पहचान होती है. साथ ही, गड़बड़ी ठीक करने के लिए यह ज़रूरी है.
आपको request-id कई जगहों पर मिल सकता है:
GoogleAdsFailure: अगर कोई एपीआई कॉल पूरा नहीं होता है औरGoogleAdsFailureदिखता है, तो इसमेंrequest_idशामिल होगा.- ट्रेलिंग मेटाडेटा: अनुरोध पूरा होने और पूरा न होने, दोनों ही स्थितियों में
request-idgRPC जवाब के ट्रेलिंग मेटाडेटा में उपलब्ध होता है. - रिस्पॉन्स हेडर: अनुरोध पूरा होने और पूरा न होने, दोनों ही मामलों में
request-id, gRPC और एचटीटीपी रिस्पॉन्स हेडर में भी उपलब्ध होता है. हालांकि, अनुरोध पूरा होने पर स्ट्रीमिंग के लिए किए गए अनुरोधों में यह उपलब्ध नहीं होता. SearchGoogleAdsStreamResponse: स्ट्रीमिंग के अनुरोधों के लिए, हरSearchGoogleAdsStreamResponseमैसेज मेंrequest_idफ़ील्ड होता है.
गड़बड़ियों की जानकारी लॉग करते समय या सहायता टीम से संपर्क करते समय, request-id को शामिल करना न भूलें. इससे समस्याओं का पता लगाने में मदद मिलती है.
गड़बड़ियों को ठीक करने के सबसे सही तरीके
भरोसेमंद ऐप्लिकेशन बनाने के लिए, यहां दिए गए सबसे सही तरीके अपनाएं:
गड़बड़ी की जानकारी देखें:
Statusऑब्जेक्ट केdetailsफ़ील्ड को हमेशा पार्स करें. खास तौर पर,GoogleAdsFailureको देखें.GoogleAdsErrorमें मौजूदerrorCode,message, औरlocationसे, डीबग करने और उपयोगकर्ताओं के सुझाव/राय या शिकायत के लिए सबसे ज़्यादा काम की जानकारी मिलती है.क्लाइंट और सर्वर की गड़बड़ियों में अंतर करें:
- क्लाइंट की गड़बड़ियां:
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATEDजैसे कोड. इनके लिए, अनुरोध में बदलाव करने या आपके ऐप्लिकेशन की स्थिति/क्रेडेंशियल में बदलाव करने की ज़रूरत होती है. समस्या को ठीक किए बिना, अनुरोध को फिर से न भेजें. - सर्वर से जुड़ी गड़बड़ियां:
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWNजैसे कोड. इनसे पता चलता है कि एपीआई सेवा में कुछ समय के लिए समस्या आई है.
- क्लाइंट की गड़बड़ियां:
फिर से कोशिश करने की रणनीति लागू करें:
- फिर से कोशिश कब करें: सर्वर की कुछ समय के लिए होने वाली गड़बड़ियों के लिए, सिर्फ़ तब फिर से कोशिश करें, जब गड़बड़ी
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWN, औरABORTEDजैसी हो. - एक्सपोनेंशियल बैकऑफ़: फिर से कोशिश करने के बीच बढ़ते समय के लिए, एक्सपोनेंशियल बैकऑफ़ एल्गोरिदम का इस्तेमाल करें. इससे पहले से ही दबाव में चल रही सेवा पर और दबाव नहीं पड़ता. उदाहरण के लिए, पहले एक सेकंड, फिर दो सेकंड, फिर चार सेकंड तक इंतज़ार करें. इसके बाद, फिर से कोशिश करने की ज़्यादा से ज़्यादा संख्या या इंतज़ार करने का कुल समय खत्म होने तक इंतज़ार करें.
- जिटर: बैकऑफ़ में होने वाली देरी में थोड़ी सी रैंडम रकम जोड़ें, ताकि "थंडरिंग हर्ड" की समस्या को रोका जा सके. इस समस्या में कई क्लाइंट एक साथ फिर से कोशिश करते हैं.
- फिर से कोशिश कब करें: सर्वर की कुछ समय के लिए होने वाली गड़बड़ियों के लिए, सिर्फ़ तब फिर से कोशिश करें, जब गड़बड़ी
पूरी जानकारी लॉग करें: गड़बड़ी के पूरे जवाब को लॉग करें. इसमें सभी जानकारी शामिल होनी चाहिए. खास तौर पर, अनुरोध आईडी. यह जानकारी डीबग करने के लिए ज़रूरी है. साथ ही, अगर ज़रूरत हो, तो Google की सहायता टीम को समस्याओं की रिपोर्ट करने के लिए भी यह जानकारी ज़रूरी है.
उपयोगकर्ताओं से सुझाव/राय/शिकायत पाना:
GoogleAdsErrorकोड और मैसेज के आधार पर, अपने ऐप्लिकेशन के उपयोगकर्ताओं को साफ़ तौर पर और मददगार सुझाव/राय/शिकायत दें. उदाहरण के लिए, सिर्फ़ "एक गड़बड़ी हुई" कहने के बजाय,"कैंपेन का नाम ज़रूरी है" या "विज्ञापन ग्रुप का दिया गया आईडी नहीं मिला" कहा जा सकता है.
इन दिशा-निर्देशों का पालन करके, Google Ads API से मिली गड़बड़ियों का पता लगाया जा सकता है और उन्हें ठीक किया जा सकता है. इससे ज़्यादा स्थिर और इस्तेमाल में आसान ऐप्लिकेशन बनाए जा सकते हैं.