समस्या का हल

सबसे अनुभवी डेवलपर भी पहली बार में कोड को सही तरीके से नहीं लिख पाता. इसलिए, समस्या हल करना डेवलपमेंट प्रोसेस का एक अहम हिस्सा है. इस सेक्शन में, स्क्रिप्ट में मौजूद गड़बड़ियों को ढूंढने, समझने, और उन्हें ठीक करने के तरीके बताए गए हैं.

गड़बड़ी के मैसेज

जब आपकी स्क्रिप्ट में कोई गड़बड़ी होती है, तो गड़बड़ी का मैसेज दिखता है. इसमें लाइन नंबर भी होता है. गड़बड़ियां मुख्य रूप से दो तरह की होती हैं: सिंटैक्स से जुड़ी गड़बड़ियां और रनटाइम से जुड़ी गड़बड़ियां.

सिंटैक्स की गड़बड़ियां

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

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

समस्या यह है कि चौथी लाइन के आखिर में ) वर्ण मौजूद नहीं है. स्क्रिप्ट सेव करते समय, यह गड़बड़ी दिखती है:

आर्ग्युमेंट की सूची के बाद ) मौजूद नहीं है. (चौथी लाइन)

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

रनटाइम से जुड़ी गड़बड़ियां

फ़ंक्शन या क्लास का गलत तरीके से इस्तेमाल करने पर, रनटाइम गड़बड़ियां होती हैं. इनका पता स्क्रिप्ट चलने के दौरान चलता है. उदाहरण के लिए, इस कोड से रनटाइम में गड़बड़ी होती है:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

कोड का फ़ॉर्मैट सही है, लेकिन "john" एक अमान्य ईमेल पता है. यह गड़बड़ी हुई है:

अमान्य ईमेल पता: john (लाइन 5)

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

आम तौर पर होने वाली गड़बड़ियां

यहां सामान्य गड़बड़ियों और उनकी वजहों की सूची दी गई है.

सेवा का कई बार अनुरोध किया गया: <action name>

इस गड़बड़ी का मतलब है कि आपने किसी कार्रवाई के लिए, रोज़ाना तय किए गए कोटे से ज़्यादा कार्रवाई की है. जैसे, आपने बहुत ज़्यादा ईमेल भेजे हैं. कोटा, खाते के टाइप के हिसाब से अलग-अलग होते हैं और इनमें बदलाव हो सकता है. Apps Script के कोटे से जुड़े दस्तावेज़ में जाकर, सीमाएं देखें.

सर्वर उपलब्ध नहीं है. या सर्वर में गड़बड़ी हुई है. कृपया फिर से कोशिश करें.

ये वजहें हो सकती हैं:

  • Google का कोई सर्वर कुछ समय के लिए उपलब्ध नहीं है. कुछ देर इंतज़ार करें और फिर से कोशिश करें.
  • आपकी स्क्रिप्ट में मौजूद गड़बड़ी से जुड़ा कोई मैसेज नहीं है. समस्या का पता लगाने के लिए, डीबग करने की कोशिश करें.
  • Google Apps Script में कोई गड़बड़ी है. बग में गड़बड़ी की रिपोर्ट खोजें और फ़ाइल करें.

इस कार्रवाई को पूरा करने के लिए, अनुमति देना ज़रूरी है.

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

स्क्रिप्ट को अनुमति देने के लिए, स्क्रिप्ट एडिटर खोलें और कोई फ़ंक्शन चलाएं. अगर स्क्रिप्ट में नई अनधिकृत सेवाओं का इस्तेमाल किया जाता है, तो आपको इसे फिर से अनुमति देनी होगी.

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

  1. Apps Script प्रोजेक्ट में, ट्रिगर पर क्लिक करें.
  2. ट्रिगर के बगल में, ज़्यादा > ट्रिगर मिटाएं पर क्लिक करें.

इसके अलावा, ऐड-ऑन अनइंस्टॉल करें.

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

ऐक्सेस नहीं दिया गया: DriveApp या डोमेन की नीति के तहत, तीसरे पक्ष के Drive ऐप्लिकेशन बंद कर दिए गए हैं

