ইনস্টলযোগ্য ট্রিগার

সাধারণ ট্রিগারগুলির মতো, ইনস্টলযোগ্য ট্রিগারগুলি অ্যাপস স্ক্রিপ্টকে একটি ফাংশন স্বয়ংক্রিয়ভাবে চালাতে দেয় যখন একটি নির্দিষ্ট ইভেন্ট, যেমন একটি নথি খোলার মতো ঘটনা ঘটে। ইনস্টলেবল ট্রিগারগুলি, তবে, সাধারণ ট্রিগারগুলির তুলনায় আরও নমনীয়তা অফার করে: তারা এমন পরিষেবাগুলিকে কল করতে পারে যেগুলির জন্য অনুমোদনের প্রয়োজন হয়, তারা সময়-চালিত (ঘড়ি) ট্রিগার সহ বেশ কয়েকটি অতিরিক্ত ধরণের ইভেন্ট অফার করে এবং সেগুলি প্রোগ্রামগতভাবে নিয়ন্ত্রণ করা যেতে পারে। সহজ এবং ইনস্টলযোগ্য উভয় ট্রিগারের জন্য, Apps স্ক্রিপ্ট ট্রিগার করা ফাংশনকে একটি ইভেন্ট অবজেক্ট পাস করে যা ইভেন্টটি যে প্রেক্ষাপটে ঘটেছে সে সম্পর্কে তথ্য ধারণ করে।

বিধিনিষেধ

যদিও ইনস্টলযোগ্য ট্রিগারগুলি সাধারণ ট্রিগারগুলির চেয়ে বেশি নমনীয়তা প্রদান করে, তবুও তারা বেশ কয়েকটি বিধিনিষেধের অধীন রয়েছে:

  • শুধুমাত্র-পঠন (দেখুন বা মন্তব্য) মোডে একটি ফাইল খোলা হলে সেগুলি চলবে না। স্বতন্ত্র স্ক্রিপ্টগুলির জন্য, ট্রিগারগুলি সঠিকভাবে চালানোর জন্য ব্যবহারকারীদের অন্ততপক্ষে স্ক্রিপ্ট ফাইলে অ্যাক্সেস দেখতে হবে।
  • স্ক্রিপ্ট এক্সিকিউশন এবং API অনুরোধ ট্রিগার চালানোর কারণ হয় না। উদাহরণস্বরূপ, একটি নতুন ফর্ম প্রতিক্রিয়া জমা দেওয়ার জন্য FormResponse.submit() কল করলে ফর্মের জমা ট্রিগারটি চালানো হয় না।

  • ইনস্টলযোগ্য ট্রিগারগুলি সর্বদা সেই ব্যক্তির অ্যাকাউন্টের অধীনে চালিত হয় যিনি এগুলি তৈরি করেছেন৷ উদাহরণস্বরূপ, যদি আপনি একটি ইনস্টলযোগ্য ওপেন ট্রিগার তৈরি করেন, এটি আপনার সহকর্মী ডকুমেন্টটি খোলে (যদি আপনার সহকর্মীর সম্পাদনার অ্যাক্সেস থাকে), তবে এটি আপনার অ্যাকাউন্ট হিসাবে চলে। এর মানে হল যে আপনি যদি একটি নথি খোলার সময় একটি ইমেল পাঠানোর জন্য একটি ট্রিগার তৈরি করেন, ইমেলটি সর্বদা আপনার অ্যাকাউন্ট থেকে পাঠানো হয়, অগত্যা যে অ্যাকাউন্টটি নথিটি খুলেছে তা নয়৷ যাইহোক, আপনি প্রতিটি অ্যাকাউন্টের জন্য একটি ইনস্টলযোগ্য ট্রিগার তৈরি করতে পারেন, যার ফলে প্রতিটি অ্যাকাউন্ট থেকে একটি ইমেল পাঠানো হবে।

  • একটি প্রদত্ত অ্যাকাউন্ট দ্বিতীয় অ্যাকাউন্ট থেকে ইনস্টল করা ট্রিগারগুলি দেখতে পারে না, যদিও প্রথম অ্যাকাউন্টটি এখনও সেই ট্রিগারগুলিকে সক্রিয় করতে পারে৷

  • ইনস্টলযোগ্য ট্রিগারগুলি Apps স্ক্রিপ্ট ট্রিগার কোটা সীমা সাপেক্ষে৷

