第 11 章

熱門 SaaS 整合:Slack、Gmail、Google 表格與 Drive

辦公室 90% 的自動化都繞著這四家轉:Slack 發通知、Gmail 寄信、Google Sheets 記錄、Google Drive 存檔。這章一次把四家最常用的節點、credential 設定、每家的地雷坑一次講完,最後串一個完整實例:新表單來就自動寄信+附 Drive 檔案+Slack 通知。

為什麼上班族一定要會這四家

你在 第 7 章看過節點的九個大分類,也在 第 8 章親手拉了第一條 workflow。可是回到真實辦公室,你會發現:

  • 老闆要「有新客戶就 Slack 通知業務群」
  • 行銷要「Google 表單填完自動寄 Gmail 感謝信」
  • 行政要「每天把 CRM 資料備份到 Google Sheets」
  • 設計要「客戶上傳的檔案自動歸檔到 Google Drive 的專屬資料夾」

這四家幾乎壟斷了所有中小型辦公室的日常工具。學會這四家的節點怎麼設,你八成的工作場景就搞定了。剩下的比較冷門服務(Notion、Airtable、Zoom)大同小異,或者可以用第 12 章的 HTTP Request 節點自己打 API。

觀念:「Slack + Gmail + Google Sheets + Google Drive」是辦公室自動化的四大金剛。把這一章讀熟,你已經可以應付 80% 的內部需求。

共通觀念:每個 SaaS 節點都有三層下拉

不管是 Slack、Gmail 還是 Google Sheets,你點進節點以後,最上面永遠會看到三個下拉選單。認清這三層,四家都會用了:

下拉層級它在問什麼Slack 舉例Gmail 舉例
1. Credential(帳號) 你要用哪個帳號連? Slack 個人 workspace、公司 workspace 你的 Gmail、公司 Gmail
2. Resource(大類) 這家 SaaS 你要操作哪一種東西? Message(訊息)、Channel(頻道)、User(用戶) Message(郵件)、Draft(草稿)、Label(標籤)
3. Operation(動作) 對這個大類要做什麼動作? Send、Update、Delete、Get Send、Get Many、Reply、Delete

這個結構是 n8n 為所有 SaaS 節點設計的共通語言。看到一個新節點不會用?先看它有哪些 Resource、每個 Resource 底下能做什麼 Operation,你就掌握這節點的地圖了。

提示:選錯 Resource 或 Operation 會讓下面的欄位跟著全部換掉,這是正常的——每個組合有它專屬的參數。切換時看到欄位一直變不要慌。

Slack 節點:辦公室通知第一名

Slack 是 n8n 最常被用來「通知人」的節點。無論是老闆要盯業績、開發要盯 CI、行政要盯訂單,Slack 節點都是最快速把訊息推到大家眼前的方式。

最常用的 Resource / Operation 組合

Slack 節點在 n8n v1 的 Resource 完整清單有 Channel、File、Message、Reaction、Star、User、User Group 七種。日常最常用的組合:

ResourceOperation什麼時候用
MessageSend發一則訊息到頻道或某人 DM(最常用)
MessageGet Many撈某頻道最近的訊息,做搜尋或分析
MessageUpdate編輯已經送出的訊息(例:把「處理中」改成「完成」)
UserGet用 email 反查 Slack user ID,才能在訊息裡 @ 對方
ChannelCreate自動幫每個新客戶開一個專屬 channel
FileUpload把 binary 檔案傳到某頻道
ReactionAdd對訊息加 emoji 反應(例:處理完自動打勾)

Credential 兩種選法

選項設定難度建議情境
Slack API(Access Token) 中:要先去 Slack 建一個 App、拿到 Bot User OAuth Token(xoxb-…)或 User OAuth Token(xoxp-…)貼進 Access Token 欄 你有 workspace 管理權、想要固定機器人身分發訊息(用 xoxb-);或想用真人身分發訊息(用 xoxp-)
Slack OAuth2 API 低:點一下跳出授權頁,登入你的帳號就好 你是 workspace 一般成員,想用「自己身分」發訊息

