Baileys Nedir? Neden Chromium'dan Üstündür?
WhatsApp otomasyonu denince akla ilk gelen araçlardan biri whatsapp-web.js'dir. Ancak bu kütüphane arka planda bir Chromium tarayıcısı açar; bu da sunucu kaynaklarını ciddi ölçüde tüketir. Baileys ise tamamen farklı bir yaklaşım benimser:
- whatsapp-web.js: Node.js → Puppeteer → Chromium → WhatsApp Web
- Baileys: Node.js → WebSocket → WhatsApp Sunucuları
Baileys, WhatsApp'ın kendi web protokolünü taklit ederek doğrudan sunucularla WebSocket üzerinden iletişim kurar. Tarayıcı yoktur, ekstra RAM yoktur. Özellikle Plesk tabanlı paylaşımlı ya da VPS ortamlarda bu fark çok kritiktir.
Aktif ve güncel paket:@whiskeysockets/baileys— Orijinal@adiwajsing/baileysartık bakımsız durumdadır.
Sistem Gereksinimleri
- Ubuntu 20.04 / 22.04 (Plesk kurulu VPS)
- Node.js v18+ (önerilen: v20 LTS)
- PM2 (process manager)
- Nginx reverse proxy (Plesk üzerinden yapılandırılacak)
- En az 512MB RAM (Baileys sayesinde Chromium'a gerek yok)
Adım 1: Node.js ve PM2 Kurulumu
SSH ile sunucunuza bağlanın ve aşağıdaki komutları çalıştırın:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs build-essential python3
node -v # v20.x.x görünmeli
npm -v
npm install -g pm2
pm2 startup
Adım 2: Proje Klasörünü Oluşturma
Plesk ortamında web kök dizini genellikle şu yapıdadır:
mkdir -p /var/www/vhosts/alanadi.com/httpdocs/whatsapp-gateway
cd /var/www/vhosts/alanadi.com/httpdocs/whatsapp-gateway
Proje içindeki temel klasör yapısı şöyle olmalıdır:
whatsapp-gateway/
├── baileys/
│ └── manager.js # Baileys bağlantı yöneticisi
├── routes/
│ ├── auth.js # Giriş, kayıt, API key
│ ├── whatsapp.js # Mesaj gönderme endpoint'leri
│ └── admin.js # Yönetici paneli route'ları
├── middleware/
│ └── auth.js # JWT doğrulama
├── db/
│ ├── index.js # Ana SQLite veritabanı
│ └── userDb.js # Kullanıcı başına ayrı DB
├── sessions/ # Baileys session dosyaları
├── public/
│ ├── login.html
│ ├── dashboard.html
│ └── admin.html
├── .env
├── server.js
├── ecosystem.config.js
└── package.json
Adım 3: Bağımlılıkları Yükleme
npm init -y
npm install @whiskeysockets/baileys better-sqlite3 express jsonwebtoken bcryptjs express-rate-limit morgan dotenv qrcode uuid
Önemli: better-sqlite3 native addon içerdiği için build-essential ve python3 paketlerinin kurulu olması gerekir. Yukarıdaki ilk adımda bunlar kurulmuştu.
Adım 4: Baileys Manager — Çok Oturumlu Yapı
Baileys'in en güçlü özelliği birden fazla WhatsApp hesabını aynı anda yönetebilmesidir. Her kullanıcı kendi sessions/userId klasöründe oturum bilgisini saklar:
const { makeWASocket, useMultiFileAuthState, DisconnectReason } = require('@whiskeysockets/baileys')
const clients = {} // { userId: socket }
async function connectUser(userId, onQR, onConnected) {
const { state, saveCreds } = await useMultiFileAuthState(`sessions/${userId}`)
const sock = makeWASocket({
auth: state,
printQRInTerminal: false,
browser: ['WhatsApp Gateway', 'Chrome', '1.0.0']
})
sock.ev.on('connection.update', ({ qr, connection, lastDisconnect }) => {
if (qr) onQR(qr) // QR'ı frontend'e SSE ile ilet
if (connection === 'open') onConnected(userId)
if (connection === 'close') {
const code = lastDisconnect?.error?.output?.statusCode
if (code !== DisconnectReason.loggedOut) {
connectUser(userId, onQR, onConnected) // Otomatik yeniden bağlan
}
}
})
sock.ev.on('creds.update', saveCreds)
clients[userId] = sock
return sock
}
async function sendMessage(userId, phone, text) {
const sock = clients[userId]
if (!sock) throw new Error('Kullanıcı bağlı değil')
await sock.sendMessage(`${phone}@s.whatsapp.net`, { text })
}
Adım 5: .env Dosyası Yapılandırması
PORT=4500
NODE_ENV=production
JWT_SECRET=buraya-en-az-64-karakterlik-rastgele-string
ADMIN_EMAIL=admin@siteniz.com
ADMIN_PASSWORD=GucluSifre123!
ADMIN_USERNAME=admin
Güçlü bir JWT secret üretmek için:
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
Adım 6: PM2 ile Üretime Alma
ecosystem.config.js dosyasını oluşturun:
module.exports = {
apps: [{
name: 'whatsapp-gateway',
script: 'server.js',
instances: 1,
exec_mode: 'fork',
watch: false,
max_memory_restart: '512M',
env_production: {
NODE_ENV: 'production',
PORT: 4500
},
log_date_format: 'YYYY-MM-DD HH:mm:ss',
error_file: 'logs/error.log',
out_file: 'logs/out.log'
}]
}
pm2 start ecosystem.config.js --env production
pm2 save
pm2 status
Adım 7: Plesk'te Nginx Reverse Proxy Ayarı
Plesk panelinde şu yola gidin: Alan Adı → Apache & Nginx Ayarları → Ek Nginx Direktifleri
location / {
proxy_pass http://127.0.0.1:4500;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400s; # SSE için uzun timeout
proxy_send_timeout 86400s;
}
SSE (Server-Sent Events) için önemli: QR kodları tarayıcıya anlık iletmek için SSE kullanılır. Nginx'in bu bağlantıları kesmemesi için proxy_read_timeout değerini mutlaka yüksek tutun.
Adım 8: SSL Sertifikası ve Plesk Çakışması
Plesk otomatik olarak nginx.conf dosyasını yönetir ve Let's Encrypt yenilemelerinde dosyanızı ezebilir. Bunu önlemek için:
# Nginx config'i kilitle (Plesk ezmesin)
chattr +i /etc/nginx/conf.d/whatsapp-gateway.conf
Alternatif olarak, Plesk'in kendi "Ek Direktifler" alanını kullanmak her zaman daha güvenlidir; Plesk bu alanı korur.
Adım 9: WhatsApp Bağlantısı ve QR Okutma
Sistem çalıştığında kullanıcı paneline giriş yapıp "Yeni Oturum Başlat" butonuna tıklar. Sistem SSE üzerinden anlık QR kod yayınlar. Kullanıcı telefonundan:
- WhatsApp → Bağlı Cihazlar
- Cihaz Bağla
- QR kodu tarayın
Bağlantı kurulduktan sonra oturum bilgileri sessions/userId/ klasörüne kaydedilir. Sunucu yeniden başlasa bile oturum otomatik devam eder.
Adım 10: API ile Mesaj Gönderme
Bağlantı kurulduktan sonra herhangi bir uygulamadan API üzerinden mesaj gönderebilirsiniz:
curl -X POST https://wa.siteniz.com/api/whatsapp/send \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{"phone": "905001234567", "message": "Merhaba!"}'
PHP entegrasyonu için:
<?php
$ch = curl_init('https://wa.siteniz.com/api/whatsapp/send');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '905001234567',
'message' => 'Merhaba!'
])
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Sık Karşılaşılan Sorunlar
| Sorun | Çözüm |
|---|---|
better-sqlite3 derlenemiyor |
apt-get install build-essential python3 |
| QR tarandıktan hemen düşüyor | Sunucu saati doğru mu? timedatectl ile kontrol et |
| PM2 yeniden başlatmada session gideri | sessions/ klasörü doğru izinlerde mi? chmod 700 sessions/ |
| Nginx SSE bağlantısı kesiliyor | proxy_read_timeout 86400s eklendi mi? |
| Plesk nginx.conf'u eziyor | Direktifleri Plesk arayüzündeki "Ek Direktifler" alanına yaz |
Sonuç
Baileys kullanarak Plesk tabanlı bir VPS'e güçlü, hafif ve çok kullanıcılı bir WhatsApp otomasyon sistemi kurabilirsiniz. Chromium gerektirmediği için kaynak tüketimi son derece düşüktür. Kurulum tamamlandığında sisteminiz; QR kod ile oturum açma, otomatik yeniden bağlanma, API üzerinden mesaj gönderme ve çok oturumlu kullanım gibi özellikleri destekler.
Kullandığım paket sürümleri: @whiskeysockets/baileys ^6.x, Node.js v20 LTS, PM2 ^5.x
💬 Yorumlar (0)
İlk yorumu siz yapın!
💬 Yorum Yap