RU
VPN-панели

Telegram-бот для VPN с оплатой в крипте

Telegram-бот на вашем сервере, который продаёт VPN-подписки за криптовалюту. Клиент выбирает тариф в чате и платит на странице SnapEX Pay (USDT в TRC20, ERC20 или BEP20 и другие монеты, если SnapEX предлагает их для этой суммы). После подтверждения оплаты бот создаёт или продлевает пользователя в вашей панели Marzban, 3x-ui или Remnawave и присылает ссылку на подписку в тот же чат.

Скачать модуль

Бесплатно. Версия 1.0.0.

Что умеет модуль

  • Не нужно держать кошелёк и ноду блокчейна: деньги приходят на баланс мерчанта SnapEX Pay.
  • /start показывает тарифы кнопками; каждое нажатие создаёт счёт SnapEX Pay и присылает кнопку оплаты.
  • Поддерживает Marzban, 3x-ui (и API клиентов 3.1+, и старый API inbound) и Remnawave 2.x и 3.x. С PANEL_TYPE=none бот только подтверждает оплату, а доступ вы выдаёте сами.
  • Подписанный вебхук (HMAC-SHA256, окно 5 минут); счёт перечитывается из API SnapEX Pay и обрабатывается, только если он оплачен и принадлежит заказу бота. Повторные вебхуки обрабатываются один раз.
  • Продление: вернувшийся клиент (тот же Telegram-аккаунт) продлевается от текущего срока; тариф с лимитом трафика начинает новую квоту.
  • Один контейнер, long polling — снаружи должен быть доступен только порт вебхука. Заказы хранятся в SQLite вместе с копией тарифа.

Установка

  1. В кабинете мерчанта SnapEX Pay создайте API-ключ с правами invoices.read и invoices.write.
  2. Скачайте и распакуйте архив, выполните cp .env.example .env и задайте токен бота, ключ SnapEX Pay, PANEL_TYPE (marzban, 3xui, remnawave или none), данные панели и PLANS.
  3. Запустите: docker compose up -d --build, смотрите лог docker compose logs -f bot.
  4. Бот слушает порт 8080 (/webhook и /health). Поставьте его за TLS reverse proxy, например Caddy или nginx.
  5. В кабинете добавьте вебхук https://<адрес бота>/webhook, впишите секрет whsec_… в SNAPEX_WEBHOOK_SECRET и перезапустите. Отправьте боту /start и проверьте тариф с SNAPEX_ENVIRONMENT=test.

Настройки

TELEGRAM_BOT_TOKEN, SHOP_NAMEТокен бота от @BotFather; название магазина в /start и в описании счёта.
SNAPEX_API_KEY, SNAPEX_WEBHOOK_SECRETAPI-ключ мерчанта (invoices.read, invoices.write) и секрет вебхука (whsec_…).
SNAPEX_ENVIRONMENT, SNAPEX_FEE_ONСчета live или test; кто платит комиссию SnapEX — merchant или customer.
PANEL_TYPEmarzban, 3xui, remnawave или none и данные доступа к этой панели.
PLANSЧерез запятую id:дни:цена_usd:байты_трафика; 0 — без лимита.

Вопросы

Какие панели поддерживает бот?

Marzban, 3x-ui (MHSanaei, обе версии API) и Remnawave 2.x и 3.x. С PANEL_TYPE=none бот только принимает оплату.

Как клиент связывается с VPN-пользователем?

Имя в панели — tg<telegram_id>: каждому Telegram-аккаунту соответствует ровно один VPN-пользователь, повторная оплата его продлевает.

Что если я поменяю цены?

Заказы хранят копию тарифа, поэтому изменение PLANS не затрагивает уже оплаченные заказы.

Может ли один платёж обработаться дважды?

Нет. Повторные и одновременные вебхуки обрабатывают счёт один раз, а каждое нажатие кнопки создаёт свой счёт.

Нужен ли открытый порт для Telegram?

Нет. Бот работает через long polling; снаружи за HTTPS должен быть доступен только порт вебхука для SnapEX Pay.

Готовы принимать крипту?

Создайте аккаунт мерчанта, получите API-ключ и подключите модуль. 1% с платежа, без абонентской платы.