TR

Telegram botu ile USDT karşılığında VPN aboneliği satışı: adım adım kurulum

Telegram botu ile USDT karşılığında VPN aboneliği satışı

Birçok VPN servisi Telegram üzerinden satış yapar: müşteri zaten sohbettedir, satın alma da orada gerçekleşmelidir. Bu rehber, hazır bir botu kendi sunucunuzda nasıl çalıştıracağınızı gösteriyor: müşteri bir paket seçer, TRC20, ERC20, BEP20, Solana, TON, Polygon veya başka bir ağda USDT ile ya da başka bir kripto parayla öder; bot da Marzban, 3x-ui veya Remnawave panelinizde kullanıcıyı oluşturur ya da süresini uzatır ve abonelik linkini aynı sohbete gönderir. Cüzdan veya blockchain node'u çalıştırmazsınız — para SnapEX Pay üye işyeri bakiyenize düşer.

Bir satış nasıl ilerler

customer → /start → taps a plan
bot → SnapEX Pay: invoice → "Pay" button
customer → pays on the SnapEX Pay page
SnapEX Pay → signed webhook → bot
bot → GET invoice from the API → paid?
bot → panel: create or extend user
bot → customer: subscription link

(Şema: müşteri /start ile paketi seçer → bot SnapEX Pay'de fatura oluşturur ve “Pay” düğmesini gösterir → müşteri SnapEX Pay sayfasında öder → SnapEX Pay bota imzalı webhook gönderir → bot faturayı API'den okur ve ödendiğini kontrol eder → panelde kullanıcıyı oluşturur veya süresini uzatır → müşteriye abonelik linkini gönderir.)

  1. /start paketlerinizi düğme olarak gösterir. Bir pakete her dokunulduğunda bir SnapEX Pay faturası oluşturulur ve bot bir Pay (“Öde”) düğmesiyle yanıt verir.
  2. Müşteri ödeme sayfasında bir kripto para seçer ve öder. Fatura ödendiğinde SnapEX Pay bota imzalı bir webhook gönderir.
  3. Bot imzayı kontrol eder, faturayı SnapEX Pay API'sinden ister ve kullanıcıya erişimi yalnızca oradaki durum paid ise ve fatura botun oluşturduğu bir siparişe aitse verir.

VPN panelindeki kullanıcı adı tg<telegram_id> biçimindedir; böylece her Telegram hesabı tam olarak bir VPN kullanıcısına karşılık gelir.

Neler gerekli

  • @BotFather'dan alınmış bir bot token'ı.
  • Marzban, 3x-ui (MHSanaei) veya Remnawave (2.x ya da 3.x) panelinde yönetici erişimi. VPN paneli olmadan bot yalnızca ödeme alabilir (PANEL_TYPE=none); erişimi kendiniz verirsiniz.
  • Docker Compose (veya Python 3.12) kurulu bir sunucu.
  • Webhook için herkese açık bir HTTPS adresi: SnapEX Pay webhook'ları yalnızca https:// URL'lerine gönderir.
  • Bir SnapEX Pay üye işyeri hesabı: pay.snapex.pro adresinden kayıt olun.

Bot long polling kullanır, bu yüzden Telegram için sunucunuzda açık bir port gerekmez — yalnızca HTTPS arkasındaki webhook portuna erişilebilmelidir.

Adım 1. Botu indirin

snapexpay-telegram-vpn-bot-1.1.0.zip arşivini indirin (MIT, ücretsiz) ve ayar dosyasını oluşturun:

curl -fsSLO https://pay.snapex.pro/downloads/telegram-vpn-bot/snapexpay-telegram-vpn-bot-1.1.0.zip
unzip snapexpay-telegram-vpn-bot-1.1.0.zip
cd snapexpay-telegram-vpn-bot-1.1.0
cp .env.example .env

Tüm ayarlar .env dosyasındadır. Bot token'ını TELEGRAM_BOT_TOKEN alanına, mağazanızın adını SHOP_NAME alanına yazın — bu ad /start mesajında ve fatura açıklamasında görünür.

Adım 2. API anahtarı alın

SnapEX Pay üye işyeri panelinde Geliştiriciler sayfasını açın ve API anahtarı al düğmesine basın. Anahtar yalnızca bir kez gösterilir — hemen SNAPEX_API_KEY alanına kopyalayın. Panelde oluşturulan anahtar, botun ihtiyaç duyduğu invoices.read ve invoices.write dahil Üye işyeri API'sinin tüm yetkilerine sahiptir. Anahtarı yeniden oluşturmak eskisini anında iptal eder, bu yüzden .env dosyasını aynı anda güncelleyin.

İki ödeme ayarı daha:

  • SNAPEX_FEE_ON — merchant (varsayılan): müşteri tam olarak paket fiyatını öder, komisyonlar sizin alacağınız tutardan düşülür; customer: komisyonlar fiyatın üzerine eklenir. Ayrıntılar: Kripto faturada komisyonu kim öder (İngilizce).
  • SNAPEX_EXPIRES_MINUTES — faturanın ne kadar süre ödenebilir kalacağı; varsayılan 60 dakika (1 ile 1440 arası).

