Yazılım Geliştirme

Laravel ile SMS Yönetimi ve Netgsm Entegrasyonu

📅 Feb 02, 2026
Laravel projelerinde SMS göndermek çoğu zaman karmaşık bir işlem gibi görünebilir. Her yerde farklı yöntemler kullanmak, ileride SMS sağlayıcısını değiştirmek istediğinizde büyük bir zahmete dönüşebilir. İşte bu noktada tek bir noktadan yönetim devreye giriyor.

SmsServiceInterface gibi bir arayüz sayesinde, uygulamanın her yerinde SMS gönderimi için standart bir yöntem kullanabilirsiniz. Bu sayede:

  • Kodun geri kalanını değiştirmeden SMS sağlayıcısını kolayca değiştirebilirsiniz.
  • Tek bir metod ile hem tekli hem de çoklu SMS gönderimi yapabilirsiniz.
  • Test ve mock işlemleri çok daha kolay hâle gelir, gerçek SMS göndermeden sisteminizi test edebilirsiniz.
  • Kodunuz standart, temiz ve yönetilebilir olur; loglama ve hata yönetimi tek bir noktadan yapılır.

Netgsm entegrasyonu ile bu yapı, HTTP API üzerinden SMS gönderimini sorunsuz hale getirir. sendTo() ve send() gibi metodlar sayesinde hem bireysel hem de toplu SMS gönderimleri tek bir servis üzerinden yönetilir.

Sonuç olarak, Laravel projelerinde SMS işlemleri modüler, esnek ve sağlayıcı değişimlerine hazır bir yapıya kavuşur. Sağlayıcı değişse bile diğer kodlar etkilenmez, tüm SMS işlemleri tek bir noktadan kontrol edilir.

SmsServiceInterface
                                     <?php

namespace App\Contracts;

interface SmsServiceInterface
{
/**
* Çoklu kişiye SMS gönderimi
*
* @param string $header
* @param array $messages
* @param string|null $encoding
* @param string|null $iysfilter
* @param string|null $partnercode
* @return array
*/
public function send(string $header, array $messages, ?string $encoding = 'TR', ?string $iysfilter = '', ?string $partnercode = ''): array;

/**
* Tek kişiye SMS gönderimi
*
* @param string $number
* @param string $message
* @param string|null $header
* @return array
*/
public function sendTo(string $number, string $message, ?string $header = null): array;
}
NetgsmSmsService (Netgsm sms entegrasyonu)
                                     <?php

namespace App\Services\External;

use App\Contracts\SmsServiceInterface;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;

class NetgsmSmsService implements SmsServiceInterface
{
protected string $username;
protected string $password;
protected string $url;
protected string $defaultHeader;

public function __construct()
{
$this->username = config('services.netgsm.username');
$this->password = config('services.netgsm.password');
$this->url = config('services.netgsm.url');
$this->defaultHeader = config('services.netgsm.header');
}

/**
* Çoklu SMS gönderme işlemi
*/
public function send(string $header, array $messages, ?string $encoding = 'TR', ?string $iysfilter = '', ?string $partnercode = ''): array
{
$payload = [
'msgheader' => $header,
'messages' => $messages,
'encoding' => $encoding,
'iysfilter' => $iysfilter,
'partnercode' => $partnercode,
];

try {
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->withBasicAuth($this->username, $this->password)
->post($this->url, $payload);

if ($response->successful()) {
return [
'success' => true,
'data' => $response->json(),
];
}

return [
'success' => false,
'error' => $response->body(),
];
} catch (\Throwable $e) {
Log::error('Netgsm SMS gönderim hatası', [
'error' => $e->getMessage(),
'payload' => $payload,
]);

return [
'success' => false,
'error' => $e->getMessage(),
];
}
}

/**
* Tek kişiye SMS gönderme işlemi
*/
public function sendTo(string $number, string $message, ?string $header = null): array
{
$header = $header ?? $this->defaultHeader;

return $this->send($header, [
[
'msg' => $message,
'no' => $number,
]
]);
}
}
AppServiceProvider
                                     <?php

namespace App\Providers;

use App\Contracts\SmsServiceInterface;
use App\Services\External\NetgsmSmsService;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->app->bind(SmsServiceInterface::class, NetgsmSmsService::class);
}


}
Kullanım:
                                     <?php

use App\Contracts\SmsServiceInterface;

app(SmsServiceInterface::class)->sendTo("05555555555","Bu bir test mesajıdır");
📌 Yazı Bilgileri
  • Hedef: SMS gönderim süreçlerini tek merkezden yönetmek, sağlayıcı değişikliklerinde uygulamanın diğer kısımlarını etkilemeden çalışmasını sağlamak
  • Amacı: Laravel projelerinde standart, anlaşılır ve esnek bir SMS gönderim yapısı oluşturmak; hem tekli hem çoklu SMS gönderimlerini tek bir servis üzerinden kontrol edebilmek
  • Mimari: Merkezi SMS Servisi & Arayüz Tabanlı Sağlayıcı Yönetimi (SmsServiceInterface ile modüler yapı)
🏷 Etiketler
Laravel Netgsm SMS Notification Provider Container