সময় চালিত ট্রিগার

একটি সময়-চালিত ট্রিগার (একটি ঘড়ির ট্রিগারও বলা হয়) ইউনিক্সের ক্রন কাজের অনুরূপ। সময়-চালিত ট্রিগারগুলি স্ক্রিপ্টগুলিকে একটি নির্দিষ্ট সময়ে বা পুনরাবৃত্ত বিরতিতে কার্যকর করতে দেয়, প্রতি মিনিটের মতো ঘন ঘন বা প্রতি মাসে একবারের মতো কদাচিৎ। (মনে রাখবেন যে একটি অ্যাড-অন প্রতি ঘন্টায় সর্বাধিক একবার সময়-চালিত ট্রিগার ব্যবহার করতে পারে।) সময়টি কিছুটা এলোমেলো হতে পারে—উদাহরণস্বরূপ, আপনি যদি একটি পুনরাবৃত্ত 9 AM ট্রিগার তৈরি করেন, অ্যাপস স্ক্রিপ্ট সকাল 9 AM থেকে 10 এর মধ্যে একটি সময় বেছে নেয় AM, তারপরে সেই সময়টিকে প্রতিদিন থেকে সামঞ্জস্যপূর্ণ রাখে যাতে ট্রিগারটি আবার ফায়ার হওয়ার আগে 24 ঘন্টা অতিবাহিত হয়।

নিচে একটি Google চ্যাট অ্যাপের উদাহরণ দেওয়া হল যেটি প্রতি মিনিটে অ্যাপটিতে থাকা প্রতিটি জায়গায় একটি বার্তা পোস্ট করে:

// 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 শীটগুলির জন্য ইনস্টলযোগ্য ওপেন ট্রিগারটি সক্রিয় হয় যখনই স্প্রেডশীটটি যে কোনো ব্যবহারকারীর দ্বারা খোলা হয় যার সম্পাদনা অ্যাক্সেস রয়েছে, ঠিক সাধারণ onOpen() ট্রিগারের মতো৷ যাইহোক, ইনস্টলযোগ্য সংস্করণটি এমন পরিষেবাগুলিকে কল করতে পারে যেগুলির জন্য অনুমোদন প্রয়োজন৷ ইনস্টলযোগ্য সংস্করণটি ট্রিগার তৈরিকারী ব্যবহারকারীর অনুমোদনের সাথে চলে, এমনকি যদি সম্পাদনা অ্যাক্সেস সহ অন্য ব্যবহারকারী স্প্রেডশীটটি খোলে।

Google Workspace অ্যাপ্লিকেশনের জন্য অনেকগুলি ইনস্টলযোগ্য ট্রিগার রয়েছে:

  • একটি ইনস্টলযোগ্য ওপেন ট্রিগার চলে যখন একজন ব্যবহারকারী একটি স্প্রেডশীট, নথি বা ফর্ম খোলে যা তাদের সম্পাদনার অনুমতি রয়েছে।
  • একটি ইনস্টলযোগ্য সম্পাদনা ট্রিগার চলে যখন একজন ব্যবহারকারী একটি স্প্রেডশীটে একটি মান পরিবর্তন করে।
  • একটি ইনস্টলযোগ্য পরিবর্তন ট্রিগার চলে যখন একজন ব্যবহারকারী নিজেই একটি স্প্রেডশীটের গঠন পরিবর্তন করে—উদাহরণস্বরূপ, একটি নতুন শীট যোগ করে বা একটি কলাম সরিয়ে।
  • একটি ইনস্টলযোগ্য ফর্ম জমা ট্রিগার রান যখন একটি ব্যবহারকারী একটি ফর্ম প্রতিক্রিয়া. ফর্ম-সাবমিট ট্রিগারের দুটি সংস্করণ রয়েছে, একটি Google ফর্মগুলির জন্য এবং একটি পত্রকের জন্য যদি ফর্মটি স্প্রেডশীটে জমা হয়
  • একটি ইনস্টলযোগ্য ক্যালেন্ডার ইভেন্ট ট্রিগার চলে যখন একজন ব্যবহারকারীর ক্যালেন্ডার ইভেন্টগুলি আপডেট করা হয়—তৈরি করা, সম্পাদনা করা বা মুছে ফেলা হয়৷

