इंस्टॉल किए जा सकने वाले ट्रिगर

आसान ट्रिगर की तरह, इंस्टॉल किए जा सकने वाले ट्रिगर से Apps Script में किसी खास इवेंट, जैसे कि दस्तावेज़ खोलने पर अपने-आप काम हो जाता है. हालांकि, इंस्टॉल किए जा सकने वाले ट्रिगर, आसान ट्रिगर के मुकाबले ज़्यादा फ़्लेक्सिबल होते हैं: वे ऐसी सेवाओं को कॉल कर सकते हैं जिन्हें अनुमति की ज़रूरत होती है. वे कई अन्य तरह के इवेंट ऑफ़र करते हैं, जिनमें समय के हिसाब से चलने वाले (क्लॉक) ट्रिगर भी शामिल हैं. साथ ही, उन्हें प्रोग्राम के हिसाब से कंट्रोल किया जा सकता है. आसान और इंस्टॉल किए जा सकने वाले , दोनों तरह के ट्रिगर के लिए, Apps Script, ट्रिगर किए गए फ़ंक्शन को एक इवेंट ऑब्जेक्ट पास करती है. इसमें इवेंट के कॉन्टेक्स्ट की जानकारी होती है.

ज़रूरी शर्तें

भले ही इंस्टॉल किए जा सकने वाले ट्रिगर, आसान ट्रिगर के मुकाबले ज़्यादा विकल्प देते हैं, फिर भी उन पर कई पाबंदियां लागू होती हैं:

  • अगर किसी फ़ाइल को रीड-ओनली (देखें या टिप्पणी करें) मोड में खोला जाता है, तो ये शॉर्टकट काम नहीं करते. स्टैंडअलोन स्क्रिप्ट के लिए, ट्रिगर को ठीक से चलाने के लिए उपयोगकर्ताओं के पास कम से कम स्क्रिप्ट फ़ाइल का ऐक्सेस होना ज़रूरी है.
  • स्क्रिप्ट निष्पादन और एपीआई अनुरोधों की वजह से ट्रिगर नहीं चलते. उदाहरण के लिए, नया फ़ॉर्म जवाब सबमिट करने के लिए FormResponse.submit() को कॉल करने से, फ़ॉर्म के सबमिट ट्रिगर नहीं चलते.

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

  • दिया गया खाता किसी दूसरे खाते से इंस्टॉल किए गए ट्रिगर नहीं देख सकता, भले ही पहला खाता अब भी उन ट्रिगर को सक्रिय कर सकता है.

  • इंस्टॉल किए जा सकने वाले ट्रिगर, Apps Script ट्रिगर कोटा की सीमाओं पर निर्भर करते हैं.

समय के हिसाब से ट्रिगर

समय पर चलने वाला ट्रिगर (जिसे क्लॉक ट्रिगर भी कहा जाता है) यूनिक्स में क्रॉन जॉब की तरह ही होता है. समय के आधार पर ट्रिगर होने वाले ट्रिगर से, स्क्रिप्ट को किसी खास समय पर या बार-बार चलने वाले इंटरवल पर एक्ज़ीक्यूट किया जा सकता है. ऐसा हर मिनट या महीने में एक बार नहीं किया जा सकता. (ध्यान दें कि ऐड-ऑन में समय पर चलने वाले ट्रिगर का इस्तेमाल, ज़्यादा से ज़्यादा एक घंटे में एक बार किया जा सकता है.) यह समय थोड़ा भी अनियमित हो सकता है. उदाहरण के लिए, अगर आपने बार-बार सुबह 9 बजे का ट्रिगर बनाया है, तो Apps Script में सुबह 9 बजे से 10 बजे के बीच का समय चुना जाता है. इसके बाद, इस समय को हर दिन एक जैसा रखा जाता है, ताकि ट्रिगर के दोबारा चालू होने से 24 घंटे पहले ही ट्रिगर हों.

नीचे Google Chat ऐप्लिकेशन का एक उदाहरण दिया गया है, जो ऐप्लिकेशन के हर स्पेस पर हर मिनट एक मैसेज पोस्ट करता है:

// Example app for Google Chat that demonstrates app-initiated messages
// by spamming the user every minute.
//
// This app makes use of the Apps Script OAuth2 library at:
//     https://github.com/googlesamples/apps-script-oauth2
//
// Follow the instructions there to add the library to your script.

// When added to a space, we store the space's ID in ScriptProperties.
function onAddToSpace(e) {
  PropertiesService.getScriptProperties()
      .setProperty(e.space.name, '');
  return {
    'text': 'Hi! I\'ll post a message here every minute. ' +
            'Please remove me after testing or I\'ll keep spamming you!'
  };
}

