Проброс webhook UnifyPort на localhost через smee.io
UnifyPort доставляет события на публичный HTTPS URL. smee.io связывает его с вашим ноутбуком всего лишь Node-клиентом — без бинарника туннеля и без аккаунта.
Что решает smee.io
smee.io — это прокси, который поддерживает GitHub: откройте его один раз и получите публичный URL канала. Всё, что отправлено POST на этот канал, ретранслируется каждому подключённому клиенту. Запустите небольшой smee-client на своей машине, и он повторит каждый запрос в ваш локальный обработчик — так webhook из публичного интернета доходит до localhost без установки туннельного ПО.
Настройка обработчика UnifyPort за пять минут
Предположим, ваш обработчик слушает порт 3000:
- 1. Откройте smee.io и нажмите Start a new channel. Скопируйте URL канала.
- 2. Зарегистрируйте его через
POST /v1/webhook-endpoints— задайтеurlравным каналу, а на время отладкиsubscribed_events—["*"]. - 3. Запустите клиент и направьте его на ваш локальный маршрут:
- 4. Инициируйте событие со стороны провайдера — сообщение в Telegram, сообщение в WhatsApp — и смотрите, как оно приходит на
localhost:3000.
Проверка подписи продолжает работать
smee пробрасывает raw body без изменений, поэтому байты, которые видит ваш обработчик, — ровно те, что подписал UnifyPort. Проверка идентична продакшену — пересчитайте и сравните с X-Device-Signature:
Чтобы убедиться вручную до написания кода, прогоните тот же алгоритм в нашем разборе CyberChef или офлайн в DevToys.
Когда smee.io не подходит
- Всё, что похоже на продакшен. Канал публичный и угадываемый — считайте, что кто угодно может прочитать или внедрить трафик. Используйте только одноразовые секреты.
- Высокочастотные или чувствительные к задержке тесты. Публичный ретранслятор добавляет лишний хоп; локальный туннель вроде ngrok с инспектором на 4040 стабильнее.
- Вам нужно смотреть и другой HTTP-трафик. smee ретранслирует только свой канал; ngrok или Pipedream RequestBin дадут более полную картину.
Частые вопросы
- Изменяет ли smee.io тело запроса?
- Нет. Он ретранслирует raw-байты, поэтому проверка
X-Device-Signatureработает ровно как в продакшене — пересчитайтеhex(HMAC-SHA256(secret, timestamp + "." + body))и сравните. - Нужно ли что-то устанавливать?
- Только Node — запустите клиент через
npx smee-client, без глобальной установки и без бинарника туннеля. - Безопасен ли smee.io для продакшен-webhook?
- Нет. Каналы публичные и угадываемые. Используйте его для локальной разработки с одноразовыми signing secret; для staging или продакшена предпочтите приватный туннель или ваш реальный endpoint.
Рекомендуемый цикл локальной разработки UnifyPort
Отдельный аккаунт для локальной разработки, smee-клиент в открытой панели терминала и обработчик с перезагрузкой при сохранении. Если доставка выглядит странно, инициируйте её заново со стороны провайдера или повторите из логов обработчика — а если подпись перестала совпадать, проверьте её в CyberChef.