เช่นเดียวกับทริกเกอร์แบบง่าย ทริกเกอร์ที่ติดตั้งได้จะช่วยให้ Apps Script เรียกใช้ฟังก์ชันโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง เช่น การเปิดเอกสาร อย่างไรก็ตาม ทริกเกอร์ที่ติดตั้งได้จะมีความยืดหยุ่นมากกว่าทริกเกอร์แบบธรรมดา โดยจะเรียกใช้บริการที่ต้องมีการให้สิทธิ์ ทริกเกอร์ประเภทนี้มีเหตุการณ์เพิ่มเติมหลายประเภท ซึ่งรวมถึงทริกเกอร์ที่ขึ้นกับเวลา (นาฬิกา) และควบคุมแบบเป็นโปรแกรมได้ สำหรับทริกเกอร์ทั้งแบบง่ายและที่ติดตั้งได้ Apps Script จะส่งฟังก์ชันที่ทริกเกอร์เป็นออบเจ็กต์เหตุการณ์ที่มีข้อมูลเกี่ยวกับบริบทที่เหตุการณ์เกิดขึ้น
ข้อจำกัด
แม้ว่าทริกเกอร์ที่ติดตั้งได้จะมีความยืดหยุ่นมากกว่าทริกเกอร์แบบธรรมดา แต่ก็ยังมีข้อจํากัดอยู่หลายข้อดังนี้
- ซึ่งจะไม่ทำงานหากไฟล์เปิดอยู่ในโหมดอ่านอย่างเดียว (ดูหรือแสดงความคิดเห็น) สำหรับสคริปต์แบบสแตนด์อโลน ผู้ใช้ต้องมีสิทธิ์ดูไฟล์สคริปต์เป็นอย่างน้อยเพื่อให้ทริกเกอร์ทำงานได้อย่างถูกต้อง
การทำงานของสคริปต์และคำขอ API ไม่ทำให้ทริกเกอร์ทำงาน เช่น การเรียก
FormResponse.submit()
เพื่อส่งการตอบกลับแบบฟอร์มใหม่ไม่ทำให้ทริกเกอร์การส่งแบบฟอร์มทำงานทริกเกอร์ที่ติดตั้งได้จะทำงานภายใต้บัญชีของผู้ที่สร้างทริกเกอร์เหล่านั้นเสมอ ตัวอย่างเช่น ถ้าคุณสร้างทริกเกอร์เปิดที่ติดตั้งได้ ทริกเกอร์นี้จะทำงานเมื่อเพื่อนร่วมงานเปิดเอกสาร (ถ้าเพื่อนร่วมงานมีสิทธิ์แก้ไข) แต่ทริกเกอร์จะทำงานเป็นบัญชีของคุณ ซึ่งหมายความว่าหากคุณสร้างทริกเกอร์ให้ส่งอีเมลเมื่อมีการเปิดเอกสาร ระบบจะส่งอีเมลจากบัญชีของคุณเสมอ โดยไม่ใช่บัญชีที่เปิดเอกสาร อย่างไรก็ตาม คุณสามารถสร้างทริกเกอร์ที่ติดตั้งได้สำหรับแต่ละบัญชี ซึ่งจะส่งผลให้มีการส่งอีเมล 1 ฉบับจากแต่ละบัญชี
บัญชีหนึ่งๆ จะไม่เห็นทริกเกอร์ที่ติดตั้งจากบัญชีที่ 2 แม้ว่าบัญชีแรกจะยังเปิดใช้งานทริกเกอร์เหล่านั้นได้อยู่
ทริกเกอร์ที่ติดตั้งได้จะขึ้นอยู่กับขีดจำกัดโควต้าของทริกเกอร์ Apps Script
ทริกเกอร์ที่ขึ้นอยู่กับเวลา
ทริกเกอร์ตามเวลา (หรือที่เรียกว่าทริกเกอร์นาฬิกา) คล้ายกับงาน cron ใน Unix ทริกเกอร์ที่ขึ้นอยู่กับเวลาทำให้สคริปต์ทำงานที่เวลาใดเวลาหนึ่งหรือในช่วงเวลาที่เกิดซ้ำ เหมือนทุกนาทีหรือนานๆ ครั้งต่อเดือน (โปรดทราบว่าส่วนเสริมจะใช้ทริกเกอร์ที่ขึ้นกับเวลาได้สูงสุด 1 ครั้งต่อชั่วโมง) เวลาอาจแบบสุ่มเล็กน้อย เช่น หากคุณสร้างทริกเกอร์ที่เกิดซ้ำ 9:00 น. Apps Script จะเลือกเวลาระหว่าง 9:00 น. - 10:00 น. แล้วคงเวลานั้นให้สอดคล้องกันในแต่ละวันเพื่อให้ผ่านไป 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 ชีตจะเปิดใช้งานเมื่อใดก็ตามที่ผู้ใช้ที่มีสิทธิ์แก้ไขเปิดสเปรดชีต เช่นเดียวกับทริกเกอร์ onOpen()
แบบง่าย แต่เวอร์ชันที่ติดตั้งได้จะเรียกบริการที่ต้องมีการให้สิทธิ์ เวอร์ชันที่ติดตั้งได้จะทำงานโดยมีการให้สิทธิ์จากผู้ใช้ที่สร้างทริกเกอร์ แม้ว่าผู้ใช้รายอื่นที่มีสิทธิ์แก้ไขจะเปิดสเปรดชีตก็ตาม
มีทริกเกอร์ที่ติดตั้งได้หลายรายการสำหรับGoogle Workspace แอปพลิเคชัน ดังนี้
- ทริกเกอร์เปิดที่ติดตั้งได้จะทำงานเมื่อผู้ใช้เปิดสเปรดชีต เอกสาร หรือแบบฟอร์มที่ตนมีสิทธิ์แก้ไข
- ทริกเกอร์แก้ไขที่ติดตั้งได้จะทำงานเมื่อผู้ใช้แก้ไขค่าในสเปรดชีต
- ทริกเกอร์การเปลี่ยนแปลงที่ติดตั้งได้จะทำงานเมื่อผู้ใช้แก้ไขโครงสร้างของสเปรดชีต เช่น ด้วยการเพิ่มชีตใหม่หรือนำคอลัมน์ออก
- ทริกเกอร์การส่งแบบฟอร์มที่ติดตั้งได้จะทำงานเมื่อผู้ใช้ตอบแบบฟอร์ม ทริกเกอร์การส่งแบบฟอร์มมี 2 เวอร์ชัน ได้แก่ เวอร์ชันหนึ่งสำหรับ Google ฟอร์มและอีกเวอร์ชันสำหรับชีตหากส่งแบบฟอร์มไปยังสเปรดชีต
- ทริกเกอร์กิจกรรมในปฏิทินที่ติดตั้งได้จะทำงานเมื่อมีการอัปเดตกิจกรรมในปฏิทินของผู้ใช้ ทั้งการสร้าง แก้ไข หรือลบ
คุณสามารถใช้ทริกเกอร์ที่ติดตั้งได้ในสคริปต์แบบสแตนด์อโลนและสคริปต์ที่เชื่อมโยง เช่น สคริปต์แบบสแตนด์อโลนจะสร้างทริกเกอร์ที่ติดตั้งได้สำหรับไฟล์ Google ชีตที่กำหนดเองได้แบบเป็นโปรแกรมโดยการเรียกใช้ TriggerBuilder.forSpreadsheet(key)
แล้วส่งผ่านรหัสของสเปรดชีต
จัดการทริกเกอร์ด้วยตนเอง
หากต้องการสร้างทริกเกอร์ที่ติดตั้งได้ด้วยตัวเองในเครื่องมือแก้ไขสคริปต์ ให้ทำตามขั้นตอนต่อไปนี้
- เปิดโปรเจ็กต์ Apps Script
- คลิกทริกเกอร์ ทางด้านซ้าย
- คลิกเพิ่มทริกเกอร์ที่ด้านขวาล่าง
- เลือกและกำหนดค่าประเภทของทริกเกอร์ที่ต้องการสร้าง
- คลิกบันทึก
จัดการทริกเกอร์แบบเป็นโปรแกรม
คุณยังสร้างและลบทริกเกอร์แบบเป็นโปรแกรมได้ด้วยบริการสคริปต์ เริ่มต้นด้วยการเรียก
ScriptApp.newTrigger(functionName)
ซึ่งจะแสดงผล TriggerBuilder
ตัวอย่างต่อไปนี้แสดงวิธีสร้างทริกเกอร์ที่ขึ้นอยู่กับเวลา 2 รายการ ทริกเกอร์ที่เริ่มทำงานทุก 6 ชั่วโมง และทริกเกอร์ที่เริ่มทำงานทุกวันจันทร์เวลา 9.00 น. (ในเขตเวลาที่สคริปต์ตั้งไว้)
ตัวอย่างต่อไปนี้จะแสดงวิธีสร้างทริกเกอร์เปิดที่ติดตั้งได้สำหรับสเปรดชีต โปรดทราบว่าสคริปต์ของทริกเกอร์ที่ติดตั้งได้ไม่จำเป็นต้องเชื่อมโยงกับสเปรดชีต ซึ่งต่างจากทริกเกอร์ onOpen()
ทั่วไป หากต้องการสร้างทริกเกอร์นี้จากสคริปต์แบบสแตนด์อโลน ให้แทนที่ SpreadsheetApp.getActive()
ด้วยการเรียกไปยัง SpreadsheetApp.openById(id)
หากต้องการแก้ไขทริกเกอร์ที่ติดตั้งได้ที่มีอยู่แบบเป็นโปรแกรม คุณต้องลบทริกเกอร์นั้นออกแล้วสร้างทริกเกอร์ใหม่ หากคุณเคยจัดเก็บรหัสของทริกเกอร์ไว้ คุณสามารถลบออกได้โดยการส่ง ID เป็นอาร์กิวเมนต์ไปยังฟังก์ชันด้านล่าง
ข้อผิดพลาดในทริกเกอร์
เมื่อทริกเกอร์ที่ติดตั้งได้เริ่มทำงาน แต่ฟังก์ชันแสดงข้อผิดพลาดหรือมิฉะนั้นก็ทำงานไม่สำเร็จ คุณจะไม่เห็นข้อความแสดงข้อผิดพลาดบนหน้าจอ เพราะสุดท้ายแล้ว เมื่อทริกเกอร์ที่ขึ้นกับเวลาทำงาน หรือผู้ใช้คนอื่นเปิดใช้งานทริกเกอร์การส่งแบบฟอร์ม คุณอาจไม่ได้อยู่หน้าคอมพิวเตอร์เลย
แต่ 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 ชีต, เอกสาร หรือฟอร์ม อีเมลจะมีลิงก์ไปยังไฟล์นั้นด้วย ลิงก์เหล่านี้ช่วยให้คุณปิดใช้งานทริกเกอร์หรือแก้ไขสคริปต์เพื่อแก้ไขข้อบกพร่องได้
หากต้องการตรวจสอบทริกเกอร์ทั้งหมดที่เชื่อมโยงกับบัญชี Google และปิดใช้งานทริกเกอร์ที่คุณไม่ต้องการอีกต่อไป ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่
script.google.com
- คลิกทริกเกอร์ของฉันทางด้านซ้าย
หากต้องการลบทริกเกอร์ ให้คลิกเพิ่มเติม
> ลบทริกเกอร์ที่ด้านขวาของทริกเกอร์
ทริกเกอร์ที่ติดตั้งได้ในส่วนเสริม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ทริกเกอร์ที่ติดตั้งได้ในส่วนเสริมได้ที่ทริกเกอร์ส่วนเสริม