Sistem Asisten Akademik & Knowledge Engine berbasis AI (Retrieval-Augmented Generation / RAG) untuk Universitas Terbuka (UT) yang berjalan full self-hosted di VPS Linux Ubuntu. Bot ini dapat merayap (crawl) mandiri dari situs resmi UT, mengindeks pengetahuan lokal, dan menjawab secara cerdas pertanyaan mahasiswa baik melalui perintah teks maupun bahasa alami (Natural Language Processing).
- Academic Crawler Engine: Merayap informasi penting, pengumuman terbaru, jadwal akademik, dan FAQ dari 9 situs resmi UT.
- Local Database & Cache: Semua data disimpan di local JSON database VPS. Tidak membutuhkan cloud database eksternal.
- TF-IDF Semantic Search: Melakukan pencarian tingkat relevansi tinggi secara lokal tanpa resource berat.
- AI RAG (Retrieval-Augmented Generation): Menghubungkan OpenAI API dengan konteks lokal agar jawaban asisten akurat dan anti-halusinasi.
- Web Monitoring Dashboard: Dashboard premium (glassmorphism dark mode) untuk memindai QR Code, memantau penggunaan RAM/CPU, statistik data, dan log terminal real-time.
- Low RAM Optimization: Dikonfigurasi khusus agar stabil berjalan di VPS berspesifikasi rendah (RAM 512MB - 1GB) menggunakan optimasi Puppeteer Chromium.
- Group Moderation & Welcome: Menyambut mahasiswa baru yang masuk grup, memblokir pengiriman link scam/iklan, serta fitur antrian cooldown agar anti-spam.
/src
/commands - Penanganan perintah bot (.menu, .ujian, dll)
/events - Lifecycle listener WhatsApp
/handlers - Message router & middleware cooldown
/middlewares - Validasi akses admin/owner & anti-link
/services - Integrasi RAG OpenAI & WhatsApp Client launcher
/crawler - Cheerio crawler engine situs UT
/knowledge - Algoritma pencarian semantik TF-IDF
/database - Engine localDb dengan pengaman file korup
/utils - Logger terpadu (pino/chalk) & tools backup
/scheduler - Pengaturan interval crawl berkala
/logs - File logs (app.log, crawler.log, error.log)
/storage
/db - JSON database (knowledge, faq, dll)
/knowledge - Cache data semantik
/backup - Folder penyimpanan backup database
/materials - Modul pembelajaran lokal (jika ada)
/scraped - Raw crawl output
/session - Penyimpanan session token login WhatsApp
/public - Static assets untuk Express Web Dashboard
WhatsApp-web.js berjalan di atas headless browser Puppeteer. VPS Ubuntu memerlukan paket dependensi Chrome agar Puppeteer tidak crash.
Jalankan perintah berikut di terminal VPS Anda:
sudo apt update && sudo apt upgrade -y
# Install dependensi GUI & browser untuk Puppeteer (tmpwatch diganti dengan tmpreaper di Ubuntu modern)
sudo apt install -y chromium-browser tmpreaper gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget curl git build-essentialGunakan NodeSource PPA untuk menginstal Node.js versi terbaru:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Verifikasi instalasi
node -v
npm -vPM2 digunakan untuk menjaga bot tetap berjalan 24 jam di background dan melakukan restart otomatis jika terjadi crash.
sudo npm install -y -g pm2Upload folder proyek ke VPS Anda (misalnya ke /var/www/BotWAUT) lalu masuk ke direktori tersebut:
cd /var/www/BotWAUT
npm installSalin contoh file .env.example ke .env:
cp .env.example .envSunting file .env menggunakan nano:
nano .envSesuaikan konfigurasi berikut:
PORT: Port web monitoring (default:3000).OWNER_NUMBER: Nomor WhatsApp admin utama bot tanpa tanda '+' (contoh:628123456789).OPENAI_API_KEY: Masukkan API Key OpenAI Anda untuk mengaktifkan fitur AI Pintar (RAG). Jika dikosongkan, bot akan bekerja dalam mode pencarian kata kunci lokal offline.WEB_DASHBOARD_PASSWORD: Password untuk login ke web monitoring dashboard.
npm run devGunakan PM2 agar aplikasi berjalan di background, tahan crash, dan membatasi konsumsi memori Puppeteer:
# Menjalankan bot via PM2
pm2 start ecosystem.config.js
# Melihat status bot di PM2
pm2 status
# Melihat log real-time
pm2 logs bot-wa-ut
# Mengatur agar PM2 otomatis berjalan saat VPS reboot/restart
pm2 startup
pm2 save- Buka browser Anda dan akses alamat IP VPS Anda beserta port yang diset (contoh:
http://192.168.1.100:3000). - Masukkan password dashboard yang telah Anda atur di
.env. - Dashboard akan menampilkan halaman utama dan memuat QR Code.
- Buka aplikasi WhatsApp di HP Anda -> ketuk menu Perangkat Tertaut -> Tautkan Perangkat -> Pindai QR Code di layar browser Anda.
- Bot akan bertransisi status menjadi Connected dan siap digunakan.
Untuk mencegah penyalahgunaan dan penyadapan oleh grup yang tidak dikehendaki, bot menggunakan sistem whitelist. Secara default, bot tidak akan merespon di dalam grup manapun sebelum diizinkan oleh Owner.
- Mengizinkan Grup (.addgroup):
- Masuk ke grup WhatsApp baru.
- Gunakan nomor owner Anda, lalu kirim pesan:
.addgroup - Bot akan merespon konfirmasi dan mulai aktif di grup tersebut.
- Menghapus Izin Grup (.delgroup):
- Ketik
.delgroupdi grup untuk menonaktifkan respon bot.
- Ketik
- Daftar Grup Aktif (.listgroups):
- Ketik
.listgroupsuntuk melihat daftar semua ID grup yang di-whitelist.
- Ketik
Jalankan skrip backup berikut untuk menduplikasi seluruh database lokal Anda ke folder /storage/backup:
node src/utils/backup.js --manualAtau Anda dapat mengetikkan perintah .backup langsung di obrolan admin WhatsApp ke nomor bot.
Jika ingin memulihkan data lama:
- Matikan proses bot:
pm2 stop bot-wa-ut. - Salin file
.jsondari folder backup pilihan Anda (misalnya/storage/backup/db-backup-YYYYMMDD-HHmmss/*) ke dalam folder aktif/storage/db/. - Jalankan kembali bot:
pm2 start bot-wa-ut.
Crawler akan berjalan otomatis setiap 6 jam secara default. Jika Anda ingin melakukan crawling paksa saat itu juga:
npm run crawlAtau ketik perintah .crawl di obrolan admin WhatsApp ke nomor bot, atau ketuk tombol Run Web Crawler Now di Web Dashboard.
Jika Anda melihat error seperti Error: Failed to launch the browser process!, ini karena Puppeteer kekurangan hak akses atau dependensi di VPS.
- Solusi: Pastikan Anda telah menginstal seluruh paket pendukung GUI Linux di bagian Instalasi Langkah 1.
- Jika Anda menjalankan VPS sebagai root, pastikan opsi
--no-sandboxterpasang di filesrc/services/whatsappClient.js(sudah dikonfigurasi secara default di proyek ini).
Jika WhatsApp bot sering memutus koneksi/minta scan ulang:
- Solusi 1: Hapus folder session yang rusak:
Lalu akses Web Dashboard untuk memindai ulang QR Code yang bersih.
pm2 stop bot-wa-ut rm -rf ./session pm2 start bot-wa-ut
- Solusi 2: Kurangi beban request berlebih. Cooldown per chat diatur sebesar 3 detik di file
.envuntuk mencegah deteksi spam dari pihak WhatsApp.
Karena Puppeteer membuka Chromium secara headless, penggunaan RAM dapat melonjak.
- Solusi: Proyek ini telah dipasang fitur PM2
max_memory_restart: "450M". PM2 akan mendeteksi jika memori bot menyentuh 450MB lalu me-restart proses secara aman di background tanpa merusak data sesi login.