Telegram Bot — Reasonix 遠端連接

架構

Telegram ──(Webhook)──> quotation.hsdesign.biz/api/telegram ──> D1 (telegram_messages)
Telegram ──(Polling)──> PC tg_poll.sh ──> Worker /api/telegram/hook ──> D1
                                                              ↕
                                                     Reasonix 檢查 inbox

Bot 資訊

  • Bot username: jakeyopen_bot(由 @BotFather 建立)
  • Bot token: 8777984842:AAESH5qkyG6OW_SwF-hpgla5VK-vzh-Z9mc(硬編碼在 Worker)
  • Chat ID: 5671991810(Ti Tze Czia)
  • Webhook URL: https://quotation.hsdesign.biz/api/telegram
  • Polling script: tg_poll.sh(PC 上 GitBash 執行)

API Endpoints(在 quotation-saas-worker.js)

路由方法用途
/api/telegramPOSTTelegram Webhook 入口
/api/telegram/hookPOSTPC polling script 轉發入口
/api/telegram/inboxGETReasonix 讀取未讀訊息
/api/telegram/sendPOSTReasonix 回覆訊息

D1 Table

CREATE TABLE telegram_messages (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  chat_id TEXT,
  user_id TEXT,
  username TEXT,
  text TEXT,
  timestamp TEXT,
  replied INTEGER DEFAULT 0
);

已知限制

  • Bot token 目前硬編碼在 Worker 中
  • 沒有處理 media(照片/檔案)
  • 沒有 streaming reply
  • Webhook + Polling 不能同時啟用(目前用 Webhook)

Code Graph — quotation-saas-worker.js

handleRequest(request)
├── /auth/* — 認證
├── /api/account — 帳號資訊
├── /api/referral/stats — 推薦碼統計
├── /api/draft — Draft 同步
├── /api/telegram — Telegram Webhook
├── /api/telegram/hook — PC polling hook
├── /api/telegram/inbox — 收件夾(需 secret)
├── /api/telegram/send — 發送回覆(需 secret)
├── /dashboard — 報價工具主介面
│   ├── fetch from GitHub
│   ├── patch gate removal
│   ├── CSS injection(金色主題)
│   ├── post script (IIFE → show app)
│   └── draft sync + totalFix scripts
├── /blog/* — Blog 系統(27篇文章)
├── /interior-designer/* — 城市 Landing Pages(25個)
├── /guide — Content Hub
├── /pricing — 定價頁
├── /markup-calculator — 計算機
├── / (landing) — Landing Page(Apple 風格)
├── SEO: /robots.txt /sitemap.xml /llms.txt
└── static: injectSEOTags()

Functions:
├── renderLandingPage() — Apple 風格 Landing Page
├── renderBlogListing(cat) — Blog 列表(類別過濾)
├── renderBlogPost(slug) — 單篇文章(6 種 Schema)
├── renderCityPage(slug) — 城市 Landing
├── renderContentHub() — Guide 頁
├── renderBlogSitemap() / renderMainSitemap()
├── renderLlmTxt()
├── getRelatedArticles() — 內部連結
├── getArticleLinks() — 上下文連結
├── draftForceSave / _S() — 前端 Draft 自動儲存
└── __acct / pre / post — Dashboard patching

Bug 修復記錄

  1. Dashboard 白屏: post script 注入失敗(line 908 壞掉的 replace)。修復:刪除殘留的 patch_ref2.py 程式碼
  2. Sidebar total 歸零: parseSaaS 沒回傳 total。修復:override + inject totalFix script
  3. 資料存儲: body.notes 沒存入 data column。修復:POST/PUT 改存 body.notes