← すべてのツール
私たちのメモ

smee.io で UnifyPort webhook を localhost に転送する

UnifyPort はイベントを公開 HTTPS URL に配信します。smee.io は Node クライアントひとつだけでそれをあなたのノート PC に橋渡しします——トンネルのバイナリも、アカウントも不要です。

smee.io が解決すること

smee.io は GitHub が運営するプロキシです。一度開けば公開の channel URL がもらえます。その channel に POST されたものはすべて、接続中の各クライアントに再配信されます。小さな smee-client を自分のマシンで動かすと、各リクエストをローカルハンドラへ replay してくれる——だから公開インターネットからの webhook が、トンネルソフトを入れずに localhost まで届きます。

UnifyPort ハンドラの 5 分セットアップ

ハンドラがポート 3000 を listen していると仮定します:

  1. 1. smee.io を開き、Start a new channel を押して channel URL をコピーします。
  2. 2. POST /v1/webhook-endpoints で登録します——url を channel に設定し、試行中は subscribed_events["*"] にします。
  3. 3. クライアントを起動し、ローカルの route に向けます:
  4. 4. プロバイダ側でイベントを発火させます——Telegram の DM、WhatsApp のメッセージなど——そして localhost:3000 に届くのを見届けます。
npx smee-client -u https://smee.io/<channel> -t http://localhost:3000/events

署名検証はそのまま動く

smee は raw body を手を加えず転送するので、ハンドラが見るバイト列はまさに UnifyPort が署名したものです。検証は本番と同一——再計算して X-Device-Signature と比較します:

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

コードを書く前に手で確かめたいなら、同じアルゴリズムを CyberChef の手順で、あるいはオフラインの DevToys で走らせてください。

smee.io が正解でないとき

  • 本番に近いものすべて。 channel は公開かつ推測可能です——誰でもトラフィックを読んだり注入したりできると考えてください。使い捨ての secret だけにしましょう。
  • 高頻度、または遅延に敏感なテスト。 公開リレーは hop が一つ増えます。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 クライアントを常駐させ、ハンドラは保存時リロード。配信がおかしいと感じたらプロバイダ側から再発火させるか、ハンドラのログから replay を——署名が合わなくなったら CyberChef で検証しましょう。