<p>20 mesaj/dk başlangıç noktasıdır, bir öneri değildir — miktarınıza göre ayarlayın ve yeni bir göndericiyi yavaş yavaş ısıtın, tam hızda başlamaktan kaçının.</p>

<h2>
  <a name="what-to-log-and-what-never-to-log" href="#what-to-log-and-what-never-to-log">
  </a>
  Ne kaydedilmeli ve asla ne kaydedilmemeli
</h2>

<div class="table-wrapper-paragraph">
  <table>
    <thead>
      <tr>
        <th>Bunu kaydedin</th>
        <th>Bunu asla kaydetmeyin</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Sağlayıcı mesaj kimliği</td>
        <td>Oturum belirteçleri veya kimlik doğrulama durumu</td>
      </tr>
      <tr>
        <td>Maskeleme formunda alıcı (+2010  9705)</td>
        <td>Tam alıcı numaraları düz metin halinde</td>
      </tr>
      <tr>
        <td>Şablon veya bildirim sınıf adı</td>
        <td>OTP'ler veya kişisel veriler içeren mesaj gövdeleri</td>
      </tr>
      <tr>
        <td>Taşıma gecikmesi ve durum kodu</td>
        <td>Destek talebinde istemediğiniz herhangi bir şey</td>
      </tr>
    </tbody>
  </table>
</div>

<p>Mesajlaşma günlükleri, uygulamanızın ürettiği en yüksek hassasiyetli verilerdir ve genelde en az korunanlardır. Yazma anında maskeleme uygulayın, okuma anında değil.</p>

<h2>
  <a name="testing-without-sending-anything" href="#testing-without-sending-anything">
  </a>
  Hiçbir şey göndermeden test etme
</h2>

<p>Taşıyıcı bir arayüz olduğundan, testler asla ağa erişmez:<br/></p>

<div class="highlight js-code-highlight">
  <pre class="highlight php"><code><span class="k">public</span> <span class="k">function</span> <span class="n">test_customer_is_notified_on_confirmation</span><span class="p">():</span> <span class="kt">void</span>

