đŸŸĸ WS Gateway

Dokumentasi Integrasi API & Otomatisasi

Selamat datang di dokumentasi API WebSheet Gateway. Seluruh pengiriman pesan via API di bawah ini menggunakan Sistem Antrian Otomatis (Queue System) berbasis RAM per-user. Sistem secara standar menerapkan jeda acak aman (default 4–8 detik) untuk menjaga reputasi nomor Anda, namun Anda juga dapat menentukan kontrol jeda kustom secara fleksibel menggunakan parameter delayMin dan delayMax pada setiap rute pengiriman.

Autentikasi & Header Wajib

Setiap request ke server wajib menyertakan API Key Anda di dalam komponen Header:

Key Header Tipe Deskripsi
Content-Type String Wajib diisi application/json
x-api-key String API Key unik milik akun Anda

POST

/api/send

Digunakan untuk mengirim satu atau banyak pesan teks sekaligus ke nomor pribadi maupun ID Grup.

Request Body (JSON)

{
  "number": "628123456789", // Bisa berupa String tunggal, atau Array: ["628123", "628567"]
  "message": "Halo, ini contoh pesan teks otomatis.",
  "delayMin": 2,            // Opsional (detik): Jeda minimal acak antar pesan (Default: 4)
  "delayMax": 6             // Opsional (detik): Jeda maksimal acak antar pesan (Default: 8)
}

Response Sukses (200 OK)

{
  "success": true,
  "message": "1 pesan berhasil dimasukkan ke antrian.",
  "targets": ["628123456789@s.whatsapp.net"],
  "queueRemaining": 1
}
POST

/api/send-image

Digunakan untuk mengirim media gambar beserta caption-nya dalam format array fleksibel (Multi-Image Broadcast). Mendukung tautan gambar publik umum, **AppSheet Image URL**, serta **Google Drive (Direct Link)**.

Request Body (JSON)

{
  "number": ["628123456789"],
  "images": [
    {
      "url": "https://www.appsheet.com/template/gettablefileurl?appName=Inventory-123&tableName=Products&fileName=Products_Images%2Fsepatu.jpg", // Contoh AppSheet
      "caption": "Foto Produk dari AppSheet"
    },
    {
      "url": "https://docs.google.com/uc?export=download&id=DRIVE_FILE_ID", // Contoh Google Drive Direct Link
      "caption": "Foto Produk dari Google Drive"
    }
  ],
  "delayMin": 2,            // Opsional (detik): Jeda minimal acak antar broadcast (Default: 4)
  "delayMax": 6             // Opsional (detik): Jeda maksimal acak antar broadcast (Default: 8)
}

Response Sukses (200 OK)

{
  "success": true,
  "message": "2 pesan gambar berhasil dimasukkan ke antrian.",
  "targets": ["628123456789@s.whatsapp.net"],
  "queueRemaining": 2
}
â„šī¸ Tips Google Drive: Pastikan status file di Google Drive sudah diatur ke "Anyone with the link" (Publik). Gunakan format struktur URL https://docs.google.com/uc?export=download&id=ID_FILE_ANDA agar server bisa mengunduh file secara langsung.
POST

/api/send-document

Digunakan untuk mengirim satu atau banyak berkas dokumen sekaligus (seperti PDF, Excel, dsb) secara massal ke banyak nomor tujuan dalam satu antrian (Multi-Document Broadcast).

Request Body (JSON)

{
  "number": ["628123456789"],
  "documents": [
    {
      "url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
      "fileName": "Invoice_Tagihan.pdf",
      "caption": "Silakan unduh invoice tagihan bulan ini."
    },
    {
      "url": "https://docs.google.com/uc?export=download&id=DRIVE_PDF_ID", 
      "fileName": "Syarat_Ketentuan.pdf",
      "caption": "Dokumen pelengkap syarat & ketentuan."
    }
  ],
  "delayMin": 2,            // Opsional (detik): Jeda minimal acak antar pengiriman dokumen (Default: 4)
  "delayMax": 6             // Opsional (detik): Jeda maksimal acak antar pengiriman dokumen (Default: 8)
}

Response Sukses (200 OK)

{
  "success": true,
  "message": "2 tugas dokumen berhasil dimasukkan ke antrian untuk 1 nomor tujuan.",
  "targets": ["628123456789@s.whatsapp.net"],
  "queueRemaining": 2
}

WEBHOOK

Inbound Payload (Menerima Chat)

Jika Anda mengonfigurasi Webhook Bot URL di dashboard, server kami akan otomatis mem-forward (meneruskan) setiap obrolan teks umum masuk dari klien menggunakan metode POST ke URL server Anda.

💡 Sistem Proteksi: Pesan lokasi dan pesan yang diawali dengan prefiks akuntansi resmi (/d, /add, Paid, dll) tidak akan ikut dikirim ke webhook ini demi menghindari bentrokan fungsi bot Anda.

