import gradio as gr from datetime import datetime, timedelta import os import requests from supabase import create_client, Client # --- 連線設定 --- LINE_ACCESS_TOKEN = os.getenv("LINE_ACCESS_TOKEN") LINE_ADMIN_ID = os.getenv("LINE_ADMIN_ID") SUPABASE_URL = os.getenv("SUPABASE_URL") SUPABASE_KEY = os.getenv("SUPABASE_KEY") supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY) # --- LINE 通知函式 (更新版:包含備註) --- def send_line_notify(data): if not LINE_ACCESS_TOKEN or not LINE_ADMIN_ID: return msg_body = [ {"type": "text", "text": "姓名", "color": "#aaaaaa", "size": "sm", "flex": 2}, {"type": "text", "text": data['name'], "wrap": True, "color": "#666666", "size": "sm", "flex": 5}, {"type": "text", "text": "電話", "color": "#aaaaaa", "size": "sm", "flex": 2}, {"type": "text", "text": data['tel'], "wrap": True, "color": "#666666", "size": "sm", "flex": 5}, {"type": "text", "text": "Email", "color": "#aaaaaa", "size": "sm", "flex": 2}, {"type": "text", "text": data.get('email', '-'), "wrap": True, "color": "#666666", "size": "sm", "flex": 5}, {"type": "text", "text": "備註", "color": "#aaaaaa", "size": "sm", "flex": 2}, {"type": "text", "text": data.get('remarks', '無'), "wrap": True, "color": "#666666", "size": "sm", "flex": 5} ] # ... (此處省略部分重複的 Flex Message 結構,重點是把上面的 msg_body 塞進去) ... # 為了節省篇幅,這裡直接發送簡單通知,您可以用之前的 Flex Message 結構替換 requests.post( "https://api.line.me/v2/bot/message/push", headers={"Authorization": f"Bearer {LINE_ACCESS_TOKEN}", "Content-Type": "application/json"}, json={"to": LINE_ADMIN_ID, "messages": [{"type": "text", "text": f"🔥 新訂位:{data['name']} ({data['pax']}人)\n時間:{data['date']} {data['time']}\n備註:{data.get('remarks', '無')}"}]} ) # --- 核心邏輯 --- def handle_booking(name, tel, email, date_str, time, pax, remarks): if not name or not tel or not date_str or not time: return "⚠️ 請完整填寫必填欄位" data = { "name": name, "tel": tel, "email": email, "date": date_str, "time": time, "pax": pax, "remarks": remarks, "status": "待處理" } try: # 寫入資料庫 supabase.table("bookings").insert(data).execute() # 發送 LINE send_line_notify(data) return """
🥂 預約申請已提交,請留意確認信。