
上次有朋友問我 CRM 怎麼做自動化,這篇一次講完。 前半是我踩過來的故事,後半是你可以直接丟給 Claude Code 的指令。
一、我原本用的 CRM 停更了
我之前用一套 CRM 的體驗版,今年 4 月它停止更新了。 名單還在那邊,八千多個有 email 的客人,但我完全不知道誰該在什麼時候被叫一下。
那時候我對 CRM 的理解很簡單:多久沒買,就發一封「好久不見」。 60 天沒買發一封,120 天再一封,180 天最後一封。大家不都這樣做嗎?
結果我請 Claude 先別急著寫信,先幫我回測一件事: 拿半年前的名單,看這些人後來到底有沒有回來買。
二、回測打臉我的第一個假設
數字出來我愣了一下。
| 只買過一次的人 | 之後 6 個月回購率 |
|---|---|
| 距上次購買 60 天內 | 13.7% |
| 61~120 天 | 13.1% |
| 121~180 天 | 14.0% |
| 超過 180 天 | 13.0% |
一條水平線。 不管他是上個月買的還是去年買的,回來的機率都是 13% 左右。
可是買過兩次以上的人就不一樣了:
| 回購過的人 | 之後 6 個月回購率 |
|---|---|
| 60 天內 | 45.3% |
| 61~120 天 | 35.8% |
| 121~180 天 | 29.6% |
這條會掉。而且掉得很明顯。
所以「多久沒買」這個尺,對只買過一次的人根本量不出東西。 而只買過一次的人,佔我名單的 77%。 我以前的 CRM 花了七成力氣,在切一個不存在的差異。
三、CRM 不是廣播,是每個人家裡的冰箱
想通這件事之後我換了一個想法。
每個客人的冰箱大小不一樣、吃的速度不一樣。 有人一個月就清空一次冷凍庫,有人三個月才想起來還有一包在裡面。 CRM 該做的不是在固定的日子拿喇叭廣播,而是記住每個人冰箱空掉的時間,快空了才敲門。
所以現在每個回購客都有一個自己的「節奏」: 拿他過去幾次購買的平均間隔乘 1.5,最短 45 天、最長 120 天。 只買過一次的人沒節奏可算,用全站第一次到第二次的中位數 57 天。
超過自己的節奏還沒回來,才叫「鬆動」。 在節奏內的人,不要吵他。
四、六個分群,看到什麼做什麼
分群的主軸變成「買過幾次」,「多久沒買」只拿來判斷回購客有沒有超期。
| 分群 | 條件 | 我怎麼處理 |
|---|---|---|
| 新客 | 買 1 次,60 天內 | 出貨後 7 天寄一封「好不好吃」的評鑑信,其他不動 |
| 單次沉睡 | 買 1 次,超過 60 天 | 首購後 60 天寄一封推薦信,推他沒買過的。不急,反正機率都一樣 |
| 主力 | 買 2~3 次,節奏內 | 不吵 |
| 主力鬆動 | 買 2~3 次,超期 | 最急的一群,回購率正從 42% 往 32% 掉。寄關懷信 |
| 鐵粉 | 買 4 次以上,節奏內 | 不吵 |
| 鐵粉鬆動 | 買 4 次以上,超期 | 人數少、價值最高。不群發,人工一個一個聯絡 |
這張表是整套的心臟。信件、排程、後台儀表板全部掛在它上面。
五、三封信,各有一條不能破的規矩
信的文案我自己定稿,但每一封都有一條 Claude 幫我守住的鐵則。
評鑑信(出貨後 7 天) 絕對不放折扣碼。給了就變成花錢買評價,之後的分數全部失真。
關懷信(主力鬆動) 信裡要點出他自己的節奏。「你平常大概 45 天會回來一次,這次好像過了一點」。 這句話是我比一般群發信比較準的地方,也是他會感覺到「你有在記我」的地方。
推薦信(單次沉睡) 不能寫「好久不見」。回測已經證明,對這群人「多久」其實沒有意義,那句話就只是廢話而已。
還有一條是三封信共用的:第一批不給折扣。 我算過,免運對我沒用,因為 92% 的訂單本來就達免運門檻。 折扣的損益平衡點又很高,回購率要拉高三分之一才回本。 更重要的是,第一批就給折扣,我永遠不會知道信本身有沒有用。 所以分三組:不寄信的對照組、寄信不給折扣、寄信給折扣。
六、四道安全閘,這才是自動化敢開的原因
自動寄信最怕的不是沒效,是把客人惹毛。 一封被檢舉,整個寄信網域的信譽就開始掉。所以我請 Claude 在寄出去之前擋四道:
| 閘 | 做法 |
|---|---|
| 退訂 | 退一次永遠不寄,跟我另一套挽回信系統共用同一份名單 |
| 冷卻 | 同一個人 60 天內最多一封。評鑑信例外,因為收它的人剛買完 |
| 硬退信 | 信箱不存在的,寄信服務回報一次就標記,以後不挑 |
| 對照組 | 固定留 10% 不寄。用 email 的雜湊值決定,不用亂數,不然每天挑出來的人不一樣就沒有對照可言 |
另外還有一條暖機曲線:新網域第一週每天最多 25 封,慢慢放到 100 封。 寄信服務看到新網域突然一天噴一千封,就當你是垃圾信。
七、踩過的四個坑
老實說中間有幾個坑,寫出來省你的時間。
退訂連結被掃描器點掉。 第一版做成「點連結就退訂」。結果有些企業信箱的安全閘道,會自動抓信裡每一個連結去掃一遍。 客人根本沒動作,就被掃描器退訂了。改成兩段式:點進去先看確認頁,按了按鈕才算數。
每天同步把寄信紀錄洗掉。 每天早上同步訂單時用的是「整份覆蓋」,階段一沒事,因為欄位全部從訂單算得出來。 階段二加了「上次寄信日」這個欄位,隔天就被洗掉,已經寄過的人又被挑中,冷卻期形同虛設。 改成「合併寫入」才對。
推薦資料永遠是空的。 Claude 把推薦邏輯寫好了,但沒有任何地方呼叫它,管線是斷的。 測試的時候看推薦信推不出任何商品才發現。所以每一段程式都要真的跑一次看輸出,不能只看它寫得對不對。
寄信 API 回 403。 第一次打寄信服務被擋,錯誤碼是 Cloudflare 的不是寄信服務的,原因是程式的 User-Agent 被當機器人。 換個工具打就過了。遇到這種先看錯誤碼是誰回的,不要先懷疑金鑰。
八、整套架構長這樣
你的購物車平台 API(撈訂單)
↓ 每天 08:00 自動同步近 10 天訂單
Firestore(每個客人一份輪廓:買幾次、最後買哪天、自己的節奏、下次該碰的日子)
↓ 每天 10:30 挑出今天該寄的人 → 過四道閘 → 照暖機上限寄
Resend(寄信服務,免費層每月 3,000 封、每天 100 封)
↓ 信裡帶一次性連結
回饋表單(免登入,填了直接進後台)
↓
後台儀表板(六群人數、RFM 九宮格、寄送紀錄、回饋)
| 成本 | 金額 |
|---|---|
| Firebase(資料庫+排程+主機) | 每天算一次統計約 8,000 次讀取,在免費額度內 |
| Resend | 免費層夠用(每天 100 封) |
| 金鑰月租 | 每組約 NT$20,我只新建一組,其他跟既有系統共用 |
| 寄信網域 | 用自己網域開一個子網域,$0 |
整套一個月不到 NT$50。
九、整套流程怎麼跑(給要動手的人)
上面是故事,這裡是操作。整套分兩階段,中間一定停一次,名單看過才開寄信。
你要先準備的三樣東西
| 東西 | 怎麼確認 |
|---|---|
| 訂單拿得出來 | 購物車後台有 API、或能每天匯出 CSV、或你本來就登在 Google Sheet。至少要有:訂單號、email、日期、金額、商品名、狀態。沒有 email 這套做不了 |
| Firebase 帳號 | 用 Google 帳號建專案,升 Blaze(要綁卡,但用量在免費額度內),設 NT$100 預算警示保險 |
| Resend 寄信帳號 | 用公司信箱註冊,寄件網域用子網域 send.你的網域,三筆 DNS 加完顯示 Verified 才算 |
階段一:建名單,一封都不寄(約半天)
- Claude 先跑
node test.mjs給你看規則沒錯(16 項:節奏、分群、對照組、暖機、挑人、回測) - 接你的訂單來源,轉成統一格式,只留有效訂單
- 跑回測:拿半年前當觀察日,看六群之後 6 個月實際回購率。這張表就是你要不要寄信的依據
- 用你的資料重算「第 1 次到第 2 次」的中位數,換掉預設 57 天
- 建資料庫、每天 08:00 同步、後台看六群人數與名單
- 停下來:抽幾個人核對分群對不對
階段二:寄信(約半天)
- 三封信照骨架做,文案用你自己的口氣改
- 四道閘、暖機曲線、優先序全照範本
- 退訂兩段式+簽章+ Gmail 原生退訂鈕
- 部署後預設不寄,Claude 不代按開關
- 寄一封測試信給自己看排版
- 第一批 25 封你自己按,觀察 3~4 天沒退信沒檢舉,再跟 Claude 說「開寄信」
Skill 裝好之後,平常只要講這幾句
| 你想做的事 | 跟 Claude 說 |
|---|---|
| 看今天會寄給誰(試跑不寄) | 「今天寄給誰」 |
| 真的開自動 | 「開寄信」(它會帶你自己改開關) |
| 先停一下 | 「停寄信」 |
| 看六群人數 | 「看分群」 |
| 早上沒同步 | 「CRM 沒同步」 |
| 多一封信 | 「加一封 XX 信,對象是 XX 群」 |
十、Skill 包裡有什麼、怎麼裝
👇 Skill 整包放在訂閱者專屬站(訂閱者用本月密碼進去就能下載):
https://kuan-member.web.app/#/c/KqOssdG4wRHnmx5e77Ie
還沒訂閱的,訂閱說明在 這裡。
分享版-CRM自動化教學/
├── 安裝說明.md ← 四關照著做(訂單來源/Firebase/Resend/丟指令)
├── 丟給Claude的建置指令.md ← 兩階段指令,整段貼
├── SKILL.md ← crm-autopilot:流程、判讀 7 條、維護表、踩雷 10 條
└── 專案範本/
├── lib/crm-core.js ← 分群/節奏/RFM/對照組/暖機/挑人/回測,純函式
├── test.mjs ← 16 項測試,直接跑
└── mail-templates.example.md ← 三封信骨架+各自鐵則
裝法(解壓縮後在終端機貼):
mkdir -p ~/.claude/skills/crm-autopilot
cp -R ~/Downloads/分享版-CRM自動化教學/SKILL.md ~/Downloads/分享版-CRM自動化教學/專案範本 ~/.claude/skills/crm-autopilot/
重開 Claude Code,貼「階段一」指令就開始了。
先講清楚這包沒有的東西:沒有整套可部署的系統,因為每家購物車的訂單格式都不同,硬給一套你也接不上;也沒有我的信件原稿,文案要用你自己的口氣寫,客人才不會覺得是機器。
給的是規則層——回測過的參數全在 crm-core.js,你的 Claude 不用重新發明。
十一、你今天就可以丟給 Claude 的指令
我建議分兩階段,第一階段只建名單不寄信,先看分群對不對,再開寄信。
階段一:先建名單,一封都不寄
幫我建一套顧客回購追蹤系統,分兩階段做,這次只做第一階段:建名單、不寄任何信。
資料來源:<我的購物車平台 API,撈訂單的方式是 ⋯⋯>
技術:Firebase Hosting + Cloud Functions + Firestore,Google 登入+白名單後台
每天早上自動同步近 10 天訂單,替每個有 email 的客人建一份輪廓:
- 買過幾次、首購日、最後購買日、累計金額、最後買的商品
- 個人回購節奏 = 過去購買平均間隔 × 1.5,限制在 45~120 天之間;只買一次的用全站中位數
- 下次該聯絡日 = 最後購買日 + 節奏
分六群,主軸是「買過幾次」:
新客(1 次、60 天內)/單次沉睡(1 次、超過 60 天)/
主力(2~3 次、節奏內)/主力鬆動(2~3 次、超期)/
鐵粉(4 次以上、節奏內)/鐵粉鬆動(4 次以上、超期)
規矩:
- 個資最小化:不存地址、電話,只存 email 跟購買行為
- Firestore 的顧客資料前端只能讀不能寫,寫入只走後端
- 後台要有六群人數、每群名單可按「最久沒買」排序、匯出 Excel
- 先幫我用半年前的名單回測:各群之後 6 個月的實際回購率是多少,我要看數字再決定寄信策略
- 一步做完回報我再做下一步
階段二:開寄信(名單看過、分群確認對了再貼)
現在做第二階段:寄信。
三封信:評鑑信(出貨後 7 天)/關懷信(主力鬆動,信裡要點出他自己的節奏幾天)/推薦信(單次沉睡,首購後 60 天,推他沒買過的)
文案我會自己給你,你先做骨架。
寄信服務用 Resend,寄件網域用 send.<我的網域>。
四道安全閘,缺一不可:
① 退訂名單永久不寄,退訂連結要兩段式(點進去先確認頁,按了才退),信件標頭帶 List-Unsubscribe
② 同一人 60 天內最多一封,評鑑信不受此限
③ 硬退信自動標記,以後不挑
④ 固定 10% 對照組不寄,用 email 雜湊決定,不用亂數
暖機:第 1~3 天每天 25 封、第 4~7 天 50 封、第 2 週 80 封、之後 100 封。
規矩:
- 程式部署後預設「不寄」,要我手動打開開關才寄;所有寄信端點沒帶 confirm=1 就只是試跑
- 第一批 25 封我自己按,觀察 4 天沒退信沒檢舉再開自動
- 每天同步顧客資料要用「合併寫入」,不能整份覆蓋,否則寄信紀錄會被洗掉
- 寄送紀錄自己存一份,寄信服務只留 30 天
- 每一段寫完真的跑一次看輸出,不要只看程式碼
十二、最後講一句
以前我以為 CRM 是「多久沒買就發信」,做完才知道那是在對一群機率不會變的人喊話。
真正有差的,是記住每個人自己的節奏,在他快忘記你的時候,剛好出現一下。 不用多,一封就好。
其實你手上的名單,比你以為的更會說話,只是以前沒人幫你聽。