兩種在節點裡的 Authentication 下拉分別叫 Access Token 跟 OAuth2。同一個 Slack 節點可以任意切換。

Text 欄位可以打的東西

Message → Send 的 Text 欄位不只是純文字,Slack 有它自己的 markdown 語法:

你打顯示效果
*重要*粗體(Slack 用一個星號,不是兩個)
_斜體_斜體
~刪除線~刪除線
`程式碼`行內 code style
<@U01ABC2DEF>@ 提及某位用戶(用 user ID 不是 email)
<#C01XYZ>連結到某頻道
<!channel>整個頻道通知(會震動所有人手機,慎用)

要附檔案怎麼辦

Slack 的 Message → Send 本身不接 binary 附件。要傳檔案要另開一個 Slack → File → Upload 節點,Channel 選要傳的頻道、Input Data Field Name 填 data(對上上一個節點的 binary property),上傳完會產生一則帶檔案的訊息。想同時發文字+檔案就把 Message Send 跟 File Upload 兩個節點串起來。

注意:Channel 欄位有兩種寫法:#general(頻道名,加井字號)或 C01XYZ123(channel ID,Slack 頻道右鍵複製連結拿得到)。channel 名字改過或有中文字時,用 ID 才穩。

Gmail 節點:一切從寄信開始

Gmail 節點是「寄信」和「抓信」的萬用工具。行銷寄感謝信、支援寄回覆、業務盯客戶回覆,都靠這個。

最常用的 Resource / Operation 組合

ResourceOperation什麼時候用
MessageSend寄一封新信(最常用)
MessageReply回覆已存在的信(保留 thread)
MessageGet Many抓收件匣的信,配 Search 找特定寄件人/主旨
MessageAdd Label自動幫某封信貼標籤分類(Label 是掛在 Message 上的動作)
DraftCreate建草稿讓真人再確認一次才寄(審核流程用)
LabelCreate建立一個新標籤(Label resource 只有 Create/Delete/Get/Get Many,本身沒有 Add)

Credential 只有一種:Google OAuth2

Gmail 節點的 credential 只支援 Google OAuth2。第一次設會跳出 Google 授權頁,登入你的 Google 帳號、勾同意授權 Gmail 讀寫權限。整個過程不到 30 秒。第 13 章會詳細講 OAuth 到底在做什麼。

Send 訊息可以做什麼

  • 純文字 or HTML:Email Type 下拉切換。HTML 可以貼完整 HTML,設計出有樣式的信
  • To / CC / BCC / Reply-To:四個收件人欄位都能填多個地址(逗號分隔)
  • 附件:Binary Data 開關,property name 對上上一個節點吐出的檔案
  • Subject 用 expression:主旨可以動態拼,例 訂單 #{{ $json.order_id }} 已成立(expression 語法看第 14 章)

抓信:Google 的搜尋語法你都能用

Message → Get Many 底下的 Filters 區塊有個 Search 欄位(不是叫 Filter,別找錯),用的就是 Gmail 網頁版那條搜尋列的語法,一模一樣:

Search 值意思
is:unread只抓未讀
from:[email protected]只抓老闆寄來的
subject:報價主旨含「報價」
has:attachment有附件的
newer_than:1d一天內的新信
from:@customer.com is:unread組合:客戶域名寄來的未讀信

Trigger 版:Gmail Trigger 節點

另一個節點叫 Gmail Trigger(不是 Gmail),這是 trigger 節點,可以設「有新信就跑 workflow」。它是輪詢式,Poll Times 下拉可以選 Every Minute / Every Hour / Every Day 等;預設一次拉 10 封(Options → Limit 可調到 50)。要即時就選 Every Minute,但太密加上大帳號會被 Google API 限速。

注意:Google 一般帳號一天 500 封寄送額度,Workspace 帳號是 2000 封。做群發自動化前先估量,超過會被 Google 暫時鎖帳號。

Google Sheets 節點:辦公室的萬用資料庫

對很多中小公司來說,Google Sheets 就是他們的資料庫。CRM 是 Sheets、庫存表是 Sheets、活動報名表是 Sheets。學會這節點就等於學會了「怎麼讓 n8n 讀寫辦公室資料」。

