/Dokumentasi API

Panduan Pengguna

Pelajari cara menggunakan WADUH mulai dari registrasi hingga pengiriman pesan massal.

Daftar & Login

Untuk mulai menggunakan WADUH, Anda perlu membuat akun terlebih dahulu.

  1. Buka halaman Daftar dan isi nama, email, serta password (minimal 8 karakter). Nomor WhatsApp bersifat opsional.
  2. Setelah mendaftar, akun otomatis mendapat Plan Free yang langsung aktif.
  3. Login menggunakan email dan password yang sudah didaftarkan.
  4. Setelah login, Anda akan diarahkan ke Dashboard.
  5. Update profil (nama & nomor WA) kapan saja dari menu Pengaturan → Profil.
Setiap akun mendapat API Key unik yang bisa dilihat di halaman Pengaturan. API Key digunakan untuk integrasi REST API. Gunakan Regenerate Key jika API Key perlu diperbarui.

Menghubungkan Sesi WhatsApp

Sesi WhatsApp adalah koneksi antara server dan nomor WhatsApp Anda. Satu sesi = satu nomor.

  1. Buka menu Sesi WhatsApp di sidebar dashboard.
  2. Klik Tambah Sesi dan beri nama identifikasi (misal: main atau cs-team).
  3. Klik tombol QR Code pada sesi yang baru dibuat.
  4. Buka WhatsApp di HP → menu Perangkat Tertaut → Tautkan Perangkat.
  5. Scan QR code yang muncul. Status sesi akan berubah menjadi CONNECTED.
QR code kadaluarsa setiap ~60 detik. Jika gagal, refresh halaman dan coba lagi. Sesi yang sudah terhubung akan otomatis dipulihkan saat server restart.

Alternatif: Tautkan dengan Kode (tanpa scan QR)

  1. Pada sesi yang menunggu QR, klik Tautkan dengan kode (atau Tidak bisa scan? Tautkan dengan kode di bawah QR).
  2. Masukkan nomor WhatsApp yang akan ditautkan (format 628xxx atau 08xxx), klik Minta Kode.
  3. Di HP: WhatsApp → Perangkat tertaut → Tautkan perangkat → Tautkan dengan nomor telepon saja, lalu masukkan kode 8 karakter yang tampil.
  4. Cocok bila HP dan layar yang sama (tidak bisa memindai QR). Kode baru bisa diminta setiap 60 detik.

Mengirim Pesan

Buka menu Kirim Pesan. Pilih sesi WhatsApp aktif, lalu pilih tipe pesan:

Teks

Pesan teks biasa atau emoji.

Gambar

Kirim foto dari file atau URL. Bisa ditambah caption.

Dokumen

Kirim PDF, Word, Excel, ZIP, dll.

Audio

Kirim file audio atau voice note (PTT).

Video

Kirim file video dengan caption.

Lokasi

Kirim koordinat GPS dengan nama tempat.

Vcard

Kirim kartu kontak (nama + nomor HP).

Broadcast

Kirim teks ke banyak nomor sekaligus dengan delay acak.

Pilih Tujuan Pesan

  • Manual — ketik nomor langsung (format: 628xxx tanpa +)
  • Phonebook — pilih dari daftar kontak yang tersimpan
  • Grup Kontak — kirim ke semua kontak dalam grup tertentu
  • Grup WA — kirim ke grup WhatsApp (khusus tipe Teks)

