Gembok Bill adalah sistem manajemen RTRWNet terintegrasi yang menggabungkan WhatsApp Gateway dengan portal admin web untuk mengelola layanan internet secara komprehensif. Aplikasi ini dirancang khusus untuk RTRWNet yang membutuhkan solusi all-in-one untuk manajemen pelanggan, billing, monitoring, dan notifikasi.
- π§ WhatsApp Bot Gateway - Interface perintah via WhatsApp dengan role-based access control
- π Web Portal Admin - Dashboard admin yang lengkap dengan versioning system
- π³ Sistem Billing Terintegrasi - Manajemen tagihan dan pembayaran
- π³ Payment Gateway - Integrasi Midtrans, Xendit, Tripay
- π GenieACS Management - Monitoring dan manajemen perangkat ONU/ONT
- π οΈ Mikrotik Management - Manajemen PPPoE dan Hotspot
- π± Portal Pelanggan - Self-service untuk pelanggan
- π Monitoring Real-time - PPPoE, RX Power, dan sistem dengan grafik terpisah
- π Notifikasi Otomatis - WhatsApp notifications
- π Trouble Ticket System - Manajemen gangguan via WhatsApp dan web
- π₯ Role-Based Access Control - Super Admin, Admin, Technician, Customer
- π± WhatsApp Commands - Trouble report, PPPoE management, version info
- π¨ Enhanced UI - Traffic graphs separation, high bandwidth support, admin settings cleanup
admin
- Menu bantuan khusus admincekstatus [nomor]
- Cek status pelanggan berdasarkan nomorgantissid [nomor] [ssid_baru]
- Ganti SSID WiFi pelangganreboot [nomor]
- Reboot perangkat pelangganstatus
- Cek status sistem dan koneksirestart
- Restart layanan WhatsAppversion
- Tampilkan informasi versi aplikasiinfo
- Tampilkan informasi sistem lengkap
teknisi
- Menu bantuan khusus teknisitrouble
- Lihat daftar laporan gangguanstatus [id]
- Cek status laporan gangguan tertentuupdate [id] [status] [catatan]
- Update status laporanselesai [id] [catatan]
- Tandai laporan selesaiaddpppoe [user] [pass] [profile] [ip] [info]
- Tambah user PPPoEeditpppoe [user] [field] [value]
- Edit field user PPPoEdelpppoe [user] [alasan]
- Hapus user PPPoEpppoe [filter]
- List semua user PPPoEcheckpppoe [user]
- Cek status user PPPoErestartpppoe [user]
- Restart koneksi user PPPoE
menu
- Menu umum untuk semua userbilling
- Menu bantuan untuk fitur billingcekstatus [nomor]
- Cek status pelanggan (terbatas)version
- Tampilkan informasi versi aplikasi
help trouble
- Bantuan untuk fitur trouble reporthelp pppoe
- Bantuan untuk fitur PPPoE management
- Node.js v18+ (direkomendasikan v20+)
- npm atau yarn
- GenieACS API access
- Mikrotik API access
- WhatsApp number untuk bot
- Database SQLite (built-in)
# Install git jika belum ada
apt install git curl -y
# Clone repository
git clone https://github.com/alijayanet/gembok-bill
cd gembok-bill
# Install semua dependencies
npm install
Edit file settings.json
dengan pengaturan yang sesuai:
{
"app_version": "2.1.0",
"version_name": "WhatsApp Modular + Role System",
"version_date": "2025-01-27",
"version_notes": "Added technician role, trouble report & PPPoE WhatsApp commands",
"build_number": "20250127.001",
"app_name": "GEMBOK",
"company_header": "GEMBOK",
"footer_info": "Info Hubungi : 081947215703",
"admins.0": "6281947215703",
"admin_enabled": "true",
"admin_username": "admin",
"admin_password": "admin",
"technician_numbers.0": "6283807665111",
"technician_numbers.1": "6282218094111",
"technician_group_id": "120363029715729111@g.us",
"genieacs_url": "http://192.168.8.89:7557",
"genieacs_username": "admin",
"genieacs_password": "admin",
"mikrotik_host": "192.168.8.1",
"mikrotik_port": "8728",
"mikrotik_user": "admin",
"mikrotik_password": "admin",
"main_interface": "ether1-ISP",
"pppoe_monitor_enable": "true",
"whatsapp_session_path": "./whatsapp-session",
"whatsapp_keep_alive": "true",
"whatsapp_restart_on_error": "true",
"whatsapp_log_level": "silent",
"pppoe_monitor_interval": "60000",
"pppoe_notifications.enabled": "true",
"pppoe_notifications.loginNotifications": "true",
"pppoe_notifications.logoutNotifications": "true",
"pppoe_notifications.includeOfflineList": "true",
"pppoe_notifications.maxOfflineListCount": "20",
"pppoe_notifications.monitorInterval": "60000",
"rx_power_warning": "-40",
"rx_power_critical": "-45",
"rx_power_notification_enable": "true",
"rx_power_notification_interval": "300000",
"customerPortalOtp": "false",
"otp_length": "4",
"otp_expiry_minutes": "5",
"server_port": "3003",
"server_host": "localhost",
"secret_key": "gembok-digital-network",
"reconnect_interval": "5000",
"log_level": "info",
"logo_filename": "logo.png",
"payment_gateway": {
"active": "midtrans",
"midtrans": {
"enabled": true,
"production": false,
"merchant_id": "G123456789",
"client_key": "SB-Mid-client-123456789",
"server_key": "SB-Mid-server-123456789"
},
"xendit": {
"enabled": false,
"production": false,
"api_key": "xnd_public_development_123456789",
"callback_token": "xnd_callback_token_123456789"
},
"tripay": {
"enabled": false,
"production": false,
"api_key": "DEV-123456789",
"private_key": "private_key_123456789",
"merchant_code": "T12345"
}
},
"payment_accounts": {
"bank_transfer": {
"bank_name": "Bank BRI",
"account_number": "1234-5678-9012-3456",
"account_name": "GEMBOK"
},
"cash": {
"office_address": "Jl. Contoh No. 123, Kota, Provinsi",
"office_hours": "08:00 - 17:00 WIB"
}
}
}
# Jalankan script untuk setup database billing
node scripts/add-payment-gateway-tables.js
Development Mode:
npm run dev
Production Mode:
npm start
Dengan PM2:
# Install PM2 jika belum ada
npm install -g pm2
# Start aplikasi
pm2 start app.js --name gembok-bill
# Monitor aplikasi
pm2 monit
# View logs
pm2 logs gembok-bill
-
Siapkan 2 nomor WhatsApp:
- 1 nomor untuk bot (akan scan QR code)
- 1 nomor untuk admin (untuk mengirim perintah)
-
Scan QR Code yang muncul di terminal untuk login WhatsApp bot
-
Test dengan perintah:
status
ataumenu
- Portal Pelanggan:
http://ipserver:3003
- Admin Dashboard:
http://ipserver:3003/admin/login
- Login Admin: Username dan password yang dikonfigurasi di
settings.json
- π Dashboard Billing - Statistik real-time
- π₯ Manajemen Pelanggan - CRUD pelanggan dengan PPPoE username
- π¦ Manajemen Paket - Paket internet dengan harga
- π Manajemen Invoice - Buat, edit, hapus tagihan
- π° Manajemen Pembayaran - Tracking pembayaran
- π Auto Invoice - Generate tagihan otomatis
- π³ Payment Gateway - Integrasi Midtrans, Xendit, Tripay
- π± WhatsApp Notifications - Notifikasi tagihan dan pembayaran
Aplikasi mendukung 3 payment gateway populer di Indonesia:
- Midtrans - Payment gateway terpopuler
- Xendit - Payment gateway enterprise
- Tripay - Payment gateway lokal
Setup Payment Gateway:
- Akses
/admin/billing/payment-settings
- Pilih gateway yang aktif
- Masukkan API keys
- Test koneksi
- Aktifkan production mode
menu
- Menampilkan menu bantuanstatus
- Cek status perangkatrefresh
- Refresh data perangkatgantiwifi [nama]
- Ganti nama WiFigantipass [password]
- Ganti password WiFiinfo
- Informasi layananspeedtest
- Test kecepatan internet
devices
- Daftar perangkatcekall
- Cek semua perangkatcek [nomor]
- Cek status ONUcekstatus [nomor]
- Cek status pelangganadmincheck [nomor]
- Cek perangkat admingantissid [nomor] [ssid]
- Ubah SSIDgantipass [nomor] [pass]
- Ubah passwordreboot [nomor]
- Restart ONUfactory reset [nomor]
- Reset factoryrefresh
- Refresh data perangkattag [nomor] [tag]
- Tambah tag pelangganuntag [nomor] [tag]
- Hapus tagtags [nomor]
- Lihat tagsaddtag [device_id] [nomor]
- Tambah tag perangkataddppoe_tag [pppoe_id] [nomor]
- Tambah tag dengan id pppoeadminssid [nomor] [ssid]
- Admin ubah SSIDadminrestart [nomor]
- Admin restart ONUadminfactory [nomor]
- Admin factory resetconfirm admin factory reset [nomor]
- Konfirmasi factory reset
interfaces
- Daftar interfaceinterface [nama]
- Detail interfaceenableif [nama]
- Aktifkan interfacedisableif [nama]
- Nonaktifkan interfaceipaddress
- Alamat IProutes
- Tabel routingdhcp
- DHCP leasesping [ip] [count]
- Test pinglogs [topics] [count]
- Log Mikrotikfirewall [chain]
- Status firewallusers
- Daftar semua userprofiles [type]
- Daftar profileidentity [nama]
- Info routerclock
- Waktu routerresource
- Info resourcereboot
- Restart routerconfirm restart
- Konfirmasi restart
vcr [user] [profile] [nomor]
- Buat voucherhotspot
- User hotspot aktifpppoe
- User PPPoE aktifoffline
- User PPPoE offlineaddhotspot [user] [pass] [profile]
- Tambah useraddpppoe [user] [pass] [profile] [ip]
- Tambah PPPoEsetprofile [user] [profile]
- Ubah profiledelhotspot [username]
- Hapus user hotspotdelpppoe [username]
- Hapus user PPPoEaddpppoe_tag [user] [nomor]
- Tambah tag PPPoEmember [username] [profile] [nomor]
- Tambah memberlist
- Daftar semua userremove [username]
- Hapus user (generic)addadmin [nomor]
- Tambah nomor adminremoveadmin [nomor]
- Hapus nomor admin
otp [nomor]
- Kirim OTPstatus
- Status sistemlogs
- Log aplikasirestart
- Restart aplikasidebug resource
- Debug resourcecheckgroup
- Cek status groupsetadmin [nomor]
- Set nomor adminsettechnician [nomor]
- Set nomor teknisisetheader [teks]
- Set header pesansetfooter [teks]
- Set footer pesansetgenieacs [url] [user] [pass]
- Set GenieACSsetmikrotik [host] [port] [user] [pass]
- Set Mikrotikadmin
- Menu adminhelp
- Bantuan perintahya/iya/yes
- Konfirmasi yatidak/no/batal
- Konfirmasi tidakaddwan [interface]
- Tambah WAN
info wifi
- Info WiFi pelangganinfo
- Info layanangantiwifi [ssid]
- Ganti nama WiFigantipass [password]
- Ganti password WiFispeedtest
- Test kecepatandiagnostic
- Diagnostik perangkathistory
- Riwayat perangkatmenu
- Menu utamafactory reset
- Reset factory (pelanggan)confirm factory reset
- Konfirmasi factory reset
Jika ada error seperti:
Error sending message: Error: item-not-found
warn: Skipping invalid WhatsApp number: 6283807665111
Solusi:
-
Jalankan Script Perbaikan Otomatis:
node scripts/fix-technician-config.js
-
Cek Status Group:
- Kirim perintah WhatsApp:
checkgroup
- Akan menampilkan status group dan nomor teknisi
- Kirim perintah WhatsApp:
-
Perbaiki Manual:
- Buka Admin Settings
- Update nomor teknisi dengan format:
628xxxxxxxxxx
- Pastikan group ID berformat:
120363029715729111@g.us
- Tambahkan bot ke group teknisi
- β
628xxxxxxxxxx
- β
08xxxxxxxxxx
- β
+628xxxxxxxxxx
- β
120363029715729111@g.us
- β
120363029715729111
- β
group-120363029715729111
-
Invalid API Key:
- Pastikan API key benar dan aktif
- Cek status akun di dashboard payment gateway
- Test koneksi di
/admin/billing/payment-settings
-
Webhook Error:
- Pastikan URL webhook benar
- Cek firewall dan port
- Verifikasi signature di webhook handler
- Refactoring WhatsApp Module: Memisahkan
whatsapp.js
(5923 baris) menjadi modul-modul yang lebih kecil dan maintainable whatsapp-core.js
: Core utilities, admin validation, dan state managementwhatsapp-commands.js
: Command handlers untuk semua perintah WhatsAppwhatsapp-message-handlers.js
: Message routing dan role-based access controlwhatsapp-new.js
: Main orchestrator untuk koneksi dan event handling
- Super Admin: Akses penuh ke semua fitur
- Admin: Akses ke fitur admin dan teknisi
- Technician: Akses khusus untuk fitur teknisi
- Customer: Akses terbatas untuk fitur pelanggan
- Perintah
trouble
: Lihat daftar laporan gangguan - Perintah
status [id]
: Cek status laporan tertentu - Perintah
update [id] [status] [catatan]
: Update status laporan - Perintah
selesai [id] [catatan]
: Tandai laporan selesai - Perintah
catatan [id] [catatan]
: Tambah catatan ke laporan - Perintah
help trouble
: Bantuan untuk fitur trouble report
- Perintah
addpppoe [user] [pass] [profile] [ip] [info]
: Tambah user PPPoE baru - Perintah
editpppoe [user] [field] [value]
: Edit field user PPPoE - Perintah
delpppoe [user] [alasan]
: Hapus user PPPoE - Perintah
pppoe [filter]
: List semua user PPPoE - Perintah
checkpppoe [user]
: Cek status user PPPoE - Perintah
restartpppoe [user]
: Restart koneksi user PPPoE - Perintah
help pppoe
: Bantuan untuk fitur PPPoE
admin
: Menu bantuan khusus adminteknisi
: Menu bantuan khusus teknisimenu
: Menu umum untuk semua userbilling
: Menu bantuan untuk fitur billing
- WhatsApp Commands:
version
: Tampilkan informasi versi aplikasiinfo
: Tampilkan informasi sistem lengkap
- Web Admin Display:
- Version info di sidebar admin
- Version info di footer aplikasi
- Company name dan build number
- Internet Traffic Graph Separation:
- Grafik Download (RX) terpisah
- Grafik Upload (TX) terpisah
- Grafik Combined Overview
- Support bandwidth >1Gbps dan >500Mbps
- Status traffic: Ultra High, Very High, High, Medium, Low, Idle
- Admin Settings Cleanup:
- Hide version info fields (sudah ada di sidebar/footer)
- Hide technical/sensitive fields
- Keep admin/technician numbers visible for easy editing
- Informational alerts untuk field yang disembunyikan
- Company Name: Diubah dari "ALIJAYA DIGITAL NETWORK" ke "GEMBOK"
- App Name: "GEMBOK" (dari settings.json)
- Consistent branding di semua interface
config/
βββ whatsapp-core.js # Core utilities & validation
βββ whatsapp-commands.js # Command handlers
βββ whatsapp-message-handlers.js # Message routing
βββ whatsapp-new.js # Main orchestrator
βββ whatsapp-trouble-commands.js # Trouble report commands
βββ whatsapp-pppoe-commands.js # PPPoE management commands
βββ version-utils.js # Version display utilities
βββ help-messages.js # Help message definitions
βββ whatsapp.js # Original (backup)
- Modular Architecture: Setiap modul memiliki tanggung jawab spesifik
- Dependency Injection: WhatsApp core diinjeksi ke command handlers
- Error Handling: Improved error handling dan logging
- Code Reusability: Functions yang dapat digunakan ulang
- Testing Support: Isolated testing untuk setiap modul
- Role Validation: Validasi role sebelum eksekusi command
- Input Sanitization: Sanitasi input untuk mencegah injection
- Access Control: Pembatasan akses berdasarkan role
{
"app_version": "2.1.0",
"version_name": "WhatsApp Modular + Role System",
"version_date": "2025-01-27",
"version_notes": "Added technician role, trouble report & PPPoE WhatsApp commands",
"build_number": "20250127.001",
"app_name": "GEMBOK",
"company_header": "GEMBOK",
"technician_numbers.0": "6283807665111",
"technician_numbers.1": "6282218094111"
}
- Admin Numbers:
admins.0
,admins.1
,admins.2
- Technician Numbers:
technician_numbers.0
,technician_numbers.1
,technician_numbers.2
- Dynamic Role Detection: Otomatis mendeteksi role berdasarkan nomor
- Backup file
whatsapp.js
yang lama - Update
settings.json
dengan field baru - Restart aplikasi untuk menggunakan modul baru
- Test fitur WhatsApp dan web admin
- Rename
whatsapp.js
menjadiwhatsapp-new.js
- Rename
whatsapp_backup.js
menjadiwhatsapp.js
- Restart aplikasi
- Admin commands:
admin
,cekstatus
,gantissid
,reboot
,status
,restart
- Technician commands:
teknisi
,trouble
,addpppoe
,editpppoe
,delpppoe
- Customer commands:
menu
,billing
,cekstatus
- Version commands:
version
,info
- Version display di sidebar dan footer
- Traffic graph separation dan high bandwidth support
- Admin settings cleanup dan field visibility
- Role-based access control
docs/WHATSAPP_MODULAR_README.md
: Comprehensive guide untuk arsitektur modulardocs/TROUBLE_REPORT_WHATSAPP.md
: Dokumentasi fitur trouble reportdocs/PPPOE_WHATSAPP.md
: Dokumentasi fitur PPPoE managementdocs/WEB_ADMIN_VERSIONING.md
: Dokumentasi fitur versioning
- WhatsApp Bot Gateway dengan perintah dasar
- Web Portal Admin dengan dashboard
- Sistem Billing terintegrasi
- Payment Gateway (Midtrans, Xendit, Tripay)
- GenieACS Management
- Mikrotik Management
- Customer Portal
- Monitoring Real-time
- Notifikasi otomatis
- Trouble Ticket System
- Akses: Semua fitur aplikasi
- Perintah WhatsApp: Semua admin commands
- Web Admin: Full access ke semua halaman
- Konfigurasi: Dapat mengubah semua settings
- Akses: Fitur admin dan teknisi
- Perintah WhatsApp: Admin commands + technician commands
- Web Admin: Access ke dashboard, billing, mikrotik, genieacs
- Konfigurasi: Dapat mengubah operational settings
- Akses: Fitur teknisi dan monitoring
- Perintah WhatsApp: Technician commands + basic customer commands
- Web Admin: Limited access (monitoring, trouble reports)
- Konfigurasi: Read-only access ke settings
- Akses: Fitur pelanggan terbatas
- Perintah WhatsApp: Basic customer commands
- Web Admin: Customer portal only
- Konfigurasi: Tidak ada akses
{
"admins.0": "6281947215703", // Super Admin
"admins.1": "6287764444430", // Additional Admin 1
"admins.2": "6281234567890" // Additional Admin 2
}
{
"technician_numbers.0": "6283807665111", // Technician 1
"technician_numbers.1": "6282218094111", // Technician 2
"technician_numbers.2": "6281234567891" // Technician 3
}
Feature | Super Admin | Admin | Technician | Customer |
---|---|---|---|---|
WhatsApp Admin Commands | β | β | β | β |
WhatsApp Technician Commands | β | β | β | β |
WhatsApp Customer Commands | β | β | β | β |
Web Admin Dashboard | β | β | β | β |
Billing Management | β | β | β | β |
Mikrotik Management | β | β | β | β |
GenieACS Management | β | β | β | β |
Settings Management | β | β | β | β |
Trouble Report Management | β | β | β | β |
Customer Portal | β | β | β | β |
gembok-bill/
βββ app.js # File utama aplikasi
βββ package.json # Dependencies dan scripts
βββ settings.json # Konfigurasi aplikasi
βββ config/ # Modul konfigurasi
β βββ whatsapp.js # WhatsApp bot handler (original)
β βββ whatsapp-new.js # WhatsApp bot handler (modular)
β βββ whatsapp-core.js # Core utilities & validation
β βββ whatsapp-commands.js # Command handlers
β βββ whatsapp-message-handlers.js # Message routing
β βββ whatsapp-trouble-commands.js # Trouble report commands
β βββ whatsapp-pppoe-commands.js # PPPoE management commands
β βββ version-utils.js # Version display utilities
β βββ help-messages.js # Help message definitions
β βββ genieacs.js # GenieACS API
β βββ mikrotik.js # Mikrotik API
β βββ billing.js # Billing system
β βββ paymentGateway.js # Payment gateway manager
β βββ logger.js # Logging system
β βββ settingsManager.js # Settings management
βββ routes/ # Express routes
β βββ adminAuth.js # Admin authentication
β βββ adminDashboard.js # Dashboard routes
β βββ adminBilling.js # Billing management
β βββ adminGenieacs.js # GenieACS management
β βββ adminMikrotik.js # Mikrotik management
β βββ adminHotspot.js # Hotspot management
β βββ adminSetting.js # Settings management
β βββ customerPortal.js # Customer portal
β βββ payment.js # Payment gateway routes
β βββ troubleReport.js # Trouble ticket system
βββ views/ # EJS templates
β βββ admin/ # Admin views
β β βββ billing/ # Billing pages
β β βββ ...
β βββ customer/ # Customer views
β βββ partials/ # Shared components
βββ public/ # Static files
β βββ css/
β βββ js/
β βββ img/
βββ data/ # Database files
βββ logs/ # Log files
βββ scripts/ # Utility scripts
βββ whatsapp-session/ # WhatsApp session files
- Separated Traffic Graphs:
- Download (RX): Grafik terpisah untuk traffic download
- Upload (TX): Grafik terpisah untuk traffic upload
- Combined Overview: Grafik gabungan untuk overview
- High Bandwidth Support:
- Support hingga >1Gbps dan >500Mbps
- Auto-scaling untuk berbagai range bandwidth
- Format otomatis: bps, Kbps, Mbps, Gbps
- Traffic Status Indicators:
- Ultra High: >1Gbps (Red)
- Very High: >500Mbps (Red)
- High: >100Mbps (Orange)
- Medium: >10Mbps (Blue)
- Low: >1Mbps (Gray)
- Idle: <1Mbps (Gray)
- Sidebar Version Panel:
- Version number dan build number
- Release date dan company info
- Version badge dengan styling
- Footer Version Row:
- Version name dan build info
- Release date dan notes
- Consistent dengan sidebar
- Visible Fields:
- Admin dan technician numbers
- Company info dan branding
- Operational settings
- Business configurations
- Hidden Fields:
- Version info (sudah ada di sidebar/footer)
- Technical/internal settings
- API keys dan sensitive data
- System file paths
- Informational Alerts: Penjelasan mengapa field disembunyikan
- Field Labels: Label yang jelas dan informatif
- Categorized Settings: Pengelompokan berdasarkan fungsi
- Easy Navigation: Interface yang intuitif
- Mobile-First: Optimized untuk mobile devices
- Bootstrap 5: Modern UI framework
- Custom CSS: Styling yang konsisten
- Icon Integration: Bootstrap Icons untuk visual appeal
- Company Name: "GEMBOK" branding
- Color Scheme: Consistent color palette
- Typography: Readable font choices
- Layout: Clean dan organized interface
Untuk berkontribusi pada proyek ini:
- Fork repository
- Buat branch fitur baru (
git checkout -b feature/AmazingFeature
) - Commit perubahan (
git commit -m 'Add some AmazingFeature'
) - Push ke branch (
git push origin feature/AmazingFeature
) - Buat Pull Request
- Gunakan ESLint untuk code formatting
- Tulis unit tests untuk fitur baru
- Update dokumentasi untuk perubahan
- Ikuti conventional commits
Distributed under the ISC License. See LICENSE
for more information.
- π± Telegram Group: https://t.me/alijayaNetAcs
- π’ Telegram Channel: https://t.me/alijayaNetwork
- πΊ YouTube: https://www.youtube.com/shorts/qYJFQY7egFw
- π¬ Issues: GitHub Issues
- π WhatsApp Support: 081947215703
Rekening Donasi Untuk Pengembangan:
- Bank: BRI
- No. Rekening: 4206 01 003953 531
- Atas Nama: WARJAYA
- Info: 081947215703 GEMBOK
Jangan lupa untuk mengkonfigurasi file settings.json
terlebih dahulu sebelum menjalankan aplikasi!
Aplikasi ini dikembangkan untuk keperluan ISP dan membutuhkan konfigurasi yang tepat untuk berfungsi dengan baik. Pastikan semua kredensial API dan pengaturan sudah benar sebelum deployment ke production.
Made with β€οΈ by GEMBOK Team