Hubungkan WhatsApp untuk mulai meneruskan pesan ke webhook dan membalas dengan AI.
WhatsApp
—
Memuat…
Webhook
—
Memuat…
Aktivitas
—
Total entri tersimpan
AI Balasan
—
Memuat…
Aktivitas terbaru
Memuat aktivitas…
Mulai cepat
1
Hubungkan WhatsApp
Scan QR dari menu WhatsApp.
2
Tambah URL webhook
Teruskan pesan ke aplikasi Anda.
3
Aktifkan AI
Isi API key dan biarkan AI membalas.
Koneksi WhatsApp
Tautkan nomor Anda dengan memindai QR code.
Memuat
Belum terhubung
Status: disconnected
Cara menghubungkan
Buka WhatsApp di ponsel Anda.
Masuk ke Perangkat tertaut → Tautkan perangkat.
Arahkan kamera ke QR code, tunggu hingga status berubah Connected.
Scan QR
Menunggu
QR belum tersedia
Tekan Hubungkan / QR lalu tunggu beberapa detik.
QR berlaku sekitar 20 detik. Jika kedaluwarsa, tekan tombol cek status untuk memuat ulang.
Tambah webhook
Setiap pesan WhatsApp akan dikirim sebagai JSON ke URL Anda.
HMAC-SHA256
Daftar webhook
0
Signature dikirim di header X-Webhook-Signature
Memuat webhook…
Pengaturan AI
Kompatibel dengan API OpenAI: OpenAI, OpenRouter, Groq, Ollama, dan lainnya.
Uji balasan AI
Pastikan key dan model bekerja sebelum mengaktifkan auto-reply.
Riwayat aktivitas
Pesan masuk, balasan AI, dan pengiriman webhook.
0 entri
Memuat aktivitas…
Profil saya
Perbarui nama, email, dan password akun Anda.
User
Total user
—
Admin
—
User biasa
—
Kelola pengguna
Admin dapat menambah, mengubah, dan menghapus akun.
Memuat pengguna…
Pengaturan
Preferensi aplikasi
Menu ini disiapkan untuk pengaturan lanjutan aplikasi Anda. Konten akan diisi
setelah spesifikasi dari Anda tersedia.
Akun Anda
Ringkasan akun yang sedang digunakan.
Nama
—
Email
—
Role
—
Terdaftar
—
Menunggu pengaturan
Beri tahu pengaturan apa yang ingin ditampilkan di sini — misalnya branding,
batas penggunaan, integrasi pembayaran, atau preferensi notifikasi.
Segera diisi
Dokumentasi
Panduan menjalankan aplikasi
Langkah lengkap untuk menjalankan Webhook AI di komputer lokal (localhost), di VPS,
maupun di shared hosting cPanel yang mendukung terminal dan Node.js. Semua perintah
bisa disalin dengan tombol Salin pada setiap blok kode.
1
Prasyarat
Pastikan semua kebutuhan berikut tersedia sebelum memulai.
Kebutuhan
Versi
Keterangan
Node.js
22+
Wajib untuk top-level await dan modul ESM modern.
MySQL / MariaDB
8+ / 10.6+
Database utama. Database webhook dibuat otomatis.
npm
10+
Biasanya sudah ikut terpasang bersama Node.js.
WhatsApp
nomor aktif
Untuk pairing lewat QR. Disarankan nomor khusus bot.
API key AI
opsional
Ollama Cloud, OpenAI, OpenRouter, Groq, atau Ollama lokal.
Cek versi Node dengan node -v. Jika masih di bawah v22,
pasang Node.js 22 LTS terlebih dahulu.
2
Menjalankan di komputer lokal
Cocok untuk mencoba, mengembangkan, atau memakai bot di jaringan sendiri.
1. Pasang Node.js 22+ dan pastikan MySQL/MariaDB berjalan (mis. XAMPP, Laragon, atau service MySQL).
2. Buka terminal di folder proyek, lalu pasang dependensi.
3. Jalankan aplikasi, lalu buka http://localhost:3000.
bash
cd webhook-ai # folder hasil clone / ekstrak ZIP
npm install
npm start
Perintah npm start otomatis membangun ulang
Tailwind CSS lalu menjalankan server. Saat pertama dijalankan, database
webhook beserta seluruh tabelnya dibuat
otomatis, folder auth_files/ dibuat, dan
data lama dari data/app.db (SQLite)
dimigrasikan bila tabel users masih kosong.
Kredensial default database: host 127.0.0.1, port
3306, user root, password kosong.
Ubah lewat variabel DB_HOST, DB_PORT,
DB_USER, DB_PASSWORD, dan
DB_NAME bila berbeda.
Akun demo
Email
admin@webhook.ai
Password
admin123
Mode pengembangan
Server restart otomatis saat file berubah. Tailwind belum dalam mode watch,
jadi jalankan npm run build:css setelah
mengubah class atau src/input.css.
bash
# Mode pengembangan (auto-restart)
npm run dev
# Hanya membangun ulang CSS
npm run build:css
Database MySQL dan folder auth_files/ berisi data penting.
Backup database secara rutin dan jangan hapus auth_files/
saat aplikasi sudah dipakai — menghapusnya berarti harus scan QR ulang.
3
Variabel environment
Semua opsional — nilai default sudah cocok untuk lokal.
Variabel
Default
Fungsi
PORT
3000
Port HTTP server.
DB_HOST
127.0.0.1
Host MySQL/MariaDB.
DB_PORT
3306
Port MySQL.
DB_USER
root
User database.
DB_PASSWORD
(kosong)
Password database.
DB_NAME
webhook
Nama database. Dibuat otomatis bila belum ada.
COOKIE_SECURE
(kosong)
Isi 1 bila diakses lewat HTTPS agar cookie sesi memakai flag Secure.
WA_LOG_LEVEL
warn
Level log Baileys: silent, warn, atau info.
Aplikasi membaca variabel langsung dari environment proses (tidak memakai file
.env otomatis). Set lewat shell, panel hosting,
atau file konfigurasi PM2.
3. Di ponsel: WhatsApp → Perangkat tertaut → Tautkan perangkat, lalu scan QR.
4. Status berubah menjadi Terhubung dan nomor tampil di sidebar.
Gunakan satu nomor khusus untuk bot. Hindari logout paksa dari ponsel, karena sesi
Baileys di auth_files/ akan tidak valid dan harus scan ulang.
Saat server restart, sesi dipulihkan otomatis dari file tersebut.
5
Mengatur balasan AI
Dua format API: Ollama /api/chat dan OpenAI-compatible.
Ollama Cloud
Base URL
https://ollama.com
Format API
Ollama (/api/chat)
Model
gemma4:31b
API key
Ollama API key
OpenAI / kompatibel
Base URL
https://api.openai.com/v1
Format API
OpenAI-compatible
Model
gpt-4o-mini
API key
sk-...
1. Buka AI Balasan, isi Base URL, Format API, Model AI, dan API key.
2. Simpan, lalu klik Kirim uji untuk memastikan model merespons.
3. Aktifkan toggle AI. Balasan otomatis hanya berlaku untuk chat pribadi, bukan grup.
Ollama lokal
ollama serve
ollama pull gemma3:4b
# Di dashboard:
# Base URL : http://localhost:11434
# Format API : Ollama (/api/chat)
# Model AI : gemma3:4b
# API key : ollama
6
Menerima webhook
Setiap pesan masuk dikirim sebagai JSON bertanda tangan HMAC-SHA256.
Tambahkan URL endpoint publik Anda di menu Webhook.
Header yang dikirim: X-Webhook-Event dan
X-Webhook-Signature: sha256=....
payload.json
{
"event": "message",
"from": "6281234567890@s.whatsapp.net",
"pushName": "Budi",
"isGroup": false,
"text": "Halo, produk ini masih ada?",
"timestamp": 1762500000000,
"webhookId": 1
}
Gunakan express.raw() agar signature dihitung dari body asli.
Jika body sudah diparse lalu di-JSON.stringify, urutan spasi
dan key bisa berubah sehingga signature tidak cocok.
sudo mysql -e "CREATE DATABASE webhook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'webhook'@'localhost' IDENTIFIED BY 'ganti-password';"
sudo mysql -e "GRANT ALL PRIVILEGES ON webhook.* TO 'webhook'@'localhost'; FLUSH PRIVILEGES;"
3 · Ambil kode dan uji manual
bash
cd /var/www
sudo git clone https://github.com/USERNAME/REPO.git webhook-ai
sudo chown -R $USER:$USER webhook-ai
cd webhook-ai
npm ci
npm run build:css
DB_USER=webhook DB_PASSWORD='ganti-password' npm start # uji, lalu Ctrl+C
4 · Jalankan permanen dengan PM2
bash
sudo npm install -g pm2
COOKIE_SECURE=1 DB_NAME=webhook DB_USER=webhook DB_PASSWORD='ganti-password' \
pm2 start src/server.js --name webhook-ai
pm2 save
pm2 startup # ikuti perintah yang muncul agar otomatis jalan saat boot
Jangan memakai mode cluster / lebih dari satu instance. Sesi Baileys hanya boleh
dijalankan oleh satu proses.
Hanya bisa dijalankan bila paket hosting menyediakan terminal (SSH) dan Node.js 22.
Syarat wajib
Menu Setup Node.js App (CloudLinux Passenger) atau Node.js selector di panel.
Terminal / SSH untuk npm install dan npm run build:css.
Node.js 22 atau lebih baru.
MySQL + user database dari cPanel.
Tidak akan jalan
Hosting PHP murni tanpa Node.js.
Tanpa terminal dan tanpa akses npm install.
Proses dimatikan saat idle — bot WhatsApp putus dan QR tidak muncul.
1 · Upload kode & pasang dependensi
bash
cd ~
git clone https://github.com/USERNAME/REPO.git webhook-ai # atau upload ZIP lewat File Manager
cd webhook-ai
npm install
npm run build:css
Simpan folder aplikasi di luar public_html (mis.
/home/user/webhook-ai) agar source code dan
auth_files/ tidak bisa diunduh publik.
2 · Buat database di cPanel
Buka MySQL® Databases, buat database
(mis. user_webhook) dan user-nya, lalu
Add User to Database → All Privileges.
Catat host (localhost), nama database, user, dan
password. Nama database & user di cPanel otomatis berawalan nama akun hosting.
Startup file wajib app.cjs: Passenger memuat startup file dengan
require(), sedangkan src/server.js
adalah ESM dengan top-level await. File app.cjs di root
proyek hanya meneruskan ke src/server.js.
4 · Jalankan & uji
bash
# Uji manual dari terminal sebelum lewat panel
DB_HOST=localhost DB_USER=user_webhook DB_PASSWORD='password-database' \
DB_NAME=user_webhook npm start
# Setelah didaftarkan di panel: klik Restart, lalu cek log
tail -n 50 ~/logs/webhook-ai.log
5 · Jaga proses tetap hidup
Passenger mematikan proses Node yang idle. Tambahkan cron setiap 5 menit agar aplikasi tetap
bangun sehingga koneksi WhatsApp tidak putus:
Folder auth_files/ (sesi WhatsApp) harus tetap berada di application
root agar tidak perlu scan QR ulang setelah restart. Backup berkala lewat File Manager atau cron.
9
Hosting cloud lain (Railway, Render, Fly.io)
Bisa, asalkan ada persistent disk dan hanya satu instance.
Wajib ada
Persistent volume untuk auth_files/ (sesi WhatsApp).
Database MySQL terkelola + env DB_*.
Proses long-running (bukan serverless).
Tepat 1 instance / matikan autoscaling.
Env COOKIE_SECURE=1.
Hindari
Vercel, Netlify Functions, AWS Lambda.
Platform yang tidur otomatis (scale to zero).
Filesystem ephemeral tanpa volume.
Cluster mode / banyak replika.
Pengaturan umum di panel hosting:
konfigurasi
Build command : npm ci && npm run build:css
Start command : node src/server.js
Port : ikuti PORT dari platform (otomatis terbaca)
Volume : mount ke folder auth_files/
Environment : COOKIE_SECURE=1 + DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME
Instance : 1 (tanpa autoscaling)
Railway: deploy dari GitHub, tambahkan
database MySQL dan Volume pada service, lalu isi mount path ke folder aplikasi. Railway
menyediakan domain HTTPS otomatis. Render:
pilih Web Service, tambahkan Disk, dan pastikan instance count 1.
Fly.io: gunakan
fly volumes create dan mount ke
/app/auth_files.
Jika volume tidak permanen, sesi WhatsApp hilang setiap deploy — bot harus dipindai
ulang. Database MySQL sebaiknya memakai layanan terkelola dengan backup otomatis.
10
Backup & update
Amankan database dan sesi WhatsApp secara berkala.
bash
# Backup database MySQL + sesi WhatsApp
mysqldump -u root -p webhook > backup-webhook-$(date +%F).sql
tar -czf backup-auth-$(date +%F).tar.gz auth_files
# Restore database
mysql -u root -p webhook < backup-webhook-2026-11-07.sql
pm2 restart webhook-ai
Update aplikasi
bash
cd /var/www/webhook-ai
git pull
npm ci
npm run build:css
pm2 restart webhook-ai --update-env
Backup juga bisa dijadwalkan dengan cron, misalnya setiap hari pukul 02.00:
Masalah yang paling sering muncul beserta solusinya.
Gagal terhubung ke MySQL
Pastikan service MySQL/MariaDB berjalan dan kredensial DB_HOST, DB_PORT, DB_USER, DB_PASSWORD benar. Error ECONNREFUSED berarti server database belum aktif.
QR tidak muncul
Pastikan server berjalan, lalu klik Hubungkan WhatsApp. Tunggu beberapa detik; status akan berubah menjadi Scan QR. Jika tetap kosong, restart server.
WhatsApp terputus terus
Jangan login/logout dari perangkat lain secara paksa. Hapus folder auth_files/user-<id> hanya jika ingin pairing ulang, lalu restart.
AI error 401 / 404
401 berarti API key salah atau kosong. 404 biasanya karena Base URL atau Format API tidak cocok — Ollama memakai /api/chat, OpenAI memakai /chat/completions.
Webhook tidak terkirim
Pastikan webhook berstatus aktif, URL memakai http(s)://, dan endpoint dapat diakses publik. Cek hasilnya di menu Aktivitas.
Perubahan tampilan tidak muncul
Jalankan npm run build:css lalu refresh browser dengan Ctrl + F5.
Port 3000 sudah dipakai
Jalankan dengan port lain: PORT=4000 npm start (Linux) atau $env:PORT=4000; npm start (PowerShell).