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

साधारण ट्रिगर की तरह ही, इंस्टॉल किए जा सकने वाले ट्रिगर की मदद से, 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 Forms के लिए और अगर फ़ॉर्म किसी स्प्रेडशीट में सबमिट होता है, तो एक Sheets के लिए.
  • इंस्टॉल किया जा सकने वाला कैलेंडर इवेंट ट्रिगर तब चलता है, जब उपयोगकर्ता के कैलेंडर इवेंट अपडेट किए जाते हैं, बनाए जाते हैं, उनमें बदलाव किया जाता है या उन्हें मिटाया जाता है.

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

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

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

  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 ऐड-ऑन के लिए ट्रिगर देखें.