src/DiyanetCleanArchitecture.Infrastructure.Services.Sms projesindedir ve yalnızca OTP (tek kullanımlık kod) SMS’i gönderir. Sağlayıcı NetGSM REST v2 OTP API’sidir (/sms/rest/v2/otp).
Arayüz
OtpCode overload’u mesajı sabit bir kalıpla kendisi oluşturur (ASCII-only):
ASCII zorunluluğu
NetGSM OTP API’si Türkçe karakter kabul etmez. Gönderimden önce mesaj ASCII kontrolünden geçer; değilseSmsServiceException fırlatılır:
İstek/yanıt modeli
İstek gövdesi NetGSM’in beklediği alan adlarıyla (küçük harf) serialize edilir. Telefon numarasıPhone.ToNetGsmFormat() ile NetGSM formatına çevrilir:
code alanıdır. code != "00" ise iş hatası olarak değerlendirilir:
NetGSM hata kodları
GsmOtpErrors.ToMessage(code) kod → mesaj eşlemesini yapar:
Ortam bazlı telefon çözümleme — SmsPhoneResolver
Production’da gerçek numaralara gönderim yapılır; Development/Staging’de ise yalnızca config’teki test numaralarına gönderilir (gerçek kullanıcılara SMS gitmesini engellemek için):
Config — Services:Sms
string
NetGSM API kök adresi. HttpClient
BaseAddress olarak ayarlanır.string
default:"/sms/rest/v2/otp"
OTP endpoint yolu.
string
Basic Auth kimlik bilgileri (Base64’lenip
Authorization: Basic header’a yazılır).string
Onaylı gönderici adı (
msgheader).string[]
Production dışı ortamlarda gönderim yalnızca bu numaralara yapılır.
int
default:"3"
Polly HTTP retry sayısı (300ms × deneme lineer backoff).
DI kaydı — HttpClient + Polly + Basic Auth
Email Servisi
OTP’nin e-posta kanalı.
Value Objects
Phone.ToNetGsmFormat() ve OtpCode.Generate() value object’leri.