আপনি স্বতন্ত্র এবং আবদ্ধ স্ক্রিপ্টে ইনস্টলযোগ্য ট্রিগার ব্যবহার করতে পারেন। উদাহরণস্বরূপ, একটি স্বতন্ত্র স্ক্রিপ্ট TriggerBuilder.forSpreadsheet(key) কল করে এবং স্প্রেডশীটের আইডি পাস করার মাধ্যমে একটি নির্বিচারে Google শীট ফাইলের জন্য প্রোগ্রাম্যাটিকভাবে একটি ইনস্টলযোগ্য ট্রিগার তৈরি করতে পারে।

ম্যানুয়ালি ট্রিগার পরিচালনা করুন

স্ক্রিপ্ট সম্পাদকে ম্যানুয়ালি একটি ইনস্টলযোগ্য ট্রিগার তৈরি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার Apps স্ক্রিপ্ট প্রকল্প খুলুন.
  2. বাম দিকে, ট্রিগার ক্লিক করুন।
  3. নীচে ডানদিকে, ট্রিগার যোগ করুন ক্লিক করুন।
  4. আপনি যে ধরনের ট্রিগার তৈরি করতে চান সেটি নির্বাচন করুন এবং কনফিগার করুন।
  5. Save এ ক্লিক করুন।

প্রোগ্রামগতভাবে ট্রিগার পরিচালনা করুন

আপনি স্ক্রিপ্ট পরিষেবার মাধ্যমে প্রোগ্রামগতভাবে ট্রিগার তৈরি এবং মুছে ফেলতে পারেন। ScriptApp.newTrigger(functionName) কল করে শুরু করুন, যা একটি TriggerBuilder প্রদান করে।

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে দুটি সময়-চালিত ট্রিগার তৈরি করতে হয়—একটি যা প্রতি 6 ঘণ্টায় ফায়ার হয়, এবং একটি যা প্রতি সোমবার সকাল 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;
    }
  }
}

ট্রিগারে ত্রুটি

যখন একটি ইনস্টলযোগ্য ট্রিগার ফায়ার হয় কিন্তু ফাংশনটি একটি ব্যতিক্রম ছুড়ে দেয় বা অন্যথায় সফলভাবে চলতে ব্যর্থ হয়, আপনি আপনার স্ক্রিনে একটি ত্রুটি বার্তা দেখতে পাবেন না। সর্বোপরি, যখন একটি সময়-চালিত ট্রিগার চলে বা অন্য ব্যবহারকারী আপনার ফর্ম-জমা ট্রিগার সক্রিয় করে, আপনি এমনকি আপনার কম্পিউটারে নাও থাকতে পারেন।

পরিবর্তে, অ্যাপস স্ক্রিপ্ট আপনাকে নিম্নলিখিত মত একটি ইমেল পাঠায়:

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 পত্রক, দস্তাবেজ বা ফর্ম ফাইলের সাথে আবদ্ধ থাকে তবে ইমেলটিতে সেই ফাইলটির একটি লিঙ্কও অন্তর্ভুক্ত থাকে। এই লিঙ্কগুলি আপনাকে ট্রিগার নিষ্ক্রিয় করতে বা বাগ ঠিক করতে স্ক্রিপ্ট সম্পাদনা করতে দেয়৷

আপনার Google অ্যাকাউন্টের সাথে সম্পর্কিত সমস্ত ট্রিগার পর্যালোচনা করতে এবং আপনার আর প্রয়োজন নেই এমন ট্রিগার নিষ্ক্রিয় করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. script.google.com এ যান।
  2. বাম দিকে, আমার ট্রিগার ক্লিক করুন।
  3. একটি ট্রিগার মুছতে, ট্রিগারের ডানদিকে, More > ট্রিগার মুছুন ক্লিক করুন।

অ্যাড-অনগুলিতে ইনস্টলযোগ্য ট্রিগার

অ্যাড-অনগুলিতে ইনস্টলযোগ্য ট্রিগারগুলি ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, অ্যাড-অন ট্রিগারগুলি দেখুন।