Skip to content

chennjustin/Flower_Order_Bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

653 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flourish — 花店蚂單管理系統

Flourish 是以 LINE Bot 為接收端的花店商家埌台系統。顧客透過 LINE 傳送蚂賌需求系統以 OpenAI 將對話敎理成結構化蚂單草皿商家確認埌寫入資料庫䞊可圚埌台查詢、匯出蚂單、蚭定欄䜍以及透過 LINE 自動傳送蚂單確認卡片。


文件玢匕

文件 說明
完敎安裝指南 環境變敞、資料庫 Migration、新增店家、LINE Webhook 蚭定
API 文件 OpenAPI 契玄
User Stories MappingGoogle Drive PDF 包含 Persona, User journey map 以及 User story map
WireframesFigma 介面線框與 UI 原型
Database Schema 資料衚結構與關聯PostgreSQL / Supabase
Project ManagementNotion 開癌時皋、任務分工、Milestones 報告 與 亀付玀錄 開癌內容與分工可芋「開癌」
枬詊報告 Unit / Integration / Contract / Smoke Test 說明

系統架構

┌──────────────────────────────────────────────────────────────────┐
│                         顧客端                                    │
│                     LINE App手機                              │
└───────────────────────────┬──────────────────────────────────────┘
                            │ 傳送蚊息 / 接收卡片
                            ▌
┌──────────────────────────────────────────────────────────────────┐
│                   LINE Messaging API                              │
│             Webhook → POST /callback                              │
│             Push MessageText / Flex Message                   │
└───────────────────────────┬──────────────────────────────────────┘
                            │
                            ▌
┌──────────────────────────────────────────────────────────────────┐
│                 FastAPI BackendPython 3.12                    │
│                                                                  │
│   routes/ → services/ → repositories/                           │
│   ├─ linebot    ← LINE Webhook 解析、蚊息存入 DB                  │
│   ├─ orders     ← 蚂單 CRUD、草皿建立、匯出                       │
│   ├─ chat       ← 聊倩宀列衚、SSE 掚播端點                        │
│   └─ stores     ← 店家蚭定、欄䜍蚭定                              │
│                                                                  │
│   usecases/                                                      │
│   ├─ linebot_flow         ← Webhook 事件處理流皋                  │
│   └─ organize_order_draft ← OpenAI 敎理草皿流皋                   │
│                                                                  │
│   SSE endpoint/sse/stores/{id}                               │
│   └─ Redis pub/sub → è·š worker 廣播新蚊息事件                    │
└──────────┬────────────────────────────────┬─────────────────────┘
           │ async SQLAlchemy               │ SSE stream
           ▌                               ▌
┌──────────────────────┐       ┌───────────────────────────────────┐
│  Supabase            │       │  React FrontendTypeScript     │
│  ├─ PostgreSQL       │       │                                   │
│  │  倚租戶資料庫      │◄─────►│  MessagesPage — 䞉欄聊倩宀 RWD    │
│  │  store → customer │  REST │  OrdersPage   — 蚂單管理          │
│  │  → chat_room      │  +SSE │  SettingsPage — 欄䜍蚭定          │
│  │  → order          │       │                                   │
│  └─ Auth             │       │  TanStack Queryserver state   │
│     Google OAuth     │       │  React Router路由 / blocker   │
│     JWT              │       │  Tailwind CSS                     │
└──────────────────────┘       └───────────────────────────────────┘

┌──────────────────────┐
│  Redis               │
│  SSE pub/sub channel │
│  支揎倚個 uvicorn     │
│  worker 同步掚播      │
└──────────────────────┘

Tech Stack

局玚 技術
前端 React 19、TypeScript、Vite、TanStack Query、React Router v6、Tailwind CSS
埌端 Python 3.12、FastAPI、SQLAlchemy 2.x async、Alembic、Pydantic v2
資料庫 PostgreSQLSupabase 托管、Redis
AI OpenAI GPT蚂單草皿敎理
通蚊 LINE Messaging API SDKWebhook、Push Message、Flex Message
認證 Supabase AuthGoogle OAuth、JWT
郚眲 Docker Compose
文件匯出 DOCXpython-docxtpl、CSV前端產生

架構蚭蚈說明

即時通蚊SSE + Redis pub/sub

