用 ngrok 做 UnifyPort webhook 嘅本地開發
UnifyPort 將事件投遞去一個公網 HTTPS URL。如果你嘅 handler 跑喺 localhost——大多數日子都係——你就需要一條 tunnel。ngrok 多年嚟都係我哋嘅 default 選擇。
ngrok 解決乜嘢
一條命令就有個公網 HTTPS URL,把每個 request 轉去本地某個 port。所有經過嘅流量都會畀 http://127.0.0.1:4040 嘅 inspector 捕獲——headers、body、時序、replay 掣樣樣齊。呢個 inspector 就係我哋到而家都仲用 ngrok 嘅原因,就算有唔少免費 tunnel 替代品都好:佢將原本要邊打 log 邊追嘅嘢壓縮成「望一眼」。
UnifyPort handler 嘅五分鐘設定
假設 handler 聽住 3000 port:
- 1.
ngrok http 3000——複製佢印出嘅https://*.ngrok-free.appURL。 - 2. 用
POST /v1/webhook-endpoints註冊呢個 URL——將url設成https://<your-tunnel>.ngrok-free.app/events,揀你想要嘅subscribed_events(iterate 緊嘅時候可以用["*"]全收先)。 - 3. Browser 開
http://127.0.0.1:4040。從 provider 嗰邊觸發事件——一條 Telegram 私訊、一條 WhatsApp message——望住佢落嚟。 - 4. 用 replay 掣將同一條投遞重新發畀改咗 code 嘅 handler。呢個就係 ngrok 比每次改 code 都要去 provider 嗰邊重新觸發事件快嘅原因。
本地驗證簽章
ngrok 免費版 tunnel 喺 upstream 已經解咗 TLS,所以你嘅 handler 收到 request 嗰陣 body 已經係明文——正正係 UnifyPort 簽嘅嗰份。即係簽章驗證同 production 一樣:計 hex(HMAC-SHA256(secret, timestamp + "." + body)),同 X-Device-Signature header 對。想加 code 之前先手動確認一次嘅話,可以行我哋嘅 CyberChef 教學——同一個算法喺 browser 度跑一次。
ngrok 唔再係最好答案嘅時候
- Staging 或者 demo 環境。免費版 URL 每次 restart 都換,長期配置會中斷。要嘛上付費版用 reserved domain,要嘛換 Cloudflare Tunnel,免費攞個固定 host。
- 高頻壓測。免費版 ngrok throttle 得好緊。要嘛 upgrade,要嘛將 handler 部去真實環境跑。
- 淨係跑 webhook、無其他 HTTP traffic 嘅場景。smee.io 更輕——唔使裝 binary,只要一個 client script。
推薦嘅 UnifyPort 開發 loop
一個 bot/帳號專門做本地 dev,ngrok tunnel 長開喺一個 terminal pane 度,handler 改完即重載,4040 inspector 釘住一個 browser tab。出問題嗰陣直接喺 4040 重放畀新版 handler——基本上都快過再請 provider 觸發同一個事件。