Pratinjau Link (Thumbnail Website)

  • Pesan berisi URL (https://… atau www.…) otomatis dikirim dengan judul, deskripsi, dan thumbnail situsnya — seperti saat link ditempel manual di WhatsApp.
  • Aktif di tab Teks dan Broadcast, di Blast Aman, pesan terjadwal, serta undangan Event & RSVP. Matikan lewat checkbox Tampilkan pratinjau link.
  • Hanya URL pertama di pesan yang dipratinjau. Data diambil dari meta Open Graph situs (og:title, og:description, og:image).
  • Bila situs tidak menyediakan judul atau lambat merespons (±10 detik), pesan tetap terkirim sebagai teks biasa.

Phonebook

Simpan dan kelola kontak WhatsApp Anda agar mudah dipilih saat mengirim pesan.

  • Kontak — tambah, edit, atau hapus kontak individual (nama + nomor).
  • Grup Kontak — buat grup (misal: “Pelanggan VIP”) dan tambahkan kontak ke dalamnya.
  • Grup WhatsApp — sinkronkan daftar grup WA dari sesi yang terhubung. Klik Sinkronkan untuk memperbarui.

Pesan Terjadwal

Anda bisa menjadwalkan pengiriman pesan di masa depan, termasuk pesan media (gambar, dokumen, audio, video).

Pesan Teks Terjadwal

  1. Di form kirim pesan, centang Jadwalkan Pengiriman.
  2. Pilih waktu pengiriman (minimal 1 menit dari sekarang).
  3. Klik Jadwalkan. Pesan masuk ke antrian.
  4. Pantau status di menu Riwayat Pesan → Pesan Terjadwal.

Pesan Media Terjadwal (Gambar/Dokumen/Audio/Video)

Untuk media terjadwal, file harus tersimpan di cloud agar bisa diakses saat jadwal tiba. Ada dua cara:

Upload dari Komputer (via dashboard)

  1. Pilih file dari komputer Anda di form kirim.
  2. Centang Jadwalkan Pengiriman.
  3. Klik Upload ke Cloud — file diunggah ke storage, URL tersimpan otomatis.
  4. Klik Jadwalkan.

Gunakan URL Langsung (via API/CDN)

Jika file sudah ada di CDN atau server sendiri, cukup masukkan URL-nya langsung ke field URL. Tidak perlu upload ulang.

Server akan mengirim media menggunakan URL yang tersimpan saat jadwal tiba. Pastikan URL bisa diakses dari internet (bukan localhost atau path lokal).

Riwayat & Statistik

Buka menu Riwayat Pesan untuk melihat:

  • Statistik — total pesan per bulan, breakdown per tipe, dan histori harian.
  • Log Pesan — detail setiap pesan yang dikirim: waktu, nomor tujuan, status (terkirim/gagal).
  • Pesan Terjadwal — daftar pesan yang menunggu dikirim, dengan opsi batalkan atau hapus.

Langganan

Kelola paket berlangganan Anda dari menu Langganan.

  • Upgrade — pilih paket yang lebih tinggi. Paket lama tetap aktif sampai pembayaran baru dikonfirmasi.
  • Downgrade — batalkan paket aktif terlebih dahulu, lalu pilih paket yang lebih rendah.
  • Pembayaran — untuk paket berbayar via Transfer Manual, upload bukti transfer di menu Pembayaran. Admin akan memverifikasi dan mengaktifkan paket.

Pilihan Durasi & Diskon

Saat berlangganan atau upgrade, Anda bisa memilih durasi 1, 3, 6, atau 12 bulan. Durasi lebih panjang mendapat diskon otomatis yang dikonfigurasi admin.

1 bulanHarga normal
3 bulanDiskon s.d. 10%
6 bulanDiskon s.d. 15%
12 bulanDiskon s.d. 20%
Gunakan fitur Validasi Voucher di halaman Langganan untuk mengecek apakah kode voucher berlaku sebelum melakukan pembayaran.

Webhook

Webhook memungkinkan WADUH mengirimkan notifikasi HTTP POST ke server Anda setiap kali ada pesan masuk atau perubahan status sesi.

Setup via Dashboard

  1. Buka menu Webhook di sidebar dashboard.
  2. Klik Tambah Webhook.
  3. Isi Nama dan URL endpoint server Anda.
  4. (Opsional) Isi Secret — jika diisi, setiap request menyertakan header X-WADUH-Signature untuk verifikasi.
  5. (Opsional) Pilih Session ID — kosongkan untuk menangkap event dari semua sesi.
  6. Pilih events yang ingin diterima, lalu klik Simpan.
  7. Klik tombol Test untuk memverifikasi koneksi ke URL Anda.

Verifikasi Signature

<?php
$secret  = 'secret_anda';
$rawBody = file_get_contents('php://input');
$sig     = $_SERVER['HTTP_X_WADUH_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
if (!hash_equals($expected, $sig)) {
    http_response_code(403);
    exit;
}
$payload = json_decode($rawBody, true);
echo $payload['event'];          // message.incoming
echo $payload['data']['fromNumber'];
Server Anda harus merespons dengan HTTP 2xx dalam 10 detik. Proses berat sebaiknya dijalankan secara async setelah response. WADUH tidak melakukan retry otomatis.

Integrasi Spreadsheet

WADUH bisa mencatat setiap pesan masuk dan keluar langsung ke Google Sheets — tanpa API key Google, cukup menggunakan Google Apps Script Web App.

Setup Google Apps Script

  1. Buka Google Sheet yang ingin digunakan.
  2. Klik Extensions → Apps Script.
  3. Hapus kode default, paste kode berikut:
javascript
function doPost(e) {
  var ss    = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  if (sheet.getLastRow() === 0) {
    sheet.appendRow(['Waktu', 'Arah', 'Sesi', 'Nomor', 'Tipe', 'Pesan']);
    sheet.getRange(1, 1, 1, 6).setFontWeight('bold');
  }

  var data  = JSON.parse(e.postData.contents);
  var waktu = new Date(data.timestamp);

  sheet.appendRow([
    Utilities.formatDate(waktu, 'Asia/Jakarta', 'dd/MM/yyyy HH:mm:ss'),
    data.direction, data.session, data.phone, data.type, data.content
  ]);

  return ContentService.createTextOutput('OK');
}
  1. Klik Deploy → New Deployment → Web App.
  2. Set Who has access ke Anyone.
  3. Copy URL deployment (format: https://script.google.com/macros/s/XXXX/exec).
  4. Buka menu Spreadsheet di dashboard WADUH dan paste URL tersebut.
Setiap kali Anda mengedit kode Apps Script, Anda harus membuat deployment baru dan paste ulang URL ke WADUH.

Fitur Lanjutan

Selain pengiriman pesan dasar, WADUH menyediakan fitur lanjutan untuk customer service, otomasi, dan engagement. Ketersediaan fitur mengikuti paket langganan Anda.

Shared Inbox & Agent

Kelola semua percakapan masuk dalam satu kotak masuk bersama. Chat otomatis ter-routing ke agent dengan beban terendah (round robin) dan tetap menempel ke agent yang sama selama 24 jam (sticky agent).

  • Buka menu Inbox & Agent → tab Agent untuk menambah agent/CS beserta batas beban kerja (max workload).
  • Tab Percakapan menampilkan semua chat masuk; satu nomor = satu percakapan walau Anda punya beberapa sesi.
  • Klik percakapan untuk membuka detail, lalu ketik balasan langsung di kotak balasan (Enter untuk kirim) — balasan langsung terkirim via sesi terkait dan tampil di timeline.
  • Assign manual agent lewat dropdown, tutup percakapan bila selesai, atau buka kembali bila perlu.
  • Tab Monitor menampilkan beban kerja tiap agent secara real-time.

AI Chatbot, Sentimen & Handover

Aktifkan AI Chatbot untuk membalas chat pelanggan secara otomatis menggunakan knowledge base Anda. Setiap pesan juga dianalisis sentimennya.

  • Atur di menu AI Chatbot: aktifkan, isi system prompt + knowledge base, dan pilih sesi default untuk membalas.
  • AI menjawab kontekstual dengan riwayat percakapan; jawaban tampil di Riwayat Chat dan terkirim ke pelanggan.
  • Sentimen negatif di atas ambang akan otomatis eskalasi ke CS manusia (handover) lengkap dengan ringkasan kasus.
  • Setelah ditangani, selesaikan handover agar AI aktif kembali (human takeover).
  • AI tidak menabrak Workflow: bila ada keyword/alur aktif, alur tersebut diprioritaskan.

Polling & Event/RSVP

Kumpulkan suara via polling WhatsApp native dan kelola undangan acara dengan konfirmasi kehadiran otomatis.

  • Polling: buat pertanyaan + pilihan, kirim ke nomor manual, kontak, grup kontak, atau grup WA; hasil suara direkap real-time.
  • Event & RSVP: kirim undangan, penerima membalas HADIR/TIDAK/RAGU dan rekap kehadiran terisi otomatis.
  • Pengingat acara terkirim otomatis H-1 dan H-0 ke peserta yang hadir/belum menjawab.
  • Link acara (opsional): undangan digital, Google Maps, atau Zoom — tampil dengan thumbnail di pesan undangan & pengingat. Pakai {{nama}} di link agar tiap tamu mendapat link personal, mis. https://undangan.com/acara/?to={{nama}}.

Pesan Interaktif & Template

Buat template pesan tombol (buttons) atau list dan kirim ulang kapan saja dari halaman Kirim Pesan.

  • Kelola template di menu Template Pesan (tombol balasan cepat maks 3, atau list menu pilihan).
  • Di halaman Kirim Pesan pilih tab Template, pilih template, lalu kirim ke nomor atau grup WA.
  • Grup WA kini tersedia sebagai tujuan untuk semua jenis pesan (teks, media, lokasi, vcard, template).
  • Catatan: tampilan tombol/list interaktif mengikuti dukungan WhatsApp yang terbatas untuk akun non-official.

Otomasi: Workflow, Blast Aman, E-Commerce & Warm-Up

Otomatiskan percakapan dan kampanye dengan tetap menjaga keamanan nomor.

  • Workflow Builder: rancang alur balasan no-code dengan pemicu keyword, percabangan kondisi, dan auto follow-up.
  • Blast Aman: distribusi pesan multi-sesi round-robin dengan jeda acak menyerupai manusia + kontrol pause/resume/cancel. Link di pesan tampil dengan thumbnail (bisa dimatikan per blast).
  • Notifikasi E-Commerce: kirim notifikasi order, pembayaran, dan abandoned cart via trigger publik ber-token.
  • Warm-Up: pertukaran pesan otomatis antar sesi Anda untuk menghangatkan nomor baru (anti-banned).

Analytics & SLA

Pantau performa layanan pelanggan dan kampanye lewat dashboard analitik.

  • Dashboard menampilkan volume pesan, percakapan, produktivitas agent, performa kampanye, dan distribusi sentimen.
  • SLA Monitoring: rata-rata waktu respon pertama, persentase kepatuhan, dan percakapan yang masih menunggu balasan.
  • Ringkasan chat harian per percakapan dibuat otomatis oleh AI.
  • Export data analitik ke CSV (PDF sementara via cetak browser).

Keamanan Akun: OAuth, MFA & SSO

Amankan akses akun dengan opsi login modern.

  • Login dengan Google (OAuth 2.0) — akun otomatis ter-link via email.
  • Multi Factor Authentication (MFA/TOTP) — aktifkan di Pengaturan, scan QR dengan aplikasi authenticator.
  • Single Sign-On (SSO) via OIDC (Keycloak/Auth0/Azure AD) untuk kebutuhan enterprise.
  • Login OTP via WhatsApp juga tersedia sebagai alternatif.

REST API

Integrasikan WADUH ke aplikasi Anda menggunakan REST API. Semua endpoint mengembalikan JSON.

Base URL:https://api.waduh.fun/api

Autentikasi

Semua endpoint API (kecuali /auth/login dan /auth/register) membutuhkan autentikasi via API Key atau Bearer Token JWT.

POST/api/auth/registerDaftar akun baru
POST/api/auth/loginLogin dan dapatkan token JWT + API Key
GET/api/auth/meAmbil profil user yang sedang login
PUT/api/auth/profileUpdate profil (name, phone)
POST/api/auth/change-passwordGanti password
POST/api/auth/regenerate-keyGenerate ulang API Key

Parameter — Register

ParameterTipeWajibKeterangan
namestringYaNama lengkap
emailstringYaAlamat email (unik)
passwordstringYaPassword minimal 8 karakter
phonestringTidakNomor WhatsApp format internasional (628xxx)

Parameter — Login

ParameterTipeWajibKeterangan
emailstringYaEmail akun yang terdaftar
passwordstringYaPassword akun

Contoh: Login

curl -X POST https://api.waduh.fun/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "password123"
  }'

Cara Autentikasi Request

Gunakan salah satu dari dua metode berikut di setiap request. API Key direkomendasikan untuk integrasi server-to-server.
# Metode 1 — API Key (header x-api-key)
curl https://api.waduh.fun/api/session/list \
  -H "x-api-key: YOUR_API_KEY"

# Metode 2 — Bearer Token (JWT)
curl https://api.waduh.fun/api/session/list \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Session API

GET/api/session/listDaftar semua sesi WhatsApp milik pengguna
POST/api/session/createBuat sesi baru
GET/api/session/:id/statusStatus koneksi sesi tertentu
GET/api/session/:id/qrAmbil QR code untuk scan (base64 PNG)
POST/api/session/:id/reconnectReconnect sesi yang terputus
POST/api/session/:id/logoutLogout sesi (hapus dari WA)
DELETE/api/session/:idHapus sesi dari sistem

Parameter — Buat Sesi

ParameterTipeWajibKeterangan
sessionIdstringYaID unik sesi: huruf kecil, angka, dash, underscore. Maks 30 karakter. Tidak boleh "random".

Contoh: Buat Sesi & Ambil QR

# 1. Buat sesi
curl -X POST https://api.waduh.fun/api/session/create \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"sessionId": "main"}'

# 2. Ambil QR (setelah sesi dibuat)
curl https://api.waduh.fun/api/session/main/qr \
  -H "x-api-key: YOUR_API_KEY"
# Response: { "data": { "qr": "data:image/png;base64,..." } }

Kirim Pesan

POST/api/send/textKirim pesan teks
POST/api/send/imageKirim gambar (multipart/form-data atau JSON + URL)
POST/api/send/documentKirim dokumen
POST/api/send/audioKirim audio / voice note
POST/api/send/videoKirim video
POST/api/send/locationKirim lokasi GPS
POST/api/send/contactKirim kartu kontak (vCard)
POST/api/send/groupKirim teks ke grup WhatsApp
POST/api/send/broadcastBroadcast teks ke banyak nomor

Parameter — Kirim Teks

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp yang sedang CONNECTED
phonestringYaNomor tujuan format internasional tanpa + (628xxx)
messagestringYaIsi pesan teks
linkPreviewbooleanTidakTampilkan pratinjau (judul + thumbnail) URL pertama di pesan (default: true). false = teks biasa
delayMinintegerTidakDelay minimum sebelum kirim (milidetik, default: 0)
delayMaxintegerTidakDelay maksimum sebelum kirim (milidetik, default: 0)
Pratinjau link — URL pertama di message otomatis dikirim dengan judul & thumbnail situsnya (berlaku juga untuk /send/group dan /send/broadcast). Kirim "linkPreview": false untuk teks biasa. URL ke jaringan internal/privat tidak pernah diambil server.

Contoh: Kirim Teks

curl -X POST https://api.waduh.fun/api/send/text \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "main",
    "phone": "6281234567890",
    "message": "Halo! Ini pesan dari WADUH.",
    "delayMin": 0,
    "delayMax": 0
  }'

Parameter — Kirim Gambar

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonestringYaNomor tujuan (628xxx)
urlstringTidakURL gambar yang dapat diakses publik — wajib jika tidak upload file
filefileTidakFile gambar (multipart/form-data) — wajib jika tidak pakai URL
captionstringTidakTeks caption di bawah gambar
delayMinintegerTidakDelay minimum (milidetik)
delayMaxintegerTidakDelay maksimum (milidetik)

Contoh: Kirim Gambar via URL

curl -X POST https://api.waduh.fun/api/send/image \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "main",
    "phone": "6281234567890",
    "url": "https://example.com/promo.jpg",
    "caption": "Promo spesial hari ini!"
  }'

