Geçen ay İstanbul’da, tam öğle molasında, bir arkadaşım bana “WhatsApp’ta çalışan. Dışarıya veri saçmayan bir yapay zekâ botu yaptın mı hiç?” diye sordu. Durdum bir saniye. Açık konuşayım, o an kafamda gerçekten ampul yandı — çünkü mesele sadece “bot yapmak” değil; asıl iş, botun hafızalı olması, yerelde çalışması ve mesajları üçüncü taraf API’lere teslim etmemesi. İşin tadı da zaten tam burada başlıyor.
Bunu yaşayan biri olarak söyleyeyim, Bu yazıda sana böyle bir düzeni anlatacağım. Node.js ile WhatsApp’a bağlanan, Ollama üzerinden yerel model çalıştıran, SQLite ile konuşmaları unutmayan bir kurgu. Yani klasik “merhaba nasılsın” botlarından değil… Biraz daha ciddi bu. Biraz daha merak uyandırıcı. Ve evet, bayağı da kullanışlı.
Neden Yerel Bir WhatsApp Asistanı?
Size bir şey söyleyeyim, Bak şimdi, herkes AI bot yapabiliyor gibi görünüyor. Ama iş gerçek hayata gelince tablo değişiyor. Bulut tabanlı servisler hızlı; tamam, bunu kabul ediyorum. Fakat her mesajı dış servise göndermek bazı projelerde hem maliyet hem güvenlik açısından ciddi can sıkıyor — özellikle küçük ekiplerde bu his iyice belirginleşiyor. Fatura büyüyor, kontrol azalıyor, bir bakıyorsun ay sonu rakama inanamıyorsun.
Hmm, bunu nasıl anlatsamdı…
İtiraf edeyim, Ben benzer bir konuyu 2023’te Kadıköy’deki küçük bir ürün ekibinde test etmiştim. Basit müşteri destek otomasyonları için bile dış API çağrıları beklediğimden pahalıya patlamıştı. O zaman şunu fark ettim: eğer sohbet geçmişi uzun olacaksa. Kullanıcı verisi hassassa, yerel kurulum bazen tek mantıklı yol oluyor.
Bir de hız meselesi var tabi. Her istek internet üstünden gidip gelince gecikme artıyor. Lokal kurulumda ise model kendi makinenizde koşuyor. Cevap süresi daha öngörülebilir hale geliyor. Kağıt üstünde süper duran şeylerin çoğu pratikte tökezler ya… burada tersine hoş bir sürpriz var.
Peki neden?
Küçük startup için ne ifade ediyor?
Küçük bir startup’san ilk bakacağın şey maliyet olur. İkinci bakacağın şey esneklik — evet bilerek böyle söylüyorum çünkü çoğu ekip önce “AI olsun” diyor, sonra bütçe duvara tosluyor. Hızla.
Yerel model yaklaşımı özellikle prototip aşamasında çok iş görüyor; birkaç masaüstü bilgisayar veya mütevazı bir Linux sunucu başlangıç için yeterli olabilir. Ama dürüst olayım. Trafik artınca tek makine çabuk yorulur, bunu da hesaba katmak lazım (yanlış duymadınız)
Kurumsal tarafta neden daha farklı?
Büyük yapılarda mesele sadece performans değil. Denetim de var, kayıt tutma da var, yetkilendirme de var. Orada yerel kurgu sayesinde veri akışını kontrol etmek kolaylaşıyor, ama operasyon yükü de artıyor. Yani bedava peynir yok.
Yerel AI kurmak kulağa romantik geliyor ama asıl değerini üretimde gösteriyor; gizlilik kazanırsın, gecikmeyi düşürürsün, fakat bakım yükünü de sırtlanırsın.
Mimarinin Omurgası: Node.js + WPPConnect + Ollama
İşin bel kemiği üç parçadan oluşuyor diyebilirim (yanlış duymadınız). Node.js uygulamanın beyni gibi davranıyor; gelen WhatsApp mesajlarını alıp işlerken akışı yönetiyor. WPPConnect WhatsApp tarafına köprü kuruyor — yani sohbet trafiğini yakalayan kapı görevi görüyor.
Ollama ise ayrı hikaye. Modeli yerelde ayağa kaldırıp HTTP üzerinden konuşmanı sağlıyor. Ben bu tip sistemleri severim. Entegrasyon kısmı sadeleşiyor; ekstra SDK savaşlarına girmiyorsun, gereksiz bağımlılık yığmıyorsun, sistem temiz kalıyor.
İşin garibi, SQLite de unutulmamalı. Küçük görünür ama konuşma geçmişini saklamak için gayet işe yarar. Devasa veri ambarlarına gerek yoksa fazlasıyla yeterli — hatta bazen fazla bile gelir.
| Bileşen | Görev | Neden iyi? |
|---|---|---|
| Node.js | Sohbet akışını yönetir | Hafif ve event-driven yapı sağlar |
| WPPConnect | WhatsApp bağlantısı kurar | Piyasadaki en pratik köprülerden biri |
| Ollama | Lokal LLM çalıştırır | Dış API’ye ihtiyaç bırakmaz |
| SQLite | Sohbet hafızasını tutar | Küçük-orta ölçek için çok rahat işler çıkarır |
Sohbet Hafızası Neden Önemli?
Aynı şeyi tekrar eden botlardan hepimiz bıktık artık (şaşırtıcı ama gerçek). Hani soruyorsun, “dün bunu konuştuk mu?” diye, bota bakıyorsun boş boş duruyor. Kötü hissettiriyor. Sanki karşıdaki seni hiç dinlememiş gibi…
Garip gelecek ama, Ben bu konuda ilk testleri geçen yıl Ankara’da kendi yan projemde yapmıştım. Fark şu oldu: hafızasız botlar kısa süre etkileyici, göz boyuyor. Ama birkaç gün sonra değeri düşüyor. Senin adını hatırlamayan asistana kim niye geri dönsün ki? (ki bu çoğu kişinin gözünden kaçıyor) Daha fazla bilgi için AI’nin Sizi Alıntılaması İçin İçerik Nasıl Kurulur? yazımıza bakabilirsiniz. Daha fazla bilgi için RGAA’da %62 Otomasyon: Erişilebilirlikte Yeni Oyun Planı yazımıza bakabilirsiniz. Bu konuyla ilgili Butterfly CSS: 2026’da Dikkat Çeken Hafif Bir Seçenek yazımıza da göz atmanızı tavsiye ederim.
Durun, bir saniye.
Tarihsel bağlam değil ama pratik bağlam önemli
Yani, Burası kritik nokta. Chat geçmişini modele geri beslemek demek, yapay zekanın kullanıcıyı tanıyormuş gibi davranmasını sağlamak demek — fakat dikkat etmezsen prompt şişer, mesajlar uzar, girdi token sayısı kabarır. Maliyet yerine kaynak tüketimi derdi çıkar ortaya. Yani hafıza güzel şey, ama dozunda olmalı. PDF Dünyasında Bir Nefes: Ücretsiz ve Limitsiz Araçlar yazımızda bu konuya da değinmiştik.
- Kısa geçmiş: Hızlı cevap verir ama bağlam zayıflar. — bunu es geçmeyin
- Uzun geçmiş: Daha akıllıca görünür fakat performans düşebilir.
- Dengeli yaklaşım: Son birkaç mesaj + özet hafıza genelde en temiz çözümdür.
Kod Tarafında Asıl Köprü Nasıl Kuruluyor?
Meseleyi uzatmadan söyleyeyim. WhatsApp’tan gelen metni alıyorsun, bunu Ollama’ya gönderiyorsun, cevabı geri basıyorsun. Bu kadar. Aşağıdaki parça bunun sade hali: Daha fazla bilgi için yapay konusundaki yazımız yazımıza bakabilirsiniz.
const wppconnect = require('@wppconnect-team/wppconnect');
const axios = require('axios');
async function askOllama(prompt) {
const response = await axios.post('http://localhost:11434/api/generate', {
model: 'llama3',
prompt,
stream: false
});
return response.data.response;
}
wppconnect.create({ session: 'ai-session' })
.then((client) => {
client.onMessage(async (message) => {
const aiReply = await askOllama(message.body);
await client.sendText(message.from, aiReply);
});
});
Editör masasında bu kodu ilk gördüğümde — Nisan 2026’da Beyoğlu’nda kahve içerken — hemen not aldım çünkü sadelik gerçekten kıymetliydi. Karmaşık orkestrasyonlara girmeden çalışan sistemler bana hep daha sağlıklı geliyor (buna dikkat edin). Tabii bu örnek ham haliyle bırakılmaz; hata yönetimi, eşzamanlı istek sınırı ve loglama genelde eklenmeli.
Neye dikkat etmeli?
Eğer aynı anda çok kişi yazarsa tek thread üzerinde boğulabilirsin. Ciddi sorun bu. Bunun önüne geçmek için kuyruk sistemi veya basit rate limit koymak iyi fikir — aksi halde bot cevabı yetiştiremez, dedikodu yayılır, güler geçersin (buna dikkat edin)
Bir şey dikkatimi çekti: Bence en sık yapılan hata yalnızca modeli konuşturup gerisini unutmak. Oysa sağlam iş dediğin şey giriş doğrulaması, hata yakalama, prompt temizliği ve saklama politikasıyla birlikte gelir. Kısacası oyuncakla ürün arasındaki çizgi tam da buradan geçiyor.
Peki Güvenlik Tarafında Durum Ne?
Açık konuşayım, en büyük artılardan biri verinin dışarı çıkmaması. Ama bu sizi rehavete sokmasın. WA oturum dosyaları, tokens klasörü, database.db dosyası… bunların hepsi korunmalı. Erişim izni gevşekse lokal olmak tek başına kurtarmıyor.
MCP Sunucusu Güvende Değil haberini okurken düşündüğüm şey şuydu: geleneksel güvenlik refleksleri AI katmanında bazen yetmiyor. Burada da benzer mantık geçerli. Bot lokalde çalışıyor diye saldırıya kapalı sanmayalım. Evet, cazip ama eksikleri olan bir düzen bu.
Zayıf Noktalar da Var, Gizlemeye Gerek Yok
Hello world demek kolay. Zor olan uzun süre ayakta kalmak. Lokal modeller bazen beklediğin kadar hızlı olmuyor; özellikle CPU ile dönduruyorsan cevap süresi uzayabiliyor. Ben bunu geçen kış İzmir’de eski dizüstünde test ettim — sonuç? İlk dakika heyecan vericiydi, ondan sonra fan sesi başladı… Gerçek hayat böyle işte.
Beni biraz hayal kırıklığına uğratan nokta şu oldu: hafif modeller günlük kullanımda idare ederken karmaşık görevlerde dağıtabiliyor. Yani “tamamen yerel” fikri güzel, hatta bayağı çekici; fakat kalite beklentisi yüksekse donanımı ciddiye almak gerekiyor. GPU varsa rahatlersin. Yoksa sabretmen lazım.
Kime göre iyi? Kime göre erken?
Dürüst olmak gerekirse, Eğer hobiciysen ya da özel veriyle deney yapıyorsan bu proje cuk oturur. Fakat müşteri destek hattının tamamını buna emanet edeceksen önce pilot çalışma yapman şart. Enterprise seviyede loglama, gözlemlenebilirlik ve yedeklilik olmadan gemi su alır.
Daha İyi Hale Getirmek İçin Ne Eklenir?
Neyse, gelelim geliştirme listesinin en keyifli kısmına: kişilik katmanı, özetleme, moderasyon ve arka plan işleri. Sistem prompt’u ile bota “nasıl davranacağını” öğretmek mümkün — mesela resmi mi olsun, sıcak mı olsun, kısa mı cevap versin… bunlar işi başka yere taşıyor.
Masa başında not ettiğim iki öneri özellikle işe yaradı: ilki son N mesaj yerine dinamik özet kullanmak; ikincisi ise uzun sohbetlerde belli aralıklarla tarihçe sıkıştırması yapmak. Böylece hem context penceresi şişmiyor hem de bot hâlâ “bizi hatırlıyor” hissi veriyor. İlginç, değil mi? Ufak detay gibi durur ama kullanıcı deneyimini bayağı yükseltir.
Kullanıcı “beni hatırladı” dediği an proje tamamlanmış sayılmaz; aslında yeni başlamıştır.
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.



