盤點舊工具的時候,我發現有三條轉寄規則長得幾乎一模一樣:收到主旨含「A 銀行線上刷卡」的信,轉寄給財務信箱;收到「外幣匯入匯款通知書」,轉寄給財務信箱;收到「Payoneer 收到款項」,轉寄給財務信箱。三條規則,差別只有主旨關鍵字不一樣,收件人一模一樣。
看到這種「複製貼上三次」的東西,通常就是該重構的訊號。
我沒有照原樣搬三條規則,而是寫成一支程式加一份設定檔:程式負責搜尋、轉寄、貼標籤這些固定動作,設定檔裡放的是「主旨關鍵字對應轉寄對象」這種會變動的規則。之後要加第四條、第五條規則,改設定檔就好,程式完全不用動。
後來我又把附件歸檔也塞進同一支引擎——中華電信的帳單通知、B 銀行的外幣水單,這兩種信不是轉寄,是要把附件存進雲端硬碟指定資料夾。不同銀行給的水單格式本來就不一樣,這兩種信的邏輯也不一樣,但骨架相同:搜尋符合條件的信、對它做一件事、貼標籤避免重複。我在引擎裡加了一種新的動作類型,原本三個轉寄規則加上這兩個歸檔規則,五條各自獨立的舊流程,收成一支程式。
搜尋新信這件事,我選用關鍵字搜尋(subject:"A 銀行線上刷卡" -label:bot-processed),而不是用 Gmail 的歷史紀錄 API。原因是關鍵字搜尋在程式斷線重跑之後行為完全一樣,不需要額外記錄「上次執行到哪」;歷史紀錄那套斷線之後反而比較麻煩。
防止同一封信被處理兩次,靠的是貼標籤,不是記錄時間戳。時間戳只要程式中斷過一次、或者兩台機器交錯跑,就容易算錯;標籤直接寫在信件本身上,搜尋條件排除掉貼過標籤的信,怎麼重跑都不會錯。
轉寄信這件事也有一個容易忽略的坑:不能只把信件的文字內容抄一份寄出去,那樣附件會不見、格式也會跑掉。正確做法是整封信原封不動拿出來、換掉收件人跟主旨前綴,再送出去,這樣附件跟排版才會完整保留。
附件歸檔這條規則有個例外:如果信裡沒有附件——可能帳單這個月改用連結而不是附檔——程式不會自己想辦法解決,例如試著登入電信公司網站去抓帳單。它只會貼一個「無附件」的標籤,發個通知請人自己處理。
這條界線是刻意畫的。自動下載附件跟自動登入別人的系統,是完全不同量級的事——前者出錯頂多存錯一個檔案,後者一旦帳密設定錯誤或觸發防呆機制,可能直接把帳號鎖住。這件事不值得讓程式自己判斷,寧可多發一封通知信,也不要讓它自作主張。
這支引擎在 Windows 的工作排程器上每五分鐘跑一次,找新的轉寄信件;歸檔那部分因為不急,設成三十分鐘一次。發生連續失敗這種需要立刻讓人知道的狀況,會透過 Telegram 通知——原本很多人習慣用的 LINE Notify 已經停用了,這點要注意,換方案的時候順便把這個雷排掉。
回頭看看你手上的旅行社自動化清單,有沒有幾條長得很像、只差一兩個關鍵字的兄弟。那種重複,不是需要你再建一條新規則,是在提醒你該把它們收進同一支程式、同一份設定檔裡。之後要加新規則,就只是多寫一行設定,不用再複製貼上整套流程。