{
Notification::fake();

<span class="nv">$booking</span> <span class="o">=</span> <span class="nc">Booking</span><span class="o">::</span><span class="nf">factory</span><span class="p">()</span><span class="o">-&gt;</span><span class="nf">create</span><span class="p">();</span>
<span class="nv">$booking</span><span class="o">-&gt;</span><span class="nf">confirm</span><span class="p">();</span>

<span class="nc">Notification</span><span class="o">::</span><span class="nf">assertSentTo</span><span class="p">(</span>
    <span class="nv">$booking</span><span class="o">-&gt;</span><span class="n">customer</span><span class="p">,</span>
    <span class="nc">BookingConfirmed</span><span class="o">::</span><span class="n">class</span><span class="p">,</span>
    <span class="k">fn</span> <span class="p">(</span><span class="nv">$n</span><span class="p">,</span><span class="nv">$channels</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nb">in_array</span><span class="p">(</span><span class="nc">WhatsAppChannel</span><span class="o">::</span><span class="n">class</span><span class="p">,</span> <span class="nv">$channels</span><span class="p">)</span>
<span class="p">);</span>

}

<p>Ve test yapılandırmanızda güvenli sürücüyü zorlayın, böylece yapılandırma hatası, CI'den gerçek bir mesajın sızmasına neden olamaz:<br/></p>

<div class="highlight js-code-highlight">
  <pre class="highlight php"><code><span class="c"><!-- phpunit.xml --></span>

name=“MESSAGING_DRIVER” value=“null” force=“true” />

<p><code>force="true"</code> özelliği önemli bir parçadır — olmaksızın, mevcut bir ortam değişkeni baskın gelir ve test paketi, gerçek mesajların gönderilmesini sağlar. Her yan etkili servis için <code>phpunit.xml</code> dosyasında bu bayrağı zorunlu kılmakta fayda vardır.</p>

<h2>
  <a name="migrating-to-the-official-api-later" href="#migrating-to-the-official-api-later">
  </a>
  Resmi API’ye geçiş
</h2>

<p>Proje Cloud API'ye geçtiğinde, iş burada bitmiştir:</p>

<ol>
    <li><code>CloudApiTransport</code> u aynı arayüzle uygulayın.</li>
    <li>Şablon yönetimi ekleyin, çünkü Cloud API, müşteri hizmeti penceresinin dışındaki iş başlatılan mesajlar için ön onaylı şablonlar gerektirir. Bu, soyutlamanın sızdığı tek yerdir — düz metin gönderimler, parametrelerle şablon gönderimlerine dönüşecektir, bu yüzden <code>toWhatsApp()</code> fonksiyonunu, bu geçişin geleceğini biliyorsanız, ham bir dize yerine yapılandırılmış bir nesne dönecek şekilde tasarlayın.</li>
    <li><code>MESSAGING_DRIVER</code> değiştirin.</li>
</ol>

<p>Herhangi bir çağrı alanında sıfır değişiklik. Bu, dolaylılığın tüm geri dönüşüdür.</p>

<h2>
  <a name="summary" href="#summary">
  </a>
  Özet
</h2>

<ul>
    <li>Her mesajlaşma sağlayıcısını, ikinci çağrı alanını yazmadan önce dar bir arayüzün arkasına koyun.</li>
    <li>Gidebilecek bir mesaj sürücüsü varsayılan olarak ayarlayın; gerçeğe ulaşmayı açıkça seçilen bir şey haline getirin.</li>
    <li>Yerel bir geçit, geliştirme ve iç bildirim aracı olarak kullanılır. Müşteri odaklı üretim mesajlaşması, resmi API üzerinde olmalıdır.</li>
    <li>Geçidi geri döngüye bağlayın, oturumunu kalıcı hale getirin, yeniden başlatma sınırları ile denetleyin ve durumuna dikkat edin.</li>
    <li>Her şeyi sıraya koyun, kasıtlı olarak sınırlayın, zaman aşımına dikkat edin ve günlüklerde alıcıları maskeleyin.</li>
</ul>

<p>Mısır ve Körfez bölgelerinde işletmeler için Laravel sistemleri kurup işletiyoruz. Eğer bu yapıyı tasarlıyorsanız ve bu, kırk çağrı alanına dönüşmeden önce bir inceleme istiyorsanız, bizimle iletişime geçin.</p>

<h2>
  <a name="faq" href="#faq">
  </a>
  SSS
</h2>

<p><strong>Üretimde resmi olmayan bir WhatsApp kütüphanesini kullanmak güvenli mi?</strong></p>
<p>Müşteri odaklı işletme mesajlaşması için hayır. Bağlı bir cihazdan WhatsApp Web protokolünü yönlendiren kütüphaneler, WhatsApp'ın işletme mesajlaşma kurallarının dışındadır ve numara kısıtlanabilir veya yasaklanabilir. Geliştirme, entegrasyon testi ve ekip üyelerinin rızasıyla kendi numaralarına iç bildirimler için makuldür. Müşterilere yönelik üretim mesajlaşması resmi WhatsApp Business Cloud API üzerinde olmalıdır.</p>

<p><strong>Neden WhatsApp'ı Laravel'in bildirim sistemi üzerinden yönlendirmiyorum, doğrudan API'yi çağırmak yerine?</strong></p>
<p>Çünkü sağlayıcı kararını geri döndürülebilir kılar. Bir bildirim, ne gönderileceğini ve hangi kanaldan gönderileceğini belirtir; arka planda taşıyıcı, çalışma zamanında yapılandırmadan bağlanır. Fiyatlandırma, şartlar veya sağlayıcı erişilebilirliğinde değişiklik olduğunda, yalnızca yeni bir sınıf uygulayıp bir ortam değişkenini çevirmek zorundasınız, böylece uygulamadaki her çağrı alanını düzenlemek zorunda kalmazsınız.</p>

<p><strong>Test paketimi gerçek mesajlar göndermekten nasıl durdurabilirim?</strong></p>
<p>Varsayılan olarak bir null taşıyıcı bağlayın ve phpunit.xml dosyanızda force="true" ile zorlayın. Bu öznitelik olmadan mevcut bir ortam değişkeni baskın gelir ve bir geliştirici makinesi veya üretim değerlerine sahip bir CI çalıştırıcısı, gerçek mesajları testler sırasında gönderir. Feature testlerinde Notification::fake() kullanarak iddiaların geçiş sağlanmadan çalışmasına izin verin.</p>

<p><strong>WhatsApp mesajlarını hangi hızda göndermeliyim?</strong></p>
<p>Düşündüğünüzden daha düşük bir hızda ve yavaşça artırarak. Yeni bir gönderenin ani patlamaları istismar olarak görünür ve ceza numaranıza yansır. Kanalın önünde bir hız sınırlayıcı koyun, başlangıçta ihtiyatlı olun, yeni bir göndereni günler içerisinde yavaş yavaş ısıtın, ve limitinizi bir konfigürasyon değeri haline getirerek bir olay sırasında anında düşürün.</p>

<p><strong>Mesajlaşma geçidi asla ne yapmamalıdır?</strong></p>
<p>Asla bir kamu arayüzüne bağlanmamalıdır, asla mesaj gövdelerini veya maskelenmemiş alıcı numaralarını kaydetmemelidir, asla bir denetleyici yeniden başlatma limitleri olmadan çalışmamalıdır ve asla bir web isteğinden senkron olarak çağrılmamalıdır. İlk durumda, giriş bilgilerinin eşdeğer olduğu bir telefonla eşdeğer kimlik bilgileri açığa çıkar, ikinci durumda yüksek hassasiyetli bir veri sızıntısı yaratır, üçüncü durumda yeniden başlatma döngüleri numaraların etiketlenmesine yol açar ve dördüncü durumda bir asılı geçit işçi havuzunuzu tüketir.</p>

<hr/>

<p><em>Orijinal yayım <a href="https://web-pioneer.com/en/blog/laravel-whatsapp-notification-gateway-architecture" target="_blank" rel="noopener noreferrer">web-pioneer.com</a> üzerinde yapılmıştır.</em></p>

Kaynak: Orijinal Makale

Bu Makaleyi Paylaş