[EP-14] 如何拆解行政工作到 n8n ? 以篩選信件為例說明
要做自動化前,必須先對自己的工作流程有足夠的認識。建議先鉅細靡遺地寫下所有步驟,然後一邊學習有什麼自動化工具可以使用,就能設計出屬於自己的自動化工作流。
前幾天,我向老婆介紹 n8n 的潛力,讓她躍躍欲試。
老婆所在的單位行政效率低落,至今仍有大量紙本作業。例如,他們有位行政人員,每月會從系統產製收入表,印出後送給長官蓋章,至少需要蓋三個章。
完成蓋章後,收入表會送到我老婆手上。她負責預算審核,需核對收入表上的數據是否與銀行的進出紀錄相符。
這項工作每個月約需耗時 4 小時,雖然時間不長,但我認為使用 n8n 自動化與 AI 技術,有望將流程縮短至 10 分鐘內。
為了鼓勵她採用,我簡單示範了如何將紙本掃描成 PDF,上傳後由 AI 自動解讀。
AI 從 PDF 中擷取特定欄位數字,並產出 JSON 格式資料,如此便可直接與銀行的進出紀錄比對帳目是否相符。
老婆看了後很開心,決定採用。
可是在此之前,必須先由人類仔細梳理並拆解工作流程,才能將其分解為 n8n 中的一個個節點。
換言之,她必須先拆解自己的工作流。
我並沒有從事過她的行政工作,自然無法知道如何拆解其流程,這項工作必須由她自己完成。
那麼,具體來說,要如何拆解工作呢?
今天我們先以「整理信件」作為範例來說明。
解構行政工作
在公司,我每天早上會先閱讀信件,因為部分工作會經由信件交辦。為了有效管理信件,我會迅速進行以下分類:
需處理的重要信件:如來自長官的郵件,區分哪些需要知悉,哪些必須列入工作清單。
相關但不緊急的公告:如人事室發布的通知,僅快速瀏覽,除非涉及如線上表單填寫等行動需求。
無關的公告信件:如無興趣參加的講座通知等,則直接標記為已讀。
一、初步處理:讀取與預篩選
先將信件送到 Gmail
公司的信件是放在自架的伺服器上,所以第一步統一把公司信件轉信到 Gmail 。
Gmail 上的篩選器可以做初步篩選,點擊右上方的「齒輪」→「查看所有設定」→「篩選器和封鎖的地址」。
此時先把所有來自公司的信件,都設定公司的標籤。
如果是長官或同事寄來的信件,設定為重要。
公司的電子報,我根本不想看,就讓篩選器直接刪掉。
n8n 第一個節點: Schedule Trigger
條件判斷節點:設定為每小時收一次信
n8n 第二個節點: Gmail , Actions 選擇 Get many messages
Gmail API 設定及 n8n 串接方式,請參考 [EP-12] 如何在 n8n 分別串接 Gmail 與 Notion 。
條件判斷節點:
這裡要從 Gmail 節點的 Filters ,找 Label Names or IDs ,篩選所有帶有公司標籤的信件。
在 Filters 的 Search 欄位,可以依照需求再篩選。
在 Filters 的 Read Status 欄位,設定只抓未讀信件。
Gmail 節點的其他設定
Message Actions(郵件操作)
Add label to message:將標籤新增至郵件。
Delete a message:刪除郵件。
Get a message:取得單一郵件內容。
Get many messages:批次取得多封郵件內容。
Mark a message as read:將郵件標記為已讀。
Mark a message as unread:將郵件標記為未讀。
Remove label from message:從郵件中移除標籤。
Reply to a message:回覆郵件。
Send a message:發送新郵件。
Send message and wait for response:發送郵件並等待對方回覆。
Label Actions(標籤操作)
Create a label:建立新標籤。
Delete a label:刪除標籤。
Get a label info:取得單一標籤資訊。
Get many labels:批次取得多個標籤資訊。
Draft Actions(草稿操作)
Create a draft:建立郵件草稿。
Delete a draft:刪除郵件草稿。
Get a draft:取得單一郵件草稿內容。
Get many drafts:批次取得多封草稿內容。
Thread Actions(郵件串操作)
Add label to thread:將標籤新增至郵件串。
Delete a thread:刪除整個郵件串。
Get a thread:取得單一郵件串內容。
Get many threads:批次取得多個郵件串內容。
Remove label from thread:從郵件串中移除標籤。
Reply to a message:回覆郵件(針對郵件串中的特定訊息)。
Trash a thread:將郵件串移至垃圾桶。
Untrash a thread:從垃圾桶還原郵件串。
二、依據信件性質分類
下一個節點使用 Switch ,它根據條件來分流工作流程(類似於程式設計中的 switch/case 語法)。
在設定 Mode 時,有兩個選擇:
1. Rules(規則模式):適合多重條件分支(類似 if/else if/else)。
用途:建立多個「條件規則」,根據這些規則將資料導向不同的輸出路線。
設定方式:為每個輸出設定對應條件(例如:數值範圍、文字比對、布林值等)。
範例:
若「狀態碼」為 200,走「成功」路線。
若「狀態碼」為 404,走「錯誤」路線。
2. Expression(運算式模式):適合簡單的二元判定或需要動態計算時使用。
用途:使用運算式(Expression)回傳對應輸出路線的「索引編號」(從 0 開始)。
設定方式:寫一段程式表達式(如
{{$json["status"] === "success" ? 0 : 1}}
)。範例:
若
totalAmount > 1000
,則返回 0(第一個輸出)。若
totalAmount <= 1000
,則返回 1(第二個輸出)。
我先將信件分為以下兩大類,針對每個類別設置各自的處理流程,因此要在 Switch 節點上,設定 2 個 Routing Rules 。
與我直接相關的信件(送到 Notion 資料庫)
條件判斷節點:只要是長官或者同事寄來的信件,一律都歸類在這裡。
分支處理:
送到 Notion 資料庫,不用開信就可閱讀。如果我覺得重要再處理。
本來想說把信件夾帶的檔案也寄到 Notion 資料庫,但是 Notion API 不支援檔案上傳。問了 AI ,它建議我先設定上傳到 Google Drive ,取得 URL 傳到 Notion 。但是這麼做太瞎了,等於複製了重複的檔案。各位自己斟酌。
Notion 節點說明:
Block Actions(區塊操作)
Append a block:在 Notion 頁面或區塊中新增內容(如文字段落、標題、清單等)。例如每日自動將 Slack 訊息摘要新增到 Notion 筆記區塊。
Get many child blocks:取得某個區塊下的多個子區塊(如頁面內的段落、清單項目等)。
Database Actions(資料庫操作)
Get a database:取得指定資料庫的詳細資訊(如欄位結構)。
Get many databases:批次取得多個資料庫的清單。
Search a database:搜尋資料庫中的資料頁面(可搭配條件過濾)。
Database Page Actions(資料庫頁面操作)
Create a database page:在指定資料庫中建立新頁面(例如新增一筆資料)。
Get a database page:取得特定資料頁面的詳細資訊。
Get many database pages:批次取得多個資料庫頁面(如多筆資料)。
Update a database page:更新資料庫中的特定頁面(修改欄位內容)。
Page Actions(頁面操作)
Archive a page:將指定頁面封存(類似刪除,但可在 Notion 中復原)。
Create a page:建立新頁面,可用於新增筆記或資料記錄。
Search a page:搜尋頁面,根據標題或屬性篩選符合條件的頁面。
User Actions(用戶操作)
Get a user:取得特定用戶的資訊(如名稱、電子郵件等)。
Get many users:批次取得多位用戶的清單資訊。
公告信但可能與資訊工作無關(送給語言模型判斷是否需要直接已讀)
條件判斷節點:
非本科同事寄來的信件,一律都歸類在這裡,必須讓語言模型判斷是否跟我有關。
我每天會收到其他單位寄來大量的公告信,平均 10 封信有 6 封信都是這類的。
分支處理:
送到語言模型處理
寫到這裡,我發現要把資料送到語言模型處理,需要更多的篇幅要寫,因為 n8n 上的 AI 節點有以下這幾種。
AI 模版(AI Templates)
AI 代理人(AI Agent)
OpenAI
基礎大型語言模型鏈(Basic LLM Chain)
資訊抽取器(Information Extractor)
問答鏈(Question and Answer Chain)
情感分析(Sentiment Analysis)
總結鏈(Summarization Chain)
文本分類(Text Classifier)
其他 AI 節點(Other AI Nodes)
到底該選哪一種?讓人眼花撩亂,這陣子我會先研究看看,預計在 EP-16 電子報再繼續設計。