Contoh: Kirim Gambar via Upload File

curl -X POST https://api.waduh.fun/api/send/image \
  -H "x-api-key: YOUR_API_KEY" \
  -F "sessionId=main" \
  -F "phone=6281234567890" \
  -F "caption=Promo spesial!" \
  -F "file=@/path/to/image.jpg"

Parameter — Kirim Dokumen

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonestringYaNomor tujuan (628xxx)
urlstringTidakURL file dokumen publik — wajib jika tidak upload file
filefileTidakFile dokumen (multipart) — wajib jika tidak pakai URL
filenamestringTidakNama file yang ditampilkan di WhatsApp
captionstringTidakTeks caption
delayMinintegerTidakDelay minimum (milidetik)
delayMaxintegerTidakDelay maksimum (milidetik)

Parameter — Kirim Audio

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonestringYaNomor tujuan (628xxx)
urlstringTidakURL file audio publik — wajib jika tidak upload
filefileTidakFile audio (multipart) — wajib jika tidak pakai URL
pttbooleanTidaktrue = voice note (diputar sekali), false = audio biasa (default: false)

Parameter — Kirim Lokasi

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonestringYaNomor tujuan (628xxx)
latitudenumberYaKoordinat lintang (contoh: -6.2088)
longitudenumberYaKoordinat bujur (contoh: 106.8456)
namestringTidakNama tempat / lokasi
addressstringTidakAlamat lengkap

