Bot de VPN no Telegram com pagamentos em cripto
Um bot do Telegram auto-hospedado que vende assinaturas de VPN por cripto. O cliente escolhe um plano no chat e paga na página da SnapEX Pay (USDT nas redes TRC20, ERC20 ou BEP20, além de outras moedas quando a SnapEX as oferece para esse valor). Depois que o pagamento é confirmado, o bot cria ou renova o usuário no seu painel Marzban, 3x-ui ou Remnawave e envia o link da assinatura no mesmo chat.
Grátis. Versão 1.1.0.
O que faz
- Sem carteira nem node de blockchain para manter: o dinheiro entra no seu saldo de comerciante na SnapEX Pay.
/startmostra seus planos como botões; cada toque cria uma fatura da SnapEX Pay e responde com um botão de pagamento.- Compatível com Marzban, 3x-ui (tanto a API de clientes do 3.1+ quanto a API mais antiga de inbounds) e Remnawave 2.x e 3.x. Com
PANEL_TYPE=none, o bot só confirma o pagamento e você mesmo libera o acesso. - Webhook assinado (HMAC-SHA256, janela de 5 minutos); a fatura é relida na API da SnapEX Pay e só é provisionada quando está paga e corresponde a um pedido criado pelo bot. Entregas repetidas provisionam uma fatura uma única vez.
- Renovações: um cliente que volta (mesma conta do Telegram) é renovado a partir do vencimento atual, ou a partir de agora, se ele já passou; um plano com limite de tráfego começa com uma cota nova.
- Um só contêiner com long polling, então só a porta do webhook precisa estar acessível. Os pedidos ficam em SQLite com uma cópia do plano.
Instalação
- No painel do comerciante da SnapEX Pay, crie uma chave de API com os escopos
invoices.readeinvoices.write. - Baixe e descompacte o arquivo, execute
cp .env.example .enve defina o token do bot, a chave da SnapEX Pay,PANEL_TYPE(marzban,3xui,remnawaveounone), as credenciais do painel ePLANS. - Inicie o bot:
docker compose up -d --builde depois acompanhedocker compose logs -f bot. - O bot escuta na porta
8080(/webhooke/health). Coloque-o atrás de um proxy reverso com TLS, como Caddy ou nginx. - No painel → Desenvolvedores, defina a URL do webhook como
https://<your bot host>/webhook, coloque a chave secretawhsec_…(exibida uma única vez, ao salvar a URL pela primeira vez) emSNAPEX_WEBHOOK_SECRETe reinicie. Envie/startao bot e teste um plano comSNAPEX_ENVIRONMENT=test.
Configurações
| TELEGRAM_BOT_TOKEN, SHOP_NAME | Token do bot obtido no @BotFather; o nome da loja exibido no /start e na descrição da fatura. |
|---|---|
| SNAPEX_API_KEY, SNAPEX_WEBHOOK_SECRET | Chave de API do comerciante (invoices.read, invoices.write) e a chave secreta do webhook (whsec_…). |
| SNAPEX_ENVIRONMENT, SNAPEX_FEE_ON | Faturas live ou test; quem paga a taxa da SnapEX — merchant ou customer. |
| PANEL_TYPE | marzban, 3xui, remnawave ou none, além das credenciais desse painel. |
| PLANS | id:days:price_usd:traffic_bytes separados por vírgula; 0 bytes = ilimitado. |
| SNAPEX_PARTNER_ID | Opcional: o Partner ID do integrador que configurou o módulo (programa de indicações da SnapEX Pay). Deixe em branco se você mesmo fez a configuração. |
Perguntas
Com quais painéis o bot funciona?
Marzban, 3x-ui (MHSanaei, as duas versões da API) e Remnawave 2.x e 3.x. Com PANEL_TYPE=none, ele só recebe os pagamentos.
Como um cliente é associado a um usuário da VPN?
O nome de usuário no painel é tg<telegram_id>, então cada conta do Telegram corresponde a exatamente um usuário da VPN, e um novo pagamento renova esse usuário.
E se eu mudar os preços depois?
Os pedidos guardam uma cópia do plano, então editar PLANS não altera pedidos que já foram pagos.
Um pagamento pode ser provisionado duas vezes?
Não. Entregas repetidas ou simultâneas do webhook provisionam uma fatura uma única vez, e cada toque no botão gera a sua própria fatura.
O servidor precisa de uma porta aberta para o Telegram?
Não. O bot usa long polling; só a porta do webhook, atrás de HTTPS, precisa estar acessível para a SnapEX Pay.
Outras integrações
Pronto para receber em cripto?
Crie uma conta de comerciante, gere uma chave de API e conecte o módulo. 1% por pagamento, sem mensalidade.