// When removed from a space, we remove the space's ID from ScriptProperties.
function onRemoveFromSpace(e) {
  PropertiesService.getScriptProperties()
      .deleteProperty(e.space.name);
}

// Add a trigger that invokes this function every minute in the
// "Edit > Current Project's Triggers" menu. When it runs, it
// posts in each space the app was added to.
function onTrigger() {
  var spaceIds = PropertiesService.getScriptProperties()
      .getKeys();
  var message = { 'text': 'Hi! It\'s now ' + (new Date()) };
  for (var i = 0; i < spaceIds.length; ++i) {
    postMessage(spaceIds[i], message);
  }
}
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
// The values below are copied from the JSON file downloaded upon
// service account creation.
// For SERVICE_ACCOUNT_PRIVATE_KEY, remember to include the BEGIN and END lines
// of the private key
var SERVICE_ACCOUNT_PRIVATE_KEY = '...';
var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';

// Posts a message into the given space ID via the API, using
// service account authentication.
function postMessage(spaceId, message) {
  var service = OAuth2.createService('chat')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')
      .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
      .setClientId(SERVICE_ACCOUNT_EMAIL)
      .setPropertyStore(PropertiesService.getUserProperties())
      .setScope(SCOPE);
  if (!service.hasAccess()) {
    Logger.log('Authentication error: %s', service.getLastError());
    return;
  }
  var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
  UrlFetchApp.fetch(url, {
    method: 'post',
    headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
    contentType: 'application/json',
    payload: JSON.stringify(message),
  });
}

इवेंट-ड्रिवन ट्रिगर

इंस्टॉल किए जा सकने वाले इवेंट-ड्रिवन ट्रिगर, सैद्धांतिक तौर पर onOpen() जैसे सरल ट्रिगर से मिलते-जुलते होते हैं. हालांकि, वे दूसरे इवेंट के जवाब दे सकते हैं और अलग तरह से काम करते हैं.

उदाहरण के लिए, जब भी बदलाव करने का ऐक्सेस रखने वाला कोई उपयोगकर्ता स्प्रेडशीट को खोलता है, तो Google Sheets के लिए इंस्टॉल किया जा सकने वाला ओपन ट्रिगर चालू हो जाता है. यह सुविधा, सामान्य onOpen() ट्रिगर की तरह ही काम करती है. हालांकि, इंस्टॉल किया जा सकने वाला वर्शन उन सेवाओं को कॉल कर सकता है जिनके लिए अनुमति की ज़रूरत होती है. इंस्टॉल करने लायक वर्शन, ट्रिगर बनाने वाले उपयोगकर्ता की अनुमति के साथ चलता है, भले ही बदलाव करने का ऐक्सेस रखने वाला कोई दूसरा उपयोगकर्ता स्प्रेडशीट खोले.

ऐप्लिकेशन के लिएGoogle Workspace इंस्टॉल किए जा सकने वाले कई ट्रिगर मौजूद हैं:

  • इंस्टॉल किया जा सकने वाला ओपन ट्रिगर तब चलता है, जब उपयोगकर्ता कोई ऐसी स्प्रेडशीट, दस्तावेज़ या फ़ॉर्म खोलता है जिसमें उसे बदलाव करने की अनुमति होती है.
  • जब कोई उपयोगकर्ता किसी स्प्रेडशीट में मौजूद वैल्यू में बदलाव करता है, तब इंस्टॉल किया जा सकने वाला बदलाव करें ट्रिगर चलता है.
  • इंस्टॉल किया जा सकने वाला बदलाव ट्रिगर तब चलता है, जब कोई उपयोगकर्ता स्प्रेडशीट के स्ट्रक्चर में बदलाव करता है. उदाहरण के लिए, कोई नई शीट जोड़ना या कोई कॉलम हटाना.
  • जब कोई उपयोगकर्ता किसी फ़ॉर्म का जवाब देता है, तब इंस्टॉल किया जा सकने वाला फ़ॉर्म सबमिट ट्रिगर चलता है. फ़ॉर्म-सबमिट ट्रिगर के दो वर्शन होते हैं, एक Google Forms के लिए और अगर फ़ॉर्म को स्प्रेडशीट में सबमिट किया जाता है, तो दूसरा वर्शन Sheets के लिए.
  • इंस्टॉल किया जा सकने वाला कैलेंडर इवेंट ट्रिगर तब चलता है, जब उपयोगकर्ता के कैलेंडर इवेंट अपडेट किए जाते हैं, बनाए जाते हैं, उनमें बदलाव किया जाता है या उन्हें मिटाया जाता है.