Parameter — Kirim Kontak (vCard)

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonestringYaNomor tujuan (628xxx)
contactNamestringYaNama kontak yang akan dikirim
contactPhonestringYaNomor HP kontak yang akan dikirim (628xxx)

Parameter — Kirim ke Grup WhatsApp

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
groupIdstringYaID grup WA (format: [email protected])
messagestringYaPesan teks
linkPreviewbooleanTidakTampilkan pratinjau (judul + thumbnail) URL pertama di pesan (default: true). false = teks biasa

Parameter — Broadcast

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp
phonesarrayYaArray nomor tujuan (628xxx), maksimum 100 nomor per request
messagestringYaIsi pesan teks
linkPreviewbooleanTidakTampilkan pratinjau (judul + thumbnail) URL pertama di pesan (default: true). false = teks biasa
delayMinintegerTidakDelay minimum antar pesan (milidetik, rekomendasi: 1000)
delayMaxintegerTidakDelay maksimum antar pesan (milidetik, rekomendasi: 5000)

Contoh: Broadcast ke Banyak Nomor

curl -X POST https://api.waduh.fun/api/send/broadcast \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "main",
    "phones": ["6281234567890", "6289876543210", "628111222333"],
    "message": "Halo! Promo kami berlaku hari ini.",
    "delayMin": 1000,
    "delayMax": 3000
  }'
