LINE Bot 自動化長輩圖生成服務,用戶上傳照片 → AI 生成 → 推播結果。
┌─────────────┐ Webhook ┌──────────────┐
│ LINE User │ ───────────────→ │ Zeabur API │
└─────────────┘ └──────────────┘
│
▼
┌─────────────┐
│ Redis │
└─────────────┘
│
▼
┌─────────────┐ ┌──────────────┐
│ LINE User │ ←── Push Message ─── │ Zeabur Worker│
└─────────────┘ └──────────────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌──────────┐
│Banana Pro│ │Supabase │ │ Supabase │
│ AI │ │ Storage │ │ DB │
└─────────┘ └─────────┘ └──────────┘
elder-gen/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 主程式
│ ├── worker.py # Celery Worker
│ ├── config.py # 環境變數設定
│ ├── database.py # 資料庫連線
│ ├── models.py # SQLAlchemy ORM
│ ├── schemas.py # Pydantic 驗證
│ ├── api/
│ │ └── line_handler.py # LINE 事件處理
│ └── services/
│ ├── line_service.py
│ ├── ai_service.py
│ ├── storage_service.py
│ └── payment_service.py
├── Dockerfile.api # API 服務 Dockerfile
├── Dockerfile.worker # Worker 服務 Dockerfile
├── requirements.txt
├── supabase_init.sql # 資料庫初始化腳本
└── .env.example # 環境變數範例
- 登入 Supabase Dashboard
- 開啟 SQL Editor,執行
supabase_init.sql - 建立 Storage Bucket:
- 名稱:
elder-images - Public Bucket:開啟
- 名稱:
- 登入 LINE Developers Console
- 建立 Messaging Channel
- 取得
CHANNEL_ACCESS_TOKEN和CHANNEL_SECRET - 設定 Webhook URL:
https://your-api.zeabur.app/callback/line
- 註冊 Banana Pro
- 取得 API Key
Zeabur Dashboard → Marketplace → Redis → Deploy
Zeabur Dashboard → New Service → Git
→ 選擇 GitHub Repo
→ Dockerfile 路徑:Dockerfile.api
→ 設定環境變數
→ Deploy
Zeabur Dashboard → New Service → Git
→ 選擇同一個 GitHub Repo
→ Dockerfile 路徑:Dockerfile.worker
→ 設定環境變數
→ Deploy
在 Zeabur 各服務中設定:
| 變數名稱 | 說明 | 範例 |
|---|---|---|
LINE_CHANNEL_ACCESS_TOKEN |
LINE Bot Token | ... |
LINE_CHANNEL_SECRET |
LINE Secret | ... |
DATABASE_URL |
Supabase 連線 | postgresql://... |
REDIS_URL |
Redis 連線 | redis://... |
SUPABASE_URL |
Supabase URL | https://... |
SUPABASE_KEY |
Service Role Key | ... |
BANANA_API_KEY |
Banana Pro Key | ... |
# 安裝依賴
pip install -r requirements.txt
# 複製環境變數
cp .env.example .env
# 編輯 .env 填入設定
# 啟動 Redis (需要 Docker)
docker run -d -p 6379:6379 redis
# 啟動 API
uvicorn app.main:app --reload
# 啟動 Worker (另一個終端)
celery -A app.worker worker --loglevel=info| 端點 | 說明 |
|---|---|
GET /health |
健康檢查 |
POST /callback/line |
LINE Webhook |
POST /callback/newebpay |
藍新金流 Webhook |
GET /api/user/{line_user_id} |
取得用戶資料 |
GET /api/jobs/{job_id} |
查詢任務狀態 |
| 指令 | 說明 |
|---|---|
/menu |
顯示主選單 |
/generate |
生成長輩圖 |
/points |
查詢點數 |
/topup |
儲值點數 |
/history |
我的作品 |
| 上傳圖片 | 開始生成任務 |
MIT License