熱門 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。
共通觀念:每個 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,你就掌握這節點的地圖了。
Slack 節點:辦公室通知第一名
Slack 是 n8n 最常被用來「通知人」的節點。無論是老闆要盯業績、開發要盯 CI、行政要盯訂單,Slack 節點都是最快速把訊息推到大家眼前的方式。
最常用的 Resource / Operation 組合
Slack 節點在 n8n v1 的 Resource 完整清單有 Channel、File、Message、Reaction、Star、User、User Group 七種。日常最常用的組合:
| Resource | Operation | 什麼時候用 |
|---|---|---|
| Message | Send | 發一則訊息到頻道或某人 DM(最常用) |
| Message | Get Many | 撈某頻道最近的訊息,做搜尋或分析 |
| Message | Update | 編輯已經送出的訊息(例:把「處理中」改成「完成」) |
| User | Get | 用 email 反查 Slack user ID,才能在訊息裡 @ 對方 |
| Channel | Create | 自動幫每個新客戶開一個專屬 channel |
| File | Upload | 把 binary 檔案傳到某頻道 |
| Reaction | Add | 對訊息加 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 兩個節點串起來。
#general(頻道名,加井字號)或 C01XYZ123(channel ID,Slack 頻道右鍵複製連結拿得到)。channel 名字改過或有中文字時,用 ID 才穩。Gmail 節點:一切從寄信開始
Gmail 節點是「寄信」和「抓信」的萬用工具。行銷寄感謝信、支援寄回覆、業務盯客戶回覆,都靠這個。
最常用的 Resource / Operation 組合
| Resource | Operation | 什麼時候用 |
|---|---|---|
| Message | Send | 寄一封新信(最常用) |
| Message | Reply | 回覆已存在的信(保留 thread) |
| Message | Get Many | 抓收件匣的信,配 Search 找特定寄件人/主旨 |
| Message | Add Label | 自動幫某封信貼標籤分類(Label 是掛在 Message 上的動作) |
| Draft | Create | 建草稿讓真人再確認一次才寄(審核流程用) |
| Label | Create | 建立一個新標籤(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 Sheets 節點:辦公室的萬用資料庫
對很多中小公司來說,Google Sheets 就是他們的資料庫。CRM 是 Sheets、庫存表是 Sheets、活動報名表是 Sheets。學會這節點就等於學會了「怎麼讓 n8n 讀寫辦公室資料」。
最常用的 Resource / Operation 組合
| Resource | Operation | 什麼時候用 |
|---|---|---|
| Sheet Within Document | Append Row | 新增一列(最常用:新客戶進 Sheets、log 一筆事件) |
| Sheet Within Document | Append or Update Row | 如果指定 key 已存在就 update,不存在就 append(upsert) |
| Sheet Within Document | Get Row(s) | 把整張表或符合條件的列讀出來(不是「Read」,是 Get Row(s)) |
| Sheet Within Document | Update Row | 用 Column to Match On 找到某一列去更新它 |
| Sheet Within Document | Delete Rows or Columns | 刪掉指定的列或欄(少用,破壞性) |
| Sheet Within Document | Clear | 清空指定範圍的內容但保留欄框 |
Credential 兩種選
| 選項 | 建議情境 |
|---|---|
| Google OAuth2 | 個人/小團隊。設定快,用你自己的 Google 帳號授權 |
| Service Account | 企業推薦。開一個「不是真人」的機器帳號、把要用的 Sheets 分享給這個機器 email。人員離職不影響 automation |
Append Row:新增一列
Append Row 是最常用的動作。設定重點:
-
選 Document
下拉會列出你帳號下所有 Google Sheets 檔案,直接挑一個。也可以貼 URL 或 Sheet ID。
-
選 Sheet(分頁)
一個 Sheets 檔案裡可能有好幾個分頁,選對那一個 tab。
-
Mapping Column Mode 選手動
Mapping Column Mode 下拉有三個選項:Map Automatically(自動對應,只要 upstream JSON 的 key 跟 Sheets header 完全一致就自動塞)、Map Each Column Manually(手動,一格一格填 expression)、Nothing。沒把握對齊時推薦手動——自動模式只要有一個 key 名不同,那欄就會漏。
-
逐欄填 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 欄改成「已付款」。
Google Drive 節點:檔案的家
Drive 節點主要拿來「存檔」跟「取檔」。客戶上傳的檔案自動歸檔、每天備份的 CSV 上雲、把附件下載下來給下一個節點用——都靠這個。
最常用的 Resource / Operation 組合
| Resource | Operation | 什麼時候用 |
|---|---|---|
| File | Upload | 把上一節點的 binary 存進 Drive |
| File | Download | 拿 file ID 抓檔案內容(吐 binary 給下一節點) |
| File | Copy | 複製一份到其他資料夾 |
| File | Move | 把檔案搬到另一個資料夾 |
| File | Share | 建立分享權限(例:給某 email 讀取) |
| File | Create from Text | 直接用一段字串當內容生一個檔案(例:把 JSON 存成 .txt) |
| File/Folder | Search | 用檔名/MIME type 找檔案或資料夾(Search 屬於 File/Folder 這個複合 resource,不是 File) |
| Folder | Create / Delete / Share | 資料夾也有自己的 CRUD 動作 |
| Shared Drive | Create / 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 節點當寄信附件。
實例:新表單來就寄 Gmail + 附 Drive 檔案 + Slack 通知
把這章學的四家全串起來做一條真實 workflow。情境:客戶填了 Google Form(帶附件),你要自動寄封感謝信給對方+附上他上傳的檔案+在 Slack 通知業務群「有新客戶進來」。
-
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 就好。 -
Google Drive Download:抓客戶上傳的檔案
表單如果有「上傳檔案」題目,Sheets 那一列會存一個 Drive 檔案的分享連結。加一個 Google Drive → File → Download 節點,File ID 用 expression 從上一步的 URL 抽出來:
{{ $json["附件"].split("id=")[1] }}。這一步跑完會吐 binary,下游可以拿去當附件。 -
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 下載的檔案一起寄出去。 -
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:。 -
Save + Execute Workflow 測一次
右上角 Ctrl+S 存檔。手動去 Google Form 填一筆假資料,回 n8n 按 Execute Workflow。四個節點都變綠打勾以後,去信箱看寄達了沒、去 Slack 看通知進了沒。
-
Activate toggle 打開
測試 OK 以後,右上角把 Active toggle 打開。從這一刻起,任何人填表單,n8n 都會自動幫你跑這條流。
同一個節點想連好幾個帳號
你可以在 n8n 的 Credentials 頁面(左側選單)開好幾個同款 credential。舉例:
Slack 個人 workspaceSlack 公司 workspaceSlack 客戶 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 嗎?
Slack 我有兩個 workspace(個人跟公司)怎麼辦?
Slack - 個人、Slack - 公司)。每個 Slack 節點裡就可以選要用哪一組。甚至同一條 workflow 都可以有多個 Slack 節點分別接不同 workspace——超方便,客戶 Slack、內部 Slack 一次全通知。Gmail 一天可以寄幾封?
@gmail.com)一天 500 封寄送額度;Google Workspace 帳號(公司自訂域名,例 @yourcompany.com)是 2000 封。這是 Google 帳號的硬限制,不是 n8n 的。如果你在做電子報群發、行銷大量寄送,用 SendGrid、Postmark、Mailgun 這類專業 email 服務比較妥當(一天可以幾萬封),n8n 也有它們的節點。Google Sheets 一次能讀多少列?會不會超級大表就爛掉?
A1:D1000、A1001:D2000);(2) 資料量真的大就改用 Airtable、Notion、或真的資料庫(Postgres / MySQL 節點)。Drive Upload 大檔案(幾百 MB 的影片)會不會有問題?
OAuth 授權有效期多久?會不會過期要重接?
401,回 credential 頁重新授權就好。Slack Bot Token 沒有過期日,除非你手動 revoke。