Google Workspace एडमिन, अपने डोमेन के लिए Drive API को बंद कर सकते हैं. इससे उपयोगकर्ता, Drive ऐप्लिकेशन या Apps Script के ऐसे ऐड-ऑन का इस्तेमाल नहीं कर पाएंगे जो Drive सेवा का इस्तेमाल करते हैं.

अगर किसी ऐड-ऑन या वेब ऐप्लिकेशन को पूरे डोमेन में इंस्टॉल करने के लिए पब्लिश किया गया है और उसे एडमिन ने इंस्टॉल किया है, तो Drive API बंद होने पर भी स्क्रिप्ट काम करती है.

स्क्रिप्ट के पास, सक्रिय उपयोगकर्ता की पहचान पाने की अनुमति नहीं है.

ऐक्टिव उपयोगकर्ता की पहचान और ईमेल उपलब्ध नहीं है. यह समस्या, AuthMode.FULL के अलावा अन्य अनुमति मोड में, Session.getActiveUser() या Session.getEffectiveUser() को कॉल करने की वजह से होती है. अगर आपकी स्क्रिप्ट किसी ट्रिगर पर चलती है, तो आपको Apps Script के इवेंट ऑब्जेक्ट की authMode प्रॉपर्टी में अनुमति मोड मिल सकता है.

अनुमति देने के मोड के आधार पर, इस समस्या को हल करें:

  • AuthMode.FULL में, इसके बजाय Session.getEffectiveUser() का इस्तेमाल करें.
  • AuthMode.LIMITED में, पक्का करें कि मालिक ने स्क्रिप्ट को अनुमति दी हो.
  • अनुमति देने के अन्य तरीकों में, इनमें से किसी भी तरीके का इस्तेमाल न करें.
  • अगर आप Google Workspace के ग्राहक हैं और आपको इंस्टॉल किए जा सकने वाले ट्रिगर से यह चेतावनी हाल ही में मिली है, तो पक्का करें कि ट्रिगर आपके संगठन में किसी उपयोगकर्ता के तौर पर चल रहा हो.

लाइब्रेरी मौजूद नहीं है

अगर एक साथ कई लोग किसी लाइब्रेरी को ऐक्सेस करते हैं, तो हो सकता है कि उसे 'मौजूद नहीं है' के तौर पर मार्क कर दिया जाए. इस समस्या को हल करने के लिए:

  • लाइब्रेरी के कोड को सीधे अपनी स्क्रिप्ट में कॉपी करें.
  • अपने खाते से लाइब्रेरी को कॉपी करें और उसे डिप्लॉय करें.
  • अगर आपकी स्क्रिप्ट को काम करने के लिए लाइब्रेरी की ज़रूरत नहीं है, तो स्क्रिप्ट प्रोजेक्ट से लाइब्रेरी हटा दें.

लाइब्रेरी वर्शन मौजूद न होने या मिटाए गए वर्शन पर डिप्लॉयमेंट की वजह से गड़बड़ी हुई. गड़बड़ी का कोड Not_Found

इस गड़बड़ी के मैसेज का मतलब इनमें से कोई एक हो सकता है:

  • डिप्लॉयमेंट में इस्तेमाल किया गया स्क्रिप्ट वर्शन मिटा दिया गया है. इस समस्या को हल करने के लिए, डिप्लॉयमेंट में बदलाव करें और स्क्रिप्ट का कोई दूसरा वर्शन चुनें.
  • स्क्रिप्ट में इस्तेमाल किया गया लाइब्रेरी का वर्शन मिटा दिया गया है. इस समस्या को ठीक करने के लिए, स्क्रिप्ट एडिटर में "लाइब्रेरी" में जाकर, लाइब्रेरी ढूंढें. इसके बाद, उसे किसी दूसरे वर्शन पर अपडेट करें या लाइब्रेरी को हटाएं. अपडेट करने के लिए, वर्शन नंबर पर क्लिक करें और कोई दूसरा वर्शन चुनें. हटाने के लिए, ज़्यादा > हटाएं पर क्लिक करें.
  • किसी लाइब्रेरी में दूसरी लाइब्रेरी शामिल है और उस लाइब्रेरी का वर्शन मिटा दिया गया है. इस समस्या को ठीक करने के लिए, लाइब्रेरी के लेखक से संपर्क करें या लाइब्रेरी के किसी ऐसे वर्शन का इस्तेमाल करें जिसका इस्तेमाल आपकी स्क्रिप्ट करती है.