Delay broadcast — selalu gunakan delayMin dan delayMax (dalam milidetik) saat broadcast ke banyak nomor untuk menghindari pemblokiran WhatsApp. Rekomendasi: 1000–5000 ms.

Pesan Terjadwal

POST/api/scheduled/uploadUpload file ke cloud storage, kembalikan URL publik
POST/api/scheduledBuat pesan terjadwal baru
GET/api/scheduledDaftar pesan terjadwal (paginasi & filter status)
GET/api/scheduled/:idDetail pesan terjadwal
POST/api/scheduled/:id/cancelBatalkan pesan terjadwal (hanya status pending)
DELETE/api/scheduled/:idHapus pesan terjadwal (selesai/gagal/dibatalkan)

Parameter — Buat Pesan Terjadwal

ParameterTipeWajibKeterangan
sessionIdstringYaID sesi WhatsApp aktif
msgTypestringYaTipe pesan: text | image | document | audio | video
payloadobjectYaIsi pesan (tergantung msgType, lihat contoh di bawah)
phonesarrayYaArray nomor tujuan (628xxx)
scheduledAtstringYaWaktu kirim ISO 8601 dengan timezone (misal: 2026-06-01T09:00:00+07:00)
delayMinintegerTidakDelay minimum antar penerima (milidetik, default: 0)
delayMaxintegerTidakDelay maksimum antar penerima (milidetik, default: 0)

