Project ini adalah WhatsApp Gateway API berbasis Node.js menggunakan library @whiskeysockets/baileys. Mendukung multi-device, pengiriman pesan massal (bulk blast) dengan rotasi pengirim acak, serta pencatatan log pesan menggunakan SQLite.
//logs-view/docsnpm install
.env (opsional, jika tidak ada akan menggunakan default):PORT=10000
DEFAULT_API_KEY=wagw-secret-key
node app.js
pm2 start app.js --name wagw
docker build -t wagw .
docker run -d -p 10000:10000 --name wagw-container -v $(pwd)/sessions:/usr/src/app/sessions -v $(pwd)/.env:/usr/src/app/.env wagw
Note: Volume -v digunakan agar sesi login tidak hilang saat container di-restart dan konfigurasi .env terbaca.Konfigurasi server dilakukan melalui file .env.
| Variable | Default | Deskripsi |
|---|---|---|
PORT |
10000 |
Port aplikasi berjalan |
DEFAULT_API_KEY |
wagw-secret-key |
API Key default yang dibuat saat inisialisasi database |
AUTO_REPLY_WEBHOOK_URL |
(kosong) | URL webhook yang dipanggil WAGW setiap ada pesan masuk. Jika kosong, auto-reply dinonaktifkan. |
AUTO_REPLY_TIMEOUT_MS |
10000 |
Timeout (ms) menunggu respons dari webhook. |
AUTO_REPLY_FALLBACK_MESSAGE |
(kosong) | Pesan yang dikirim jika webhook gagal/timeout. Kosong = tidak ada balasan. |
Semua endpoint API (/wagateway/*) dilindungi oleh API Key.
Anda harus menyertakan API Key di Header atau Query Parameter pada setiap request.
x-api-key: [API_KEY_ANDA]?api_key=[API_KEY_ANDA]API Key Default: Lihat konfigurasi DEFAULT_API_KEY di .env (default: wagw-secret-key)
PENTING: API Key ini disimpan di database SQLite (
wagw.db) dalam tabelapi_keys. Anda disarankan untuk mengubahnya atau menambahkan key baru langsung melalui database.
Akses http://localhost:10000/ (sesuaikan port) di browser.
Endpoint: POST /wagateway/kirimpesan
Header:
x-api-key: wagw-secret-key
Content-Type: application/json
Body (JSON):
{
"sender": "admin1",
"number": "6281234567890",
"message": "Halo, ini pesan test"
}
Fitur ini akan mengirim pesan ke banyak nomor dengan menggunakan semua device yang terhubung secara acak. Mendukung pesan dinamis (personalisasi) berdasarkan data penerima.
Endpoint: POST /wagateway/blast
Header:
x-api-key: wagw-secret-key
Content-Type: application/json
Body (JSON):
{
"receiver": [
{ "number": "6281234567890", "nama": "Fatimah", "tanggal": "2023-08-01", "poli": "Umum" },
{ "number": "6281234567891", "nama": "Joko", "tanggal": "2023-08-02", "poli": "Gigi" }
],
"messages": [
"Halo {nama}, jadwal {poli} Anda pada tanggal {tanggal} sudah dikonfirmasi.",
"Hi {nama}, jangan lupa jadwal {poli} tanggal {tanggal} ya!"
],
"type": "text"
}
receiver: Array objek penerima. Wajib ada key number. Key lain (seperti nama, poli, dll) bisa digunakan sebagai variabel di dalam pesan.messages: Array variasi pesan. Sistem akan memilih satu secara acak. Gunakan {key} untuk menyisipkan data penerima.type: text, image, atau document. Jika media, tambahkan properti "url": "..." di level utama JSON.Akses http://localhost:10000/logs-view untuk melihat riwayat pesan.
Anda akan diminta memasukkan API Key untuk melihat data log demi keamanan.
WAGW mendukung auto-reply otomatis untuk pesan personal (1-on-1) yang masuk. Setiap kali ada pesan masuk, WAGW akan melakukan POST ke URL webhook yang Anda tentukan, lalu mengirimkan teks balasan yang dikembalikan oleh webhook tersebut.
Pesan masuk dari WA
│
▼
WAGW POST payload → Webhook URL Anda
│
▼
Webhook memproses & mengembalikan JSON {"reply": "..."}
│
▼
WAGW mengirim balasan ke pengirim
.envAUTO_REPLY_WEBHOOK_URL=https://yourdomain.com/webhook.php
AUTO_REPLY_TIMEOUT_MS=10000
AUTO_REPLY_FALLBACK_MESSAGE=Maaf, sistem kami sedang gangguan. Mohon tunggu sebentar.
WAGW melakukan POST dengan Content-Type: application/json:
{
"device_id": "admin1",
"from": "6281234567890@s.whatsapp.net",
"to": "6281234567890@s.whatsapp.net",
"push_name": "Nama Pengirim",
"message": "Halo",
"timestamp": 1713700000
}
| Field | Tipe | Keterangan |
|---|---|---|
device_id |
string | ID device WAGW yang menerima pesan |
from |
string | JID (nomor) pengirim pesan |
to |
string | JID tujuan (nomor device Anda) |
push_name |
string | Nama tampilan pengirim di WhatsApp |
message |
string | Isi teks pesan yang diterima |
timestamp |
number | Unix timestamp pesan |
Webhook Anda harus mengembalikan JSON. WAGW membaca field berikut (diprioritaskan berurutan):
| Response | Perilaku WAGW |
|---|---|
{"reply": "teks balasan"} |
✅ Mengirim balasan |
{"message": "teks balasan"} |
✅ Mengirim balasan |
{"text": "teks balasan"} |
✅ Mengirim balasan |
{} / kosong / null |
⛔ Tidak ada balasan |
Catatan: Auto-reply hanya aktif untuk chat personal (1-on-1). Pesan dari grup, broadcast, dan status diabaikan.
File contoh tersedia di examples/webhook.php. Fitur yang ada:
{} (tanpa balasan) jika tidak ada kata kunci yang cocokSalin file tersebut ke server PHP Anda, lalu atur AUTO_REPLY_WEBHOOK_URL di .env WAGW:
AUTO_REPLY_WEBHOOK_URL=https://yourdomain.com/webhook.php
Gunakan endpoint berikut untuk mengaktifkan/menonaktifkan auto-reply pada device tertentu tanpa restart server:
Aktifkan auto-reply:
POST /wagateway/auto-reply/enable
x-api-key: wagw-secret-key
Content-Type: application/json
{"device_id": "admin1"}
Nonaktifkan auto-reply:
POST /wagateway/auto-reply/disable
x-api-key: wagw-secret-key
Content-Type: application/json
{"device_id": "admin1"}
File database: wagw.db
message_logsid: ID uniksender: ID Pengirimrecipient: Nomor Tujuanmessage: Isi Pesan (JSON stringified)status: 'success' atau 'failed: [error message]'timestamp: Waktu pengirimanapi_keysid: ID unikkey: Kunci APIdescription: Deskripsi pemilik kuncicreated_at: Waktu pembuatan