Payload JSON yang Diterima Server Anda (Request dari Kami)

{
  "userId": "6a1c3249425c66d4f787d0f7",
  "from": "6283873406812@s.whatsapp.net", // ID Pengirim (Bisa personal / @g.us untuk grup)
  "pushName": "Ahmad Fauzi",              // Nama profil WhatsApp pengirim
  "messageId": "BAE53E2A12C54D88",         // ID Unik pesan dari Baileys
  "text": "Halo bot, bisa minta informasi harga?", // Isi teks chat bersih
  "timestamp": 1717307478,                 // Detik waktu pesan masuk (Epoch timestamp)
  "rawMessage": {                          // Object JSON utuh bawaan Baileys untuk data extra
    "key": {
      "remoteJid": "6283873406812@s.whatsapp.net",
      "fromMe": false,
      "id": "BAE53E2A12C54D88"
    },
    "message": {
      "conversation": "Halo bot, bisa minta informasi harga?"
    },
    "messageTimestamp": 1717307478,
    "pushName": "Ahmad Fauzi"
  }
}
FITUR INTERNAL

Autoreply Engine

Mesin penjawab otomatis internal yang bekerja secara asinkron mendeteksi pesan masuk berdasarkan kata kunci (*keyword*) yang telah Anda konfigurasikan di Dashboard tanpa memerlukan server tambahan.

Mekanisme Pencocokan Kata Kunci (Match Type):

  • Tepat (Equal): Pesan pemicu harus sama persis 100% dengan kata kunci (Abaikan huruf besar/kecil).
  • Mengandung (Contains): Respons akan terpicu jika kalimat pesan menyertakan kata kunci tersebut di posisi mana saja.

Aturan Batasan & Penundaan keamanan:

- Delay Balasan: Ditunda acak selama 2-4 detik untuk mensimulasikan ketikan manusia.
- Status Deteksi: Otomatis memicu indikator "typing..." (sedang mengetik) pada chat pengirim sebelum membalas.

POST

/dashboard/scheduled/send

Digunakan oleh modul internal dashboard untuk merencanakan dan mengamankan pengiriman pesan teks maupun media di waktu spesifik masa depan menggunakan sistem CRON Worker internal.

Struktur Form / Objek Penyimpanan

{
  "title": "Pengingat Iuran Bulanan",      // Label pengenal tugas jadwal
  "number": "628998877665",                // Nomor tujuan tunggal atau grup ID
  "message": "Halo, ini pengingat terjadwal otomatis Anda.",
  "scheduledAt": "2026-06-15T08:00:00.000Z", // Waktu eksekusi dalam format ISO / Datetime-local
  "repeatType": "once"                     // Opsi Perulangan: once (sekali), daily (harian), weekly (mingguan)
}

Manajemen Siklus Hidup Status (Lifecycle):

Status Keterangan Kerja
scheduled Tugas berhasil disimpan dan sedang menunggu waktu eksekusi tiba.
running Sistem sedang memproses pengiriman ke antrean WhatsApp. Tugas terkunci dari aksi modifikasi/hapus.
completed Pesan sukses diteruskan ke nomor tujuan. Jika tipe perulangan aktif, waktu eksekusi otomatis diperbarui ke jadwal berikutnya.
POST / DELETE

/dashboard/scheduled-status

Modul otomasi khusus untuk mengunggah Cerita/Story WhatsApp (Status WA) secara terjadwal. Mendukung format berbasis teks murni ataupun gambar multimedia lengkap beserta takarir (*caption*).

1. Membuat Jadwal Status Baru (Multipart Form-Data)

Endpoint: /dashboard/scheduled-status/send
Content-Type: multipart/form-data
Form Fields:
- title       : "Promo Banner Hari Senin" (Text)
- message     : "Yuk dibeli brosur diskon akhir pekan!" (Text Area / Caption)
- repeatType  : "once" | "daily" | "weekly" (Select Option)
- scheduledAt : "2026-06-12T10:00" (Datetime-local)
- statusImage : [File Binary] (Opsional, File Gambar .jpg/.png)

2. Menghapus Antrean Jadwal Status via AJAX Fetch

Pengguna dapat membatalkan antrean jadwal status yang belum dieksekusi menggunakan fungsi penembakan API asinkron dari sisi klien.

Endpoint: /dashboard/scheduled-status/delete/:id
Method: DELETE

Response JSON Pembatalan (200 OK)

{
  "success": true,
  "message": "Jadwal status WhatsApp berhasil dihapus secara permanen."
}

đŸ›Ąī¸ Aturan Keamanan Transaksi: Tombol aksi hapus akan otomatis ter-disabled secara sistem di antarmuka jika tugas berstatus running demi menghindari kegagalan sinkronisasi dan kerusakan struktur daur hidup memori pengiriman Baileys Core.