LINE Webhook 收到新蚊息埌埌端透過 Redis publish 事件所有連線䞭的前端 SSE client 透過 subscribe 立即收到掚播。這暣即䜿郚眲倚個 uvicorn worker任䜕 worker 收到 Webhook 郜胜廣播絊連到其他 worker 的前端䞍需芁 sticky session。

盞范 WebSocketSSE 是單向掚播、瀏芜噚自動重連曎適合「埌端䞻動通知」的䜿甚堎景䞔前端無需額倖凜匏庫。

AI 敎理草皿流皋

商家按「敎理草皿」
      │
      ▌
PATCH /organize_data/{room_id}
      │
      ▌
organize_order_draft usecase
      ├─ 1. 取出該聊倩宀最近 N 則蚊息
      ├─ 2. 組成 prompt含欄䜍 schema送 OpenAI Chat Completion
      ├─ 3. 解析回傳 JSON → 寫入 order_draft 衚
      └─ 4. 回傳 changed_fields哪些欄䜍被 AI 填入

前端收到 changed_fields → 藍色高亮顯瀺 AI 填入的欄䜍倌

倚䜿甚者資料隔離

所有 repository 方法匷制垶入 store_idRepository 局統䞀過濟防止跚店資料掩挏。

蚂單查詢䜿甚 outerjoin + OR 蚭蚈同時支揎兩皮䟆源埞聊倩宀草皿建立的蚂單有 room_id與埌台盎接新增的蚂單room_id = NULL。

動態欄䜍蚭定

store_order_field_config 衚以 JSONB 儲存每家店的欄䜍顯瀺蚭定顯瀺/隱藏/順序。前端草皿衚單、蚂單列衚欄䜍、LINE Flex Message 卡片內容均讀取歀蚭定動態枲染商家調敎埌立即生效䞍需改皋匏碌。


功胜說明

聊倩宀

  • 䞉欄 RWD 介面聊倩宀列衚 / 對話 / 蚂單詳情
  • SSE 即時掚播新蚊息透過 Redis è·š worker 廣播
  • AI 敎理草皿埞 LINE 對話自動提取蚂單欄䜍藍色高亮顯瀺 AI 填入的倌
  • 建立蚂單埌自動 push LINE Flex Message 蚂單確認卡片絊顧客

蚂單管理

  • 列衚、篩遞狀態 / 日期 / 關鍵字、分頁
  • 盎接新增蚂單 / 埞草皿建立蚂單
  • 匯出 DOCX 工單Word 暡板、CSV

欄䜍蚭定

  • 每家店獚立蚭定拖曳調敎顯瀺順序
  • 切換欄䜍顯瀺 / 隱藏必芁欄䜍鎖定
  • 欄䜍蚭定圱響草皿衚單、蚂單列衚、Flex Message 卡片內容

認證

  • Google OAuth 登入Supabase Auth
  • 店䞻與 store 1:1 綁定僅胜存取自己店的資料
  • Onboarding 流皋銖次登入匕導蚭定店名與欄䜍

快速開始

git clone <repository-url>
cd Flower_Order_Bot

cp backend/.env.example backend/.env
# 填入 DATABASE_URL、OPENAI_API_KEY、LINE token/secret、SUPABASE_URL/KEY

docker compose up --build
  • 前端http://localhost:5173
  • 埌端 Swaggerhttp://localhost:8000/docs

完敎安裝步驟本機執行、ngrok、資料庫 migration、新增店家芋 docs/SETUP.md。


Testing

本專案涵蓋 Unit Test、Integration Test、Contract Test 與 Smoke Test完敎說明芋 docs/TESTING.md。

範圍 框架 枬詊檔 案䟋敞 最近結果2026-06-12
Backend pytest 39 206 206 passed
Frontend Vitest 5 18 18 passed

自行執行枬詊前請先䟝 docs/SETUP.md 完成環境變敞、資料庫與認證蚭定。

# Backend
cd backend
pip install -r requirements.txt
python -m pytest tests/ -v

# Frontend
cd frontend
npm install
npx vitest run

授權

MIT License

About

🌞 花店蚂單系統䞲接 LINE 官方垳號、䞊䞲接 AI 幫䜠敎理蚂單现節、支揎倚家花店

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors