Appearance
S1 會員管理
概述
管理會員帳戶的完整生命週期,包含多元登入方式的自助註冊、管理員新增、批次匯入、漸進式身份驗證(手機 OTP / Email OTP / Google / Apple)、通知管道綁定(LINE / 簡訊 / Email),以及會員資料維護。系統以獨立 UUID 為帳號主鍵,認證方式(AuthMethod)與通知管道(NotificationChannel)完全分離。會員是所有服務的基礎——沒有完整的會員資料,就無法進行需求收集、預約和行程執行。
執行者:乘客/家長(C2C 場景)/ 管理員(B2B 場景)
觸發條件
- 新用戶首次使用服務,需要建立帳號
- 管理員為活動或學期計畫批次建立會員
- 已有帳號但尚未完成驗證,需補完驗證流程
- M2 需求收集前,系統檢查會員狀態(fully_verified 方可建立需求)
- 用戶嘗試建立需求但帳號狀態為 basic_verified,觸發手機補驗流程
Happy Path
路徑 A:自助註冊(C2C 場景)
- 用戶透過任一入口(Web / 手機網頁 / PWA / LINE LIFF)開啟 Web App
- 選擇登入方式:
- 手機 OTP:輸入手機號碼 → 接收驗證碼 → 驗證完成
- Email OTP:輸入 Email → 接收驗證碼 → 驗證完成
- Google 登入:跳轉 Google OAuth → 授權回調
- Apple 登入(Phase 2):跳轉 Apple OAuth → 授權回調
- 系統查詢 AuthMethod(provider_uid 是否已存在):
- 已存在 → 直接登入
- 不存在 → 建立新 User(UUID 主鍵)+ AuthMethod
- 填寫基本資料(姓名、暱稱)
- 帳號狀態判定:
- 以手機 OTP 註冊 → 狀態為「fully_verified」(手機已驗證)
- 以其他方式註冊 → 狀態為「basic_verified」(可瀏覽,建立需求前需補驗手機)
路徑 B:管理員批次匯入與外部同步(B2B 場景)
B1. 準備與上傳
- 管理員準備 Google Sheets 資料(必填:姓名、電話;可選:Email、地址等)
- 進入中控台「會員管理」→「批次匯入」
- 上傳檔案或指定 Google Sheets 連結
B2. 格式驗證
系統自動檢查:
| 檢查項目 | 說明 |
|---|---|
| 必填欄位 | 姓名、電話不得為空 |
| 格式檢查 | 電話格式(09 開頭 10 碼)、Email 格式 |
| 重複檢查 | 電話號碼比對現有會員是否已存在 |
B3. 匯入預覽
系統顯示匯入預覽,管理員確認無誤後才執行:
| 項目 | 說明 |
|---|---|
| 總筆數 | 檔案中的資料總數 |
| 新增筆數 | 系統中不存在的新會員 |
| 更新筆數 | 已存在會員,有欄位需要更新 |
| 錯誤筆數 | 格式錯誤或衝突的資料(含錯誤行號和原因) |
B4. 差異更新(Hash 比對)
管理員確認後,系統逐筆處理:
- 新會員 → 建立會員資料
- 已存在會員 → 以 hash 值比對各欄位,僅更新有差異的欄位(無差異則跳過,避免不必要的寫入)
- 錯誤筆 → 跳過並記錄錯誤原因
B4.5 發送邀請連結
匯入完成後,系統對新建立的會員發送邀請:
- 系統發送邀請簡訊至管理員提供的電話號碼
- 內容:「您已被 [方案名稱] 加入為會員,點此連結啟用帳號」
- 連結包含一次性 invite token
- 用戶點擊連結 → 進入 Web App → 選擇偏好的登入方式
- 系統發 OTP 到邀請連結對應的電話號碼(二次確認身份)
- 驗證通過 → 將選擇的登入方式寫入 AuthMethod → 帳號狀態升級為 fully_verified → token 失效
「手機號碼有誤」處理:邀請頁面提供「手機號碼有誤?」選項 → 用戶填入正確號碼 → 系統通知管理員確認 → 核准後更新
B5. 同步紀錄與來源追蹤
匯入完成後,系統建立完整的追蹤記錄:
同步紀錄(每次匯入一筆):
- 狀態流轉:待處理 → 處理中 → 已完成 / 失敗
- 記錄:匯入時間、來源類型、成功/失敗筆數
同步日誌(每筆資料一筆):
- 原始資料、同步結果(新增/更新/跳過/失敗)、錯誤訊息
來源追蹤歸因:
- 每個會員記錄外部來源資訊(如「Google Sheets - 2026春季營隊名單」)
- 記錄最後同步時間,供後續差異比對使用
B6. 中斷恢復
- 匯入過程中若中斷(網路異常、系統錯誤),已處理的資料保留不受影響
- 同步紀錄狀態標記為「失敗」,記錄中斷位置
- 管理員可重新匯入,系統以 hash 比對自動跳過已成功的資料,僅處理未完成部分
路徑 C:管理員手動新增(B2B 場景)
- 管理員進入中控台「會員管理」→「新增會員」
- 填寫家長/監護人資料(姓名、電話、Email、地址)
- 新增孩童資訊(姓名、年齡、學校、年級、特殊需求)
- 儲存會員資料
路徑 D:通知管道綁定(可選)
用戶可綁定一或多個通知管道,以接收行程相關推播通知。此為可選操作,不影響核心功能使用。
- 用戶進入「帳號設定」→「通知管道」
- 顯示可綁定管道:
- 簡訊:手機驗證完成後自動啟用,不可關閉(最終 fallback)
- Email:輸入 Email → OTP 驗證 → 綁定完成
- LINE:透過 LINE Login OAuth 授權 → 取得推播權限 → 綁定完成
- 用戶可隨時開關各管道(簡訊除外)
- 綁定完成後,系統依事件類型與用戶啟用的管道交集發送通知
注意:LINE 通知管道綁定(LINE Login OAuth)與從 LINE LIFF 進入 Web App 是完全獨立的兩件事。用戶可從 LINE LIFF 進入但不綁定 LINE 通知,也可從瀏覽器進入但綁定 LINE 通知。
會員資料維護
- 基本資訊編輯(姓名、電話、Email、地址)
- 登入方式管理(新增/移除 AuthMethod:手機 OTP、Email OTP、Google、Apple)
- 通知管道管理(新增/移除/開關 NotificationChannel:LINE、Email;簡訊為保底不可關閉)
- 孩童資訊管理(一位會員可管理多位孩童)
- 會面點設定(地址、座標、照片)→ 觸發 S3
- 通知鏈接設定(新增其他監護人為通知接收者)
Worst Case
WC-1:驗證碼過期或錯誤
- 觸發條件:用戶輸入的驗證碼已超過有效期(10 分鐘)或碼值不正確
- 系統行為:提示「驗證碼已過期」或「驗證碼不正確」
- 處理方式:用戶重新發送驗證碼(Email 冷卻 60 秒、簡訊冷卻 15 秒)
WC-2:簡訊發送達上限
- 觸發條件:同一帳號簡訊發送已達 3 次
- 系統行為:阻擋發送,提示聯絡客服
- 處理方式:客服人工協助驗證
WC-3:帳號合併衝突
- 觸發條件:用戶補驗手機時,該號碼已關聯另一個帳號(例如 B2B 管理員預建的帳號)
- 系統行為:提示「此手機號碼已有帳號,是否合併?」
- 處理方式:
- 用戶確認合併 → 有行程記錄者為主帳號(都沒有則較早建立者為主)→ 所有 AuthMethod 與 NotificationChannel 合併到主帳號
- 用戶取消 → 保持現狀,不綁定此號碼
WC-4:匯入格式錯誤
- 觸發條件:批次匯入的檔案格式不符或必填欄位缺漏
- 系統行為:驗證失敗,顯示錯誤清單(含錯誤行號與原因)
- 處理方式:管理員修正原始資料後重新上傳
WC-5:匯入部分失敗
- 觸發條件:批次匯入中部分資料有問題
- 系統行為:成功筆數正常處理,失敗筆數記錄至同步日誌
- 處理方式:管理員依據錯誤日誌逐一修正
WC-6:通知管道綁定衝突
- 觸發條件:一個 LINE 帳號(或同一 Email)嘗試綁定為多個會員的通知管道
- 系統行為:限制一對一綁定,提示衝突
- 處理方式:需先在原帳號解除綁定,再於新帳號綁定
WC-7:會員停用與恢復
- 觸發條件:會員不再使用服務
- 系統行為:軟刪除機制(標記刪除時間,資料保留),通知鏈接自動停用
- 處理方式:需恢復時取消軟刪除標記,通知鏈接自動恢復
場景差異表
| 維度 | C2C 共乘 | 活動接駁 | 企業接駁 | 校車 | 旅遊包車 |
|---|---|---|---|---|---|
| 建立方式 | Web App 自助註冊 | 管理員批次匯入 + 邀請認領 | 管理員批次匯入 + 邀請認領 | 管理員批次匯入 + 邀請認領 | Web App 自助註冊 |
| 登入方式 | 手機 OTP / Email OTP / Google | 邀請連結 → 任選登入方式 | 邀請連結 → 任選登入方式 | 邀請連結 → 任選登入方式 | 手機 OTP / Email OTP / Google |
| 手機驗證 | 建立需求前補驗(漸進式) | 管理員已提供,認領時 OTP 確認 | 管理員已提供,認領時 OTP 確認 | 管理員已提供,認領時 OTP 確認 | 建立需求前補驗(漸進式) |
| 通知管道 | 用戶自選綁定(LINE / Email) | 管理員發送綁定引導 | 企業窗口發送綁定引導 | 管理員發送綁定引導 | 用戶自選綁定(LINE / Email) |
| 孩童資訊 | 用戶自行填寫(選填) | 管理員匯入,含學校/年級 | 不適用 | 管理員匯入,含學校/年級/班級 | 不適用 |
| 會面點設定 | 用戶自選上車點 | 管理員預設或家長設定 | 企業指定接駁點 | 學校/家長設定 | 用戶自選 |
| 批次匯入 | 不適用 | 常用(含 hash 差異更新) | 常用(含 hash 差異更新) | 常用(含 hash 差異更新) | 不適用 |
| 來源追蹤 | 不適用 | 記錄外部來源與同步時間 | 記錄外部來源與同步時間 | 記錄外部來源與同步時間 | 不適用 |
| 重複處理 | AuthMethod 唯一性檢查 | hash 比對,僅更新差異欄位 | hash 比對,僅更新差異欄位 | hash 比對,僅更新差異欄位 | AuthMethod 唯一性檢查 |
所屬主流程
| 主流程 | 關係 | 說明 |
|---|---|---|
| M1 服務設計 | 前置 | 服務方案定義會員需要完成哪些驗證 |
| M2 需求收集 | 前置 | 收集需求前需確認會員資料完整 |
| S3 會面點管理 | 觸發 | 會員設定會面點後進入審核流程 |