【實作案例】透過Apps Script將Email 訂單資料自動新增至Google Sheet
需求:當收到固定格式的訂單通知 email 後,自動將資料填寫入 Google Sheet 表單當中。 實作方式:Google Apps Script ( 由Claude Sonnet4 提供程式碼)
提供給一樣不會寫 Code 但清楚流程、想透過自動化節省時間的人參考。
Overview
需求:當收到固定格式的訂單通知 email 後,自動將資料填寫入 Google Sheet 表單當中。
實作方式:Google Apps Script ( 由Claude Sonnet4 提供程式碼)
前提:
- 我先前有設定過其他 Apps Script,知道怎麼新增 Script 檔案、手動觸發 function、設定定時器Trigger。
- 已授權App Script完整權限 (Gmail、Google Sheet 都是我的帳號)
- Email 通知已在正常運作且結構固定。
- Google Sheet 工作表欄位固定。
實際花費時間:約2–3小時(包含討論需求、下Prompt、測試與除錯)
費用:免費。
- Gmail API 配額:
- 每日配額:10億個配額單位
- 每用戶每秒:250個配額單位
- 搜尋email:每次約8個單位
- 讀取email:每次約5個單位 - App Script 限制(免費gmail帳號)
- 執行時間每次6分鐘
- 每日執行時間總計6小時
- 觸發器數量20個
- 電子郵件配額每日100封
流程
1. 每1小時自動檢查一次 gmail 信箱是否有新的訂單通知。搜尋條件:
- 1. 信件主旨有固定格式,例如:開頭固定為 “訂單編號:”
- 2. 信件寄件人為特定對象
- 3. 信件上沒有指定的 gmail 標籤,例如:”AppsScript已自動處理”
2. 如沒有找到新的訂單,則結束執行。 如果有找到訂單通知,考慮可能不止1筆資料的狀況,逐筆處理資料。
3. 解析 email 內容,抓取待會要儲存或拿來運用的資料值,例如: 訂單編號、商店名稱、顧客姓名、聯絡電話 etc.
4. 在 Google Sheet 指定工作表中,新增一列。
5. 將解析內容與預設值填入工作表中。
6. 執行完成後,將 email 貼上指定的 gmail 標籤,例如:”AppsScript已自動處理”。
7. 處理下一筆資料(假如有) ,直到全部處理完畢後停止。
Best Practice / Lesson Learned
- 永遠先用少量測試資料驗證功能,再啟用自動觸發器。例如我設定了一個參數可以手動設定email 日期範圍。
- 可以在程式碼最上方新增一個設定區域,用於處理重要但不常變動的參數設定,例如:工作表名稱、檔案連結、email 篩選條件、填入工作表的部分欄位預設值。
- 將可能需要由其他使用者變動的值放在在 Google Sheet 的指定工作表中,例如專門有”設定” 用的工作表。確保使用者知道如何維護。
- 設定 Log 與防止錯誤的機制,方便除錯,避免資料遺失、重複、覆蓋、或錯誤填寫。
- 設定一個 test 函數,可以手動觸發來檢查設定與資料解析結果是否正確。
- email 內容格式解析會花比較多時間試錯,盡可能提供真實案例和結果給 AI 除錯,也要提醒 AI 不要把程式邏輯變得太複雜。
- 將觸發條件透過 App Script 設定而不是程式碼。
- Gmail 的標籤可以透過程式,設計為若原本 gmail 中不存在該標籤則自動新增。
最後請Claude 整理 Prompt Template 可用於下一次的開發:
我需要開發一個Google Apps Script自動化應用:
【核心目標】
當 [觸發條件] 時,自動執行 [處理動作]
【技術環境】
- 資料來源:[Gmail/Google Sheets/Drive/其他]
- 輸出目標:[Google Sheets/Gmail/其他]
- 觸發頻率:[每X分鐘/小時]
【篩選條件】
- [條件1,如:特定寄件人]
- [條件2,如:主旨格式]
- [條件3,如:時間範圍]
- 防重複:[Gmail標籤/其他標記方式]
【處理流程】
1. [步驟1]
2. [步驟2]
3. 逐筆處理資料:解析→驗證→寫入→標記
4. [其他步驟]
【資料處理】
輸入格式範例: [輸入真實資料]
需解析欄位:[欄位1, 欄位2, 欄位3...]
輸出位置:[具體Sheet名稱和位置]
預設值:[欄位A=值1, 欄位B=值2...]
【設定管理】
- 固定設定:[檔案ID, 工作表名稱, 篩選條件等]
- 可變設定:[放在Google Sheet中的參數]
【要求】
- 包含CONFIG設定區域
- 提供test函數驗證設定
- 詳細console.log除錯
- 批次處理避免API限制
- 完整錯誤處理機制
請提供完整程式碼實作。如果你有什麼有趣的案例、想嘗試的情境、或實作上卡關的地方,歡迎和我分享。