Kendi Uygulamandan WhatsApp Gönderimi (HTTP API)
Panelden tek tek mesaj yazmak küçük listeler için yeterlidir; ama sipariş onayını, randevu hatırlatmasını veya form yanıtını otomatik göndermek istediğinizde insana ihtiyaç duymayan bir kanal gerekir. İşte HTTP API tam olarak bunu yapar: kendi uygulamanız sunucuya küçük bir JSON isteği atar, mesaj güvenli tempoyla WhatsApp'a çıkar. Bu yazıda bu QR tabanlı sistemin (resmi Business API değil) HTTP API entegrasyonunu — endpoint yapısı, auth secret, örnek curl/JSON payload ve kuyruk mantığı — pratik olarak anlatıyoruz.
1. Neden bir HTTP API'ye ihtiyacınız var?
Panel arayüzü elle gönderim için harikadır, ancak üç durumda tıkanır:
- Olay tetikli mesajlar: Bir sipariş oluştuğunda, form dolduğunda veya ödeme alındığında anında bildirim gitmeli. İnsanın panele girip mesaj yazmasını bekleyemezsiniz.
- Mevcut sisteme entegrasyon: E-ticaret altyapınız, CRM'iniz veya muhasebe yazılımınız zaten olayları biliyor; sadece bunları WhatsApp'a köprülemek istersiniz.
- Hacim ve tutarlılık: Yüzlerce kişisel bildirimi (herkese kendi adı, sipariş numarası) elle yazmak imkânsızdır; şablon + veri ile üretmek gerekir.
HTTP API, panelinizi bir "otomasyon uç noktasına" çevirir. Bu, WhatsApp otomatik mesaj gönderme yaklaşımının en programatik hâlidir: tetikleyici artık bir insan değil, kodunuzdur.
2. İstek nereye gidiyor? Mimari akış
Sistemin altın kuralı şudur: sunucu asla mesaj göndermez; yalnızca worker gönderir. HTTP isteğiniz bu zinciri başlatır ama gönderimi doğrudan tetiklemez:
| Adım | Ne olur |
|---|---|
| 1. Uygulamanız | Sunucuya (Express :3200) auth secret'lı bir POST isteği atar |
| 2. Server | Secret'ı ve payload'u doğrular, kaydı Supabase'e yazar, işi kuyruğa ekler, 202 döner |
| 3. Redis + BullMQ | İşi tutar; zamanlanmışsa gecikmeyle (delay) bekletir |
| 4. Worker | İşi alır, anti-ban temposunu uygular ve WhatsApp'a gönderir |
Bu ayrım kritik: API'ye saniyede yüz istek de gelse, WhatsApp'a giden trafik worker'ın insan hızını taklit eden temposunu aşamaz. Yani API'yi "hızlandırmak" için ısrar etmenin bir anlamı yoktur; hız, tasarımı gereği tek bir yerde kilitlidir. Kuyruk mantığının derinlemesine anlatımı için whatsapp-web.js nedir yazısına bakın.
3. Endpoint yapısı ve kimlik doğrulama
API yüzeyi bilinçli olarak sadedir. Örnek olarak tek bir gönderim uç noktası düşünün (kesin yol projenizin sürümüne göre değişebilir; buradaki şekil illüstratiftir):
| Alan | Açıklama |
|---|---|
| Metot & yol | POST /api/messages |
| Başlık | Content-Type: application/json |
| Kimlik doğrulama | X-Control-Secret: <WA_CONTROL_SECRET> |
| Gövde | to, message, (opsiyonel) sendAt, priority |
| Yanıt | 202 Accepted + iş kimliği (kuyruğa alındı, henüz gönderilmedi) |
Kimlik doğrulama tek bir paylaşılan gizli anahtara dayanır: WA_CONTROL_SECRET. Bu değeri kurulumda openssl rand -hex 32 ile üretir, .env dosyasına koyar ve yalnızca sunucu tarafındaki kodunuzdan gönderirsiniz. Sunucu, gelen isteğin başlığındaki secret'ı beklenen değerle karşılaştırmadan hiçbir işi kuyruğa almaz.
4. Örnek istek: curl ve JSON payload
En basit metin gönderimi bir curl ile şöyle görünür:
curl -X POST https://sunucunuz.example.com/api/messages \
-H "Content-Type: application/json" \
-H "X-Control-Secret: $WA_CONTROL_SECRET" \
-d '{
"to": "905551112233",
"message": "Merhaba Ayşe, #1043 numaralı siparişiniz hazırlanıyor. İPTAL yazarak bildirimlerden çıkabilirsiniz.",
"sendAt": null,
"priority": "high"
}'
Başarılı yanıt, gönderimin gerçekleştiğini değil, sıraya alındığını bildirir:
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"status": "queued",
"jobId": "wa_9f3c1a7b",
"queuedAt": "2026-07-31T10:14:22+03:00"
}
Alanlara dair birkaç not:
to: Numarayı ülke koduyla, baştaki+ve0olmadan verin (örn.905551112233). Sistem chatId'e normalize eder; alıcının sizi rehbere kaydetmesine gerek yoktur. Ayrıntı: rehbere kaydetmeden mesaj gönderme.message: Düz metin; kişiselleştirmeyi (ad, sipariş no) siz payload'u üretirken doldurursunuz.sendAt: ISO 8601 zaman verirseniz iş BullMQ delay ile ertelenir; boş bırakırsanız en yakın uygun pencerede gönderilir. Bkz. zamanlanmış mesaj gönderme.priority: Aşağıda anlatılan round-robin sıralamada bu işin ağırlığını belirler.
5. Round-robin öncelik: tek gönderim, birçok kaynak
Worker aynı anda tek bir gönderici olduğu için, farklı kaynaklardan (toplu kampanya + tekil sipariş bildirimi) gelen işler aynı dar boğazı paylaşır. Sistem burada round-robin öncelik uygular: yüksek öncelikli tekil bildirimler (sipariş onayı, randevu hatırlatması), binlerce kişilik bir kampanyanın arasında sıkışıp saatlerce beklemez; kampanya işleri arasında adil biçimde araya sokulur.
Yanlış beklenti uyarısı: Öncelik "yüksek" olsa bile mesaj anti-ban temposuna tabidir. Bir önceki mesajdan bu yana 45-90 saniye geçmediyse veya saat 23:00'ı aştıysa, yüksek öncelikli iş bile bekler. Öncelik sıradaki yerinizi değiştirir, hız tavanını değil. Bu tavanın nedenleri için ban yememek için kurallar yazısına bakın.
6. Kullanım senaryoları
6.1 E-ticaret sipariş ve kargo sistemi
Sipariş durumu değiştiğinde (onaylandı, kargolandı, teslim edildi) arka ucunuz bir POST atar; müşteri anında bilgilenir. Bu, hizmet bildirimi kategorisine girdiği için pazarlama iznine göre daha esnektir — yine de detaylar için e-ticaret sipariş/kargo bildirimi yazısına göz atın.
6.2 Web formu ve lead bildirimi
Bir iletişim formu dolduğunda hem ekibinize hem de kullanıcıya otomatik "talebinizi aldık" mesajı gidebilir. Form arka ucunuz doğrudan endpoint'e istek atar.
6.3 CRM ve otomasyon araçları
CRM'inizdeki bir aşama değişikliği ya da n8n/Zapier gibi bir otomasyon akışı, HTTP düğümüyle bu API'yi çağırabilir. Böylece koda dokunmadan görsel akışlarla WhatsApp adımı eklersiniz.
Bu senaryoların tümünün altyapı tarafında ne anlama geldiğini self-hosted mesaj sistemi yazısında bulabilirsiniz; API'yi çevreleyen worker/kuyruk mimarisi tamamen sizin sunucunuzda çalışır.
Sık sorulan sorular
Bu resmi WhatsApp Business API mı?
Hayır. Bu, QR tabanlı (whatsapp-web.js) kendi sisteminizin HTTP endpoint'idir. Meta'nın resmi Business API'si değildir; şablon onayı, BSP başvurusu veya konuşma başına ücret yoktur.
Endpoint'i nasıl koruyorum?
İstek başlığında WA_CONTROL_SECRET gönderirsiniz; sunucu doğrulamadan işi kuyruğa almaz. Secret'ı openssl rand -hex 32 ile üretin ve yalnızca sunucu tarafında saklayın, tarayıcı koduna koymayın.
API'ye istek atınca mesaj anında gider mi?
Hayır. Sunucu isteği doğrular ve kuyruğa ekler; gönderimi worker anti-ban temposuyla yapar. API 202 döner, mesaj sıraya girer ve güvenli tempoda gönderilir.
Hangi sistemlerden tetikleyebilirim?
HTTP isteği atabilen her şeyden: e-ticaret, web formu, CRM, muhasebe yazılımı, n8n/Zapier ya da kendi arka uç servisiniz. Tek gereken sunucuya POST atıp auth secret'ı eklemek.
Kendi uygulamanızı WhatsApp'a bağlayın
Auth secret'lı bir POST ile sipariş, form ya da CRM olaylarınızı WhatsApp bildirimine çevirin. Ücretsiz, açık kaynak, tamamen sizin sunucunuzda.
Panele Git →