En Onay, küresel telekom sağlayıcıları ve dinamik yedekleme hatlarıyla SMS teslimat oranlarını yüzde doksan dokuza çıkaran akıllı yönlendirme altyapısı sağlar. Türkiye ve küresel pazarlardaki gecikmeleri milisaniyeler düzeyine indiren akıllı failover algoritmamız, teslim edilemeyen OTP kodlarını anında alternatif operatör rotalarına aktararak dönüşüm oranını üst seviyeye taşır.
Giriş: Tek Sağlayıcı Bağımlılığının Riski
Global telekomünikasyon altyapılarında SS7 sinyalleşme tıkanıklıkları, operatör seviyesindeki spam filtreleri veya anlık kablo kopmaları nedeniyle belirli bir rotadan SMS kodlarının gecikmesi veya düşmesi kaçınılmaz bir gerçektir. Kullanıcının OTP kodunu 60 saniye içinde alamaması, kayıt dönüşüm oranını (conversion rate) doğrudan %40'a varan oranda düşürür.
Yüksek erişilebilirlik (High Availability) gerektiren sistemler, tek bir SMS rotasına bağımlı kalmak yerine Circuit Breaker (Devre Kesici) ve Akıllı Rota Yönlendirme (Smart Routing) mimarilerini uygulamalıdır.
1. Circuit Breaker Durum Makinesi Mimarisi
Sistem sürekli olarak operatörlerin son 100 işlemdeki başarı oranını ve teslimat süresini (latency) ölçer:
- CLOSED (Normal): Rota sağlıklı. Tüm trafik birincil hatta akar. Başarı oranı > %95.
- OPEN (Devre Açık): Rota arızalı. Son 10 işlemde peş peşe 3 hata alındı. Trafik anında yedek (failover) sağlayıcıya yönlendirilir.
- HALF-OPEN (Yarı Açık): Belirli bir soğuma süresinden sonra (Örn: 60 sn) birincil hatta tek bir test isteği gönderilir. Başarılı olursa CLOSED durumuna geri dönülür.
2. cURL ile Alternatif Rota ve Ülke Sorgulaması
Birincil ülke kodunda gecikme yaşandığında alternatif global rotayı devreye alma:
# 1. Tercih: Türkiye (+90) Rotası
curl -X POST https://enonay.com/api/v1.php \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"action": "getNumber", "service": "telegram", "country": "tr"}'
# 2. Hata veya Zaman Aşımında Devreye Giren Alternatif: İngiltere (+44) Rotası
curl -X POST https://enonay.com/api/v1.php \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"action": "getNumber", "service": "telegram", "country": "gb"}'
3. Python ile Dayanıklı (Resilient) Smart Router Implementasyonu
Aşağıdaki Python sınıfı, ardışık hataları izleyerek otomatik failover gerçekleştiren akıllı bir rota yöneticisi sağlar:
import time
import requests
from typing import List, Dict, Any
class SmartSmsRouter:
def __init__(self, api_key: str, fallback_countries: List[str] = None):
self.api_key = api_key
self.base_url = "https://enonay.com/api/v1.php"
self.routes = fallback_countries or ["tr", "gb", "de", "nl"]
self.failure_counts: Dict[str, int] = {c: 0 for c in self.routes}
self.circuit_open_until: Dict[str, float] = {c: 0.0 for c in self.routes}
def allocate_with_failover(self, service: str) -> Dict[str, Any]:
"""Başarısız rotaları atlayarak ilk sağlıklı rotadan numara tahsis eder."""
now = time.time()
for country in self.routes:
if now < self.circuit_open_until[country]:
print(f"[CIRCUIT OPEN] {country} rotası dinlendiriliyor...")
continue
try:
resp = requests.post(
self.base_url,
json={"action": "getNumber", "service": service, "country": country},
headers={"Authorization": f"Bearer {self.api_key}"},
timeout=6
)
data = resp.json()
if data.get("status") == "SUCCESS":
self.failure_counts[country] = 0
print(f"[BAŞARILI] Numara {country.upper()} rotasından tahsis edildi: {data['number']}")
return data
self._record_failure(country)
except (requests.RequestException, Exception) as e:
print(f"[BAĞLANTI HATASI] {country} rotası: {e}")
self._record_failure(country)
raise RuntimeError("Tüm rotalar başarısız oldu! Failover sınırına ulaşıldı.")
def _record_failure(self, country: str):
self.failure_counts[country] += 1
if self.failure_counts[country] >= 3:
self.circuit_open_until[country] = time.time() + 60.0
print(f"[CIRCUIT TRIPPED] {country} devresi 60 sn açıldı.")
# Test
router = SmartSmsRouter(api_key="ENV_KEY", fallback_countries=["tr", "gb", "de"])
order = router.allocate_with_failover("whatsapp")
4. Node.js ile Circuit Breaker Katmanı
Node.js ortamında async/await yapısına entegre failover yönlendirici:
export async function requestWithFailover(service, countries = ['tr', 'gb', 'nl']) {
for (const country of countries) {
try {
console.log(`[DENEME] ${country} rotası deneniyor...`);
const res = await fetch('https://enonay.com/api/v1.php', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ENONAY_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ action: 'getNumber', service, country }),
signal: AbortSignal.timeout(5000)
});
const data = await res.json();
if (data.status === 'SUCCESS') {
return data;
}
} catch (err) {
console.warn(`[FAILOVER] ${country} başarısız: ${err.message}. Sonraki rotaya geçiliyor.`);
}
}
throw new Error('Tüm SMS rotaları tükendi.');
}
En Onay telekom altyapısı, arka planda 50'den fazla operatör ile doğrudan SS7 ve SMPP bağlantıları üzerinden otomatik yük dengeleme (load balancing) yapar. Canlı rota durumlarını ve ağ gecikmelerini izlemek için En Onay API Dokümantasyonu & Ağ Metrikleri sayfasını inceleyin.