← 所有工具
我们的笔记
用 ngrok 做 UnifyPort webhook 的本地开发
UnifyPort 把事件投递到一个公网 HTTPS URL。如果你的 handler 跑在 localhost——多数日子里都是——你需要一条 tunnel。ngrok 是我们多年来的默认选择。
ngrok 解决什么
一条命令就有一个公网 HTTPS URL,把每个请求转到本地某个端口。所有过路的流量都被 http://127.0.0.1:4040 的请求 inspector 捕获——headers、body、时序、replay 按钮一应俱全。这个 inspector 才是我们至今仍用 ngrok 的原因,就算市面上有不少免费 tunnel 替代品:它把本来需要边打日志边追的事压缩成"看一眼"。
UnifyPort handler 的五分钟搭建
假设 handler 监听在 3000 端口:
- 1.
ngrok http 3000——拷贝它输出的https://*.ngrok-free.appURL。 - 2. 通过
POST /v1/webhook-endpoints注册这个 URL——把url设成https://<your-tunnel>.ngrok-free.app/events,按需选择subscribed_events(迭代期可以先["*"]全收)。 - 3. 浏览器打开
http://127.0.0.1:4040。从 provider 那边触发事件——一条 Telegram 私信、一条 WhatsApp 消息——看着它落进来。 - 4. 用 replay 按钮把同一条投递重发给改过代码的 handler。这就是 ngrok 比每次改代码都要去 provider 那边重新触发事件更快的原因。
本地验证签名
ngrok 免费版 tunnel 在上游就解了 TLS,所以你的 handler 看到请求时 body 已经是明文——正是 UnifyPort 签的那份。这意味着签名校验跟生产一样:算 hex(HMAC-SHA256(secret, timestamp + "." + body)),跟 X-Device-Signature header 比对。想加代码前先手动确认一次,可以走我们的 CyberChef 详解——同一个算法在浏览器里跑一遍。
ngrok 不再是最佳答案的时候
- staging 或 demo 环境。免费版 URL 每次重启都换,长期配置会被打断。要么上付费版用固定域名,要么换 Cloudflare Tunnel,免费固定 host。
- 高频压测。免费版 ngrok 限流很激进。要么升级套餐,要么把 handler 部到真实环境跑。
- 只跑 webhook、没其他 HTTP 流量的场景。smee.io 更轻——不用装二进制,只要一个 client 脚本。
推荐的 UnifyPort 开发循环
一个 bot/账号专门做本地 dev,ngrok tunnel 长开在一个终端 pane 里,handler 改即重载,4040 inspector 钉一个浏览器 tab。出问题时直接从 4040 重放给重建后的 handler——几乎总比再去哄 provider 触发同一个事件快。