WhatsApp Zamanlanmış (İleri Tarihli) Mesaj Gönderme
Bir kampanyayı sabahın erken saatinde, bir randevu hatırlatmasını bir gün öncesinden, bir aidat bildirimini ayın başında göndermek istiyorsunuz — ama o anda başında olmayacaksınız. İşte WhatsApp zamanlanmış (ileri tarihli) mesaj tam da bunun için var: gönderimi şimdi hazırlar, ileri bir tarih-saate planlar, gerisini sisteme bırakırsınız. Bu yazıda zamanlamanın ne işe yaradığını, teknik olarak nasıl çalıştığını (BullMQ delay), "21:00'e planladım" demenin neden "tam 21:00'de gider" anlamına gelmediğini, saat dilimi tuzağını ve iptal mantığını anlatıyoruz.
1. Zamanlama gerçekte ne işe yarar?
Zamanlanmış gönderim, "mesajı yaz ve gönder" akışını "mesajı yaz ve ne zaman gideceğini söyle" akışına çevirir. Pratikte üç büyük fayda sağlar:
- Doğru anda ulaşmak: Alıcının mesajı okuma ihtimali en yüksek saatte (örneğin akşam 20:00) gönderim, gece yarısı yazdığınız mesajın sabah kaybolmasından çok daha etkilidir.
- Elle uğraşmadan operasyon: Randevudan 24 saat önce hatırlatma, kargo çıkışında bilgilendirme, ay başında aidat duyurusu — hepsi önceden planlanır, siz o anda müsait olmasanız da gider.
- Uzun listeyi zamana yaymak: Büyük bir listeyi tek seferde değil, güvenli tempoda günlere yaymanın en temiz yolu planlamadır.
Zamanlama, WhatsApp otomatik mesaj gönderme mantığının en çok kullanılan tetikleyicilerinden biridir: panelden tek tıkla değil, takvime göre çalışır.
2. Teknik olarak nasıl çalışır? (BullMQ delay)
Sistem, gönderimi anında WhatsApp'a iletmez. Bunun yerine her gönderim bir iş (job) olarak Redis üzerinde çalışan BullMQ kuyruğuna eklenir. Zamanlama, bu işe bir delay (gecikme) değeri vermekten ibarettir: "şu andan itibaren X milisaniye sonra çalışmaya hazır ol".
Akış şöyledir:
| Adım | Ne olur |
|---|---|
| 1. Panelde planlama | Mesajı yazar, alıcıları ve hedef tarih-saati seçersiniz. |
| 2. Server hesaplar | Hedef zaman ile şu anki zamanın farkı (delay) hesaplanır; kayıt Supabase'e yazılır. |
| 3. Kuyruğa ekleme | İş, whatsapp kuyruğuna bu delay ile eklenir; süresi dolana kadar "gecikmeli" durumda bekler. |
| 4. Zamanı gelince | BullMQ işi çalışmaya hazır hale getirir; worker onu alır. |
| 5. Worker gönderir | Worker (tek gönderim yetkilisi) anti-ban kurallarını uygulayarak mesajı iletir. |
Önemli ayrım: server hiçbir zaman mesaj göndermez. Server yalnızca doğrular ve kuyruğa ekler; gönderen tek bileşen worker'dır. Bu yüzden bilgisayarınız kapalı olsa bile planladığınız mesaj, sunucudaki worker sayesinde zamanı gelince gider.
Kuyruk Redis'te tutulur ve Redis'te AOF kalıcılığı açıktır. Yani sunucu yeniden başlasa bile gecikmeli işler kaybolmaz; kuyruk kaldığı yerden devam eder.
3. "21:00'e planladım" ≠ "tam 21:00'de gider"
Zamanlama konusunda en yaygın yanlış beklenti budur. Planladığınız saat, mesajın kuyruğa hazır hale geleceği anı belirler — gönderileceği kesin saniyeyi değil. Aradaki fark, sistemin numaranızı koruyan anti-ban rejiminden gelir:
| Anti-ban kuralı | Değer | Zamanlamaya etkisi |
|---|---|---|
| Mesajlar arası bekleme | 45–90 sn (medyada 67–135 sn) | Listedeki her mesaj bir öncekinden sonra sıraya girer. |
| Burst molası | Her 15 mesajda 8–12 dk | Uzun listelerde araya molalar girer. |
| Saat penceresi | 05:00–23:00 (yerel) | Pencere dışına planlanan mesaj, pencere açılınca gönderilir. |
| Alıcı cooldown'u | Aynı numaraya 4 saat | Yakın zamanda mesaj gitmiş numara ertelenir. |
Sonuç olarak: tek bir mesajı 21:00'e planladıysanız, birkaç saniye içinde gider. Ancak 500 kişilik bir listeyi 21:00'e planladıysanız, hepsi 21:00'de değil, saatte ~25–30 mesaj temposuyla dağılarak gider ve gerekirse ertesi güne taşar. Bu bir hata değil, tasarımdır: aksi halde 500 mesajın anında gitmesi numaranızı doğrudan bana götürür.
Pencere tuzağı: 23:00–05:00 arasına planlanan mesajlar o anda gitmez; sistem gönderimi bir sonraki uygun pencereye (05:00 sonrası) erteler. Gece yarısı "hemen gitsin" beklentisiyle planlama yapmayın. Ban sinyalleri ve güvenli tempo için ban yememek için kurallar yazısına bakın.
4. Saat dilimi (TZ) neden kritik?
Zamanlamada en sinsi hata saat dilimidir. "21:00" yazdığınızda bu saat, sunucunun saat dilimine göre yorumlanır. Sunucu varsayılan olarak UTC ile çalışıyorsa, Türkiye saatiyle 21:00 sandığınız gönderim aslında UTC 21:00 = Türkiye saatiyle 00:00'da tetiklenmeye çalışır — ki bu da doğrudan gece penceresine denk gelir ve ertelenir.
Çözüm nettir: sistemi çalıştıran sunucuda (ve worker konteynerinde) saat dilimi Türkiye'ye sabitlenmelidir:
TZ=Europe/Istanbulortam değişkeni ayarlı olmalı.- Hem 05:00–23:00 penceresi hem de sizin planladığınız saat aynı yerel saate göre değerlendirilir; kayma ortadan kalkar.
- Farklı ülkelere gönderim yapıyorsanız, "en iyi saat"i alıcının değil sunucunun saatine göre planladığınızı unutmayın.
Basit kontrol: Sunucuda saatin doğru olduğundan emin olmak için, yakın bir zamana (örneğin 5 dakika sonrasına) tek bir test mesajı planlayın. Beklediğiniz dakikada geldiyse saat dilimi doğrudur.
5. Planlanmış mesajı iptal etmek
İleri tarihli bir mesajı planladıktan sonra vazgeçebilir veya içeriği değiştirmek isteyebilirsiniz. İptal iki şeyin birlikte yapılmasını gerektirir, çünkü kayıt iki yerde yaşar:
- Veritabanı kaydı (Supabase): Gönderim yumuşak silme (soft-delete) ile iptal olarak işaretlenir; kayıt tamamen silinmez, "iptal edildi" durumuna geçer. Böylece geçmişte ne planladığınızın izi kalır.
- Kuyruktaki iş (BullMQ): Redis'te bekleyen gecikmeli iş de silinir. Bu adım kritiktir: yalnızca veritabanını işaretleyip kuyruk işini bırakırsanız, zamanı geldiğinde worker o işi yine de çalıştırmayı deneyebilir.
Panelden iptal ettiğinizde sistem bu iki işlemi birlikte yapar; sizin ayrıca kuyruğa dokunmanıza gerek yoktur. İçeriği değiştirmek istiyorsanız en temiz yol, eski planı iptal edip yeni tarihle yeni bir gönderim oluşturmaktır.
6. En iyi gönderim saatleri
Zamanlamanın asıl gücü, mesajı okunma ihtimalinin yüksek olduğu saate yerleştirmektir. Kesin kural yoktur, ancak sektör deneyimi şu genel yönelimleri gösterir:
| Senaryo | Önerilen zamanlama |
|---|---|
| Randevu hatırlatma | Randevudan 24 saat ve/veya 2 saat önce |
| Kampanya / duyuru (B2C) | Akşam 19:00–21:00 arası |
| Kurumsal / B2B bilgilendirme | Hafta içi 10:00–11:00 veya 14:00–16:00 |
| Aidat / ödeme hatırlatma | Ayın ilk iş günü, sabah 10:00 civarı |
| Etkinlik hatırlatma | Bir gün önce akşam + etkinlik günü sabah |
Öğle arası (12:00–13:00) ve çok geç saatler genelde daha zayıf performans verir. Hangi içeriği hangi saate koyacağınıza dair hazır metinler için WhatsApp toplu mesaj şablonları, randevu senaryosunun ayrıntısı için de randevu hatırlatma yazısına göz atabilirsiniz.
Etik ve yasal not: Zamanlama, mesajı doğru saate koymayı kolaylaştırır ama izin gereğini ortadan kaldırmaz. Yalnızca iletişim iznine sahip olduğunuz kişilere planlama yapın; her pazarlama mesajında bir çıkış (opt-out, "İPTAL yazın") satırı bulunsun. İzinsiz toplu mesaj hem WhatsApp şartlarını hem KVKK'yı (6698) ve ticari elektronik ileti kurallarını (6563 / İYS) ihlal eder. Ayrıntı için KVKK'ya uygun toplu mesaj.
Sık sorulan sorular
WhatsApp mesajını ileri bir tarihe planlayabilir miyim?
Evet. Her gönderime bir tarih ve saat verirsiniz; iş o ana kadar kuyrukta bekletilir (BullMQ delay) ve zamanı geldiğinde worker gönderir. Dakika, saat, gün veya hafta sonrasına planlama yapabilirsiniz.
Saat 21:00'e planladığım mesaj tam 21:00'de gider mi?
Yaklaşık olarak. Zamanlama mesajın kuyruğa hazır olacağı anı belirler; tam gönderim anı anti-ban zamanlamasına tabidir. Tek mesajda fark saniyeler, uzun listede dakikalar/saatler olabilir.
Zamanlanmış bir mesajı nasıl iptal ederim?
Panelden iptal ettiğinizde kayıt soft-delete ile iptal işaretlenir ve kuyruktaki BullMQ işi de silinir. Böylece iş zamanı gelse bile gönderilmez.
Saat dilimi neden önemli?
Planladığınız saat sunucunun saat dilimine göre yorumlanır. Türkiye için sunucuda TZ=Europe/Istanbul ayarlı olmalıdır; aksi halde UTC ile 3 saat kayma olur.
Mesajlarınızı en doğru saate planlayın
İleri tarihli gönderimi hazırlayın, saat dilimini doğru ayarlayın, gerisini sistem halletsin. Ücretsiz, açık kaynak, kendi sunucunuzda.
Panele Git →