Sağlayıcı Yedeklemeli SMS Doğrulama API'si Rehberi

Doğrulama Teslimatı Sandığınızdan Daha Sık Başarısız Olur
SMS doğrulama dışarıdan basit görünür. Kullanıcı bir telefon numarası girer, sunucunuz bir kod ister, kullanıcı kodu geri yazar. Pratikte ise teslimat, herhangi bir kayıt akışındaki en az güvenilir adımlardan biridir. Operatörler trafiği kısıtlar. Rotalar çöker. Bir saat önce çalışan bir numara, bölgesel bir filtre yüzünden aniden geri döner.
Kod gelmediğinde kullanıcı operatörü suçlamaz. Sizin ürününüzü suçlar. Ve akıştan çıkar. Kayıt süreçleri üzerine yapılan çalışmalar, kayıttaki her ekstra saniyenin dönüşüm kaybettirdiğini tutarlı biçimde gösterir. Gelmeyen bir doğrulama kodu ise sürtünmenin en kötü türüdür, çünkü kullanıcı bu konuda hiçbir şey yapamaz.
Çözüm tek bir kusursuz sağlayıcı değildir. Öyle bir şey yok. Çözüm sağlayıcı yedeklemesidir (provider failover): başarısız ya da yavaş bir teslimatı algılayıp otomatik olarak farklı bir rota veya tedarikçi üzerinden yeniden deneyen bir sistem. Bu rehber mimariyi, yeniden deneme mantığını ve uyarlayabileceğiniz somut kodu anlatıyor.

Sağlayıcı Yedeklemesi Tam Olarak Ne Demek
Yedekleme, ana yol başarısız olduğunda yedek bir yola geçme pratiğidir. SMS doğrulama için bu yol şu olabilir:
- Farklı bir üst kaynak sağlayıcı (tedarikçi A başarısız olur, tedarikçi B devralır).
- Aynı sağlayıcı içinde farklı bir rota (premium rota ve standart rota).
- Farklı bir kanal (SMS başarısız olur, sesli arama veya mesajlaşma uygulamasına geçilir).
Olgun bir kurulum üçünü de kullanır. Kilit nokta şu: yedekleme sinyallerle tetiklenmeli, tahminle değil. Bir mesajın kabul mü, teslim mi yoksa sessizce mi düştüğünü hızlıca bilmeniz gerekir.
İzlemeniz gereken üç durum
- Gönderildi — sağlayıcı isteğinizi kabul etti.
- Teslim edildi — operatör cihaza teslimi onayladı (DLR, teslimat makbuzu).
- Doğrulandı — kullanıcı kodu gerçekten girdi.
Birçok ekip yalnızca ilk durumu izler ve başarı varsayar. Sessiz hataların temel nedeni budur. Bir mesaj gönderilmiş, hiç teslim edilmemiş olabilir ve bu boşluğu izlemeden bunu asla fark etmezsiniz.
Yedekleme için Temel Mimari
Doğrulama servisinizi, uygulamanız ile bir veya daha fazla SMS sağlayıcısı arasında duran küçük bir durum makinesi olarak düşünün. Telefon numarasını, üretilen kodu, deneme geçmişini ve zamanlamayı bu servis yönetir.
İhtiyacınız olan bileşenler
- Veritabanınızda saklanan bir doğrulama kaydı: telefon numarası, hash'lenmiş kod, durum, denemeler, zaman damgaları.
- Her tedarikçinin aynı iç arayüzü konuşmasını sağlayan bir sağlayıcı soyutlama katmanı.
- Kurallara göre sıradaki sağlayıcıyı seçen bir dağıtıcı (dispatcher).
- Kod bir zaman penceresinde doğrulanmazsa yedeklemeyi tetikleyen bir zaman aşımı gözcüsü.
Sağlayıcı soyutlaması en önemli parçadır. Kodunuz her tedarikçinin ham API'sini doğrudan çağırırsa, sağlayıcı değiştirmek baştan yazma anlamına gelir. Bunun yerine tek bir arayüz tanımlayın.
class SmsProvider:
def send_code(self, phone: str, code: str) -> SendResult:
raise NotImplementedError
def check_status(self, message_id: str) -> DeliveryStatus:
raise NotImplementedError
Her somut sağlayıcı (ana tedarikçiniz, yedek tedarikçiniz) bunu uygular. Dağıtıcı hangi tedarikçiyle konuştuğunu bilmez ve umursamaz.
Yedekleme Mantığını Tasarlamak
Yedekleme kararları iki tetikleyiciye dayanır: hızlı başarısızlık ve yavaş başarısızlık.
Hızlı başarısızlık: istek reddedildi
Bir sağlayıcı anında hata döndürürse (geçersiz numara, rota yok, hız limiti, kimlik doğrulama hatası) beklemezsiniz. Öncelik listenizdeki sıradaki sağlayıcıya hemen geçersiniz. Bu yol senkrondur ve yalnızca milisaniyelik gecikme eklemelidir.
def dispatch(phone, code, providers):
for provider in providers:
result = provider.send_code(phone, code)
if result.accepted:
return result # basariyla gonderildi
log_failure(provider, result.error)
raise AllProvidersFailed()
Yavaş başarısızlık: kabul edildi ama teslim edilmedi
Daha zor olan durum bu. Sağlayıcı mesajı kabul etti ama operatör onu düşürdü ya da teslimat takıldı. Bunu senkron olarak algılayamazsınız. Zaman aşımına dayalı yeniden deneme gerekir.
Bir teslimat penceresi belirleyin, örneğin 25 ila 40 saniye. Kullanıcı bu süre içinde kodu girmediyse ve teslimat makbuzu cihaza ulaşımı onaylamadıysa, sıradaki sağlayıcı üzerinden yeniden gönderin. Burada dikkatli olun: zorunlu olmadıkça yeni kod üretmeyin, çünkü orijinal SMS hâlâ gelip kullanıcının kafasını karıştırabilir. Yaygın bir desen, aynı kodu geçerli tutup onu daha sağlıklı bir rota üzerinden yeniden göndermektir.

