工作流介紹
Google Sheets 與 MySQL 的雙向同步工作流程
此 n8n 工作流程範本實作了 Google Sheets(通常由 Google 表單提供資料)與 MySQL 資料庫之間一個穩健的雙向同步系統。此系統專為管理活動或演唱會查詢而設計,可確保兩個系統之間的資料一致性,同時支援自動化狀態追蹤、條件式通知和欄位對應。此工作流程會在營業時間內按排程執行,也可手動觸發以立即執行。
工作流程功能
此工作流程的核心目的是:
- 從 Google Sheet(例如 Google 表單的回應)擷取新的或已更新的查詢記錄。
- 從 MySQL 資料表(
ConcertInquiries)擷取對應的記錄,其中source_name = 'GoogleForm'。 - 根據共用金鑰(
timestamp和source_name)比較兩個資料集,忽略自動管理的欄位,例如id、record_created和record_updated。 - 將任何新的或已變更的 Google Sheet 記錄插入或更新(upsert)到 MySQL 資料庫。
- 在比較結果中偵測
DB Status欄位的變更,並將這些更新傳播回 Google Sheet。 - 識別超過 4 小時且未收到回覆的過時查詢,並觸發通知。
- 在記錄確認同步後,在資料庫中維護同步旗標。
主要功能與能力
- 雙向同步:在特定條件下,Google Sheets 或 MySQL 中的變更都可以反映在另一個系統中。
- 欄位正規化:自動重新命名和重新格式化 Google 表單的欄位名稱,使其成為標準化的資料庫友好欄位名稱(例如,將日期格式轉換為
YYYY-MM-DD)。 - 條件式邏輯:使用多個
IF節點來處理不同的同步場景:- 過時查詢偵測
- 狀態欄位更新
- 同步確認
- 排程與手動觸發:在工作日的早上 6 點到晚上 10 點之間每 30 分鐘自動執行一次,並支援隨選執行。
- 資料比較:利用
Compare Datasets節點智慧地偵測差異,同時排除系統管理的欄位。 - 文件支援:包含用於 Google 表單和所需 MySQL 資料表結構的設定說明貼紙。
主要節點及其用途
| 節點 | 類型 | 用途 |
|---|---|---|
| Schedule Trigger | scheduleTrigger |
在工作日的營業時間內(*/30 6-22 * * 1-5)每 30 分鐘自動執行一次工作流程。 |
| When clicking "Execute Workflow" | manualTrigger |
允許手動觸發以進行測試或緊急同步。 |
| Google Sheet Data | googleSheets |
從 Google 試算表中指定的試算表(Form Responses 1)讀取所有列。 |
| SQL Get inquiries from Google | mySql |
從 ConcertInquiries 資料表中擷取所有 source_name = 'GoogleForm' 的記錄。 |
| Rename GSheet variables | set |
將原始 Google 表單欄位名稱對應到標準化的資料庫欄位名稱,並使用 Luxon 的 DateTime 重新格式化日期。 |
| Compare Datasets | compareDatasets |
使用 timestamp 和 source_name 作為合併金鑰,比較 Google Sheet 資料(重新命名後)與 MySQL 記錄;跳過系統欄位。 |
| Add MySQL records | mySql |
在 ConcertInquiries 中執行 upsert 操作,根據 timestamp 進行匹配以避免重複。 |
| No reply too long? | if |
檢查記錄的 timestamp 是否超過 4 小時;如果為真,則導向通知邏輯。 |
| DB Status assigned? | if |
偵測 DB Status 欄位是否在 MySQL 中被更新(透過 different.db_status.inputB),並觸發 Google Sheet 更新。 |
| Update GSheet status | googleSheets |
僅更新原始 Google Sheet 列中的 DB Status 和 Timestamp 欄位。 |
| DB Status in sync? | if |
在將記錄標記為已同步之前,驗證 source_name 是否存在(作為有效同步狀態的代理)。 |
| Sync MySQL data | mySql |
透過將 "Sync" 追加到 source_name 欄位來更新 MySQL 記錄,確認雙向同步成功。 |
| Send Notifications | noOp |
作為未來通知邏輯(例如電子郵件、Slack)的預留位置;目前不做任何事,但標記了警報的路徑。 |
| Sticky Notes | stickyNote |
提供設定指南:一個用於 Google 表單結構,另一個連結到 SQL 結構的 gist。 |
使用案例與優勢
主要使用案例:透過 Google 表單提交的活動或演唱會預訂查詢管理,確保它們可靠地儲存在結構化的 MySQL 資料庫中,同時允許員工直接在試算表或資料庫中更新狀態。
優勢:
- 資料完整性:防止重複,確保跨平台的欄位命名一致性。
- 營運效率:自動將表單資料輸入到可查詢的資料庫。
- 狀態追蹤:使團隊成員能夠在任一系統中更新查詢狀態,並在兩個系統中反映變更。
- 警報就緒:識別過時的查詢以進行後續處理(可從
noOp節點擴展通知系統)。 - 低維護:排程執行減少手動干預;手動觸發支援調試。
工作流程邏輯步驟
- 觸發:工作流程透過排程觸發器(每週一至週五上午 6 點至晚上 10 點每 30 分鐘)或手動觸發器啟動。
- 資料擷取:
- Google Sheet Data 擷取所有表單回應。
- SQL Get inquiries from Google 擷取標記為
source_name = 'GoogleForm'的所有 MySQL 記錄。
- 正規化:Rename GSheet variables 節點將 Google 表單欄位轉換為標準化的 JSON,並進行適當的日期格式化,同時添加
source_name = "GoogleForm"。 - 比較:Compare Datasets 節點使用
timestamp和source_name對齊兩個資料集,並輸出四個流程:- 需要 upsert 到 MySQL 的項目(
Add MySQL records) - 需要過時檢查的項目(
No reply too long?) DB Status已更新的項目(DB Status assigned?)- 可進行同步確認的項目(
DB Status in sync?)
- 需要 upsert 到 MySQL 的項目(
- 資料庫 Upsert:透過 Add MySQL records(在
timestamp上 upsert)將新的或已變更的記錄插入/更新到 MySQL。 - 條件式處理:
- 如果記錄超過 4 小時(No reply too long? → true),則導向 Send Notifications(目前為預留位置)。
- 如果
DB Status在 MySQL 中被修改(DB Status assigned? → true),則 Update GSheet status 將新狀態寫回 Google Sheet。 - 如果記錄有效(DB Status in sync? → true),則 Sync MySQL data 將
source_name更新為"GoogleFormSync"作為同步確認旗標。
- 完成:所有路徑均無錯誤地結束,維持系統間的資料對等。
此工作流程為將使用者提交的表單資料與關聯式資料庫整合提供了一個可擴展的基礎,非常適合客戶支援、活動管理或潛在客戶追蹤系統。
使用方法:下載 JSON 檔案,然後在 n8n 中選擇「從檔案匯入」。