WhatsApp Business API entegrasyonu yaparken en sık karşılaşılan ve en sinir bozucu sorunlardan biri: **Webhook kurulumunu yaptınız, testler başarılı, test butonu çalışıyor ama gerçek WhatsApp mesajları sunucunuza bir türlü düşmüyor!**
Bugün yaşadığımız bu sorunu ve Meta Developer Console arayüzüne güvenmeyip API ile nasıl kesin çözüme ulaştığımızı adım adım anlatıyorum.
## Belirtiler
1. Sunucunuz çalışıyor (`GET /` ve `GET /webhook` isteklerine yanıt veriyor).
2. Meta Developer Console > Webhooks bölümündeki **”Test”** butonu ile gönderdiğiniz sahte veriler sunucunuza başarıyla ulaşıyor.
3. Ancak kendi telefonunuzdan veya başka bir numaradan işletme hesabınıza (Test Numarası dahil) mesaj attığınızda sunucuda hiçbir hareket (Logs) olmuyor.
## Neden Oluyor?
Sorunun temel kaynağı **Abonelik (Subscription)** kopukluğu.
Meta Developer Console arayüzündeki “Subscribe” butonuna bastığınızda, teorik olarak uygulamanızın `messages` (mesajlar) olayını dinlemesi gerekir. Ancak bazen bu işlem sadece **Uygulama (App)** seviyesinde kalır.
Arka planda **WhatsApp Business Hesabı (WABA)** ile **Uygulamanız** arasındaki bağlantı (“link”) tam olarak kurulamaz. Sonuç olarak: Uygulama dinlemeye hazırdır ama Business Hesabı ona veriyi göndermez.
## Çözüm: API ile Manuel Abonelik (Force Subscribe)
Arayüzdeki butonlar işe yaramadığında, Meta Graph API’yi kullanarak bu bağlantıyı manuel olarak kurabiliriz. Bu işlem “el sıkışmayı” zorunlu kılar.
### Gereksinimler
* **WABA ID (WhatsApp Business Account ID):** Meta panelinde işletme hesabınızın ID’si.
* **System User Access Token:** Tam yetkili (admin) erişim jetonunuz.
### Adım Adım Uygulama
Terminalinizi açın ve aşağıdaki `curl` komutunu kendi bilgilerinizle düzenleyerek çalıştırın:
“`bash
curl -X POST “https://graph.facebook.com/v22.0/{WABA_ID}/subscribed_apps” \
-H “Authorization: Bearer {ACCESS_TOKEN}” \
-H “Content-Type: application/json” \
-d ‘{
“subscribed_fields”: [“messages”, “message_template_status_update”, “messages_preview”]
}’
“`
*(Not: `v22.0` yerine güncel API versiyonunu yazabilirsiniz, ancak eski versiyonlar da genellikle çalışır.)*
### Beklenen Sonuç
Komutu çalıştırdığınızda şu yanıtı almalısınız:
“`json
{
“success”: true
}
“`
Bu `true` yanıtını aldıktan sonra telefonunuzdan tekrar mesaj gönderin. %99 ihtimalle webhook’unuz artık tetiklenecektir! 🚀
## Kontrol Etmek İsterseniz (GET)
Aboneliğin gerçekten olup olmadığını kontrol etmek için şu komutu kullanabilirsiniz:
“`bash
curl -X GET “https://graph.facebook.com/v22.0/{WABA_ID}/subscribed_apps” \
-H “Authorization: Bearer {ACCESS_TOKEN}”
“`
Eğer çözümden önce bu komutu çalıştırırsanız listenin boş olduğunu veya alakasız uygulamaların olduğunu göreceksiniz. Çözümden sonra ise kendi uygulamanızın adını ve ID’sini göreceksiniz.
—
**Özet:** Meta arayüzü bazen yanıltıcı olabilir. Webhook yapılandırmasında her şey doğru görünmesine rağmen veri akmıyorsa, `subscribed_apps` API endpoint’i hayat kurtarır.