Her işletme uygulaması, sonunda bir WhatsApp mesajı göndermek zorundadır. Rezervasyon onayları, OTP’ler, teslimat güncellemeleri, fatura hatırlatmaları — müşterilerinizin gerçekten okuduğu kanal.
<p>Mühendislik sorusu "WhatsApp mesajını nasıl gönderirim" değil, "bu kararı nasıl geri alınabilir kılarım" olmalıdır. Mesajlaşma sağlayıcıları değişir, fiyatlandırmalar değişir, şablon onay kuralları değişir ve bir projenin bir sağlayıcının HTTP istemcisini kırılması zor bir şekilde 40 farklı çağrıda sabitlemesi sürekli bir bedel ödemesine neden olacaktır.</p>
<p>Bu makale, WhatsApp ile gönderimlerin Laravel'in kendi bildirim soyutlaması arkasına yerleştirildiği ve hangi taşıyıcının altına takılabileceğinin belirtildiği yapıyı açıklar. Ayrıca, bu geçidin <em>uygun olmadığı</em> yerleri de belirtir, çünkü bu genellikle göz ardı edilir.</p>
<h2>
<a name="start-with-the-honest-constraint" href="#start-with-the-honest-constraint">
</a>
Gerçekçi sınırlamalar ile başlayın
</h2>
<blockquote>
<p><strong>Hiçbir şey inşa etmeden önce bunu okuyun.</strong> WhatsApp mesajlarını programlı bir şekilde göndermenin iki temel yolu vardır. Resmi <strong>WhatsApp Business Cloud API</strong>, belgelenmiş hız sınırları, şablon onayı ve sorumlu tutulabileceğiniz bir hesap ile desteklenen bir üründür. Bağlı bir cihazdan <strong>WhatsApp Web protokolünü</strong> kullanan topluluk kütüphaneleri ise resmî değildir. İşletme mesajlaşması için WhatsApp'ın kurallarına dahil değildirler, numara kısıtlanabilir veya yasaklanabilir, ve bu tür bir durumla karşılaştığınızda destek alma yolu yoktur.</p>
<blockquote>
<p>Bizim pozisyonumuz: Yerel bir geçit, <strong>geliştirme, entegrasyon testi ve kendi ekibinizin rızası ile kendi numaralarınıza iç bildirimler için geçerlidir</strong>. Müşteri odaklı üretim mesajlaşması için resmi Cloud API’yi kullanın. Aşağıdaki mimari, bunlar arasında geçiş yapmanın bir yeniden yazım değil, bir yapılandırma değişikliği olduğunu tasarlamıştır.</p>
</blockquote>
</blockquote>
<p>Bir satıcı, size resmi API'nin yerine geçerli bir üretim kalitesi yerine geçen bir geçit sunduğunda, riski size devretmektedir.</p>
<h2>
<a name="the-seam-one-interface-several-transports" href="#the-seam-one-interface-several-transports">
</a>
Arayüz: bir arayüz, birkaç taşıyıcı
</h2>
<p>Laravel zaten doğru soyutlamayı sağlar. Bir bildirim, <em>ne</em> göndermek istediğini ve <em>hangi kanaldan</em> göndereceğini belirtir; telefonlara nasıl iletileceğini bilmemelidir.</p>
<p>Dar bir sözleşme tanımlayın:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="cp"><?php </span?>namespace App\Messaging;
interface MessageTransport
{
/
- @param string $to E.164 rakamlar, noktalama işareti olmadan
- @param string $body Düz metin
- @return string Sağlayıcı mesaj kimliği, ilişkilendirme için
- @throws TransportException
*/
public function send(string $to, string $body): string;
}
<p>Ardından, ortamın talep ettiği uygulamanızı bağlayın:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="c1">// app/Providers/MessagingServiceProvider.php</span>public function register(): void
{
$this->app->bind(MessageTransport::class, function ($app) {
return match(config(‘messaging.driver’)) {
‘cloud_api’ => new CloudApiTransport(config(‘messaging.cloud_api’)),
‘gateway’ => new LocalGatewayTransport(config(‘messaging.gateway’)),
‘log’ => new LogTransport(),
‘null’ => new NullTransport(),
default => throw new \InvalidArgumentException(‘Bilinmeyen mesajlaşma sürücüsü’),
};
});
}


