← 所有工具
我哋嘅筆記

smee.io 將 UnifyPort webhook 轉發去 localhost

UnifyPort 會將事件投遞去一個公開嘅 HTTPS URL。smee.io 淨係靠一個 Node client 就將佢駁去你部手提電腦——唔使 tunnel binary,亦都唔使開戶口。

smee.io 解決咩

smee.io 係 GitHub 維護嘅 proxy:開一次就畀個公開嘅 channel URL 你。任何 POST 去呢個 channel 嘅請求都會 re-broadcast 畀每個連住嘅 client。喺你部機跑嗰個細細粒嘅 smee-client,佢就會將每條請求 replay 去你本地嘅 handler——咁公網嚟嘅 webhook 唔使裝 tunnel 軟件都到到 localhost

五分鐘接上 UnifyPort handler

假設你個 handler 聽住 3000 port:

  1. 1. 打開 smee.io,撳 Start a new channel,copy 個 channel URL。
  2. 2. 透過 POST /v1/webhook-endpoints 註冊佢——將 url set 做呢個 channel,撳緊嘅時候 subscribed_events["*"]
  3. 3. 跑個 client,指去你本地嘅 route:
  4. 4. 喺渠道嗰邊 trigger 一個事件——一條 Telegram 私訊、一條 WhatsApp 訊息——睇住佢到 localhost:3000
npx smee-client -u https://smee.io/<channel> -t http://localhost:3000/events

簽章驗證照舊work

smee 原封不動咁轉發 raw body,所以你 handler 收到嘅 bytes 就係 UnifyPort 簽嗰份。驗證同生產環境一模一樣——重新計過再同 X-Device-Signature 比:

X-Device-Signature = hex( HMAC-SHA256( secret, timestamp + "." + raw_body ) )

想喺寫 code 之前用手先確認一次,可以喺我哋嘅 CyberChef 教學度跑同一套演算法,或者用離線嘅 DevToys

smee.io 唔啱用嘅場合

  • 任何似生產嘅流量。 channel 係公開又估得到——當任何人都讀得到或者 inject 到流量咁睇。淨係用即棄嘅密鑰。
  • 高頻或者對延遲敏感嘅測試。 公共 relay 多咗一 hop;好似 ngrok 咁帶 4040 inspector 嘅本地 tunnel 穩陣啲。
  • 你仲要睇其他 HTTP 流量。 smee 淨係 relay 佢自己個 channel;ngrok 或者 Pipedream RequestBin 畀到你睇得更全。

常見問題

smee.io 會唔會改個請求 body?
唔會。佢 relay 嘅係 raw bytes,所以 X-Device-Signature 驗證同生產環境一樣——重新計 hex(HMAC-SHA256(secret, timestamp + "." + body)) 再比就得。
我使唔使裝啲咩?
淨係要 Node——用 npx smee-client 跑個 client 就得,唔使全域安裝,亦都唔使任何 tunnel binary。
smee.io 用唔用得喺生產 webhook?
唔得。channel 公開又估得到。佢啱本地開發、配即棄嘅 signing secret;上 staging 或者生產就要換私有 tunnel 或者你真正嘅 endpoint。

推薦嘅 UnifyPort 本地開發流程

專登留一個戶口畀本地開發,smee client 長開喺一個 terminal 窗格度,handler 一 save 就 reload。有條投遞唔對路嗰陣,喺渠道嗰邊再 trigger,或者喺 handler log 度回睇——萬一簽章對唔上,用 CyberChef 驗一驗。