《零基礎快速入門:GenAI 搭配 Google Apps Script 的工作自動化寶典》Chapter 6-2 五花八門的程式觸發手法

在這個30天系列教學文裡面,
我們做了很多自動化的案例。
而啟動自動流程的方式,我們用的大部份都是「手動執行」。
只要我們把程式準備好了,
就可以按下執行(Run)。

這個意思就是即使我們做出了「一鍵完成」的功能,
還是要進行一個「按下按鍵」的動作,
機器才會運轉起來。

那能不能連「按下按鍵」這件事也自動化呢?
最好是我們完全不用手動執行,就可以全自動運轉!

有的,我們在 YouBike 的案例:
《零基礎快速入門:GenAI 搭配 Google Apps Script 的工作自動化寶典》Chapter 4-7 自動監測 YouBike 站 Part 2
有學到一種定時觸發法。
不需要手動執行,
只要時間到了,機器就會自己動起來。

今天這篇文章我們就要來學習一下,
除了手動執行之外,還有什麼樣的觸發器可以拿來觸發自動化流程。

什麼是觸發器?

在 Google Apps Script 中,
觸發器 (Triggers) 是一種自動化的功能,
能夠讓你的腳本在特定條件或事件發生時自動執行。

觸發器主要分為兩大類:
簡單觸發器(Simple Triggers)可安裝觸發器(Installable triggers)
它們各自具有不同的特性和用途。

值得一提的是,
當我在跟 ChatGPT 討論這兩種觸發器的時候,
發現它常常混為一談,給出一些似是而非的資訊。

我在這裡盡量用簡明清楚的方式介紹。

「簡單觸發器」與「可安裝觸發器」的差別

先講結論:可安裝觸發器可以用在九成以上的場合。
如果你不確定要用哪一個,就用可安裝觸發器吧。

簡單觸發器的好處是可以免設定直接用,
但壞處是權限較小,也無法用 try-catch 捕捉錯誤。

而可安裝觸發器雖然說是要額外安裝,
但其實也很容易。而且可安裝觸發器才可支援最常用的兩種觸發方式:
1. 時間觸發器(Time-driven Trigger)
2. 事件觸發器(Event-driven Trigger)

可安裝觸發器的兩種安裝方法

可安裝觸發器有兩種安裝方法:
1. 以手動設定
2. 以程式碼設定
兩種任選其一即可。
小心不要兩種都設,以免重複觸發。

手動設定的方式非常直覺,
如下圖點進去新增觸發器就可以了

至於透過程式碼設定的意思就是把上述手動設定的動作都用程式來完成,
包含新增觸發器、設定觸發的函數、設定觸發條件等等。

例如ChatGPT 可能會給你一段如下範例的函數,
用來新增觸發器。

function createTimeTrigger() {
  // 刪除現有的所有觸發器,確保不會重複建立
  const triggers = ScriptApp.getProjectTriggers();
  for (let trigger of triggers) {
    if (trigger.getHandlerFunction() === 'myFunctionToRun') {
    ScriptApp.deleteTrigger(trigger);
    }
  }

  // 建立一個時間驅動的觸發器,設定為每5分鐘執行一次
  ScriptApp.newTrigger('myFunctionToRun')
  .timeBased()
  .everyMinutes(5)
  .create();
}


當你執行完這個函數,再點進手動設定的畫面,
就會發現多了一個程式幫你新增的觸發器了。

可安裝觸發器的兩種類型

可安裝觸發器有兩種類型:
1. 時間觸發器(Time-driven Trigger)
2. 事件觸發器(Event-driven Trigger)

不管是哪一種,
都可以手動設定,也可以透過程式設定。
任選其一即可。

時間觸發器

當我們希望腳本能在特定時間、周期性時間、或間隔時間內自動執行時,
就可以使用時間觸發器。
用途:

  • 定時備份資料
  • 每日、每週、每月自動產生報告
  • 定期清理或同步資料


設定方式:
在時間觸發器中,可以選擇下列觸發條件:

  • Minute Timer(分鐘級觸發): 設置每 1、5、10、15、30 分鐘觸發一次。
  • Hourly Timer(小時計觸發): 設置每小時或每隔幾小時觸發一次。
  • Daily Timer(日級觸發): 設置每天的某個時刻觸發,例如早上 9 點。
  • Weekly Timer(週級觸發): 設置每週的某天和某個時刻觸發,例如每週一早上 9 點。
  • Monthly Timer(月級觸發): 設置每月的某天或每月的某個星期幾觸發,例如每月的第 1 天或每月的第一個星期五。

事件觸發器

事件觸發器可讓函數在某個特定事件發生時被觸發,
例如編輯文件、提交表單、修改試算表等。
用途:

  • 監聽表單提交,將資料自動存入試算表
  • 當試算表被編輯時自動檢查內容
  • 當文件被開啟、關閉或編輯時自動記錄用戶活動


支援的事件類型:

  • Spreadsheet Events(試算表事件):
    • onEdit(e): 當試算表被編輯時觸發
    • onOpen(e): 當試算表被打開時觸發
    • onChange(e): 當試算表中的某些內容(例如儲存格、範圍、篩選器)發生改變時觸發
  • Document Events(文件事件):
    • onOpen(e): 當文件被打開時觸發
  • Form Events(表單事件):
    • onFormSubmit(e): 當表單被提交時觸發

總結

本文所介紹的各種觸發器,
基本上可以應付九成以上的情境。

此外還有一些花式的觸發方式,
例如我們可以從 Google Chat 或 Slack 去觸發 Google Apps Script 的程式,
或是也可以從 ZapierIFTTTn8n 觸發,
又或是可以把你的程式發佈為一個 API,讓其它程式(如:Python、Node.js)來呼叫它。

五花八門的進階應用,
我們日後有機會再談!

老話一句,
沒有做不到,只有想不到。

只要你有具體的想像,
GenAI 都能逐步引導你完成目標!