समझिए
Simple बनाम installable
| Simple trigger | Installable trigger | |
|---|---|---|
| Setup | बस function का नाम | एक बार बनाना पड़ता है (UI या code) |
| email भेज सकता / Drive इस्तेमाल | नहीं | हाँ |
| किसके नाम से चलता है | उस समय का user | जिसने trigger बनाया |
| समय-आधारित | नहीं | हाँ |
| अधिकतम run time | 30 सेकंड | ~6 मिनट |
| Event types | open, edit, selection | open, edit, change, form submit, time, calendar |
Installable triggers आपकी permissions से चलते हैं, तब भी जब कोई file खुली न हो — इसीलिए ये हर दिन सुबह 9 बजे email भेज पाते हैं।
Editor से trigger बनाना
- बाईं ओर Triggers (घड़ी) icon पर click करें।
- + Add Trigger (नीचे दाईं ओर)।
- function, event source (Time-driven या From spreadsheet) और type चुनें।
- चाहें तो failure notifications सेट करें — ज़रूरी jobs के लिए Notify me immediately चुनें।
- Save करें और authorize करें।
Code से trigger बनाना
// Run dailyReport every day between 9 and 10 a.m. (project time zone)
function createDailyTrigger() {
ScriptApp.newTrigger('dailyReport')
.timeBased()
.everyDays(1)
.atHour(9)
.create();
}
// Run syncRates every hour
function createHourlyTrigger() {
ScriptApp.newTrigger('syncRates')
.timeBased()
.everyHours(1)
.create();
}
// Run weeklySummary every Monday around 8 a.m.
function createWeeklyTrigger() {
ScriptApp.newTrigger('weeklySummary')
.timeBased()
.onWeekDay(ScriptApp.WeekDay.MONDAY)
.atHour(8)
.create();
}
create… function को एक ही बार चलाएँ। हर run एक और trigger जोड़ देता है — दो बार चलाया तो हर सुबह दो emails आएँगे।
ध्यान दें: atHour(9) का मतलब "9:00 से 10:00 के बीच कभी भी" है, ठीक 9:00 नहीं। मिनट वाले triggers में everyMinutes(1), 5, 10, 15 या 30 ही चलते हैं।
Installable onEdit (email के साथ)
function createEditTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('onBigOrder')
.forSpreadsheet(ss)
.onEdit()
.create();
}
function onBigOrder(e) {
const r = e.range;
if (r.getSheet().getName() !== 'Orders' || r.getColumn() !== 4) return;
if (Number(e.value) > 100000) {
MailApp.sendEmail('owner@example.com', 'Big order', `Order in row ${r.getRow()}: ₹${e.value}`);
}
}
Handler का नाम onEdit से अलग रखें — वरना यह दो बार चलेगा (एक बार simple trigger की तरह, एक बार installable की तरह), और simple वाला MailApp पर fail होगा।
सुरक्षित setup: duplicates से बचें
function resetTriggers() {
// Delete existing triggers for this project that call dailyReport
ScriptApp.getProjectTriggers()
.filter(t => t.getHandlerFunction() === 'dailyReport')
.forEach(t => ScriptApp.deleteTrigger(t));
ScriptApp.newTrigger('dailyReport').timeBased().everyDays(1).atHour(9).create();
}
जब भी (दोबारा) install करना हो, resetTriggers चलाएँ — यह हमेशा ठीक एक trigger छोड़ता है।
मुख्य बातें
- Installable triggers email भेज सकते हैं, Drive इस्तेमाल कर सकते हैं और schedule पर चलते हैं।
- ये बनाने वाले के नाम से चलते हैं, इसलिए सब offline हों तब भी काम करते हैं।
- एक बार बनाएँ; duplicates साफ़ करने के लिए
getProjectTriggersइस्तेमाल करें। - हर triggered run देखने के लिए Executions देखें।