Langsung ke konten
Wbiztool

API Pesan

API Kirim ke Banyak Nomor

Kirim pesan WhatsApp yang sama ke beberapa nomor telepon dan grup dalam satu request. Gunakan untuk siaran kecil seperti newsletter, penawaran, dan pengumuman.

POSThttps://wbiztool.com/api/v1/send_msg/multi/

Body: JSON atau field formulir

Wbiztool membuat satu pesan per penerima dan mengembalikan msg_id untuk masing-masing, sehingga Anda dapat memeriksa statusnya satu per satu.

Contoh singkat#

curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "country_code": "91",
    "phone": "9876543210,9812345670,Sales Team Mumbai",
    "msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
  }'

Ganti 12345, YOUR_API_KEY, dan 678 dengan nilai Anda sendiri. Lihat Autentikasi untuk mengetahui di mana menemukannya.

Parameter request#

Autentikasi

client_idintegerwajib

API Client ID Anda dari Settings → API keys (Pengaturan → Kunci API).

api_keystringwajib

API key Anda dari halaman yang sama.

whatsapp_clientintegerwajib

ID nomor WhatsApp yang digunakan untuk mengirim, dari WhatsApp settings (pengaturan WhatsApp). Berbeda dengan Kirim pesan, endpoint ini tidak pernah memilihkan nomor untuk Anda.

Penerima dan pesan

phonestringwajib

Nomor telepon dan nama grup dalam satu string yang dipisahkan koma, misalnya 9876543210,9812345670,Sales Team Mumbai. Jangan kirim array JSON. Lihat Cara penerima dibaca.

country_codestringopsional

Kode panggilan negara tanpa +, misalnya 91. Kode ini ditambahkan di depan setiap nomor telepon kecuali nomornya sudah diawali kode tersebut. Di JSON, kirim sebagai string ("91"), bukan angka. Jika Anda mengirim angka, setiap nomor telepon dalam daftar diperlakukan sebagai nama grup (is_group: true), dan pesan-pesan tersebut gagal.

msg_typeintegeropsional

0 teks (default), 1 gambar, 2 file atau dokumen.

msgstringWajib jika msg_type bernilai 0

Teks pesan. Untuk gambar dan file, ini adalah keterangan (caption) dan boleh kosong. Format WhatsApp berfungsi: *bold*, _italic_, ~strikethrough~. message diterima sebagai alias.

Gambar dan file

img_urlstringWajib jika msg_type bernilai 1

URL http atau https publik dari gambar.

file_urlstringWajib jika msg_type bernilai 2

URL http atau https publik tempat file dapat diunduh secara langsung.

file_namestringopsional

Nama file yang dilihat penerima, misalnya price-list.pdf. Nama dikirim dalam huruf kecil, karakter seperti & : ? * $ ; diganti dengan _, dan dipotong menjadi 150 karakter. Jika tidak dikirim, nama diambil dari URL.

Opsi pengiriman

webhookstringopsional

URL yang menerima POST untuk setiap pesan ketika terkirim atau gagal. Payload-nya sama seperti pada Kirim pesan.

Gambar dari URLcURL
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 1,
    "country_code": "91",
    "phone": "9876543210,9812345670",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts tomorrow."
  }'

Cara penerima dibaca#

Wbiztool memecah phone berdasarkan koma, menghapus spasi di sekitar setiap item, lalu menentukan jenis setiap item:

  • Hanya angka (awalan + atau angka nol di depan tidak masalah): diperlakukan sebagai nomor telepon. country_code ditambahkan kecuali nomornya sudah diawali kode tersebut, lalu nomornya harus sepanjang 6 hingga 15 digit.
  • Selain itu: diperlakukan sebagai nama grup WhatsApp, yang dicari dengan cara yang sama seperti di Kirim ke grup.
  • Grup yang namanya hanya berisi angka (misalnya 2024) diperlakukan sebagai nomor telepon, dan nama grup yang mengandung koma tidak bisa dikirimi dari endpoint ini. Gunakan Kirim ke grup untuk grup tersebut.

Hal lain yang perlu diketahui:

  • Nomor yang terlalu pendek atau terlalu panjang setelah kode negara ditambahkan dilewati tanpa pemberitahuan. Nomor tersebut tidak muncul di respons dan tidak mendapat msg_id.
  • Duplikat tidak dihapus. Nomor yang dicantumkan dua kali menerima dua pesan.
  • Jika sebuah nomor lokal kebetulan diawali angka yang sama dengan country_code (misalnya 9123456780 dengan country_code 91), kode negara tidak ditambahkan. Kirim nomor seperti itu lengkap dengan kode negaranya (919123456780).
  • URL gambar dan file tidak diperiksa saat Anda memanggil API. URL tersebut diunduh saat setiap pesan dikirim, sehingga tautan yang rusak membuat pesan gagal belakangan, bukan request-nya. Aturan saat pengiriman yang sama seperti Kirim pesan berlaku: gambar lebih dari 16 MB dan video lebih dari 64 MB gagal, audio WAV dan OGG tidak didukung, dan file (msg_type 2) tanpa ekstensi yang didukung ditambahi .pdf. Lihat Mengirim gambar dan file.