最常用的 Resource / Operation 組合

ResourceOperation什麼時候用
Sheet Within DocumentAppend Row新增一列(最常用:新客戶進 Sheets、log 一筆事件)
Sheet Within DocumentAppend or Update Row如果指定 key 已存在就 update,不存在就 append(upsert)
Sheet Within DocumentGet Row(s)把整張表或符合條件的列讀出來(不是「Read」,是 Get Row(s))
Sheet Within DocumentUpdate Row用 Column to Match On 找到某一列去更新它
Sheet Within DocumentDelete Rows or Columns刪掉指定的列或欄(少用,破壞性)
Sheet Within DocumentClear清空指定範圍的內容但保留欄框

Credential 兩種選

選項建議情境
Google OAuth2 個人/小團隊。設定快,用你自己的 Google 帳號授權
Service Account 企業推薦。開一個「不是真人」的機器帳號、把要用的 Sheets 分享給這個機器 email。人員離職不影響 automation

Append Row:新增一列

Append Row 是最常用的動作。設定重點:

  1. 選 Document

    下拉會列出你帳號下所有 Google Sheets 檔案,直接挑一個。也可以貼 URL 或 Sheet ID。

  2. 選 Sheet(分頁)

    一個 Sheets 檔案裡可能有好幾個分頁,選對那一個 tab。

  3. Mapping Column Mode 選手動

    Mapping Column Mode 下拉有三個選項:Map Automatically(自動對應,只要 upstream JSON 的 key 跟 Sheets header 完全一致就自動塞)、Map Each Column Manually(手動,一格一格填 expression)、Nothing。沒把握對齊時推薦手動——自動模式只要有一個 key 名不同,那欄就會漏。

  4. 逐欄填 expression

    下方會列出 Sheets 的每個 header(假設是「姓名/Email/註冊時間」),每個欄位對應輸入框拉一條 expression:{{ $json.name }}、{{ $json.email }}、{{ $now }}。

Update:找到某一列去改

Update 動作有個關鍵欄位叫 Column to Match On,你選「用哪一欄當 key 去找那一列」。例:客戶狀態表用 Email 當 key,upstream 傳來 { email: "[email protected]", status: "已付款" },Sheets 節點會去找 Email 欄 = [email protected] 的那一列,把 status 欄改成「已付款」。

注意:Sheets 節點三個經典地雷:(1) 欄位名字有前後空格會找不到(Sheets 眼裡「Email 」跟「Email」是不同欄);(2) Auto-map 會誤把 header 列當資料列處理;(3) 日期/時間格式跑掉——建議在 Sheets 那邊先把整欄設成「純文字」,寫入的 ISO 字串就不會被自動轉成本地時區。

Google Drive 節點:檔案的家

Drive 節點主要拿來「存檔」跟「取檔」。客戶上傳的檔案自動歸檔、每天備份的 CSV 上雲、把附件下載下來給下一個節點用——都靠這個。

最常用的 Resource / Operation 組合

ResourceOperation什麼時候用
FileUpload把上一節點的 binary 存進 Drive
FileDownload拿 file ID 抓檔案內容(吐 binary 給下一節點)
FileCopy複製一份到其他資料夾
FileMove把檔案搬到另一個資料夾
FileShare建立分享權限(例:給某 email 讀取)
FileCreate from Text直接用一段字串當內容生一個檔案(例:把 JSON 存成 .txt)
File/FolderSearch用檔名/MIME type 找檔案或資料夾(Search 屬於 File/Folder 這個複合 resource,不是 File)
FolderCreate / Delete / Share資料夾也有自己的 CRUD 動作
Shared DriveCreate / Get / Get Many / Update / Delete操作共用雲端硬碟本身(不是裡面的檔案)

Credential:Google OAuth2

跟 Gmail 一樣,用 Google OAuth2 授權。如果你 Gmail credential 已經設過,可以在 Drive 節點直接選同一組(不用重新授權)。

Upload:把檔案存進 Drive

Upload 需要三個東西:

欄位要填什麼
Input Data Field Name上一節點吐出來的 binary property name(通常是 data)
File Name存進去以後要叫什麼名字(可用 expression 動態拼)
Parent(Drive + Folder)要存到哪個磁碟/資料夾——這是 Resource Locator 欄位,有三種模式可切

Parent 欄位的三種選法(Resource Locator)

n8n v1 之後,Google Drive 節點的 Drive 跟 Folder 欄位都是 Resource Locator(RLC)——同一個欄位裡有三個切換模式:

模式要填什麼
From list下拉列出你 Drive 裡所有資料夾/磁碟,直接點
By URL貼資料夾網址,例:https://drive.google.com/drive/folders/1aBcDeFg…,n8n 自己抽 ID
By ID直接貼 Folder ID(folders/ 後面那串)

三種都能達到同樣結果。不能填「資料夾名字」——名字不通,非 ID/URL/list 選擇一律拒收。

Download:從 Drive 抓檔案

Download 只需要一個 File ID。File ID 通常是上一個節點(例:Drive Search 或 Trigger)給的,或者你自己從檔案的分享連結抓:連結 drive.google.com/file/d/1xxx/view 中間那串就是 file ID。抓完會吐 binary 給下游用,例如接 Slack 節點當附件、或接 Gmail 節點當寄信附件。

注意:如果你要存到共用雲端硬碟(Shared Drive,以前叫 Team Drive),要在 Google OAuth2 credential 設定裡勾 Include Shared Drives——沒勾的話 Drive 節點看不到共用硬碟。這是 Google 的 API 設計,不是 n8n 的問題。

實例:新表單來就寄 Gmail + 附 Drive 檔案 + Slack 通知

把這章學的四家全串起來做一條真實 workflow。情境:客戶填了 Google Form(帶附件),你要自動寄封感謝信給對方+附上他上傳的檔案+在 Slack 通知業務群「有新客戶進來」。

智能家居 AI 顧問 workflow 七節點畫面
圖 11-1實際的多節點 SaaS 整合範例:一條 workflow 把觸發、AI 處理與多家外部服務串成一條龍。
  1. Trigger:Google Forms Trigger 或 Google Sheets Trigger

    拉一個 Google Sheets Trigger(大部分 Google Form 都會自動把回覆寫進一個 Sheets),設定「有新列出現就觸發」。Trigger On 選 Row Added,Document 跟 Sheet 用 RLC 挑到那個表單回覆的 Sheets。Poll Times 選 Every Minute 就好。

  2. Google Drive Download:抓客戶上傳的檔案

    表單如果有「上傳檔案」題目,Sheets 那一列會存一個 Drive 檔案的分享連結。加一個 Google Drive → File → Download 節點,File ID 用 expression 從上一步的 URL 抽出來:{{ $json["附件"].split("id=")[1] }}。這一步跑完會吐 binary,下游可以拿去當附件。

  3. Gmail Send:寄感謝信給填表人

    加 Gmail → Message → Send 節點。To 欄填 {{ $('Google Sheets Trigger').item.json["Email"] }}(引用第一步表單裡的 Email 欄),Subject 打「感謝您填寫表單 - {{ $('Google Sheets Trigger').item.json["姓名"] }} 您好」,Message 打感謝內容。展開 Options → Attachments,Property Name(Binary)填 data——就會把上一步 Drive 下載的檔案一起寄出去。

  4. Slack Message Send:通知業務群

    加 Slack → Message → Send 節點。Channel 選 #new-forms(或它的 channel ID),Text 用 expression 拼:*有新表單來了!*\n姓名:{{ $('Google Sheets Trigger').item.json["姓名"] }}\nEmail:{{ $('Google Sheets Trigger').item.json["Email"] }}\n主旨:{{ $('Google Sheets Trigger').item.json["諮詢主旨"] }}\n已自動寄出感謝信 :white_check_mark:。

  5. Save + Execute Workflow 測一次

    右上角 Ctrl+S 存檔。手動去 Google Form 填一筆假資料,回 n8n 按 Execute Workflow。四個節點都變綠打勾以後,去信箱看寄達了沒、去 Slack 看通知進了沒。

  6. Activate toggle 打開

    測試 OK 以後,右上角把 Active toggle 打開。從這一刻起,任何人填表單,n8n 都會自動幫你跑這條流。

