// 作品 / 詳情
hanken(半券)
以 LINE 為基礎架構的售票白牌 SaaS。售票是鉤子,觀眾 CRM 才是核心。
SCREENSHOT_001.png
一句話
讓活動方與場地方擁有自己的售票系統,透過觀眾 CRM 建立長期經營能力。
為什麼做這個
傳統售票平台抽票房、觀眾歸平台、每場活動歸零。hanken 反過來:純 SaaS 月費、觀眾歸活動方、資料隨時間複利。售票是獲客手段,CRM 是真正的產品。
商業模型
- 純月費制,不抽成任何票房
- 白牌模式:系統建在活動方自己的 LINE OA 上,觀眾關係留在他們手上
- 活動方自行串接金流(綠界、LINE Pay),平台不碰金流
技術選擇
Elixir + Phoenix + Ash Framework。搶票是大量短時間並發請求,Erlang VM 的甜蜜點。Ash 處理售票的複雜狀態轉換:開賣、鎖定、付款、出票、退票、驗票。
座位鎖定用 FOR UPDATE SKIP LOCKED 悲觀鎖,在 Ash 不支援的地方直接走 raw Ecto — 這是刻意的設計選擇,不是技術債。
WaitingRoom 是 per-event GenServer,控制並行購買人數。Selection queue + Lock queue 兩階段,透過 process message 驅動 LiveView 狀態轉換。
架構重點
- Schema-based multi-tenancy:每個組織一個 PostgreSQL schema
- Workflow 模式:所有多步驟交易邏輯集中在
Workflows模組,LiveView 不直接組合 Ash 操作 - Side effect 分層:transaction 內的
after_action→ commit 後的 Notifier → transaction 外的 Oban worker - UUIDv7 primary key,PostgreSQL 18 原生
uuidv7()生成
AI 功能
- Lookout 瞭望台:LLM agent 主動分析觀眾行為、產生行銷建議,附帶幻覺驗證、成本控制、推播抑制等四道安全護欄
- Desk 服務台:Jido agent 驅動的互動式 Q&A,支援對話持久化與長對話摘要壓縮
LINE 生態整合
| 技術 | 用途 |
|---|---|
| LINE Login | 一人一帳號,提高黃牛成本 |
| LIFF | 售票、票券、驗票都在 LINE 內開啟 |
| Message API | 活動通知、CRM 自動化推播 |
| LINE OA | 每個活動方的官方帳號,觀眾關係在自己手上 |