Kirim pesan WhatsApp otomatis langsung dari website, aplikasi, atau sistem internal Anda — tanpa perlu buka dashboard ini sama sekali. Cukup 1 API Key & 1 request HTTP.
Daftar gratis lalu generate API Key di halaman Profil untuk mulai integrasi.
Scan QR di menu "Scan WA" seperti biasa — perangkat inilah yang nanti mengirim pesan lewat API.
Buka halaman Profil, klik "Generate API Key". Simpan baik-baik — ini kunci rahasia akun Anda.
Dari sistem/aplikasi Anda, kirim 1 request HTTP ke endpoint kami — pesan langsung terkirim ke WhatsApp tujuan.
Setiap request wajib menyertakan API Key pribadi Anda. Ada 3 cara — pakai salah satu saja, pilih yang paling cocok dengan sistem Anda:
1. Header Authorization (disarankan)
Authorization: Bearer API_KEY_ANDA
2. Field api_key di body JSON (untuk endpoint POST)
{ "api_key": "API_KEY_ANDA", "to": "...", "message": "..." }
3. Query string ?api_key= (untuk endpoint GET)
?api_key=API_KEY_ANDA
⚠️ Kalau selalu mendapat error "API Key tidak valid" padahal key sudah benar — kemungkinan besar hosting tempat sistem Anda berjalan menyaring/menghapus header Authorization sebelum sampai ke server kami (ini kebijakan hosting, di luar kendali kode Anda maupun kami). Solusinya: pakai cara #2 atau #3 di atas — kirim api_key langsung di body/query string, dijamin tetap berhasil karena tidak bergantung header sama sekali.
Dapatkan/generate API Key di halaman Profil setelah login. API Key bersifat rahasia — jangan taruh di kode frontend/JS yang bisa dilihat publik, taruh di server Anda saja.
https://ruangnotif.web.id/api/v1/kirim-pesan
Mengirim satu pesan teks WhatsApp lewat perangkat Anda yang sedang Terhubung. Tiap pesan memotong 1 Kredit Blast dari akun Anda (sama seperti fitur Blast di dashboard).
Parameter (JSON body)
| Nama | Tipe | Wajib | Keterangan |
|---|---|---|---|
to |
string | ✅ Ya | Nomor tujuan, format `62xxxxxxxxxx` (boleh pakai spasi/strip, otomatis dibersihkan) |
message |
string | ✅ Ya | Isi pesan yang mau dikirim |
device_id |
number | Opsional | ID perangkat spesifik (lihat di Scan WA). Kalau kosong, otomatis pakai perangkat pertama yang Terhubung |
Contoh Kode
curl -X POST https://ruangnotif.web.id/api/v1/kirim-pesan \
-H "Authorization: Bearer API_KEY_ANDA" \
-H "Content-Type: application/json" \
-d '{
"to": "6281234567890",
"message": "Halo, ini pesan dari sistem kami!"
}'
<?php
$ch = curl_init('https://ruangnotif.web.id/api/v1/kirim-pesan');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer API_KEY_ANDA',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'to' => '6281234567890',
'message' => 'Halo, ini pesan dari sistem kami!',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
const response = await fetch('https://ruangnotif.web.id/api/v1/kirim-pesan', {
method: 'POST',
headers: {
'Authorization': 'Bearer API_KEY_ANDA',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '6281234567890',
message: 'Halo, ini pesan dari sistem kami!'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://ruangnotif.web.id/api/v1/kirim-pesan',
headers={'Authorization': 'Bearer API_KEY_ANDA'},
json={
'to': '6281234567890',
'message': 'Halo, ini pesan dari sistem kami!'
}
)
print(response.json())
Dua endpoint pelengkap — cek dulu apakah nomor WhatsApp masih online, dan berapa sisa kredit/saldo, sebelum sistem Anda mengirim pesan. Cocok dipakai sebagai validasi otomatis di aplikasi Anda sendiri.
https://ruangnotif.web.id/api/v1/status-device
Daftar semua perangkat WhatsApp di akun Anda beserta status koneksinya (Terhubung/Belum). Tidak memotong kredit apa pun.
curl https://ruangnotif.web.id/api/v1/status-device \ -H "Authorization: Bearer API_KEY_ANDA"
Contoh Respons
{
"ok": true,
"devices": [
{
"device_id": 12,
"nama": "WA Utama",
"nomor": "6281234567890",
"status": "Terhubung",
"terhubung": true
}
]
}
https://ruangnotif.web.id/api/v1/cek-saldo
Sisa Saldo Akun dan kredit Blast/Schedule/Chatbot — cocok ditampilkan di dashboard aplikasi Anda sendiri, atau buat validasi sebelum kirim massal.
curl https://ruangnotif.web.id/api/v1/cek-saldo \ -H "Authorization: Bearer API_KEY_ANDA"
Contoh Respons
{
"ok": true,
"saldo_akun": 25000,
"kredit_blast": 480,
"kredit_schedule": 20,
"kredit_chatbot": 15
}
Dua endpoint ini menyalin persis fungsi tombol Scan QR dan Putuskan Koneksi di halaman Scan WA — berguna kalau Anda ingin bangun panel kelola perangkat sendiri di sistem Anda, tanpa perlu buka dashboard ini.
https://ruangnotif.web.id/api/v1/generate-qr
Ambil QR code untuk menghubungkan perangkat WhatsApp baru (atau yang sedang terputus). Tampilkan gambar `qr_image` yang dikembalikan ke pengguna Anda untuk di-scan lewat aplikasi WhatsApp di HP.
Parameter (Query String)
| Nama | Wajib | Keterangan |
|---|---|---|
device_id |
Opsional | ID perangkat spesifik. Kalau akun cuma punya 1 perangkat, boleh dikosongkan (otomatis pakai itu). |
curl "https://ruangnotif.web.id/api/v1/generate-qr?device_id=12" \ -H "Authorization: Bearer API_KEY_ANDA"
Contoh Respons
{
"ok": true,
"device_id": 12,
"is_demo": false,
"qr_image": "data:image/png;base64,iVBORw0KGgo...",
"status": "Belum Terhubung",
"phone_number": null
}
💡 Kalau perangkat sudah berhasil di-scan, `status` otomatis berubah jadi "Terhubung" dan `phone_number` terisi — panggil ulang endpoint ini tiap beberapa detik (polling) untuk mendeteksi kapan proses scan berhasil, sama seperti yang dilakukan halaman Scan WA.
https://ruangnotif.web.id/api/v1/putuskan-koneksi
Putuskan koneksi WhatsApp perangkat (logout paksa) — data perangkatnya TIDAK terhapus, tinggal panggil generate-qr lagi kapan saja untuk sambungkan ulang.
Parameter (JSON body)
| Nama | Wajib | Keterangan |
|---|---|---|
device_id |
✅ Ya | ID perangkat yang mau diputuskan koneksinya |
curl -X POST https://ruangnotif.web.id/api/v1/putuskan-koneksi \
-H "Authorization: Bearer API_KEY_ANDA" \
-H "Content-Type: application/json" \
-d '{ "device_id": 12 }'
Contoh Respons
{
"ok": true,
"message": "Koneksi WhatsApp \"WA Utama\" berhasil diputuskan. Bisa scan QR ulang kapan saja."
}
⚠️ Aksi ini langsung memutus sesi WhatsApp aktif — pesan yang sedang dalam antrean (Blast/Schedule) ke perangkat ini akan gagal terkirim sampai disambungkan ulang. Gunakan dengan hati-hati, terutama kalau dipanggil otomatis dari sistem Anda.
Bangun halaman "Hubungkan WhatsApp" di website Laravel Anda sendiri, ditenagai endpoint generate-qr di atas. Alurnya: tampilkan gambar QR → polling tiap beberapa detik untuk cek status → otomatis pindah tampilan begitu status jadi "Terhubung".
1. Route (routes/web.php)
Route::get('/hubungkan-whatsapp', [WhatsAppController::class, 'tampilQr']);
Route::get('/hubungkan-whatsapp/cek-status', [WhatsAppController::class, 'cekStatus']);
2. Controller (app/Http/Controllers/WhatsAppController.php)
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class WhatsAppController extends Controller
{
// Simpan di file .env Laravel Anda, JANGAN hardcode di kode:
// WAGATEWAY_BASE_URL=https://ruangnotif.web.id/ // WAGATEWAY_API_KEY=API_KEY_ANDA
public function tampilQr()
{
return view('whatsapp.scan');
}
// Dipanggil berulang oleh JS (polling) dari Blade view di bawah
public function cekStatus()
{
$response = Http::get(config('services.wagateway.base_url') . '/api/v1/generate-qr', [
'api_key' => config('services.wagateway.api_key'),
// 'device_id' => 12, // opsional, kalau akun punya lebih dari 1 perangkat
]);
if ($response->failed()) {
return response()->json(['ok' => false, 'error' => 'Gagal menghubungi RuangNotif.'], 502);
}
return response()->json($response->json());
}
}
3. Tambahkan ke config/services.php
'wagateway' => [
'base_url' => env('WAGATEWAY_BASE_URL'),
'api_key' => env('WAGATEWAY_API_KEY'),
],
4. View (resources/views/whatsapp/scan.blade.php)
<div class="text-center">
<div id="wadahQr">
<img id="gambarQr" src="" alt="QR Code" class="mx-auto w-64 h-64 hidden">
<p id="teksMuat">Memuat QR Code...</p>
</div>
<div id="wadahTerhubung" class="hidden">
<p class="text-green-600 font-bold">✅ WhatsApp berhasil terhubung!</p>
<p id="teksNomor"></p>
</div>
</div>
<script>
let timerPolling = null;
async function cekStatusQr() {
const res = await fetch('/hubungkan-whatsapp/cek-status');
const data = await res.json();
if (!data.ok) return; // coba lagi di polling berikutnya
if (data.status === 'Terhubung') {
clearInterval(timerPolling);
document.getElementById('wadahQr').classList.add('hidden');
document.getElementById('wadahTerhubung').classList.remove('hidden');
document.getElementById('teksNomor').textContent = 'Nomor: ' + data.phone_number;
return;
}
// Masih "Belum Terhubung" -> tampilkan/refresh gambar QR-nya
if (data.qr_image) {
document.getElementById('teksMuat').classList.add('hidden');
const img = document.getElementById('gambarQr');
img.src = data.qr_image;
img.classList.remove('hidden');
}
}
cekStatusQr(); // panggil sekali di awal
timerPolling = setInterval(cekStatusQr, 4000); // lalu tiap 4 detik cek ulang
</script>
💡 QR Code WhatsApp berlaku sekitar 20-60 detik lalu kadaluarsa — makanya polling di atas terus mengambil gambar terbaru tiap 4 detik, otomatis dapat QR baru kalau yang lama sudah basi, sampai akhirnya user berhasil scan.
Supaya user Anda juga bisa memutus koneksi WhatsApp langsung dari halaman yang sama (mis. kalau mau ganti nomor) — tambahkan route, method controller, dan tombol berikut.
1. Tambahkan route (routes/web.php)
Route::post('/hubungkan-whatsapp/putuskan', [WhatsAppController::class, 'putuskanKoneksi']);
2. Tambahkan method di WhatsAppController
public function putuskanKoneksi()
{
$response = Http::post(config('services.wagateway.base_url') . '/api/v1/putuskan-koneksi', [
'api_key' => config('services.wagateway.api_key'),
'device_id' => 12, // ganti sesuai Device ID akun Anda (lihat halaman Scan WA)
]);
if ($response->failed()) {
return response()->json(['ok' => false, 'error' => 'Gagal memutus koneksi.'], 502);
}
return response()->json($response->json());
}
3. Tambahkan tombol di Blade view (di dalam #wadahTerhubung)
<div id="wadahTerhubung" class="hidden">
<p class="text-green-600 font-bold">✅ WhatsApp berhasil terhubung!</p>
<p id="teksNomor"></p>
<button onclick="putuskanKoneksi()" class="text-red-600 font-semibold mt-3">Putuskan Koneksi</button>
</div>
<script>
async function putuskanKoneksi() {
if (!confirm('Yakin putuskan koneksi WhatsApp ini?')) return;
const res = await fetch('/hubungkan-whatsapp/putuskan', {
method: 'POST',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
'Content-Type': 'application/json',
},
});
const data = await res.json();
if (data.ok) {
alert(data.message); // "Koneksi WhatsApp berhasil diputuskan..."
location.reload(); // muat ulang halaman -> otomatis tampil QR baru lagi
} else {
alert('Gagal: ' + data.error);
}
}
</script>
💡 Jangan lupa Blade layout Anda punya <meta name="csrf-token" content="{{ csrf_token() }}"> di bagian <head> — itu proteksi CSRF bawaan Laravel untuk request fetch()/AJAX dari JavaScript.
Endpoint di atas cukup sederhana, tapi bisa jadi fondasi untuk banyak sekali kebutuhan notifikasi bisnis Anda. Beberapa contoh nyata yang bisa langsung Anda terapkan:
Panggil endpoint kirim pesan tepat setelah status pesanan berubah (dibayar, dikemas, dikirim) di sistem e-commerce Anda sendiri — pelanggan dapat kabar instan tanpa perlu cek email.
Ganti SMS OTP yang mahal dengan WhatsApp — generate kode 6 digit di sistem Anda, kirim lewat endpoint ini, jauh lebih murah dan tingkat keterbacaannya lebih tinggi.
Jadwalkan cron job di sistem Anda sendiri untuk memanggil endpoint ini H-1 sebelum jatuh tempo tagihan, appointment klinik, atau reservasi — kurangi lupa & no-show pelanggan.
Punya sistem tiket, CRM, atau ERP sendiri? Sambungkan supaya tim Anda otomatis dapat notifikasi WhatsApp saat ada tiket baru, lead masuk, atau approval yang perlu ditindaklanjuti.
Tidak mau menulis kode sendiri?
Pakai plugin resmi WooCommerce & WHMCS kami — tinggal pasang, tanpa perlu sentuh API sama sekali.
{
"ok": true,
"message": "Pesan berhasil dikirim.",
"sisa_kredit_blast": 49
}
{
"ok": false,
"error": "Kredit Blast tidak cukup..."
}
| Kode | Arti |
|---|---|
200 | Pesan berhasil dikirim |
401 | API Key tidak valid / tidak disertakan |
400 | Parameter `to`/`message` kosong, atau `device_id` tidak valid |
402 | Kredit Blast habis — perlu upgrade paket |
502 | Gagal kirim lewat WhatsApp (device terputus, dll) |
Berapa biaya per panggilan API?
Setiap pesan yang berhasil terkirim memotong 1 Kredit Blast dari akun Anda — sama persis dengan biaya fitur Blast manual di dashboard. Tidak ada biaya tambahan khusus API.
Apakah bisa kirim gambar/dokumen lewat API ini?
Endpoint publik ini saat ini khusus pesan teks. Untuk lampiran file, gunakan fitur Schedule di dashboard.
Apakah API Key bisa diganti kalau bocor?
Bisa — buka halaman Profil, klik "Generate Ulang API Key". API Key lama otomatis tidak berlaku lagi begitu Anda generate yang baru.
Daftar gratis, generate API Key, langsung integrasi hari ini juga.
Daftar Gratis Sekarang