提示:這個 workflow 完全示範了 SaaS 節點怎麼互相接力:Trigger 拿到資料 → Drive 抓檔案 → Gmail 用資料+檔案寄信 → Slack 通知同事。四家串成一條,就是辦公室最典型的自動化樣板。

同一個節點想連好幾個帳號

你可以在 n8n 的 Credentials 頁面(左側選單)開好幾個同款 credential。舉例:

  • Slack 個人 workspace
  • Slack 公司 workspace
  • Slack 客戶 A workspace

每個 Slack 節點的 Credential 下拉就可以選要用哪一組。同一條 workflow 也可以有兩個 Slack 節點各用不同 workspace——例如「內部通知打公司 workspace,對客回覆打客戶 workspace」。Gmail、Sheets、Drive 同理。

Credential 的完整管理(怎麼命名、怎麼共用、怎麼撤銷)在第 13 章詳細講。

常見卡關與怎麼救

症狀原因怎麼救
Slack 節點回 401 invalid_auth 或 not_authed Bot Token 過期,或這個 Bot 沒被邀請進要發訊息的 channel 回 Slack workspace 把 Bot 加進頻道:頻道右鍵 → View channel details → Integrations → Add app。Token 過期就重新生成一組貼回 credential
Slack 訊息說發送成功但頻道裡看不到 你把訊息發到自己的 DM 或錯的 channel(channel 打成了 general 而不是 #general) Channel 欄用 channel ID(C01XYZ)而不是名字,最不會出錯。ID 從頻道詳情頁最下面複製
Gmail 節點 Insufficient Permission OAuth 授權時 scope 沒包含 send 權限(例:只勾了讀) 去 credential 頁把這組 Gmail OAuth 刪掉重新授權,這次要注意勾選畫面的 checkbox 全部勾
Gmail 一天寄很多信之後突然寄不出去 超過 Google 每日寄送額度(一般帳號 500 封/天) 等 24 小時,或換 Google Workspace 帳號(2000 封/天)。要長期大量寄改用 SendGrid、Postmark 這類專業寄送服務
Sheets Append 執行成功,但那一列少了某些欄位 你 Map 時 column 名字打錯,或 Sheets 那邊 header 有前後空格;大小寫也要一致 回 Sheets 檢查 header 列每個 cell 有沒有空格。n8n 節點裡的 column 名字必須跟 Sheets 完全一模一樣(包含大小寫)
Sheets Update 找不到要更新的列,執行沒錯但沒動到 Column to Match 選的欄位在 Sheets 找不到 match 的值——通常是型別問題(Sheets 存數字 123,你傳字串 "123") 把 expression 加上型別轉換:{{ String($json.id) }},或反過來把 Sheets 那欄先改成純文字格式
Drive Upload 成功但檔案落在「My Drive」根目錄而不是指定資料夾 Parent 欄位模式選錯——留在 By ID 卻貼了資料夾網址,或反過來留在 By URL 卻貼了純 ID 把 RLC 切成 From list 從下拉挑最保險;或改成 By URL 貼完整 drive.google.com/drive/folders/…;ID 模式只能貼 ID
Drive 節點看不到共用硬碟(Shared Drive)的檔案 Google OAuth2 credential 沒勾 Include Shared Drives 回 credential 設定頁把這個選項打勾、存檔,再回節點刷新 Document/Folder 下拉
Gmail Trigger 明明有新信但 workflow 沒觸發 Poll Times 選了 Every Hour/Day 要等太久,或 Filters 區塊(Sender、Label IDs、Read Status、Search)把新信過濾掉了 先把 Filters 清空、Poll Times 切成 Every Minute 測試,確定 trigger 有反應以後再慢慢加 filter
執行看似成功但下游節點抓不到欄位(undefined) SaaS 節點吐出的欄位名跟你以為的不一樣(Sheets 的欄位名有中文空格、Gmail 的欄位是 subject 不是 Subject) 在下游節點按 Execute Node 看實際吐出來的 JSON 長什麼樣,用它真正的欄位名寫 expression

常見問題

一定要用官方節點嗎?我可以自己寫 API call 嗎?
不用。這四家都有公開的 REST API,你可以完全用 第 12 章教的 HTTP Request 節點自己打,效果一樣。但官方節點的價值在「已經幫你包好」——OAuth 授權、常見動作的欄位、錯誤處理都內建了。用 HTTP Request 你要自己組 header、處理 token 換發、看 API doc 拼 payload。日常用官方節點,遇到官方節點沒支援的偏門動作再改 HTTP Request 就好。
Slack 我有兩個 workspace(個人跟公司)怎麼辦?
在 Credentials 頁建兩組 Slack credential,命名清楚(例:Slack - 個人、Slack - 公司)。每個 Slack 節點裡就可以選要用哪一組。甚至同一條 workflow 都可以有多個 Slack 節點分別接不同 workspace——超方便,客戶 Slack、內部 Slack 一次全通知。
Gmail 一天可以寄幾封?
Google 一般個人帳號(@gmail.com)一天 500 封寄送額度;Google Workspace 帳號(公司自訂域名,例 @yourcompany.com)是 2000 封。這是 Google 帳號的硬限制,不是 n8n 的。如果你在做電子報群發、行銷大量寄送,用 SendGrid、Postmark、Mailgun 這類專業 email 服務比較妥當(一天可以幾萬封),n8n 也有它們的節點。
Google Sheets 一次能讀多少列?會不會超級大表就爛掉?
技術上 Google Sheets 一份檔案可以到 1000 萬 cells(新版)、單一 sheet 可以到幾十萬列。但 n8n Sheets 節點單次 Read 建議控制在 5000 列以內比較穩,超過會慢、記憶體吃很大、有時 API 會 timeout。要處理大量資料建議:(1) 用 Range 分段讀(A1:D1000、A1001:D2000);(2) 資料量真的大就改用 Airtable、Notion、或真的資料庫(Postgres / MySQL 節點)。
Drive Upload 大檔案(幾百 MB 的影片)會不會有問題?
Drive API 支援大檔案(單檔上限 5TB),但 n8n 節點會把整個檔案讀進記憶體再上傳,所以看你的 n8n instance 給多少 RAM。Woow n8n 這種共用環境建議單檔控制在 100 MB 以內;再大要考慮直接讓使用者上傳到 Drive、n8n 只負責搬 fileId/改權限。
OAuth 授權有效期多久?會不會過期要重接?
Google OAuth token 有兩個東西:access token(1 小時)跟 refresh token(永久,除非你在 Google 帳號設定裡撤銷)。n8n 拿到 refresh token 以後會自動幫你換新的 access token,你不用管。會需要重接的情況:你手動去 Google 帳號 → 安全性 → 有權存取的第三方 app 把 n8n 撤銷了、或者你改了 Google 帳號密碼且啟用了兩步驟——這時 n8n 會開始報 401,回 credential 頁重新授權就好。Slack Bot Token 沒有過期日,除非你手動 revoke。
Sheets 節點寫入時,欄位順序會不會被打亂?
不會。Append/Update 是照 header 名字對齊,不是照順序。所以你未來如果調整 Sheets 的欄位順序(把 C 欄搬到 B 欄),只要 header 名字不變,你的 workflow 完全不受影響。這是好事,也是為什麼「一定要用 Map Each Column Below」的原因——用 Auto-map 或用 Row Number 對齊就會踩到順序問題。
四家節點如果同時執行,會不會互相影響?
不會。每個節點 API call 都是獨立的,一個節點出錯不會影響其他節點已經完成的動作——這也是自動化很現實的一面:已經寄出去的 Gmail 收不回來,已經通知的 Slack 訊息也刪不掉。所以順序很重要,通常先做「不可逆」的動作前先做好驗證(例:先寫 Sheets log 一筆才寄 Gmail),出錯時看 log 就知道發生什麼。錯誤處理策略在附錄:錯誤處理會系統性講。