Struktur payload per msgType

text{ "message": "..." }
image{ "url": "https://...", "caption": "..." } atau gunakan upload terlebih dahulu
document{ "url": "https://...", "filename": "report.pdf", "caption": "..." }
audio{ "url": "https://...", "ptt": false }
video{ "url": "https://...", "caption": "..." }

Contoh: Jadwalkan Pesan Teks

curl -X POST https://api.waduh.fun/api/scheduled \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "main",
    "msgType": "text",
    "payload": { "message": "Pengingat meeting jam 9 pagi!" },
    "phones": ["6281234567890"],
    "scheduledAt": "2026-06-01T09:00:00+07:00",
    "delayMin": 0,
    "delayMax": 0
  }'

Contoh: Jadwalkan Pesan Gambar via URL

curl -X POST https://api.waduh.fun/api/scheduled \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "main",
    "msgType": "image",
    "payload": {
      "url": "https://cdn-anda.com/promo-juni.jpg",
      "caption": "Promo spesial bulan Juni!"
    },
    "phones": ["6281234567890", "6289876543210"],
    "scheduledAt": "2026-06-01T08:00:00+07:00"
  }'
Endpoint /api/scheduled/upload mendukung file hingga 25 MB. Format: gambar (JPG/PNG/GIF/WEBP), dokumen (PDF/DOCX/XLSX/ZIP), audio (MP3/OGG), video (MP4).

