N8N 客戶資料去重實戰:表單、Email、CRM 同步時怎麼避免重複聯絡人
做 n8n 客戶資料整合時,最常炸掉的不是串接本身,而是重複聯絡人越積越多。這篇聚焦去重設計,拆解 email、電話、公司名比對順序、人工覆核節點與 N8N 工作流寫法,幫你把同步做得穩。
N8N 客戶資料整合最容易失控的地方,不是接不到表單或 CRM,而是沒先寫好去重規則,結果同一位客戶在系統裡長成三筆資料。
有個做 B2B 軟體服務的團隊,官網名單、客服信箱、HubSpot 三邊都在收客戶資料。三個月後他們發現,同一家公司同一窗口,CRM 裡居然有 4 筆聯絡人,業務還各自跟進過一次。這種錯不是因為 N8N 不夠強,而是因為流程少了「先比對,再寫入」。
這篇是前一篇 Pillar〈中小企業客戶資料整合攻略:用 N8N 串起表單、Email、CRM 成單一資料源〉的延伸。我們只談一件事:當表單、Email、CRM 同步時,怎麼用 N8N 把重複聯絡人壓到最低。
為什麼去重比串接更重要
串接接通,只代表資料會流動。去重做不好,代表錯誤會自動放大。
常見後果有 4 個:
- 同一名客戶收到兩次開發信
- 業務重複建立 deal
- 客服看不到完整互動紀錄
- 報表裡的名單數看起來漂亮,實際轉換率被灌水
所以 客戶資料同步 的第一原則不是快,而是準。
先定義什麼叫「同一位客戶」
很多團隊卡住,是因為大家心中的同一位客戶其實不一樣。
B2C 常見判斷
- Email 相同
- 手機相同
- 會員 ID 相同
B2B 常見判斷
- 聯絡人 Email 相同
- 公司網域相同
- 公司名稱近似
- 聯絡人姓名加公司名稱相同
你不一定要一次做到模糊比對,但至少要先決定主規則和備援規則。
建議順序如下:
emailphonecrm_contact_id或內部customer_idcompany_domaincompany_name + contact_name
這個順序不是絕對,但很適合中小企業起步。核心原則是:越穩定、越不容易人工輸錯的欄位,優先級越高。
N8N 去重工作流,建議拆成 4 段
第 1 段:標準化輸入
去重前先清洗,不然比對沒意義。
你至少要做這幾件事:
- Email 轉小寫
- 電話去空格、括號、破折號
- 公司名稱去除「股份有限公司」「有限公司」等尾字
- 姓名去前後空白
- 空值轉成
null
如果你用 Set node 就能處理大部分欄位,真的複雜才進 Code node。很多人一開始就寫程式,反而把流程弄得不好維護。
第 2 段:建立匹配分數
單純 IF email exists 很容易不夠用。實務上比較穩的是做一層分數制。
例如:
- email 完全相同:100 分
- phone 完全相同:70 分
- company domain 相同:40 分
- company name 接近:20 分
- contact name 相同:20 分
分數規則可以設成:
- 100 分以上:直接視為同一人
- 70 到 99 分:送人工覆核
- 70 分以下:建立新聯絡人
這種方式的好處是,你不用一開始就追求非常複雜的 fuzzy match,也能先擋住大部分重複資料。
第 3 段:分流處理
有了分數後,N8N 就很好拆分支。
明確命中
若 email 或內部 ID 命中,直接更新既有聯絡人,但只更新允許覆蓋的欄位,例如電話、職稱、最新互動時間。
模糊命中
如果只命中公司名或電話,不要直接寫回。建議:
- 建一筆待審核紀錄
- 通知 Slack 或寄信給營運
- 附上原始 payload 與候選聯絡人
未命中
沒有相似對象時,再新增聯絡人。這樣你的新增才不會把垃圾資料直接灌進 CRM。
這類「先查、再決定 create or update」的做法,在 n8n Community 也常見,尤其是 CRM 與資料庫同步的案例:https://community.n8n.io/t/gohighlevel-to-nocodb-sync-in-n8n-create-or-update-contacts-and-companies-automatically/281332。
第 4 段:保留審計線索
這一步很多人直接省掉,後面就開始難查。
建議每次同步都至少存:
source_systemreceived_atmatch_rulematched_record_idraw_payloadsync_result
這些欄位不是拿來看爽的,是之後出現「為什麼這筆被蓋掉」時,你唯一能回頭查的依據。
一條可直接照抄的去重判斷邏輯
下面是一個很實用的判斷框架,適合官網表單加 CRM 的組合。
步驟 1:收表單
表單可用 webhook 或 n8n Form Trigger。官方文件對公開表單與 production URL 的行為有清楚說明:https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/。
步驟 2:清洗欄位
輸出統一物件:
{
"email": "[email protected]",
"phone": "+886912345678",
"name": "王小明",
"company": "Acme",
"source": "lead_form"
}
步驟 3:查 CRM
依序查:
- phone
- company + name
如果 CRM node 沒有現成查詢條件,就改用 HTTP Request。n8n 官方也明確把 HTTP Request 視為補足整合缺口的主要做法之一:https://docs.n8n.io/integrations/。
步驟 4:計分
把每個查到的候選記錄丟進同一個 Code node 做分數計算。
步驟 5:分支
- 高分:更新
- 中分:送審
- 低分:新增
步驟 6:寫 log
不管結果是什麼,都記錄一筆同步日志。
什麼欄位可以自動覆蓋,什麼不行
去重不只是「是不是同一人」,還有「這個欄位能不能被蓋掉」。
建議可自動覆蓋的欄位
- 最近互動時間
- 表單來源
- 行銷追蹤參數
- 備註型欄位
建議保守處理的欄位
- 客戶等級
- 負責業務
- 報價狀態
- 公司統編
- 付款資訊
如果這些敏感欄位被錯蓋,損失通常比多一筆重複資料還大。
Email 來源特別容易出錯,怎麼補
Email 的問題不是抓不到,而是半結構文字很多。
例如客戶可能這樣回:
我們公司改名了,電話也換成 02-1234-5678,之後請直接找採購 Abby。
這時你可以用 LLM 先抽出結構化欄位,但一定要遵守兩個原則:
- 模型只負責提取,不負責決定覆蓋
- 輸出必須有固定 schema
如果你要讓模型輸出更穩,Anthropic 文件建議把指令與輸出格式明確分段,必要時用 XML tags 提高可解析性:https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags。
想把這種 AI 補欄位做進更大流程,可以搭配看這兩篇:n8n-ai-agent-complete-guide-2026、n8n-ai-agent-workflow-patterns。
初次同步和日常同步,要分開設計
這也是很多團隊會踩的坑。
初次同步
特徵是量大、髒資料多、歷史欄位不一致。這時候不要邊跑邊寫正式 CRM,建議先:
- 批次拉資料
- 建 staging table
- 跑去重規則
- 人工抽查
- 確認後再正式寫入
Community 裡也有人直接問過這類初次同步怎麼做,重點就是先處理分頁、陣列拆 item,再決定 upsert,不要把初始化跟日常增量同步混在一起:https://community.n8n.io/t/how-to-implement-an-initial-sync-of-customer-data/159157。
日常同步
日常同步通常是事件驅動,量小但要求快。這時就適合 webhook 加即時查重。
什麼時候需要人工覆核節點
不是所有流程都該全自動。遇到下面情況,我會直接加人工節點:
- 候選紀錄超過 1 筆
- 公司名相似但 email 不同
- 高價值客戶
- 涉及業務歸屬變更
- 欄位更新衝突
人工覆核不是效率倒退,而是把風險壓在少數高成本案例,不要讓整個 CRM 被錯資料污染。
實作順序建議
如果你現在要開始做這條 n8n 客戶資料整合 去重流程,建議順序很簡單:
- 先定義主鍵與欄位 schema
- 清洗輸入格式
- 做 email 與 phone 的硬匹配
- 加上模糊分數與人工覆核
- 最後才擴到 Email 文字提取與 AI 補欄位
不要反過來。先把判斷邏輯站穩,再把自動化加深。
結論
做 n8n crm 整合時,去重其實就是你的資料品質防線。規則寫得清楚,CRM 才能越用越乾淨;規則寫得含糊,自動化只會讓錯誤長得更快。
對中小企業最實用的做法,不是追求百分之百完美匹配,而是先把 80% 高機率重複擋住,再把剩下 20% 高風險案例送人工。這樣你才能在速度和準確度之間拿到真正可用的平衡。
如果你想直接用模板起步,可到 https://n8nstart.cc/templates 找現成工作流;想看更多 N8N 實戰文章,也可以從 https://n8nstart.cc/ 繼續延伸。
FAQ
客戶資料同步時,去重一定要用模糊比對嗎?
不一定。起步時先用 email、phone、內部 ID 這種硬匹配就很夠用。等資料量變大、B2B 場景更複雜,再補公司名或聯絡人名稱的模糊比對。
表單和 CRM 同步時,什麼情況不該自動更新?
當候選記錄不只一筆,或涉及業務歸屬、客戶等級、付款資訊等敏感欄位時,不建議自動覆蓋,應該進人工覆核。
初次匯入舊客戶名單,可以直接接 CRM 嗎?
不建議。先進 staging table 跑去重與抽查,再正式寫入 CRM,風險會低很多。
Email 內容抽欄位後,可以直接回寫主資料嗎?
最好不要直接回寫。建議先做 schema 驗證與欄位權限判斷,再決定哪些資料能覆蓋,哪些只當建議值。