自動行銷劇本(已搬遷)+ 跨模組行銷活動
「行銷自動化 → 劇本列表」已於 2026-06-05 整併進「會員管理 → 自動行銷劇本」(變基本 CRM 功能、無需額外付費)。
詳細說明請見 自動行銷劇本。
跨模組行銷活動(global_promotions)
後台左側 會員管理 → 跨模組行銷活動(/dashboard/modules/marketing-automation/global-promotions)。與「自動行銷劇本」是兩套獨立系統:劇本針對「個別會員的事件」觸發(發點數、推訊息……),跨模組行銷活動針對「結帳當下」自動判斷折扣,顧客不需輸入任何代碼(折扣碼型除外)。
已有完整後台頁面:清單(含篩選、CSV 匯出、使用紀錄查詢)/新增/編輯/即時試算,皆為自助操作,不需聯絡客服申請。
6 種活動類型
| 類型 | 說明 | 折抵方式 |
|---|---|---|
| 折扣碼 | 顧客輸入吻合的代碼才套用,沒輸入不會自動折 | 百分比或固定金額(可選) |
| 限時特價 | 只折指定品項,逐件計算後再乘數量 | 百分比或固定金額(可選) |
| 滿額折扣 | 依消費金額折固定金額。「階梯」=取符合條件中門檻最高的一階;「循環」=每滿一次折一次 | 依門檻設定,非百分比/金額二選一 |
| 滿額贈 | 達門檻送指定贈品,不折金額 | 不折金額,出贈品 |
| 生日禮 | 壽星專屬,後端查會員生日,非壽星不套用 | 固定為百分比 |
| 首購禮 | 首單專屬,後端查會員 total_spent,有消費紀錄就不套用 | 固定為固定金額 |
百分比欄位是「折抵掉的百分比」,不是台灣口語的「幾折」:填 20 =折 20%(1000 元付 800);填 85 =折 85%(1000 元付 150,不是 85 折)。表單在輸入框下方即時顯示換算金額。
適用模組
目前已接線(結帳時真的會套用):電商商城、零售 POS。尚未接線(表單會列出但無法勾選):課程報名、餐飲 POS、美業預約、場地預約——勾了也不會折,畫面會用灰階區塊標示原因。適用模組清單一律以後端 GET /api/marketing/global-promotions/modules 回傳為準,不要憑印象假設哪些模組已接線。
共用限制欄位(六型皆可選填)
- 總份數上限 / 每人限用次數:留空或 0 =不限
- 最低消費金額:比對「模組自身折扣後的應付金額」
- 折抵上限:封頂用
- 取消 / 退款時歸還額度:預設開啟;關閉代表「佔了名額就是佔了」,適合限量搶購型活動。這個設定在扣款當下會快照,之後改設定不影響已成立的單
會員條件(filter_conditions)
可選限定會員等級、必須有的標籤(勾多個=全部都要有)、排除的標籤(帶有其中任一個就不套用)。全部留空=不限會員(含非會員結帳);只要設了任何一項,結帳時查不到會員一律不套用。
即時試算
編輯頁右側「即時試算」呼叫與零售 POS / 電商結帳同一支後端引擎(POST /api/marketing/global-promotions/calc),可代入結帳模組、試算金額、會員 ID、折扣碼看實際折抵結果。它讀的是「已儲存」的活動,表單改了但還沒存的欄位不會反映在試算結果。多個活動同時符合條件時,結帳只套用折最多的那一個,不疊加。
使用紀錄與匯出
清單頁每筆活動可開「使用紀錄」彈窗,看每筆折抵的會員、來源模組、來源單號、折抵金額、狀態(已使用 / 已退還)。也可依建立日期區間匯出 CSV。
延遲 / 排程觸發
劇本的 trigger_config 支援三個延遲欄位,可混用加總:
| 欄位 | 說明 | 範例 |
|---|---|---|
delay_days | 延遲天數 | 3(三天後發) |
delay_hours | 延遲小時數 | 2(兩小時後發) |
delay_minutes | 延遲分鐘數(主要用於測試) | 30(30 分鐘後發) |
三個欄位加總計算;例如 delay_days=1, delay_hours=2 代表「26 小時後」。上限為 90 天,超過時自動截斷至 90 天。
延遲觸發的執行流程
- 入列:事件觸發時系統立即在
ma_rule_runs建立一筆status='scheduled'的紀錄,並寫入scheduled_at(= 觸發時間 + 延遲時間)。此時 dedup marker 已卡位,防止同條件重複排隊。 - 定時派送:後端 cron 定期呼叫
dispatchScheduledActions,掃出scheduled_at <= now()的紀錄,依序處理。 - 原子 claim:每筆紀錄以
UPDATE ... WHERE status='scheduled' RETURNING原子搶占,多 tick / 多 pod 同時跑也不會重發(冪等)。 - 條件重查:派送前重新對該會員跑
filter_conditions,若延遲期間內條件已不符合(例如會員已升等、已取消)→ 標skipped_filter不發。 - 黑名單重查:派送前重查黑名單,黑名單成員一律略過,不因「入列當下未封鎖」而漏擋。
- 執行動作:通過以上檢查後執行 LINE 訊息推播 / 標籤 / 其他 action。
延遲觸發常見用法
order_completed trigger + delay_hours=48。
- 首購後 7 天推回購券:first_purchase trigger + delay_days=7。
- 分階段培養:同一個觸發類型設多條劇本、各給不同延遲(第 1 天、第 3 天、第 7 天)。
- 生日前 N 天推祝賀:延遲欄位只吃 0 以上的數字,不能填負值往前推。請改用「生日當天」觸發類型自己的 days_before 參數(填 N = 生日前 N 天)。2026-08-16 前這個功能是壞的
ma_rule_runs 一筆紀錄都不會產生,而回應看起來像「已經執行過了」,從畫面上完全看不出有問題。
已於 2026-08-16 修復。此前設過延遲的劇本請到「執行紀錄」確認實際有無紀錄;該期間錯過的獎勵不會自動補發。備註
多分店設定
本租戶若已開多家分店,本模組設定屬「per-store」(每間分店各自獨立設定)。 畫面頂部會看到 banner:
- 橘色「正在編輯:[分店名]」→ 編輯的是該分店私有設定
- 黃色「正在編輯:全店共用設定」→ 影響所有分店
切換分店:左上角當前門市切換器。
單店租戶看不到 banner(系統自動隱藏)。
劇本的「適用分店」設定
2026-06-16 起,自動行銷劇本(ma_rules)支援 per-store 設定,編輯/新增劇本時頂部有「適用分店」radio:
- 全店共用:所有分店的事件都會觸發此劇本(預設值,向後相容舊資料)
- 指定分店私有:只有當該事件來自指定分店時才觸發;其他分店不會跑
觸發判斷邏輯(fireTrigger store-aware)
- 訂單 / 預約 / POS 等帶 storeId 的事件:同時跑「全店共用劇本」+「該分店私有劇本」
- 不帶 storeId 的事件(例如標籤手動加上、生日通用觸發):只跑全店共用劇本,分店私有劇本不會被觸發
執行紀錄歸屬
ma_rule_runs.store_id 寫入規則:
- 若劇本本身設了
store_id(指定分店私有),執行紀錄一律歸屬該店 - 否則 fallback 到觸發事件帶的
triggerStoreId(從訂單/預約查到的分店) - 兩者皆無 →
store_id為 NULL(全域層級事件)
執行紀錄列表頁可依分店篩選,店長角色只看得到自家分店的執行紀錄。
列表頁「適用範圍」欄
劇本列表多了「適用範圍」欄位:
- 全店共用 → 顯示「全店」
- 指定分店 → 顯示分店名稱 chip(橘底)
方便一眼看清楚哪些劇本是跨店共用、哪些是分店專屬。