← Все инструменты
Наши заметки

Проброс 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. 1. Откройте smee.io и нажмите Start a new channel. Скопируйте URL канала.
  2. 2. Зарегистрируйте его через POST /v1/webhook-endpoints — задайте url равным каналу, а на время отладки subscribed_events["*"].
  3. 3. Запустите клиент и направьте его на ваш локальный маршрут:
  4. 4. Инициируйте событие со стороны провайдера — сообщение в Telegram, сообщение в 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 не подходит

  • Всё, что похоже на продакшен. Канал публичный и угадываемый — считайте, что кто угодно может прочитать или внедрить трафик. Используйте только одноразовые секреты.
  • Высокочастотные или чувствительные к задержке тесты. Публичный ретранслятор добавляет лишний хоп; локальный туннель вроде 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.