Phonebook API

GET/api/phonebook/contactsDaftar kontak (pagination, search)
POST/api/phonebook/contactsTambah kontak baru
PUT/api/phonebook/contacts/:idEdit kontak
DELETE/api/phonebook/contacts/:idHapus kontak
GET/api/phonebook/groupsDaftar grup kontak
POST/api/phonebook/groupsBuat grup kontak baru
GET/api/phonebook/wa-groupsDaftar grup WhatsApp (tersinkronisasi)
POST/api/phonebook/wa-groups/sync/:sessionIdSinkronkan grup WA dari sesi tertentu

Parameter — Tambah Kontak

ParameterTipeWajibKeterangan
namestringYaNama kontak
phonestringYaNomor WhatsApp (628xxx tanpa + atau spasi)
groupIdintegerTidakID grup kontak tujuan (dari GET /api/phonebook/groups)
notesstringTidakCatatan tambahan untuk kontak

Parameter — Buat Grup Kontak

ParameterTipeWajibKeterangan
namestringYaNama grup kontak
descriptionstringTidakDeskripsi grup

Contoh: Tambah Kontak

curl -X POST https://api.waduh.fun/api/phonebook/contacts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Budi Santoso",
    "phone": "6281234567890",
    "groupId": 1,
    "notes": "Pelanggan setia"
  }'

Webhook API

