Whatsapp Business API Hk.
-
Whatsapp Business API ile mesaj gönderip aynı zamanda webhook üzerinden mesajları dinlemeye çalışıyorum. Gerçekten Meta tarafındaki yapı inanılmaz karmaşık; günlerdir saçma sapan problemlerle uğraşıyorum. AI ile çözmeye çalıştım ama durum tam anlamıyla saç baş yoldurmalık.
Sorunum şu:
https://business.facebook.com/ tarafında “Numaralar” bölümünde ilgili telefon numaram görünüyor. Ancak https://developers.facebook.com/ tarafında numara görünmüyor.
Biraz araştırınca aşağıdaki endpoint üzerinden kontrol ettim: GET: https://graph.facebook.com/v25.0/xx/phone_numbers?access_token=xx bu servisten aşağıdaki cevabı alıyorum.
Bu durumu yaşayan ya da çözebilen oldu mu? Açıkçası whatsapp-web.js veya Baileys gibi unofficial çözümler kullanmak istemiyorum; hesap riskine girmek istemiyorum. Bu süreçle uğraşmış olan varsa yardımcı olabilir mi?
{ "data": [ { "verified_name": "xxxx", "code_verification_status": "NOT_VERIFIED", "display_phone_number": "+90 xxx xxx xx xx", "quality_rating": "UNKNOWN", "platform_type": "ON_PREMISE", "throughput": { "level": "NOT_APPLICABLE" }, "id": "xxx" } ], "paging": { "cursors": { "before": "aaaa", "after": "bbbb" } } } -
https://github.com/rmyndharis/OpenWA
bu işini görmez mi hocam, kullanmazsan bile ai a okut belki ilham gelir. -
https://business.facebook.com/latest/settings/business_info/
Bu sayfadaki bilgileri kontrol eder misin?
İşletme doğrulaması durumuDoğrulanmışAccess verification statusDoğrulanmışbunlar var mı?Bu sayfaya Hesap Araçları menüsü altında Telefon Numaraları menüsü var.Burda durum bağlandı diyor mu(Bu menüde ayarlar kısmında profil, otomasyon, mesaj ayarları gibi menüler de var)Token Almak İçinBurda ilgili kullanıcıya tıklaVarlık Ata dedikten sonra whatsapp hesabını varlık olarak atasonraBurdan ilgili kullanıcıyı seçtikten sonra Jeton Oluştur diyoruz. Bu bizim sonsuz süreli tokenimiz olacak.Bu arada whatsapp api ile mesaj gönderirken 24 saat kuralı var. 24 saat içinde biri sana mesaj yazmışsa ona 24 saat içinde serbest mesaj atabilirsin. Ancak ilk konuşmayı sen başlatacaksan veya 24 saat dolmuşsa o zaman sadece mesaj şablonlarından mesaj atabilirsin.Şablonlara da burdan ulaşabilirsinBenim çalışan kodlarımdan yapay zeka ya örnek bir kod üret dedim bunu verdi. Test için de kullanabilirsinhello_world şablonu varsayılan olarak gelir. Bu nedenle örneği bu şablon üzerinden verdim// Program.cs // Varsayılan "hello_world" template gönderme örneği (Cloud API) using System.Net.Http.Headers; using System.Text; using System.Text.Json; // Meta'dan alacağı bilgiler const string accessToken = "BURAYA_ACCESS_TOKEN"; const string phoneNumberId = "BURAYA_PHONE_NUMBER_ID"; const string to = "9053XXXXXXX"; // + olmadan, ülke koduyla using var http = new HttpClient(); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); var url = $"https://graph.facebook.com/v25.0/{phoneNumberId}/messages"; var payload = new { messaging_product = "whatsapp", to = to, type = "template", template = new { name = "hello_world", language = new { code = "en_US" } } }; var json = JsonSerializer.Serialize(payload); var content = new StringContent(json, Encoding.UTF8, "application/json"); var resp = await http.PostAsync(url, content); var respBody = await resp.Content.ReadAsStringAsync(); Console.WriteLine($"HTTP {(int)resp.StatusCode}"); Console.WriteLine(respBody);Sana mesaj gelebilmesi için de önce url doğrulaman lazım.Onun için deBurada oluşturduğun app e gidipWhatsapp -- Yapılandırma menüsüne gitmen lazım. Burda url onayı alman lazım.Örnek url doğrulama kodunu da veriyorum. (localhost ta url onayı için ngrok kullanabilirsin)// Program.cs // Webhook verify + gelen mesaj (POST) örneği using System.Text.Json; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); const string verifyToken = "BURAYA_VERIFY_TOKEN"; // 1) URL doğrulama app.MapGet("/webhook", (HttpRequest req) => { var mode = req.Query["hub.mode"].ToString(); var token = req.Query["hub.verify_token"].ToString(); var challenge = req.Query["hub.challenge"].ToString(); if (mode == "subscribe" && token == verifyToken) return Results.Ok(challenge); return Results.Forbid(); }); // 2) Gelen mesajları dinleme app.MapPost("/webhook", async (HttpRequest req, ILoggerFactory lf) => { var logger = lf.CreateLogger("WhatsappWebhook"); using var doc = await JsonDocument.ParseAsync(req.Body); try { var value = doc.RootElement .GetProperty("entry")[0] .GetProperty("changes")[0] .GetProperty("value"); // Mesaj durumu event'i (sent/delivered/read/failed) if (value.TryGetProperty("statuses", out var statuses)) { var s = statuses[0]; var status = s.GetProperty("status").GetString(); var msgId = s.GetProperty("id").GetString(); logger.LogInformation("Status event -> id:{id}, status:{status}", msgId, status); return Results.Ok(); } // Gelen mesaj event'i if (value.TryGetProperty("messages", out var messages)) { var m = messages[0]; var type = m.GetProperty("type").GetString(); var from = m.GetProperty("from").GetString(); var timestamp = m.GetProperty("timestamp").GetString(); string textBody = ""; if (type == "text" && m.TryGetProperty("text", out var textObj) && textObj.TryGetProperty("body", out var body)) { textBody = body.GetString() ?? ""; } logger.LogInformation( "Incoming message -> from:{from}, type:{type}, ts:{ts}, text:{text}", from, type, timestamp, textBody); return Results.Ok(); } logger.LogInformation("Webhook geldi ama messages/statuses yok."); return Results.Ok(); } catch (Exception ex) { logger.LogError(ex, "Webhook parse hatası"); return Results.Ok(); // Meta retry flood olmasın } }); app.Run("http://0.0.0.0:5000");
shock56 tarafından 19/May/26 00:39 tarihinde düzenlenmiştir -
@Silvanus hocam bunlar her 3rd party çözümler. Hesaplar kapanırsa sıkıntı olur direkt hizmet verdiğim müşterilerim kendileri. Bu sebeple bu yöntem pek sağlıklı değil.
@shock56 hocam doğrulamalar yapılmış zaten Telefon Numaraları bölümünde numaranın üzerinde Çevrimdışı yazıyor. Bknz https://imgur.com/a/3bJCX4Z Sorun da burda zaten. Bu numarayı kullanamıyorum sanırım sebebini anlamadım. Detayları çekince de telefon numarası ON_PREMISE olarak görünüyor bu sorunu çözmem gerekiyor. Whatsapp support mail attım da pek döneceklerini sanmıyorum.
İşin garibi bu numarayı silemiyorum da. Sil seçeneği yok yani.
EDİT: Yaptığım araştırmalarda API + Whatsapp Business APP Kullanılamıyormuş :D :D :D Neden böyle bir saçmalık var garip açıkcası. Baileys kullanmayı düşünüyorum ama sıkıntı olur mu emin değilim. Çok fazla mesaj gönderimi olmayacak sadece gelen mesajlara cevap verilecek. Reklam vb. şeyler yok ama cloud dışında kullandığım için numara ban yerse büyük sorun. Emin değilim kafam karıştı bu işi başka yollarla çözen yok mu?
MhmdAlmz tarafından 19/May/26 09:45 tarihinde düzenlenmiştir -
MhmdAlmz bunu yazdı
@Silvanus hocam bunlar her 3rd party çözümler. Hesaplar kapanırsa sıkıntı olur direkt hizmet verdiğim müşterilerim kendileri. Bu sebeple bu yöntem pek sağlıklı değil.
@shock56 hocam doğrulamalar yapılmış zaten Telefon Numaraları bölümünde numaranın üzerinde Çevrimdışı yazıyor. Bknz https://imgur.com/a/3bJCX4Z Sorun da burda zaten. Bu numarayı kullanamıyorum sanırım sebebini anlamadım. Detayları çekince de telefon numarası ON_PREMISE olarak görünüyor bu sorunu çözmem gerekiyor. Whatsapp support mail attım da pek döneceklerini sanmıyorum.
İşin garibi bu numarayı silemiyorum da. Sil seçeneği yok yani.
EDİT: Yaptığım araştırmalarda API + Whatsapp Business APP Kullanılamıyormuş :D :D :D Neden böyle bir saçmalık var garip açıkcası. Baileys kullanmayı düşünüyorum ama sıkıntı olur mu emin değilim. Çok fazla mesaj gönderimi olmayacak sadece gelen mesajlara cevap verilecek. Reklam vb. şeyler yok ama cloud dışında kullandığım için numara ban yerse büyük sorun. Emin değilim kafam karıştı bu işi başka yollarla çözen yok mu?
Baileys veya diğer hiç farketmez kişilere gönderimde whatsapp ın ticari modeli var ve anında 24 saat ban atıyor.
Ama sen mesaj yazanlara göndereceğini söylüyorsun. Bu durumu değiştirebilir.
Benim testlerimde hep reklam tarzı mesajlar attım ve en fazla 59 kişiye atabildim. Sonrasında ban yedim.
https://github.com/tulir/whatsmeow şu repoda güzel. Go ile yazıldığı için biraz daha performanslı gibi. -
@esinti hocam Ai entegrasyonu yapacağım aslında. Gelen mesaja ai cevap verecek. Yani bir mesaj girdisi olmak zorunda. Sohbet direkt biz tarafından başlamayacak. Bu durum sorun yaratır mı bilemiyorum. Metanın bu politikası aşırı saçmaymış.
-
MhmdAlmz bunu yazdı
@esinti hocam Ai entegrasyonu yapacağım aslında. Gelen mesaja ai cevap verecek. Yani bir mesaj girdisi olmak zorunda. Sohbet direkt biz tarafından başlamayacak. Bu durum sorun yaratır mı bilemiyorum. Metanın bu politikası aşırı saçmaymış.
Saçma değil hocam ticari modeli var adamın sana bedava ekmek yedirir mi?
Aşağıdakini de çok kullandım ben. webhook desteği de var. bir numara için ücretsiz kullanabilirsin. fazlası gerekirse ayrı ayrı dockerda ayağa kaldırırsın.
https://waha.devlike.pro/ -
esinti bunu yazdıMhmdAlmz bunu yazdı
@esinti hocam Ai entegrasyonu yapacağım aslında. Gelen mesaja ai cevap verecek. Yani bir mesaj girdisi olmak zorunda. Sohbet direkt biz tarafından başlamayacak. Bu durum sorun yaratır mı bilemiyorum. Metanın bu politikası aşırı saçmaymış.
Saçma değil hocam ticari modeli var adamın sana bedava ekmek yedirir mi?
Aşağıdakini de çok kullandım ben. webhook desteği de var. bir numara için ücretsiz kullanabilirsin. fazlası gerekirse ayrı ayrı dockerda ayağa kaldırırsın.
https://waha.devlike.pro/Saçma olan şu; Mesaj başına ödeme yapmak önemli değil. Cloud kullanınca uygulamayı kullanamamak saçma. Yoksa mesaj başına 0.005$ pek büyük bir para değil.
-
Vibe code ile baileys üzerinden yazdırdığım bir botum var. Bir yere takılmıyordu. Sıfırdan yazdırıp, eski baileys botlarının pluginlerini verip bunları implement et diyorum, benim bota uygun hale getiriyordu.
n8n ile de https://waha.devlike.pro/ şunu kullanıyordum
-
Hocam baileys i bir ara vardiya shift amiri olarak kullandım personele spam a düşmeyecek aralıklarla giriş çıkış yapmadıklarını hatırlatan admine de günde de 3 sefer toplu bilgi veren bir bot yazdırmıştım 2 ay bir fiil çalıştı ban yemedi sonra de aktif ettim farklı mücbir sebeplerden.
