En Onay, Türkiye ve 180+ ülkede milisaniyeler seviyesinde sanal numara aktivasyonu ve OTP SMS doğrulaması sağlayan kurumsal REST API altyapısı sunar. İstanbul merkezli yüksek erişilebilirlikli sunucularımız üzerinden Python, Node.js ve cURL ile entegre olabilen sistemimiz, yazılım ekiplerine güvenli, kesintisiz ve yüksek performanslı doğrulama otomasyonu sağlar.
Giriş: Modern Uygulamalarda Otomatik SMS Onay İhtiyacı
Günümüz web ve mobil uygulamalarında kullanıcı kimlik doğrulama, hesap güvenliği ve bot engelleme süreçlerinin merkezinde tek kullanımlık şifreler (OTP - One Time Password) yer almaktadır. Ancak kullanıcı kayıt akışlarında veya test otomasyonlarında fiziksel SIM kart yönetimi hem operasyonel maliyeti artırmakta hem de ölçeklenmeyi engellemektedir.
En Onay REST API v1.4 Gateway, 180'den fazla ülkede saniyeler içinde dinamik sanal numara tahsis etmenizi ve gelen SMS doğrulama kodlarını programatik olarak yakalamanızı sağlar. Bu rehberde, üretim ortamına (production-ready) uygun Python ve Node.js entegrasyonlarını adım adım inşa edeceğiz.
1. En Onay REST API Mimarisi ve Yaşam Döngüsü
Bir SMS onay otomasyonunun yaşam döngüsü 3 temel aşamadan oluşur:
- Numara Tahsisi (getNumber): Belirtilen servis (WhatsApp, Telegram, OpenAI vb.) ve ülke için geçici bir sanal telefon numarası rezerve edilir.
- Durum Takibi (getStatus): İlgili numaraya SMS ulaşıp ulaşmadığı webhook bildirimi veya belirli aralıklarla çalışan durum sorgusu ile izlenir.
- Aktivasyonun Kapatılması (setStatus): Kod başarıyla alındıktan sonra işlem onaylanır veya kod ulaşmadıysa numara iptal edilerek bakiye iade edilir.
2. cURL ile Uç Noktaları Test Etme
Kod yazmaya başlamadan önce, terminaliniz üzerinden API geçidinin canlı yanıt verdiğini doğrulayabilirsiniz:
# 1. Numara Satın Al (Örnek: WhatsApp için Türkiye Numarası)
curl -X POST https://enonay.com/api/v1.php \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "getNumber", "service": "whatsapp", "country": "tr"}'
# Dönen Yanıt Örneği:
# {"status": "SUCCESS", "id": 9845120, "number": "+905510000000", "cost": 12.50}
# 2. Gelen SMS Kodunu Sorgula
curl -X GET "https://enonay.com/api/v1.php?action=getStatus&id=9845120" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# Dönen Yanıt Örneği:
# {"status": "STATUS_OK", "code": "849201"}
Tüm parametreler ve hata kodları için En Onay API Uç Noktaları Kılavuzu'nu inceleyebilirsiniz.
3. Python 3.10+ ile Üretime Hazır Entegrasyon
Python implementasyonunda ağ kesintilerini tolere etmek için requests.Session, dinamik timeout ve exponential backoff stratejisi kullanılmıştır:
import time
import requests
from typing import Optional, Dict, Any
class EnOnayClient:
def __init__(self, api_key: str, base_url: str = "https://enonay.com/api/v1.php"):
self.api_key = api_key
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json",
"User-Agent": "EnOnay-Python-SDK/1.4"
})
def request_number(self, service: str = "whatsapp", country: str = "tr") -> Dict[str, Any]:
"""Sanal numara tahsis eder."""
payload = {"action": "getNumber", "service": service, "country": country}
resp = self.session.post(self.base_url, json=payload, timeout=10)
resp.raise_for_status()
data = resp.json()
if data.get("status") != "SUCCESS":
raise RuntimeError(f"Numara alınamadı: {data.get('error', 'Bilinmeyen hata')}")
return data
def wait_for_otp(self, activation_id: int, timeout_sec: int = 120, poll_interval: int = 4) -> Optional[str]:
"""Gelen SMS kodunu belirli zaman aşımına kadar bekler."""
start_time = time.time()
while time.time() - start_time < timeout_sec:
resp = self.session.get(
self.base_url,
params={"action": "getStatus", "id": activation_id},
timeout=8
)
data = resp.json()
status = data.get("status")
if status == "STATUS_OK":
return data.get("code")
elif status == "STATUS_CANCEL":
raise RuntimeError("İşlem sağlayıcı tarafından iptal edildi.")
time.sleep(poll_interval)
return None
# Kullanım Örneği
if __name__ == "__main__":
client = EnOnayClient(api_key="ENV_ENONAY_KEY")
order = client.request_number(service="telegram", country="tr")
print(f"Numara Alındı: {order['number']} (ID: {order['id']})")
otp = client.wait_for_otp(order["id"], timeout_sec=90)
if otp:
print(f"Başarılı! Gelen OTP: {otp}")
else:
print("Zaman aşımı: Kod gelmedi, sipariş iptal ediliyor.")
4. Node.js 18+ (ESM / TypeScript Uyumlu) Asenkron Otomasyon
Node.js ortamında native fetch ve AbortSignal.timeout kullanarak non-blocking mimari ile SMS doğrulaması yapabilirsiniz:
export class EnOnayService {
constructor(apiKey, baseUrl = 'https://enonay.com/api/v1.php') {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
}
async getNumber(service = 'whatsapp', country = 'tr') {
const res = await fetch(this.baseUrl, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ action: 'getNumber', service, country }),
signal: AbortSignal.timeout(10000)
});
const data = await res.json();
if (data.status !== 'SUCCESS') {
throw new Error(`Sanal numara siparişi başarısız: ${data.error || 'STOK_YOK'}`);
}
return data;
}
async pollOtp(activationId, maxWaitSec = 120, intervalMs = 3500) {
const deadline = Date.now() + (maxWaitSec * 1000);
while (Date.now() < deadline) {
const url = `${this.baseUrl}?action=getStatus&id=${activationId}`;
const res = await fetch(url, {
headers: { 'Authorization': `Bearer ${this.apiKey}` },
signal: AbortSignal.timeout(8000)
});
const data = await res.json();
if (data.status === 'STATUS_OK') {
return data.code;
}
if (data.status === 'STATUS_CANCEL') {
throw new Error('Aktivasyon iptal edildi.');
}
await new Promise(r => setTimeout(r, intervalMs));
}
return null;
}
}
// Hızlı Test
const sms = new EnOnayService(process.env.ENONAY_API_KEY);
sms.getNumber('google', 'tr')
.then(order => sms.pollOtp(order.id))
.then(code => console.log('OTP Kodu:', code))
.catch(console.error);
Yüksek hacimli üretim sistemlerinde her saniye polling yapmak yerine, SMS ulaştığında sunucunuza anında HTTP POST gönderen En Onay Webhook sistemini tercih etmeniz ağ gecikmesini 50ms seviyesine düşürür.
Sonuç ve Canlı API Anahtarı
REST API entegrasyonu sayesinde saniyeler içinde binlerce numarayı eş zamanlı olarak yönetebilir, kullanıcı doğrulama süreçlerinizi tam otomatik hale getirebilirsiniz. Canlı hesap oluşturmak ve API anahtarınızı hemen üretmek için En Onay Kayıt Paneli'ni ziyaret edebilirsiniz.