照順序打勾,每一步都附「怎麼確認成功」。全部打完就能上線。
- 已取得
LINE_CHANNEL_SECRET、LINE_CHANNEL_ACCESS_TOKEN、GEMINI_API_KEY - (建議)已在 Neon 或 Supabase 開好免費 Postgres,拿到
DATABASE_URL - 程式已推上 GitHub 或上傳到部署平台
- 平台建立 Web Service
- Start Command:
gunicorn app:app --bind 0.0.0.0:$PORT - 環境變數都填好(見下表)
| 變數 | 必填 | 沒設的後果 |
|---|---|---|
LINE_CHANNEL_SECRET |
✅ | webhook 簽章驗證失敗,完全沒回應 |
LINE_CHANNEL_ACCESS_TOKEN |
✅ | 無法回訊息 |
GEMINI_API_KEY |
✅ | 中文股名查不到、沒有新聞/展望 |
DATABASE_URL |
🟡 | 自選/提醒重新部署後會消失 |
CRON_SECRET |
⬜ | 到價提醒端點沒有保護 |
✔ 怎麼確認: 用瀏覽器打開 https://你的網址/,應該回一段 JSON:
{"ok": true, "line_secret": true, "line_token": true, "gemini": true, "model": "gemini-2.5-flash"}只要有任何一項是
false,就是那個環境變數沒設好 → 回上一步補上。
- LINE Developers → 你的 Channel → Messaging API
- Webhook URL 填
https://你的網址/callback - 按 Verify → 顯示 Success
- 打開 Use webhook
- LINE Official Account Manager → 回應設定 → 關閉「自動回應訊息」(不然會蓋掉機器人)
✔ 怎麼確認: 加機器人好友,傳 2330,應收到台積電的 Flex 圖卡(含走勢圖)。
傳
AAPL也試一次,確認美股正常。
- 步驟 1 的健康檢查
gemini已是true
✔ 怎麼確認: 傳 台積電(中文名),若能回圖卡且有「📰 最新新聞 / 🔮 分析與展望」,代表 Gemini 正常。
若中文名查不到但
2330可以 → 通常就是GEMINI_API_KEY沒吃到。
-
DATABASE_URL已填(Neon / Supabase)
✔ 怎麼確認: 查一檔股票 → 點「⭐ 加入自選」→ 傳 自選 應看到它。
進階:到平台手動 Redeploy 一次,再傳
自選,資料若還在 = Postgres 生效。 若沒設DATABASE_URL,資料存本機 JSON,Redeploy 後會清空(屬正常)。
- 到 cron-job.org(或 Render Cron)建立排程
- 目標:
POST https://你的網址/tasks/check-alerts - 若有設
CRON_SECRET→ 加 HeaderX-Cron-Secret: <你的值> - 頻率:每 5~15 分鐘
✔ 怎麼確認: 先手動測一次:
curl -X POST https://你的網址/tasks/check-alerts -H "X-Cron-Secret: <你的值>"
# 應回 {"ok": true, "triggered": 0}實測:設一個很容易觸發的提醒(例:
提醒 2330 1,代表跌到 1 元才觸發 → 改成現價附近的數字),等排程跑到就會收到推播。
pip install -r requirements.txt
python test_bot.py # 或 pytest test_bot.py -v應顯示 19/19 通過。
| 症狀 | 最可能原因 |
|---|---|
| 完全不回應 | Webhook 沒開 / 自動回應沒關 / LINE_CHANNEL_SECRET 錯 |
| 連 AAPL 都查不到 | Yahoo 被機房 IP 限流(已有 Gemini 備援,偶發時稍等重試) |
| 中文名查不到、沒新聞 | GEMINI_API_KEY 沒設或設錯 |
| 自選/提醒會消失 | 沒設 DATABASE_URL(存在暫時性檔案) |
| 提醒不會通知 | 排程沒設 / CRON_SECRET 對不上 |
| 第一次查很慢 | 免費方案休眠喚醒 + Gemini 搜網,屬正常 |