Adım 3. Paketlerinizi tanımlayın

Paketler PLANS değişkenine tek satırda, virgülle ayrılarak yazılır: id:days:price_usd:traffic_bytes. 0 bayt sınırsız trafik demektir.

PLANS=week:7:2.00:0,month:30:5.00:0,quarter:90:12.00:107374182400

Burada quarter, 100 GiB trafikli 90 günlük pakettir. id düğmede görünür ("month — $5.00 / 30d"), bu yüzden kısa tutun: Latin harfleri, rakamlar, _ ve -. Fiyatlar USD cinsindendir; en düşük fatura tutarı 0,50 USD'dir.

Her sipariş kendi paketinin bir kopyasını saklar; böylece ödenmiş siparişlere dokunmadan fiyatları sonradan değiştirebilirsiniz.

Adım 4. VPN panelini bağlayın

PANEL_TYPE değerini ve VPN panelinizin erişim bilgilerini girin.

Marzban — PANEL_TYPE=marzban:

  • MARZBAN_URL, MARZBAN_USERNAME, MARZBAN_PASSWORD — panel adresi ve bir yönetici hesabının giriş bilgileri (ya da MARZBAN_TOKEN içinde hazır bir yönetici token'ı).
  • MARZBAN_SUB_URL — yalnızca Marzban göreli /sub/<token> linkleri döndürüyorsa (XRAY_SUBSCRIPTION_URL_PREFIX boşsa): link için herkese açık temel adres.

3x-ui — PANEL_TYPE=3xui:

  • XUI_URL — ayarladıysanız web base path dahil panel adresi (https://xui.example.com:2053/secretpath).
  • XUI_USERNAME, XUI_PASSWORD — bu hesapta iki adımlı doğrulama kapalı olmalıdır.
  • XUI_INBOUND_ID — yeni client'ların ekleneceği inbound (vless, vmess, trojan veya shadowsocks).
  • XUI_SUB_URL — abonelik temel adresi, örneğin https://xui.example.com:2096/sub. Bu ayar olmadan bot yalnızca subId gönderir.

Remnawave — PANEL_TYPE=remnawave:

  • REMNAWAVE_URL ve REMNAWAVE_TOKEN — panel adresi ve API Tokens bölümünden alınan bir API token'ı.
  • REMNAWAVE_SQUAD_UUIDS — yeni kullanıcılar için internal squad'lar, virgülle ayrılmış. Squad olmadan yeni kullanıcının hiç sunucusu olmaz.

Adım 5. Botu HTTPS arkasında başlatın

docker compose up -d --build
docker compose logs -f bot

Bot 8080 portunu dinler: SnapEX Pay için /webhook, durum kontrolleri için /health. Botu TLS'li bir ters proxy'nin (reverse proxy) arkasına koyun, örneğin Caddy:

pay-bot.example.com {
    reverse_proxy 127.0.0.1:8080
}

Proxy, istek gövdesini değiştirmeden iletmelidir — imza ham gövde üzerinden hesaplanır.

Adım 6. Webhook'u ayarlayın

SnapEX Pay panelinde, Geliştiriciler sayfasında webhook URL'si olarak https://pay-bot.example.com/webhook girin ve kaydedin. “Webhook imza anahtarı” (whsec_…) yalnızca bir kez, ilk kayıttan hemen sonra gösterilir — SNAPEX_WEBHOOK_SECRET alanına kopyalayın ve botu yeniden başlatın: docker compose up -d.

SnapEX Pay panelinde hesap başına tek bir webhook URL'si vardır ve tüm olaylar ona gider. Bot yalnızca fatura olaylarını işler, diğerlerini yalnızca alındı olarak onaylar.

Bot bir bildirimi nasıl kontrol eder:

  • Webhook-Signature header'ı: gizli anahtarınızla {Webhook-Timestamp}.{ham istek gövdesi} üzerinden HMAC-SHA256; imzasız veya değiştirilmiş istekler 401 alır;
  • Webhook-Timestamp, sunucu saatinden en fazla 5 dakika farklı olmalı — NTP'yi açık tutun;
  • faturanın kendisi, anahtarınızla SnapEX Pay API'sinden yeniden okunur: erişim yalnızca oradaki durum paid ise verilir.

O anda VPN paneli veya SnapEX Pay API'si erişilemezse bot 502 döndürür ve SnapEX Pay gönderimi yeniden dener (en fazla 5 deneme). Gönderim tekrarlansa veya aynı anda birkaç kez gelse bile fatura yalnızca bir kez işlenir. İmzalar ve yeniden denemeler hakkında daha fazlası: Kripto ödeme webhook'ları.

Adım 7. Gerçek para olmadan test satın alma

  1. SNAPEX_ENVIRONMENT=test değerini girin ve yeniden başlatın: docker compose up -d.
  2. Kendi Telegram hesabınızdan botunuza /start gönderin ve bir pakete dokunun.
  3. Pay düğmesine basın. SnapEX Pay sayfasında Test etiketi görünür. Herhangi bir kripto para ve ağ seçin: sayfa bir test adresi gösterir ve yaklaşık 10 saniye sonra ödeme kendiliğinden onaylanır. Hiçbir şey göndermeniz gerekmez.
  4. Bot "Payment received" mesajını ve abonelik linkini göndermeli, VPN panelinde de tg<telegram id'niz> kullanıcısı görünmelidir. Görünmezse docker compose logs -f bot çıktısına ve Geliştiriciler sayfasındaki “Webhook gönderimleri” listesine bakın.
  5. SNAPEX_ENVIRONMENT=live değerini girin ve yeniden başlatın.

Bot test modundayken bot üzerinden satın alınan her paket için ödeme yapılmadan erişim verilir — testi kısa tutun. Ayrıntılar: Kripto ödemeleri gerçek para olmadan nasıl test edilir.

Müşteri ne görür

  • /start — mağazanızın adı, USDT (TRC20 / ERC20 / BEP20 / Solana / TON ve diğerleri) veya başka kripto paralarla ödeme hakkında bir satır ve paket düğmeleri.
  • Pakete dokunduktan sonra — paket adı, süresi (gün), fiyatı ve fatura numarası, ayrıca "Pay $5.00 with crypto" düğmesi.
  • Kripto para seçimli SnapEX Pay sayfası: TRC20, ERC20, BEP20, Solana, TON, Polygon ve diğer ağlarda USDT ve SnapEX Pay'in o fatura tutarı için sunduğu diğer kripto paralar (toplam 70+).
  • Ödemeden sonra — aynı sohbette "Payment received" mesajı ve abonelik linki. PANEL_TYPE=none ise mesaj, erişimin kısa süre içinde yönetici tarafından gönderileceğini söyler.

Botun kendi mesajları İngilizcedir; yalnızca mağaza adı ve paket adları sizindir.

Geri dönen bir müşteri aynı Telegram hesabından öder ve kullanıcısının süresi mevcut bitiş tarihinden itibaren (o tarih geçtiyse şu andan itibaren) uzatılır; trafik sınırlı pakette kota sıfırdan başlar. Ayrıntılar: Kripto ile VPN aboneliği yenileme (İngilizce).

Müşteri toplam tutardan az gönderirse erişim verilmez: bot erişimi yalnızca paid durumundaki bir fatura için verir. Alınan tutar SnapEX Pay bakiyenize düşer, kalanını müşteriyle siz halledersiniz. Eksik ödemede neler olduğu: Müşteri fatura tutarından az gönderdi (İngilizce).

Bir şey çalışmazsa

  • Pakete dokunduktan sonra "Payment is unavailable right now". Bot fatura oluşturamadı: SNAPEX_API_KEY değerini (yanlış veya iptal edilmiş anahtar) ve logları kontrol edin.
  • Webhook 401 "bad webhook signature" alıyor. SNAPEX_WEBHOOK_SECRET eşleşmiyor ya da proxy istek gövdesini değiştiriyor. Sunucu saatinin senkronize olduğunu da kontrol edin.
  • Müşteri ödedi ama hiçbir şey almadı. Loglarda provision failed arayın. SnapEX Pay gönderimi yeniden denemeye devam eder; VPN paneli tekrar çalıştığında bir sonraki gönderim erişimi açar. Gönderimi SnapEX Pay panelindeki “Webhook gönderimleri” listesinden “Yeniden gönder” ile kendiniz de tekrarlayabilirsiniz.
  • Marzban host içermeyen bir link gönderiyor. Marzban'da XRAY_SUBSCRIPTION_URL_PREFIX veya botta MARZBAN_SUB_URL ayarlayın.
  • 3x-ui: "login failed". XUI_URL (web base path ile) ve giriş bilgilerini kontrol edin, o hesapta iki adımlı doğrulamayı kapatın.
  • Remnawave: kullanıcı oluşturuluyor ama abonelik boş. REMNAWAVE_SQUAD_UUIDS değerine node'larınızın bulunduğu squad'ları yazın.
  • Botun birden fazla kopyası çalışıyor. Her DATA_DIR için tek bir kopya çalıştırın: mükerrer işlem koruması tek bir süreç ve onun SQLite dosyası içinde çalışır.

Maliyet

Ödeme başına %1 komisyon, kurulum ücreti ve aylık ücret yok. Bot ücretsizdir.

Bot sayfası: Telegram VPN botu. Bunun yerine VPN panelinin kendi mağazası üzerinden mi satıyorsunuz? Şu rehbere bakın: Xboard ve V2Board'da kripto ödeme (İngilizce). VPN servisleri için genel bakış: VPN servisleri için kripto ödeme. Kayıt: pay.snapex.pro.

Kripto ile ödeme almaya hazır mısınız?

Üye işyeri hesabı oluşturun ve API anahtarınızı alın. Ödeme başına %1, aylık ücret yok.