API Pesan
API Jadwalkan Pesan WhatsApp
Jadwalkan teks, gambar, atau dokumen WhatsApp untuk dikirim ke nomor telepon atau grup pada tanggal dan jam pilihan Anda. Gunakan untuk pengingat janji temu, ucapan ulang tahun, tindak lanjut, dan penawaran berbatas waktu.
https://wbiztool.com/api/v1/schedule_msg/Body: JSON atau field formulir
Pesan menunggu di antrean Anda sampai waktu yang dijadwalkan, lalu dikirim dari nomor WhatsApp Anda. Respons memberi Anda msg_id yang dapat digunakan untuk memeriksa statusnya atau membatalkannya.
Contoh singkat#
curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
-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",
"msg": "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
"date": "24/12/2026",
"time": "09:00",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/schedule_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": "9876543210",
"msg": "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
"date": "24/12/2026",
"time": "09:00",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Scheduled with msg_id", result["msg_id"])
else:
print("Failed:", result.get("message", "no message in response"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: "9876543210",
msg: "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
date: "24/12/2026",
time: "09:00",
timezone: "Asia/Kolkata",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Scheduled with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message ?? "no message in response");
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Hi Aman, a reminder that your appointment is today at 11:30 AM.',
'date' => '24/12/2026',
'time' => '09:00',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Scheduled with msg_id ' . $result['msg_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}Ganti 12345, YOUR_API_KEY, dan 678 dengan nilai Anda sendiri. Lihat Autentikasi untuk mengetahui di mana menemukannya.
Parameter request#
Autentikasi
client_idintegerwajibAPI Client ID Anda dari Settings → API keys (Pengaturan → Kunci API).
api_keystringwajibAPI key Anda dari halaman yang sama.
whatsapp_clientintegerwajibID nomor WhatsApp yang digunakan untuk mengirim, dari WhatsApp settings (pengaturan WhatsApp). Berbeda dengan Kirim pesan, endpoint ini tidak pernah memilihkan nomor untuk Anda.
Jadwal
datestringwajibTanggal pengiriman pesan, dalam format
dd/mm/yyyy, misalnya24/12/2026.timestringwajibJam pengiriman pesan, dalam format 24 jam
HH:MM, misalnya09:00atau18:45. Jangan sertakan detik.timezonestringopsionalZona waktu yang digunakan untuk
datedantime. Default-nyaIST(India) jika tidak dikirim. Lihat Zona waktu.
Penerima dan pesan
phonestringWajib kecuali Anda mengirim group_nameNomor WhatsApp penerima, hanya angka. Spasi,
+,-,., dan tanda kurung otomatis dihapus. Kirim nomor dengan kode negaranya (919876543210) atau tanpa kode negara (9876543210) bersamacountry_code.group_namestringWajib kecuali Anda mengirim phoneNama grup WhatsApp yang beranggotakan nomor Anda. Grup dicari dengan cara yang sama seperti di Kirim ke grup. Kirim
phoneataugroup_name, jangan keduanya.country_codestringopsionalKode panggilan negara tanpa
+, misalnya91untuk India atau1untuk Amerika Serikat. Kode ini ditambahkan di depanphonekecuali nomornya sudah diawali kode tersebut. Pengecualian: dengan91, nomor 10 digit selalu mendapat awalan. Dengan kode lain, kirim nomor lokal yang diawali angka yang sama lengkap dengan kode negaranya. Diabaikan untuk grup.msg_typeintegeropsional0teks (default),1gambar,2file atau dokumen.msgstringWajib jika msg_type bernilai 0Teks pesan. Untuk gambar dan file, ini adalah keterangan (caption) dan boleh kosong. Format WhatsApp berfungsi:
*bold*,_italic_,~strikethrough~.messagediterima sebagai alias.
Gambar dan file
img_urlstringWajib jika msg_type bernilai 1URL
httpatauhttpspublik dari gambar.file_urlstringWajib jika msg_type bernilai 2URL
httpatauhttpspublik tempat file dapat diunduh secara langsung.file_namestringopsionalNama file yang dilihat penerima, misalnya
invoice-4821.pdf. Nama dikirim dalam huruf kecil, karakter seperti& : ? * $ ;diganti dengan_, dan dipotong menjadi 150 karakter. Jika tidak dikirim, nama diambil dari URL.
Opsi pengiriman
webhookstringopsionalURL yang menerima
POSTketika pesan terkirim atau gagal. Payload-nya sama seperti pada Kirim pesan.
Kapan pesan dikirim#
- Wbiztool mengonversi
date,time, dantimezonemenjadi satu titik waktu dan mengirim pesan setelah waktu tersebut terlewati, selama nomor WhatsApp Anda terhubung. - Waktu yang sudah lewat tetap diterima. Pesan langsung dikirim, seperti pengiriman biasa. Periksa kembali format tanggal (
dd/mm/yyyy, tanggal lebih dulu) agar Anda tidak mengirim pesan berbulan-bulan lebih awal. - Jika nomor Anda terputus pada waktu yang dijadwalkan, pesan menunggu dan dikirim segera setelah nomor terhubung kembali, meskipun jauh lebih lambat dari rencana. Endpoint ini tidak memiliki masa kedaluwarsa, jadi batalkan pesan jika sudah tidak relevan. Pesan yang masih menunggu pada nomor yang terputus atau dihapus 90 hari setelah waktu jadwalnya akan dihapus.
- Sampai terkirim, pesan berstatus
0(Created) dan dapat dibatalkan. Selama menunggu, pesan juga mengurangi sisa kredit Anda.
Zona waktu#
timezone menerima nama zona waktu atau salah satu singkatan di bawah ini.
Nama zona waktu seperti Asia/Kolkata, America/New_York, Europe/London, atau Australia/Sydney. Nama apa pun dari database zona waktu IANA dapat digunakan. Ini adalah opsi yang paling andal. Lihat Referensi zona waktu untuk daftarnya.
Singkatan harus ditulis dengan huruf kapital. Setiap singkatan dipetakan ke sebuah wilayah, dan waktu musim panas (daylight saving time) wilayah tersebut diterapkan secara otomatis:
| Singkatan | Diperlakukan sebagai |
|---|---|
IST | Asia/Kolkata |
UTC | UTC |
GMT | GMT |
EST | US/Eastern |
CST | US/Central |
MST | US/Mountain |
PST | US/Pacific |
CET, CEST | Europe/Paris |
EET, EEST | Europe/Athens |
JST | Asia/Tokyo |
AEST, AEDT | Australia/Sydney |
Misalnya, EST di bulan Juli berarti waktu musim panas New York (UTC−4), bukan UTC−5 yang tetap.
Menjadwalkan untuk grup#
curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"group_name": "Sales Team Mumbai",
"msg": "Team meeting starts in 15 minutes.",
"date": "24/12/2026",
"time": "14:45",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/schedule_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"group_name": "Sales Team Mumbai",
"msg": "Team meeting starts in 15 minutes.",
"date": "24/12/2026",
"time": "14:45",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.json())// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
group_name: "Sales Team Mumbai",
msg: "Team meeting starts in 15 minutes.",
date: "24/12/2026",
time: "14:45",
timezone: "Asia/Kolkata",
}),
});
console.log(await response.json());<?php
$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'group_name' => 'Sales Team Mumbai',
'msg' => 'Team meeting starts in 15 minutes.',
'date' => '24/12/2026',
'time' => '14:45',
'timezone' => 'Asia/Kolkata',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Respons#
Request yang berhasil mengembalikan HTTP 200:
{
"msg_id": 9817263,
"message": "Created",
"status": 1
}
| Field | Tipe | Deskripsi |
|---|---|---|
status | integer | 1 jika pesan berhasil dijadwalkan, 0 jika request gagal. |
message | string | Created jika berhasil, selain itu berisi error. |
msg_id | integer | ID pesan terjadwal. Simpan untuk memeriksa status atau membatalkannya nanti. Hanya ada jika berhasil. |
Respons tidak mengulang waktu jadwal atau zona waktu, jadi catat apa yang Anda kirim.
Error#
Sebagian besar error mengembalikan HTTP 200 dengan status bernilai 0, jadi selalu periksa status di body:
{ "message": "Scheduled date & time is not in valid format", "status": 0 }
| Pesan | Cara memperbaikinya |
|---|---|
Auth Error | Kirim client_id dan api_key. |
Invalid Client Id | Kirim client_id sebagai angka. Dikembalikan dengan HTTP 403. |
Auth Error: invalid api key | Pastikan key tersebut ada, belum dihapus, dan milik client_id ini. Dikembalikan dengan HTTP 400. |
Either phone or group_name parameter is required | Tambahkan phone atau group_name. |
Please provide either phone OR group_name, not both | Hapus salah satunya. |
Invalid phone number | phone hanya boleh berisi angka (6–17 digit), boleh diawali +. |
Invalid Contact Number "…" | Setelah kode negara ditambahkan, nomor harus sepanjang 6–15 digit. |
Msg cant be null | Pesan teks (msg_type 0) memerlukan msg. |
Image Url Can't be null | Untuk msg_type 1, kirim img_url. |
File Url Can't be null | Untuk msg_type 2, kirim file_url. |
Scheduled date & time is not in valid format | date atau time tidak dikirim, atau timezone berupa string kosong. |
Not enough credits | Paket Anda sudah tidak memiliki sisa pesan. |
Demo Account can not access apis | Gunakan akun biasa. |
Invalid JSON format: … | Body JSON tidak valid, atau Anda mengirim field formulir tanpa client_id. |
Tips#
-
Susun tanggal dengan cermat: di Python gunakan
strftime("%d/%m/%Y")danstrftime("%H:%M"). Di JavaScript, format tanggal dan jam dalam zona waktu yang sama dengan yang Anda kirim ditimezone, bukan waktu lokal server Anda:const tz = "Asia/Kolkata"; // d is the Date to send at const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(d); // "24/12/2026" const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(d); // "09:00" -
Pastikan waktunya benar: jadwalkan pesan uji lima menit ke depan dan periksa apakah pesan tiba sesuai harapan.
-
Perubahan rencana: untuk mengubah jadwal, batalkan pesan lalu jadwalkan pesan baru.
-
Jangan gunakan klien resmi untuk penjadwalan untuk saat ini:
schedule_messagedi Python mengirim tanggal sebagaiYYYY-MM-DD(responsnya{}), danscheduleMessagedi Node mengirimschedule_time, yang tidak dibaca oleh endpoint ini. Panggil endpoint secara langsung seperti contoh di atas. -
Pesan berulang: untuk pesan yang berulang, seperti pengingat pembayaran bulanan, lihat Buat pengingat.