स्टैंडअलोन और बाउंड स्क्रिप्ट में, इंस्टॉल किए जा सकने वाले ट्रिगर का इस्तेमाल किया जा सकता है. उदाहरण के लिए, स्टैंडअलोन स्क्रिप्ट TriggerBuilder.forSpreadsheet(key) को कॉल करके और स्प्रेडशीट के आईडी में पास करके, आर्बिट्ररी Google Sheets फ़ाइल के लिए, इंस्टॉल किया जा सकने वाला ट्रिगर बना सकती है.

ट्रिगर को मैन्युअल तरीके से मैनेज करें

स्क्रिप्ट एडिटर में, मैन्युअल तौर पर इंस्टॉल किया जा सकने वाला ट्रिगर बनाने के लिए, यह तरीका अपनाएं:

  1. अपना Apps Script प्रोजेक्ट खोलें.
  2. बाईं ओर, ट्रिगर पर क्लिक करें.
  3. सबसे नीचे दाईं ओर, ट्रिगर जोड़ें पर क्लिक करें.
  4. आपको जिस तरह का ट्रिगर बनाना है उसे चुनें और कॉन्फ़िगर करें.
  5. सेव करें पर क्लिक करें.

प्रोग्राम के हिसाब से ट्रिगर मैनेज करें

स्क्रिप्ट सेवा की मदद से, प्रोग्राम के हिसाब से ट्रिगर बनाए और मिटाए भी जा सकते हैं. ScriptApp.newTrigger(functionName) को कॉल करके शुरू करें, जिससे TriggerBuilder दिखता है.

नीचे दिए गए उदाहरण में, टाइम-ड्रिवन दो ट्रिगर बनाने का तरीका बताया गया है—एक ट्रिगर, जो हर छह घंटे में ट्रिगर होता है और दूसरा, जो हर सोमवार सुबह 9 बजे ट्रिगर होता है.

triggers/triggers.gs
/**
 * Creates two time-driven triggers.
 * @see https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(6)
      .create();
  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

इस उदाहरण में, स्प्रेडशीट के लिए इंस्टॉल किए जा सकने वाले ओपन ट्रिगर बनाने का तरीका बताया गया है. ध्यान दें, किसी सामान्य onOpen() ट्रिगर के उलट, इंस्टॉल किए जा सकने वाले ट्रिगर की स्क्रिप्ट का स्प्रेडशीट से बाध्य होना ज़रूरी नहीं है. स्टैंडअलोन स्क्रिप्ट से यह ट्रिगर बनाने के लिए, बस SpreadsheetApp.getActive() को SpreadsheetApp.openById(id) को किए गए कॉल से बदल दें.

triggers/triggers.gs
/**
 * Creates a trigger for when a spreadsheet opens.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function createSpreadsheetOpenTrigger() {
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

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

triggers/triggers.gs
/**
 * Deletes a trigger.
 * @param {string} triggerId The Trigger ID.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function deleteTrigger(triggerId) {
  // Loop over all triggers.
  const allTriggers = ScriptApp.getProjectTriggers();
  for (let index = 0; index < allTriggers.length; index++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[index].getUniqueId() === triggerId) {
      ScriptApp.deleteTrigger(allTriggers[index]);
      break;
    }
  }
}

ट्रिगर में गड़बड़ियां

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

इसके बजाय, Apps Script आपको इस तरह का ईमेल भेजती है:

From: noreply-apps-scripts-notifications@google.com
Subject: Summary of failures for Google Apps Script
Your script has recently failed to finish successfully.
A summary of the failure(s) is shown below.

ईमेल में, ट्रिगर को बंद करने या उसे फिर से कॉन्फ़िगर करने का लिंक मौजूद होता है. अगर स्क्रिप्ट किसी Google Sheets, Docs या Forms फ़ाइल से बाउंड है, तो ईमेल में उस फ़ाइल का लिंक भी शामिल होता है. इन लिंक की मदद से, ट्रिगर को बंद किया जा सकता है. इसके अलावा, गड़बड़ी को ठीक करने के लिए, स्क्रिप्ट में बदलाव किया जा सकता है.

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

  1. script.google.com पर जाएँ.
  2. बाईं ओर, मेरे ट्रिगर पर क्लिक करें.
  3. किसी ट्रिगर को मिटाने के लिए, ट्रिगर की दाईं ओर, ज़्यादा > ट्रिगर मिटाएं पर क्लिक करें.

ऐड-ऑन में ट्रिगर

इंस्टॉल किए जा सकने वाले ट्रिगर के अलावा, ऐड-ऑन में मेनिफ़ेस्ट ट्रिगर का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, Google Workspace ऐड-ऑन के लिए ट्रिगर देखें.