गड़बड़ी 400: ऐडवांस सेवा के साथ Google Chat API को कॉल करते समय invalid_scope

अगर आपको गड़बड़ी के मैसेज Some requested scopes cannot be shown के साथ Error 400: invalid_scope दिखता है, तो इसका मतलब है कि आपने Apps Script प्रोजेक्ट की appsscript.json फ़ाइल में कोई भी अनुमति स्कोप तय नहीं किया है. ज़्यादातर मामलों में, Apps Script अपने-आप यह तय कर लेता है कि किसी स्क्रिप्ट को किन स्कोप की ज़रूरत है. हालांकि, Chat की ऐडवांस सेवा का इस्तेमाल करते समय, आपको उन अनुमति स्कोप को मैन्युअल तरीके से जोड़ना होगा जिनका इस्तेमाल आपकी स्क्रिप्ट करती है. इन्हें आपको अपने Apps Script प्रोजेक्ट की मेनिफ़ेस्ट फ़ाइल में जोड़ना होगा. स्कोप साफ़ तौर पर सेट करना लेख पढ़ें.

इस गड़बड़ी को ठीक करने के लिए, Apps Script प्रोजेक्ट की appsscript.json फ़ाइल में, अनुमति देने के सही स्कोप जोड़ें. इन्हें oauthScopes ऐरे के हिस्से के तौर पर जोड़ें. उदाहरण के लिए, spaces.messages.create तरीके को कॉल करने के लिए, यह कोड जोड़ें:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

आपके एडमिन ने, <URL> के लिए UrlFetch सेवा इस्तेमाल करने की अनुमति नहीं दी है

Google Workspace एडमिन, अनुमति वाली सूची का इस्तेमाल करके बाहरी डोमेन के ऐक्सेस को कंट्रोल कर सकते हैं. यूआरएल को अनुमति वाली सूची में जोड़ने के लिए, अपने एडमिन से संपर्क करें.

डीबग करना

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

लॉग इन हो रहा है

स्क्रिप्ट एडिटर में, स्क्रिप्ट के चलने के दौरान जानकारी रिकॉर्ड करें. इसके लिए, Cloud Logging सेवा या Logger और Console सेवाओं का इस्तेमाल करें.

रिपोर्ट करते समय गड़बड़ी हुई

Google Cloud में Error Reporting का इस्तेमाल करने के लिए, डिफ़ॉल्ट प्रोजेक्ट के बजाय, स्टैंडर्ड और उपयोगकर्ता के मैनेज किए गए प्रोजेक्ट का इस्तेमाल करें.

स्टैंडर्ड प्रोजेक्ट का इस्तेमाल करने पर, रनटाइम की गड़बड़ियां अपने-आप Google Cloud Error Reporting में रिकॉर्ड हो जाती हैं. Google Cloud Console में क्लाउड लॉग और गड़बड़ी की रिपोर्ट देखना.

कार्यान्वयन

Google Apps Script, हर एक्ज़ीक्यूशन को रिकॉर्ड करता है. इसमें क्लाउड लॉग भी शामिल हैं. लागू करने की प्रोसेस देखने के लिए, लागू करने की प्रोसेस पर क्लिक करें.

सेवा की स्थिति की जांच की जा रही है

Google Workspace स्थिति डैशबोर्ड पर जाकर, Google Workspace की सेवाओं में आई रुकावटों के बारे में जानें.

डीबगर और ब्रेकपॉइंट का इस्तेमाल करना

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

ब्रेकपॉइंट जोड़ना

ब्रेकपॉइंट जोड़ने के लिए, उस लाइन नंबर पर कर्सर घुमाएं जिसमें आपको ब्रेकपॉइंट जोड़ना है. लाइन नंबर की बाईं ओर मौजूद सर्कल पर क्लिक करें. यहां दी गई इमेज में, स्क्रिप्ट में जोड़े गए ब्रेकपॉइंट का उदाहरण दिखाया गया है:

ब्रेकपॉइंट जोड़ना

डीबग मोड में स्क्रिप्ट चलाना

स्क्रिप्ट को डीबग मोड में चलाने के लिए, एडिटर में सबसे ऊपर मौजूद डीबग करें पर क्लिक करें.

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

स्क्रिप्ट को चलाने के तरीके को कंट्रोल करने के लिए, डीबगर पैनल में सबसे ऊपर मौजूद "स्टेप इन", "स्टेप ओवर", और "स्टेप आउट" बटन का इस्तेमाल करें. इनकी मदद से, स्क्रिप्ट को एक बार में एक लाइन चलाया जा सकता है. साथ ही, यह देखा जा सकता है कि समय के साथ वैल्यू में कैसे बदलाव होता है.

गड़बड़ी: मौजूदा लाइन का सोर्स कोड उपलब्ध नहीं है

मौजूदा लाइन का सोर्स कोड उपलब्ध नहीं है

यह गड़बड़ी तब दिखती है, जब चालू डिबगिंग फ़ाइल उपलब्ध नहीं होती. Google Apps Script, स्क्रिप्ट एडिटर में डाइनैमिक तरीके से जनरेट की गई JavaScript (JS) स्क्रिप्ट दिखाने की सुविधा नहीं देता. जैसे, eval() और new Function() का इस्तेमाल करके जनरेट की गई स्क्रिप्ट. ये स्क्रिप्ट, V8 इंजन में बनाई और लागू की जाती हैं. हालांकि, इन्हें एडिटर में अलग-अलग फ़ाइलों के तौर पर नहीं दिखाया जाता. इन स्क्रिप्ट में जाने पर, आपको यह गड़बड़ी दिखेगी.

उदाहरण के लिए, यहां दिया गया कोड देखें:

function myFunction() {
  eval('a=2');
}

eval() को कॉल करने पर, इसके आर्ग्युमेंट को JS कोड माना जाता है. साथ ही, यह V8 इंजन में डाइनैमिक तरीके से बनाई गई स्क्रिप्ट के तौर पर काम करता है. eval() में स्टेप-इन करने पर, यह गड़बड़ी दिखती है. अगर स्क्रिप्ट में //# sourceURL टिप्पणी शामिल है, तो कॉल स्टैक में उसका नाम दिखता है. ऐसा न करने पर, इसे बिना नाम वाली एंट्री के तौर पर दिखाया जाता है.

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

एक से ज़्यादा Google खातों में लॉग इन करने से जुड़ी समस्याएं

एक ही समय पर, एक से ज़्यादा Google खातों में लॉग इन करने से, आपको ऐड-ऑन और वेब ऐप्लिकेशन ऐक्सेस करने में समस्या आ सकती है. मल्टी-लॉगिन या एक ही समय पर, एक से ज़्यादा Google खातों में लॉग इन करने पर, Apps Script, ऐड-ऑन या वेब ऐप्लिकेशन का इस्तेमाल नहीं किया जा सकता.

  • एक से ज़्यादा खातों में लॉग इन करके Apps Script एडिटर खोलने पर, Google आपको वह खाता चुनने के लिए कहता है जिससे आपको आगे बढ़ना है.

  • अगर वेब ऐप्लिकेशन या ऐड-ऑन खोलने पर, मल्टी-लॉगिन से जुड़ी समस्याएं आ रही हैं, तो इनमें से कोई एक तरीका आज़माएं:

    • अपने सभी Google खातों से लॉग आउट करें. इसके बाद, सिर्फ़ उस खाते में लॉग इन करें जिसमें वह ऐड-ऑन या वेब ऐप्लिकेशन मौजूद है जिसे आपको ऐक्सेस करना है.
    • Google Chrome में एक गुप्त विंडो या अन्य निजी ब्राउज़िंग विंडो खोलें. इसके बाद, उस Google खाते में लॉग इन करें जिसमें वह ऐड-ऑन या वेब ऐप्लिकेशन मौजूद है जिसका आपको इस्तेमाल करना है.

सहायता पाना

सवाल पूछने या गड़बड़ियों की शिकायत करने के लिए, हमारे सहायता पेज पर जाएं.