Локальная разработка UnifyPort webhook с ngrok
UnifyPort доставляет события на публичный HTTPS URL. Если ваш обработчик живёт на localhost — а это так чаще всего — нужен туннель. ngrok уже много лет наш дефолт.
Что решает ngrok
Одна команда — и у вас публичный HTTPS URL, перенаправляющий каждый запрос на локальный порт. Всё проходящее ловит инспектор запросов на http://127.0.0.1:4040 — headers, body, тайминги, кнопка replay. Именно ради инспектора мы остаёмся на ngrok, даже когда вокруг полно бесплатных альтернатив-туннелей: то, что иначе было бы марафоном по логам, сжимается до одного взгляда.
Пятиминутный сетап обработчика UnifyPort
Допустим, обработчик слушает порт 3000:
- 1.
ngrok http 3000— скопируйте URLhttps://*.ngrok-free.app, который он напечатает. - 2. Зарегистрируйте URL через
POST /v1/webhook-endpoints— задайтеurlравнымhttps://<your-tunnel>.ngrok-free.app/eventsи выберите нужныеsubscribed_events(на этапе итераций можно["*"]для всего). - 3. Откройте
http://127.0.0.1:4040в браузере. Триггерните событие на стороне провайдера — Telegram DM, WhatsApp-сообщение — и наблюдайте, как оно приходит. - 4. Кнопкой replay отправьте ту же доставку повторно на обновлённый обработчик. Это и делает ngrok быстрее, чем каждый раз заново выманивать событие у провайдера после правки кода.
Локальная проверка подписи
Бесплатный туннель ngrok терминирует TLS на upstream, поэтому к моменту, когда обработчик видит запрос, body уже расшифрован — именно тот, что подписал UnifyPort. Это значит, что верификация подписи работает так же, как в проде: вычисляйте hex(HMAC-SHA256(secret, timestamp + "." + body)) и сверяйте с header X-Device-Signature. Если хочется убедиться вручную перед написанием кода, наш рецепт CyberChef проходит тот же алгоритм в браузере.
Когда ngrok перестаёт быть правильным ответом
- staging или demo-среды. Бесплатный URL меняется при каждом перезапуске и ломает долгоиграющие настройки. Берите платный reserved domain — или переключайтесь на Cloudflare Tunnel ради бесплатного стабильного хоста.
- Высокочастотный нагрузочный тест. На бесплатном тарифе ngrok троттлит агрессивно. Либо апгрейд, либо разворачивайте обработчик в реальной среде.
- Чисто webhook-сценарии без другого HTTP-трафика. smee.io легче — без бинарника, только клиентский скрипт.
Рекомендуемый цикл разработки под UnifyPort
Один bot/аккаунт под локальную разработку, ngrok-туннель постоянно крутится в одной панели терминала, обработчик с релоадом-на-сейв, инспектор 4040 закреплён во вкладке браузера. Если что-то странное — replay из 4040 на пересобранный обработчик; почти всегда быстрее, чем заново уговаривать провайдера послать то же событие.