Sağlayıcı Sırasını Seçmek
Statik bir öncelik listesi en basit yaklaşımdır: her zaman önce sağlayıcı A, sonra B. İşe yarar ama gerçeği yok sayar. Sağlayıcı A Almanya'da mükemmel, Endonezya'da berbat olabilir.
Hedefe göre yönlendirin
En büyük kazanç, sağlayıcıları ülke bazında sıralamaktır. Bir ülke kodunu tercih edilen sağlayıcı sırasına eşleyen bir yönlendirme tablosu tutun. Bazı tedarikçilerin belirli bölgelere güçlü doğrudan rotaları vardır, bazıları aracılara dayanır. Sıranızı kullanıcılarınızın gerçekte bulunduğu yere göre ayarlayın.
Sağlayıcıları dinamik puanlayın
Daha ileri bir yaklaşım, her sağlayıcıyı son performansın kayan penceresinde puanlar:
- Son bir saatteki teslimat oranı.
- Medyan teslimat süresi.
- Doğrulama tamamlama oranı (en gerçek sinyal).
Doğrulama tamamlamaya en yüksek ağırlığı verin. Hızlı ama yanlış cihaza teslim eden bir sağlayıcı işe yaramaz. Son rakamları bir eşiğin altına düşen sağlayıcıyı geriye alın, toparladığında tekrar yükseltin.
Bu tam olarak bir platformun sizin için hallettiği türden bir karmaşıklıktır. SMSBulk, 200'den fazla ülkede kapsamı havuzlar ve istekleri kendi altyapısı üzerinden yönlendirir. Yani çok tedarikçili bir yönlendirme tablosu kurup bakımını yapmadan doğrulama numaraları edinebilirsiniz. Kur ya da satın al kararına varmadan önce tüm SMS doğrulama kataloğunu inceleyip ülke kapsamını görebilirsiniz.
İdempotency ve Çift Gönderimden Kaçınmak
Yedekleme gerçek bir risk getirir: aynı kodu iki kez göndermek ya da kullanıcının akışını iki kez ücretlendirmek. İdempotency anahtarları bunu önler.
Her doğrulama denemesi için bir idempotency anahtarı üretin ve her katmandan geçirin. Orijinal istek hâlâ yoldayken bir yeniden deneme tetiklenirse, bu anahtar kopyayı algılayıp birleştirmenizi sağlar.
verification = {
"id": "ver_8f2a",
"phone": "+4915...",
"code_hash": hash_code("482913"),
"idempotency_key": "ver_8f2a-attempt-1",
"status": "submitted",
"attempts": [
{"provider": "primary", "sent_at": 1718800000, "status": "no_dlr"}
]
}
Her denemeyi kaydın içinde saklayın. Bu geçmiş, hata ayıklama ve yukarıda anlatılan dinamik puanlama için altın değerindedir.
Yedeklemeden Sonra da Ayakta Kalan Güvenlik Kuralları
Dayanıklılık güvenliği asla zayıflatmamalı. Birkaç tartışmasız kural:
- Kodu depolarken hash'leyin. Açık metin OTP'yi asla saklamayın.
- Deneme sayısını sınırlayın. Üç ila beş yanlış tahmin, ardından kilitleyip yeni kod zorlayın.
- Kodları süreyle sınırlandırın. Beş ila on dakika standarttır.
- Telefon ve IP başına hız limiti uygulayın. Yedekleme daha fazla gönderim yolu demektir, saldırganlar bunu yoklar. Sıkı kısıtlayın.
- Bir pencere içinde aynı kodu yeniden kullanın, böylece yedek sağlayıcı üzerinden gelen bir tekrar gönderim geçerli kodları çoğaltmaz.
Doğrulamanın hesap güvenliğine genel olarak nasıl oturduğuna daha derin bakmak için sanal telefon numarası rehberi aynı sorunun kullanıcı tarafını ele alıyor.
Kanal Yedeklemesi: SMS'in Ötesinde
Bazen SMS basitçe ulaşmaz. Kurumsal bir cihaz kısa kodları engeller, bir ön ödemeli SIM'in rotası yoktur, bir ülke yabancı göndericileri filtreler. Kanal yedeklemesi size ikinci bir çıkış kapısı verir.
- Sesli OTP. Metinden sese bir arama kodu sesli okur. Daha yavaştır ama SMS'in ulaşamadığı numaralara ulaşır.
- Mesajlaşma uygulamaları. Kodu bir sohbet uygulaması üzerinden iletmek bazı bölgelerde daha güvenilir olabilir.
Önceliği mantıklı tutun. En ucuz ve en tanıdık olduğu için önce SMS deneyin. Yalnızca SMS yedeklemesi sağlayıcılarını tükettikten sonra sesliye yükseltin. Kanalı sessizce değiştirmek yerine kullanıcıya net bir "Kod gelmedi mi? Beni arayın" düğmesiyle yedeklemeyi sunun.
Gözlemlenebilirlik: Göremediğinizi Düzeltemezsiniz
Metriksiz yedekleme sadece umuttur. Her şeyi ölçün.
Önemli metrikler
- Sağlayıcı ve ülke başına gönderim başarı oranı.
- Teslimat oranı (DLR alımı gerektirir).
- Doğrulama süresi — gönderimden kullanıcının kodu girmesine kadar geçen süre.
- Yedekleme tetikleme sayısı — yedek yolun ne sıklıkta devreye girdiği.
- Mesaj başına maliyet değil, başarılı doğrulama başına maliyet.
O son metrik tüm sorunu yeniden çerçeveler. Üç yeniden deneme zorlayan ucuz bir sağlayıcı, ilk seferde başaran pahalı birinden daha maliyetlidir. Her zaman başarı başına maliyeti ölçün.
Ani düşüşlere alarm kurun. Bir ülkenin teslimat oranı gece 3'te uçurumdan düşerse, gelecek haftaki raporda sürpriz değil, anında bildirim isteriz. Aynı disiplin ister kayıtları, ister girişleri, ister botlara dirençli kurulumun daha da önemli olduğu yapay zeka araçları için telefon doğrulamasını doğrulayın, geçerlidir.
Uçtan Uca Referans Akış
Parçaların tek bir doğrulama için nasıl birleştiği:
- Kullanıcı telefon numarasını gönderir.
- Sunucu bir doğrulama kaydı oluşturur, kod üretir, hash'ler.
- Dağıtıcı o ülke için sağlayıcı sırasını seçer.
- Ana sağlayıcı bir idempotency anahtarıyla çağrılır.
- Reddedilirse hemen sıradaki sağlayıcıya hızlı yedekleme yapılır.
- Kabul edilirse zaman aşımı gözcüsü başlar (örneğin 30 saniye).
- Kullanıcı kodu girer. Sunucu hash'i karşılaştırır. Tamam.
- Önce zaman aşımı tetiklenirse, aynı kod sıradaki sağlayıcı üzerinden yeniden gönderilir.
- N başarısız yoldan sonra sesli yedekleme sunulur.
- Puanlama ve denetim için her deneme kaydedilir.
Bu akış hem hızlı hem yavaş başarısızlıkları karşılar, kodu tutarlı tutar ve zamanla yönlendirmeyi iyileştirmek için gereken veriyi üretir.
Kendiniz mi Kurarsınız Yoksa Platform mu Kullanırsınız?
Çok sağlayıcılı yedekleme kurmak tatmin edicidir ve tamamen yapılabilir. Aynı zamanda sürekli iştir: birden çok tedarikçiyle sözleşmeler, DLR alımı, yönlendirme tabloları, puanlama ve rotalar değiştikçe sürekli ince ayar.
Birçok ekip için daha akıllı hamle, sağlayıcıları zaten havuzlayan ve yönlendirmeyi içeride yöneten tek bir API kullanmaktır. SMSBulk tam olarak bunu yapar. Tek API, tek cüzdan, 200'den fazla ülkede kapsam ve sağlayıcı karmaşıklığı bizim tarafımızda kalır. Teknik referansı geliştirici dokümantasyonunda okuyabilir, entegrasyondan önce fiyatlandırma sayfasındaki şeffaf ücretleri kontrol edebilirsiniz.
Küresel çalışıyorsanız ve kod geciktiği an kullanıcılarınız kaçıyorsa, kur ya da satın al hesabı doğrulama için genellikle yönetilen bir platform lehine çıkar, böylece mühendislik zamanınızı asıl ürününüze harcarsınız.
Kaçınılması Gereken Yaygın Hatalar
- Gönderimi başarı sanmak. Yalnızca kabulü değil, teslimat ve doğrulamayı izleyin.
- Her yeniden denemede yeni kod üretmek. Pencere başına tek geçerli kod tutun.
- Küresel statik yönlendirme. En azından ülke bazında yönlendirin.
- Yedek yolda hız limiti olmaması. Saldırganlar sertleştirmeyi unuttuğunuz yolu sever.
- Başarı başına yerine mesaj başına maliyet ölçmek. Gerçeği yansıtan metriği optimize edin.
SMSBulk ile Başlayın
İster kendi yedekleme katmanınızı kurun ister doğrudan yönetilen bir çözüme geçin, hedef güvenilir teslimattır. SMSBulk size tek API ve tek cüzdan üzerinden 200'den fazla ülkede doğrulama numaraları verir, yönlendirme karmaşıklığı sizin yerinize halledilir. Aynı hesap e-posta doğrulamasını ve seyahat eSIM'lerini de kapsar, böylece doğrulama, mesajlaşma ve bağlantı ihtiyaçlarınız tek yerde yaşar. Bir hesap oluşturun, cüzdanınızı yükleyin ve bu hafta dayanıklı telefon doğrulamasını yayına alın.
Hesaplarınızı kolayca doğrulamaya hazır mısınız?
100+ ülkeden 30 saniyenin altında anlık SMS kodları alın.
