← 所有工具
我們的筆記
用 smee.io 把 UnifyPort webhook 轉發到 localhost
UnifyPort 把事件投遞到一個公開的 HTTPS URL。smee.io 只靠一個 Node 用戶端就把它橋接到你的筆電——不用通道二進位,也不用註冊帳號。
smee.io 解決什麼
smee.io 是 GitHub 維護的代理:開啟一次就給你一個公開的 channel URL。任何 POST 到這個 channel 的請求都會被重新廣播給每個連線的用戶端。在你機器上跑那個小小的 smee-client,它就把每條請求重放到你本地的 handler——於是來自公開網路的 webhook 不用裝通道軟體就能到達 localhost。
五分鐘接上 UnifyPort handler
假設你的 handler 監聽 3000 連接埠:
- 1. 開啟 smee.io,按 Start a new channel,複製 channel URL。
- 2. 透過
POST /v1/webhook-endpoints註冊它——把url設成這個 channel,迭代期間subscribed_events用["*"]。 - 3. 跑用戶端,把它指向你本地的路由:
- 4. 從渠道側觸發一個事件——一則 Telegram 私訊、一則 WhatsApp 訊息——看它到達
localhost:3000。
npx smee-client -u https://smee.io/<channel> -t http://localhost:3000/events
簽章驗證照樣能用
smee 原樣轉發 raw body,所以你 handler 看到的位元組就是 UnifyPort 簽章的那一份。驗證和正式環境完全一致——重新計算並和 X-Device-Signature 比對:
X-Device-Signature = hex( HMAC-SHA256( secret, timestamp + "." + raw_body ) )
想在寫程式碼前先用手確認一遍,可以在我們的 CyberChef 教學裡跑同一套演算法,或者用離線的 DevToys。
smee.io 不適合的場景
- 任何接近正式環境的流量。 channel 是公開且可被猜到的——當作任何人都能讀取或注入流量來對待。只用一次性的密鑰。
- 高頻或對延遲敏感的測試。 公共中繼多了一跳;像 ngrok 這樣帶 4040 inspector 的本地通道更穩。
- 你還要看其他 HTTP 流量。 smee 只中繼它自己的 channel;ngrok 或 Pipedream RequestBin 能給你更完整的檢視。
常見問題
- smee.io 會改動請求 body 嗎?
- 不會。它中繼的是 raw 位元組,所以
X-Device-Signature驗證和正式環境完全一樣——重新算hex(HMAC-SHA256(secret, timestamp + "." + body))再比對即可。 - 我需要裝什麼嗎?
- 只要 Node——用
npx smee-client跑用戶端就行,不用全域安裝,也不用任何通道二進位。 - smee.io 能用於正式環境的 webhook 嗎?
- 不能。channel 公開且可被猜到。它適合本地開發、配一次性的 signing secret;上 staging 或正式環境請換私有通道或你真實的 endpoint。
推薦的 UnifyPort 本地開發流程
專門留一個帳號給本地開發,smee 用戶端常駐在一個終端窗格裡,handler 存檔即重載。某條投遞不對勁時,從渠道側重新觸發,或從 handler 紀錄裡回看——萬一簽章對不上,用 CyberChef 驗一下。