尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
用 seats.aero Partner API 查詢國泰、法航、加航、長榮、華航等航空公司的里程票座位,並附上航空聯盟與里程計畫規則庫。檢視完整 README ↗
用 seats.aero Partner API 查詢國泰、法航、加航、長榮、華航等航空公司的里程票座位,並附上航空聯盟與里程計畫規則庫。
data/points.json 的 calc.sources。data/points.json 的 transfers/cobrand),以及里程票與現金票的基本觀念。資料在 data/*.json,直接編輯即可更新。頁尾會顯示版本號、最後更新日期、更新紀錄,以及目前部署的程式版本(Vercel 提供的 commit)。改完東西要上線前,先跑:
node scripts/bump-version.js patch "這次改了什麼" # 小修正:1.9.0 → 1.9.1
node scripts/bump-version.js minor "新增 XX 功能" # 新功能:1.9.0 → 1.10.0
它會更新 data/version.json 的版本號、日期(台北時間)與更新紀錄,再一起 commit 即可。
需要 Node.js 20 以上。唯一的相依套件是一句話搜尋用 Claude 時的 @anthropic-ai/sdk(版本鎖在 package-lock.json;用 ChatGPT 不需要套件),第一次先執行 npm ci。
npm ci
cp .env.example .env # 填入 SEATS_AERO_API_KEY
export $(grep -v '^#' .env | xargs)
npm start # http://localhost:3000
npm test
沒有設定 SEATS_AERO_API_KEY 時會以示範資料模式運作,畫面上方會有提示。
/api/*,由伺服器轉發至 seats.aero。CACHE_TTL_SECONDS),節省每日 1,000 次的 Pro 額度。公開的查詢(里程搜尋、區域探索、出發前小提醒、匯率、今日好康、資料檔)另外交給 Vercel 的 CDN 快取(s-maxage),換一台伺服器也不會重查;要通關密碼的查詢(現金票、飯店現金價、提醒、追蹤)不走 CDN,改用 Upstash Redis 共用快取 30–60 分鐘,同樣的查詢、連點兩下都只扣一次額度。asiamiles,官方文件未列出),但沒有長榮、華航自家里程計畫;這兩家以可換到其座位的夥伴計畫(見 data/airlines.json 的 bookableVia)呈現。沒有亞洲萬里通資料的寰宇一家航線,前端會依 data/asiamiles.json 的距離哩數表估算。public/airports.min.json,約 3,200 個有定期航班的機場)由 scripts/build-airports.js 產生:機場資料來自 OurAirports(公有領域),城市別名來自 airportsdata(MIT,© Mike Borsetti),常用機場中文名與多機場城市(東京、倫敦等)在 data/airport-names-zh.json 手動維護。改了中文名之後重新執行該腳本即可。在 Vercel 選「Add New → Project」,匯入這個 GitHub repo,Framework 選 Other。
在 Environment Variables 新增 SEATS_AERO_API_KEY,值填你的 seats.aero 金鑰。
按 Deploy。之後每次推送到 main 都會自動重新部署。
(選用)查現金票通關密碼:在 Environment Variables 新增 CASH_PASSCODE(任意字串)後重新部署,之後只有輸入過密碼的裝置才能用 SerpApi 即時查價(里程票查詢不受影響)。沒設定就不鎖。
(選用)現金票即時價格:到 serpapi.com 註冊取得金鑰,在 Environment Variables 新增 SERPAPI_KEY 後重新部署。免費方案每月 250 次查詢;每次搜尋、「看回程」或「查預訂選項」各用 1 次,同樣條件 30 分鐘內重查不會再扣。沒設定時「查現金票」分頁只提供 Google 航班與 Skyscanner 連結。
(選用)機位提醒:在 Vercel 專案的 Storage 分頁,透過 Marketplace 建立一個 Upstash Redis(免費方案),連線設定會自動加入;再到 resend.com 註冊、建立 API 金鑰,新增環境變數 RESEND_API_KEY(沒驗證網域時,只能寄到你註冊 Resend 的信箱)。請設定 CRON_SECRET(任意長字串):Vercel 的排程會帶著它呼叫,沒有它、也沒有通關密碼時,排程端點一律拒絕。可另設 ALERT_FROM 自訂寄件人。重新部署後,vercel.json 裡的 cron 每天 00:10 UTC(台灣 08:10,seats.aero 每日額度剛重置)呼叫 /api/alerts/run,依序更新今日好康、降價追蹤、機位提醒;01:10 UTC 再跑一次 /api/cron/daily 補做前一次沒做完的部分(已做過的會跳過,不會重扣額度或重複寄信)。Hobby 方案的排程可能在該小時內任何時間觸發。也可以在網站的「機位提醒」面板按「立即檢查全部」。設定了 CASH_PASSCODE 的話,管理提醒也要輸入同一組密碼。
(選用)「誰飛直航」用同一把 RAPIDAPI_KEY 的 AeroDataBox(每月約 400 單位,每個出發機場 6 單位,存兩週)。台灣各機場與香港、東京、大阪、首爾、曼谷、新加坡任何人都能查;其他出發機場要通關密碼。每月剩 40 單位時自動停止查新機場;如果你的方案額度不同,可設 DIRECTS_MONTHLY_UNITS。
(選用)Telegram 通知:在 Telegram 找 @BotFather,傳 /newbot 建立自己的機器人,複製它給的金鑰,在 Vercel 新增環境變數 TELEGRAM_BOT_TOKEN 後重新部署(需要已設定 CASH_PASSCODE 和 Upstash Redis)。接著在 Telegram 打開你的機器人按「開始」(傳送 /start),再回網站按「連結 Telegram」;收到「機票搜索雷達已連結」就完成了。之後新機位提醒和降價通知除了 Email 也會傳到 Telegram。
(選用)帳號同步:有 Upstash Redis 就能用 Email+密碼註冊,在不同裝置同步點數、收藏、最近搜尋、行程等個人設定(不登入也一切照舊)。驗證信和重設密碼信透過同一個 RESEND_API_KEY 寄出;沒設定寄信時帳號直接啟用、無法用「忘記密碼」。登入後輸入過一次通關密碼,同一個帳號在其他裝置也算已解鎖(只存加鹽雜湊,改了 CASH_PASSCODE 就要重新輸入)。
(選用)一句話搜尋:ChatGPT 或 Claude 擇一。用 ChatGPT:到 platform.openai.com 儲值並建立 API 金鑰,在 Vercel 新增 OPENAI_API_KEY(模型 GPT-6 Luna);用 Claude:到 platform.claude.com 建立 API 金鑰,在 Vercel 新增 ANTHROPIC_API_KEY(模型 Claude Haiku 5.5)。兩個都設時用 ChatGPT,想改用 Claude 就加 NL_PROVIDER=claude。建議在各自的後台設每月花費上限,設好後重新部署。航線查詢上方會多一個輸入框,只有輸入過通關密碼(或已解鎖帳號)的裝置看得到;模型把一句中文變成表單條件,兩家價格相同,每次約 US$0.0004,不花 seats.aero 額度(按「搜尋機位」才會查)。每天最多 100 次(NL_DAILY_LIMIT 可改),同一句話一天內重打不重複計費。沒設定金鑰時輸入框不會出現。同一把金鑰也用在「請 AI 助理查官網」卡片(國泰、華航、長榮、星宇)的「📷 貼上截圖」:你自己截官網的哩程日曆,模型把圖讀成日曆,每張約 US$0.001(估算),圖不會保存;每天最多 30 張(NL_IMAGE_DAILY_LIMIT 可改),讀失敗不算次數。
前端放在 public/,/api/* 由 api/index.js 這支 serverless function 處理,金鑰不會出現在瀏覽器端。