Kredit#

Seluruh batch diperiksa terhadap sisa kredit Anda sebelum ada pesan yang dibuat. Setiap item yang tidak kosong di phone ikut dihitung, termasuk item yang kemudian dilewati. Jika jumlahnya melebihi sisa kredit Anda, tidak ada pesan yang dibuat dan Anda mendapatkan:

{
  "message": "Not enough credits: 120 messages requested, 85 credits remaining",
  "status": 0
}

Pesan yang sudah masuk antrean tetapi belum terkirim juga mengurangi sisa kredit Anda. Pecah daftar besar menjadi beberapa request yang lebih kecil atau isi ulang paket Anda. Untuk kampanye besar, unggah spreadsheet dari halaman Campaigns (Kampanye).

Respons#

Request yang berhasil mengembalikan HTTP 200:

{
  "msg_ids": [9817263, 9817264, 9817265],
  "messages": [
    { "msg_id": 9817263, "contact": "919876543210", "is_group": false },
    { "msg_id": 9817264, "contact": "919812345670", "is_group": false },
    { "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
  ],
  "message": "Successfully created 3 messages",
  "status": 1
}
FieldTipeDeskripsi
statusinteger1 jika setidaknya satu pesan masuk antrean, selain itu 0.
messagestringSuccessfully created N messages jika berhasil, selain itu berisi error.
msg_idsarray integerID pesan dalam antrean, sesuai urutan phone. Hanya ada jika berhasil.
messagesarraySatu objek per pesan dalam antrean. Hanya ada jika berhasil.
messages[].msg_idintegerID pesan.
messages[].contactstringNomor telepon dengan kode negara yang sudah diterapkan, atau nama grup.
messages[].is_groupbooleantrue jika item diperlakukan sebagai nama grup.

Bandingkan messages dengan daftar yang Anda kirim untuk menemukan nomor yang dilewati, dan pastikan is_group bernilai false untuk setiap item yang Anda maksudkan sebagai nomor telepon.

Error#

Sebagian besar error mengembalikan HTTP 200 dengan status bernilai 0, jadi selalu periksa status di body. Kecuali error HTTP 400 dan 403, respons (termasuk yang berhasil) berupa JSON yang dikirim dengan Content-Type: text/html, jadi parse body sendiri, jangan mengandalkan deteksi JSON otomatis (misalnya di alat tanpa kode):

{ "message": "Invalid whatsapp client", "status": 0 }
PesanCara memperbaikinya
Auth ErrorKirim client_id dan api_key.
Invalid Client IdKirim client_id sebagai angka. Dikembalikan dengan HTTP 403.
Auth Error: invalid api keyPastikan key tersebut ada, belum dihapus, dan milik client_id ini. Dikembalikan dengan HTTP 400.
Msg cant be nullPesan teks (msg_type 0) memerlukan msg.
Image Url Can't be nullUntuk msg_type 1, kirim img_url.
File Url Can't be nullUntuk msg_type 2, kirim file_url.
Not enough credits: … messages requested, … credits remainingKirim ke lebih sedikit penerima atau tambah kredit. Lihat Kredit.
Invalid whatsapp clientID whatsapp_client tersebut tidak ada di workspace Anda.
No valid contacts foundSetiap item di phone kosong atau dilewati. Pastikan nomornya 6 hingga 15 digit termasuk kode negara.
Demo Account can not access apisGunakan akun biasa.
Invalid JSON format: …Body JSON tidak valid, atau Anda mengirim field formulir tanpa client_id.

Tips#

  • Kirim phone sebagai string: gabungkan daftar Anda dengan koma. Array JSON mengembalikan {}.
  • Jangan gunakan send_bulk_messages dari klien Python untuk saat ini: method ini mengirim daftar sebagai phones, yang diabaikan oleh endpoint ini. Panggil endpoint secara langsung seperti pada contoh di atas.
  • Pantau setiap pesan: simpan setiap msg_id dari messages, atau kirim webhook agar Anda diberi tahu saat setiap pesan terkirim atau gagal.
  • Jaga nomor Anda tetap terhubung: setiap pesan dikirim dari nomor WhatsApp Anda, jadi nomor tersebut harus tetap terhubung di WhatsApp settings sampai seluruh batch terkirim.
  • Teks berbeda untuk setiap orang: endpoint ini mengirim msg yang sama ke semua orang. Panggil Kirim pesan sekali per penerima untuk mempersonalisasi setiap pesan.