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

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

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

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

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

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

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

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

समय-आधारित ट्रिगर

टाइम-ड्रिवन ट्रिगर (जिसे क्लॉक ट्रिगर भी कहा जाता है) Unix में एक क्रान जॉब की तरह ही है. समय के आधार पर ट्रिगर होने वाले ट्रिगर की मदद से, स्क्रिप्ट को किसी खास समय पर या बार-बार लागू होने वाले ट्रिगर की मदद से, हर मिनट में या महीने में कभी-कभी एक बार एक्ज़ीक्यूट किया जा सकता है. (ध्यान दें कि ऐड-ऑन एक घंटे में ज़्यादा से ज़्यादा एक बार, टाइम-ड्रिवन ट्रिगर का इस्तेमाल कर सकता है.) समय थोड़ा अनियमित हो सकता है—उदाहरण के लिए, अगर सुबह 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 फ़ॉर्म के लिए और अगर फ़ॉर्म किसी स्प्रेडशीट में सबमिट किया जाता है, तो एक 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. किसी ट्रिगर को मिटाने के लिए, ट्रिगर के दाईं ओर, ज़्यादा > ट्रिगर मिटाएं पर क्लिक करें.

ऐड-ऑन में इंस्टॉल किए जा सकने वाले ट्रिगर

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