在我開始舉辦搖擺舞活動之後,我就非常依賴如 Zapier 這樣的自動化工具,來讓我在報名活動、確認報名、訊息更新等活動執行時能有更好的效率,而由於客家
本色,我的 Zapier 基本上是不付費的,因此過去常要計算不會超過每個月的 100 筆 Execute,或者要好幾個免費的 Google 帳號登入來交錯工作,其實還滿麻煩的。
因此在最近一波 n8n 開始流行之後,我就馬上把焦點轉移到了這個號稱開源的 CLI 自動化工具身上,在經過了一番苦戰之後總算把那些與 Google 互動的行為搬入 n8n 內,這篇是紀錄這個過程並且正式的與 Zapier 說 bye 摟~~
n8n 是什麼
n8n 是一間自動化的公司產品,如果要問教學與介紹,我一律推薦高見龍的這個 n8n 介紹與教學,簡單說明的話 n8n 是一個基於 Node.JS 的系統,並且可以自己設計觸發、節點、條件式的 Workflow 工具。
如果要白話一點去說明 Workflow 的話,最簡單的範例可以用 當發生A的時候,自動幫我執行B
或者 每天早上執行一次 C 工作
,如此以來的好處就可以取代許多日常繁複的工作內容
當然自動化本身已經是非常成熟的內容,因此向 Zapier 或 Make 這樣的公司早就提供過許多不錯的 SaaS 服務,我前幾年也用過一個很讚的印度公司 Automation.io,但後來好像被 Zapier 買走了…讓我那時候有一波 workflow 逃難潮。
而 n8n 本身有分為 Community 以及 SaaS 版本,在這篇文章中我自己用的是 Community 透過 docker 安裝的版本,而如果對於自己建立系統不感興趣的朋友,也可以直接用每個月 20 歐元訂閱 SaaS 來使用,這次我所要介紹的包含三個步驟:
- 情境說明
- 在 Docker 建立 n8n
- 在 n8n 中建立 Google Credential
- 在 GCP 建立 API 服務與 OAuth
- 回到 n8n 建立連結
- 建立 workflow
0. 情境說明
為了去驗證我們整個 n8n 以及 Google credential 最後會成功,我們先來定義我們想要完成的 workflow 是什麼:
當 我 Google Sheet 指定的 Column 被更新時
會 抓被更新 column Row 內的資料,寄送一封 Email
這也是我在活動進行最常做的,例如收到報名資訊後,當我確認匯款資料,就會把 參加者名稱
、email
、進場場次
等變數用 Gmail 寄信,來達成自動化。
1. 在 Docker 建立 n8n
首先講一個最重要的,因為後續會跟 Google 以及其他可能會使用的 Credential 綁定,建議一定要使用 HTTPS 協定,因此大家要自己想辦法處理摟!或者我覺得最好的做法是 Cloudflare Tunnel,也直接讓他做解析最方便
那先來看 docker compose 內容
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=n8n
- N8N_BASIC_AUTH_PASSWORD=n8n
- N8N_HOST=domain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_TUNNEL_URL=https://domain.com/
- N8N_FORCE_HTTPS=true
- VUE_APP_URL_BASE_API=https://domain.com/
volumes:
- n8n_data:/home/node/.n8n
networks:
- net
volumes:
n8n_data:
networks:
net:
external: true
這個版本我改過好多次,最重要的部分是強制用 https 解析,後續在串 Google Credentail 時才可以使用。
如果順利的話,把 docker compose up -d
執行後就可以透過 http://domain.com
來進入 n8n 網頁了(首先你要自己搞定 HTTPS 問題),這時候就可以開始進行下一步了。
2. 在 n8n 中建立 Google Credential
進入頁面之後要先建立 admin 帳戶,接著就可以進入頁面開始操作了,並根據以下繁忙的步驟一個一個慢慢進行:
Note:這是在 2025/4/23 使用的 Google Credentail 設定,未來可能變動,大家就自求多福啦~
- 登入 n8n 後,從右上角下拉選單點選建立 credential
- 選擇 Google Sheet Trigger OAuth2.0,這裡有一個
OAuth Redirect URL
,等等會用到 - 打開之後先放著,我們開一個
最困難的小任務,前往 GCP Console 進行後面的操作
3. 在 GCP 建立 API 服務與 OAuth
在 GCP Console 建立一個新的 GCP 專案
完成新專案建立後,從左側進入 “API與服務”,開啟 “已啟用的API和服務”,進入後點擊這個大大的 “啟用 API 和服務” 按鈕
找到 Google Sheet、Gmail、Drive API,啟用
再次從左側的 “API與服務”,這次進入 OAuth 同意畫面,點選 “開始”
填寫應用程式名稱與 Email,最重要的是目標對象要設置 外部
到這邊初步完成,大概才走了一半…拆個章節
Google OAuth 的詳細設定
此時應該是在 Google Auth Platform 這個頁面,先前往左邊的 資料存取權
頁面,點擊 “新增或移除範圍”
添加 Google Drive、Gmail 以及 Google Sheet 相關 API,接著儲存
接下來到左側的 用戶端
,選擇 建立用戶端
,這就不放圖了喔
選擇 網頁應用程式
填入應用程式名稱,接在下方的 已授權的重新導向 URI
放入剛剛在 n8n 建立 credential 畫面中,顯示的 OAuth Redirect URL
,建立之後會拿到 Client ID 以及 Secret,我們可以先拿去 n8n credential 中填好,但還先不要授權
接下來到左側的 目標對象
,點擊 發布應用程式
,此時可以暫且告一段落了
4. 回到 n8n 建立連結
此時再回到我們的 n8n 畫面,如果順利的話再填入 Client ID 與 Secret 時就會出現 Google Sign in 認證了,點擊之後完成驗證,順利的話就會變成 Account connected 狀態
接著用同樣的方式自己把 Gmail 建立好喔!到了這裡我們就完成所有前置作業,接著就是實作 n8n workflow 了!
5. 建立 workflow
再次說明下,我們這次要做的範例是如以下
當 我 Google Sheet 指定的 Column 被更新時
會 抓被更新 column Row 內的資料,寄送一封 Email
因此我建立了一個測試用的 google sheet 叫做 “n8ntest” ,建立一個 sheet 叫做 “send_email”,下圖為欄位設定
- Email 欄位是我會寄到的 user email 地址
- 其他資訊是揭露 user 買的票券,以及他買週六還是週日
Send
欄位將設計為 trigger,當此欄位變動時,就會啟動 workflow 進行觸發
建立 n8n workflow
回到 n8n 上,從功能欄位點選建立 workflow,接著我先 show 以下兩張我建立玩的內容以及詳解:
- 全部只有兩個節點,第一個節點是 Google Sheet Trigger,第二個是 gmail
- Sheet 節點的重點在於,去挑選 Google Sheet 以及工作表,然後最下方去監聽要觸發的欄位,以我的範例是 “Send” 這一欄
- Gmail 節點要去撈前一個節點的參數,在我的範例中,我把許多欄位帶入 Message 內傳送給 user,包含訂單編號、週六日入場,順便用了 UUID 當作 QRCode
驗證!
接著,只要去 Google Sheet 上的 Send
欄位做任何更動,就能成功觸發寄送 email 了
任務完成!
如果順利抵達這裡,恭喜你成功將你的 n8n 以及 google credential 建立完成。
我自己實作時碰到兩個最大的問題:
n8n 的 https 協定
:因為用 docker 加上 cloudflared tunnel 內網穿透的關係,在 docker compose 內要先處理好 https 問題,這花了我好多時間。Google OAuth
:超難用!網路上教學也太少,我摸索了一陣子才知道要去處理資料存取權的 API 授權,中間也在發布與否之間轉折了好多次失敗。
不過順利達成後很讚啦!歡迎大家開始手動建立自己的自動化喔