Bot VPN de Telegram con pagos cripto
Un bot de Telegram autoalojado que vende suscripciones VPN por cripto. El cliente elige un plan en el chat y paga en la página de SnapEX Pay (USDT en TRC20, ERC20 o BEP20, además de otras monedas cuando SnapEX las ofrece para ese importe). Una vez confirmado el pago, el bot crea o renueva el usuario en tu panel Marzban, 3x-ui o Remnawave y envía el enlace de suscripción al mismo chat.
Gratis. Versión 1.1.0.
Qué hace
- Sin billetera ni nodo de blockchain que mantener: el dinero va a tu saldo de comercio en SnapEX Pay.
/startmuestra tus planes como botones; cada toque crea una factura de SnapEX Pay y responde con un botón de pago.- Compatible con Marzban, 3x-ui (tanto la API de clients de 3.1+ como la antigua API de inbounds) y Remnawave 2.x y 3.x. Con
PANEL_TYPE=noneel bot solo confirma el pago y tú entregas el acceso. - Webhook firmado (HMAC-SHA256, ventana de 5 minutos); la factura se vuelve a leer desde la API de SnapEX Pay y se da de alta solo cuando está pagada y pertenece a un pedido del bot. Las entregas repetidas dan de alta una factura una sola vez.
- Renovaciones: un cliente que vuelve (misma cuenta de Telegram) se renueva desde el vencimiento actual; un plan con límite de tráfico empieza una cuota nueva.
- Un solo contenedor con long polling, así que solo tiene que ser accesible el puerto del webhook. Los pedidos se guardan en SQLite con una copia del plan.
Instalación
- En el panel del comercio de SnapEX Pay crea una clave API con los permisos
invoices.readeinvoices.write. - Descarga y descomprime el archivo, ejecuta
cp .env.example .envy define el token del bot, la clave de SnapEX Pay,PANEL_TYPE(marzban,3xui,remnawaveonone), las credenciales del panel yPLANS. - Arráncalo:
docker compose up -d --build, y luego siguedocker compose logs -f bot. - El bot escucha en el puerto
8080(/webhooky/health). Ponlo detrás de un proxy inverso TLS como Caddy o nginx. - En el panel añade un endpoint de webhook
https://<your bot host>/webhook, pon su secretowhsec_…enSNAPEX_WEBHOOK_SECRETy reinicia. Envía/startal bot y prueba un plan conSNAPEX_ENVIRONMENT=test.
Ajustes
| TELEGRAM_BOT_TOKEN, SHOP_NAME | Token del bot de @BotFather; el nombre de la tienda en /start y en la descripción de la factura. |
|---|---|
| SNAPEX_API_KEY, SNAPEX_WEBHOOK_SECRET | Clave API de comercio (invoices.read, invoices.write) y el secreto del webhook (whsec_…). |
| SNAPEX_ENVIRONMENT, SNAPEX_FEE_ON | Facturas live o test; quién paga la comisión de SnapEX: merchant o customer. |
| PANEL_TYPE | marzban, 3xui, remnawave o none, más las credenciales de ese panel. |
| PLANS | id:days:price_usd:traffic_bytes separados por comas; 0 bytes = ilimitado. |
Preguntas
¿Qué paneles admite el bot?
Marzban, 3x-ui (MHSanaei, ambas versiones de la API) y Remnawave 2.x y 3.x. Con PANEL_TYPE=none solo cobra los pagos.
¿Cómo se asocia un cliente con un usuario VPN?
El nombre de usuario en el panel es tg<telegram_id>, así que cada cuenta de Telegram corresponde exactamente a un usuario VPN, y un pago repetido lo renueva.
¿Y si cambio los precios más adelante?
Los pedidos guardan una copia del plan, así que editar PLANS no cambia los pedidos ya pagados.
¿Se puede dar de alta un mismo pago dos veces?
No. Las entregas repetidas o simultáneas del webhook dan de alta una factura una sola vez, y cada toque de botón recibe su propia factura.
¿El servidor necesita un puerto abierto para Telegram?
No. El bot usa long polling; solo tiene que ser accesible para SnapEX Pay el puerto del webhook detrás de HTTPS.
Otras integraciones
¿Listo para aceptar cripto?
Crea una cuenta de comercio, obtén una clave API y conecta el módulo. 1% por pago, sin cuota mensual.