GET/api/webhookDaftar semua konfigurasi webhook
POST/api/webhookTambah webhook baru
PUT/api/webhook/:idUpdate webhook (url, name, secret, isActive, events)
DELETE/api/webhook/:idHapus webhook
POST/api/webhook/:id/testKirim payload dummy ke URL webhook untuk uji koneksi
GET/api/webhook/messagesInbox pesan masuk (paginasi, filter sessionId)

Parameter — Buat / Update Webhook

ParameterTipeWajibKeterangan
namestringYaNama identifikasi webhook
urlstringYaURL endpoint yang menerima HTTP POST
sessionIdstringTidaknull = tangkap semua sesi; isi session ID untuk sesi tertentu
secretstringTidakJika diisi, setiap request menyertakan header X-WADUH-Signature (HMAC-SHA256)
eventsarrayTidakDefault: semua event. Pilihan: message.incoming, session.connected, session.disconnected
isActivebooleanTidaktrue (default) = webhook aktif

Contoh: Buat Webhook

curl -X POST https://api.waduh.fun/api/webhook \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Notif Pesan Masuk",
    "url": "https://yourapp.com/wa-hook",
    "sessionId": null,
    "secret": "rahasia123",
    "events": ["message.incoming", "session.connected"]
  }'

Format Payload Masuk ke Server Anda

json
{
  "event": "message.incoming",
  "timestamp": "2026-01-15T10:30:00.000Z",
  "data": {
    "sessionId": "main",
    "fromNumber": "6281234567890",
    "fromName": "Budi Santoso",
    "isGroup": false,
    "groupJid": null,
    "messageId": "XXXXXXXXXXXXXXXX",
    "type": "text",
    "content": "Halo, saya butuh informasi produk.",
    "timestamp": "2026-01-15T10:30:00.000Z"
  }
}

Spreadsheet API

GET/api/spreadsheetDaftar semua konfigurasi spreadsheet
POST/api/spreadsheetTambah konfigurasi baru
PUT/api/spreadsheet/:idUpdate konfigurasi
DELETE/api/spreadsheet/:idHapus konfigurasi
POST/api/spreadsheet/:id/testKirim baris dummy ke sheet untuk uji koneksi

Parameter — Tambah Spreadsheet

ParameterTipeWajibKeterangan
namestringYaNama identifikasi konfigurasi
appsScriptUrlstringYaURL deployment Google Apps Script (https://script.google.com/macros/s/.../exec)
sessionIdstringTidaknull = catat semua sesi; isi session ID untuk sesi tertentu
logIncomingbooleanTidakCatat pesan masuk (default: true)
logOutgoingbooleanTidakCatat pesan keluar (default: true)
isActivebooleanTidaktrue (default) = aktif

Contoh: Tambah Spreadsheet

curl -X POST https://api.waduh.fun/api/spreadsheet \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Log WA Sales",
    "appsScriptUrl": "https://script.google.com/macros/s/XXXX/exec",
    "sessionId": null,
    "logIncoming": true,
    "logOutgoing": true
  }'

Format Respons

Semua endpoint mengembalikan format JSON yang konsisten:

json
// Sukses
{
  "code": 200,
  "status": "success",
  "message": "Data berhasil diambil.",
  "data": { ... }
}

// Error
{
  "code": 400,
  "status": "error",
  "message": "sessionId wajib diisi.",
  "data": null
}

HTTP Status Code

200OK — request berhasil
201Created — resource berhasil dibuat
400Bad Request — input tidak valid
401Unauthorized — token/API key tidak valid
403Forbidden — tidak punya akses ke resource ini
404Not Found — resource tidak ditemukan
409Conflict — data duplikat atau konflik state
429Too Many Requests — rate limit terlampaui (100 req/15 mnt)
500Internal Server Error — hubungi admin

FAQ

Pertanyaan yang sering ditanyakan seputar WADUH.

Umum

Teknis

Billing & Quota

Masih punya pertanyaan?

Hubungi tim kami atau coba langsung dengan mendaftar akun gratis.

Coba Gratis Sekarang