Plesk Panelde Baileys ile WhatsApp Otomasyonu Kurma Rehberi

Plesk Panelde Baileys ile WhatsApp Otomasyonu Kurma Rehberi

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/baileys artı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:

  1. WhatsApp → Bağlı Cihazlar
  2. Cihaz Bağla
  3. 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

Galeri görseli
T

Site Yöneticisi

Merhaba! Ben Ramazan, Bir yazılım geliştiricisiyim.

💬 Yorumlar (0)

İlk yorumu siz yapın!

💬 Yorum Yap