Logo
Dokumentasi API

Sambungkan WhatsApp ke Sistem Anda Sendiri

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.

1

Hubungkan Nomor WA

Scan QR di menu "Scan WA" seperti biasa — perangkat inilah yang nanti mengirim pesan lewat API.

2

Generate API Key

Buka halaman Profil, klik "Generate API Key". Simpan baik-baik — ini kunci rahasia akun Anda.

3

Panggil Endpoint-nya

Dari sistem/aplikasi Anda, kirim 1 request HTTP ke endpoint kami — pesan langsung terkirim ke WhatsApp tujuan.

Autentikasi

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.

Kirim Pesan WhatsApp

POST 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())

Cek Status Perangkat & Kredit

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.

GET 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
    }
  ]
}
GET 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
}

Kelola Koneksi Perangkat WhatsApp

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.

GET 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.

POST 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.

Contoh Integrasi Laravel — Halaman Scan QR Sendiri

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.

Melengkapi dengan Tombol "Putuskan Koneksi"

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.

Ide Penggunaan di Sistem Anda

Endpoint di atas cukup sederhana, tapi bisa jadi fondasi untuk banyak sekali kebutuhan notifikasi bisnis Anda. Beberapa contoh nyata yang bisa langsung Anda terapkan:

Notifikasi Transaksi Toko Online

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.

Kode OTP & Verifikasi Login

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.

Reminder Tagihan & Janji Temu

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.

Integrasi CRM/Helpdesk Internal

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.

Lihat Plugin Siap Pakai

Contoh Respons

200 OK Berhasil
{
  "ok": true,
  "message": "Pesan berhasil dikirim.",
  "sisa_kredit_blast": 49
}
4xx / 5xx Gagal
{
  "ok": false,
  "error": "Kredit Blast tidak cukup..."
}
Kode Arti
200Pesan berhasil dikirim
401API Key tidak valid / tidak disertakan
400Parameter `to`/`message` kosong, atau `device_id` tidak valid
402Kredit Blast habis — perlu upgrade paket
502Gagal kirim lewat WhatsApp (device terputus, dll)

Yang Sering Ditanyakan

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.

Siap sambungkan WhatsApp ke sistem Anda?

Daftar gratis, generate API Key, langsung integrasi hari ini juga.

Daftar Gratis Sekarang