API Pengingat
API Buat pengingat
Buat pesan WhatsApp berulang yang dikirim secara otomatis sesuai jadwal. Gunakan untuk pengingat pembayaran, check-in mingguan, tindak lanjut harian, dan pesan lain yang berulang.
https://wbiztool.com/api/v1/reminder/create/Body: JSON atau field formulir
Anda menentukan jadwal dengan ekspresi cron dan zona waktu. Setiap kali jadwal cocok, Wbiztool memasukkan pesan ke antrean untuk nomor telepon atau grup tersebut, sama seperti pesan yang dikirim dengan Kirim pesan. Pengingat yang Anda buat di sini juga muncul di halaman Reminders (Pengingat) di dashboard Anda, tempat Anda dapat menjeda atau mengeditnya.
Contoh singkat#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
try:
result = response.json() # read the body even when the HTTP code is 400
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] == 1:
print("Reminder created with reminder_id", result["reminder_id"])
else:
print("Failed:", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Monthly rent reminder",
phone: "919876543210",
message: "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
cron_expression: "0 10 1 * *",
timezone: "Asia/Kolkata",
}),
});
// Read the body even when the HTTP code is 400. A non-JSON reply means the api_key wasn't found.
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error(`HTTP ${response.status}: not JSON. Check that your api_key exists.`);
}
if (result.status === 1) {
console.log("Reminder created with reminder_id", result.reminder_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Monthly rent reminder',
'phone' => '919876543210',
'message' => 'Hi Aman, a reminder that your rent is due on {current_date_formatted}.',
'cron_expression' => '0 10 1 * *',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
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);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($result === null) {
echo "HTTP $httpCode: not JSON. Check that your api_key exists.";
} elseif ($result['status'] === 1) {
echo 'Reminder created with reminder_id ' . $result['reminder_id'];
} else {
echo 'Failed: ' . $result['message'];
}Pengingat ini dikirim pukul 10:00 waktu India setiap tanggal 1 setiap bulan. Ganti 12345, YOUR_API_KEY, dan 678 dengan nilai Anda sendiri. Lihat Autentikasi untuk mengetahui di mana menemukannya.
Parameter request#
Kirim parameter sebagai body JSON atau sebagai field formulir. Di JSON, kirim setiap nilai teks (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) sebagai string.
Autentikasi
client_idintegerwajibAPI Client ID Anda dari Settings → API keys (Pengaturan → Kunci API).
api_keystringwajibAPI key Anda dari halaman yang sama.
Pengirim
whatsapp_clientintegeropsionalID nomor WhatsApp yang digunakan untuk mengirim, dari WhatsApp settings (pengaturan WhatsApp). Jika tidak dikirim, atau ID tidak ada di workspace Anda, setiap pengingat dikirim dari nomor terhubung pertama di workspace Anda pada saat pengingat dijalankan.
Pengingat
reminder_namestringwajibNama pengingat, ditampilkan di halaman Reminders dan tersedia di pesan sebagai
{reminder_name}.phonestringwajibNomor WhatsApp penerima dengan kode negaranya, misalnya
919876543210. Tidak ada parametercountry_codeterpisah. Spasi,+,-,., dan tanda kurung dihapus, dan angka0di depan dihapus (hingga dua angka nol di depan pada body JSON). Nilai yang tidak seluruhnya angka diperlakukan sebagai nama grup WhatsApp.messagestringwajibTeks pesan. Dapat berisi variabel template yang diisi setiap kali pengingat dijalankan. Format WhatsApp berfungsi:
*bold*,_italic_,~strikethrough~.cron_expressionstringwajibKapan pesan dikirim, sebagai ekspresi cron lima field seperti
0 9 * * 1-5. Lihat Ekspresi cron.timezonestringopsionalZona waktu tempat ekspresi cron dijalankan, sebagai nama zona waktu IANA seperti
Asia/Kolkata,America/New_York, atauEurope/London. Hilangkan untuk menggunakanUTC. String kosong mengembalikanInvalid timezone. Lihat Referensi zona waktu untuk daftar lengkapnya.
Gambar dan file
msg_typeintegeropsional0teks (default),1gambar, atau2file, denganmessagesebagai keterangan (caption). Nilai lain diperlakukan sebagai0.img_urlstringWajib jika msg_type bernilai 1 atau 2URL
httpatauhttpspublik dari gambar, atau dari file untukmsg_type2, hingga 1.000 karakter. URL ini diunduh setiap kali pengingat dijalankan, jadi pastikan tautannya tetap berfungsi. Anda dapat meng-host file dengan API Unggah media.file_namestringWajib jika msg_type bernilai 2Untuk
msg_type2, nama file beserta ekstensinya, hingga 100 karakter, misalnyainvoice.pdf. Diabaikan untuk jenis pesan lainnya.
Ekspresi cron#
Ekspresi cron terdiri dari lima nilai yang dipisahkan spasi. Pengingat dijalankan setiap kali waktu saat ini di timezone cocok dengan kelima nilai tersebut:
┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-7, where 0 and 7 are Sunday)
│ │ │ │ │
0 9 * * 1-5
| Simbol | Arti | Contoh |
|---|---|---|
* | Setiap nilai | * di field jam berarti setiap jam. |
, | Daftar nilai | 9,18 di field jam berarti pukul 9:00 dan 18:00. |
- | Rentang | 1-5 di field hari dalam minggu berarti Senin sampai Jumat. |
/ | Interval | */6 di field jam berarti setiap 6 jam. |
Contoh umum#
| Ekspresi | Dijalankan |
|---|---|
0 9 * * * | Setiap hari pukul 9:00 |
0 9 * * 1-5 | Senin sampai Jumat pukul 9:00 |
0 9 * * 1 | Setiap Senin pukul 9:00 |
30 18 * * 0 | Setiap Minggu pukul 18:30 |
0 9,18 * * * | Setiap hari pukul 9:00 dan 18:00 |
0 */6 * * * | Setiap 6 jam, tepat di awal jam |
*/30 9-17 * * 1-5 | Setiap 30 menit dari pukul 9:00 hingga 17:30, Senin sampai Jumat |
0 9 1 * * | Tanggal 1 setiap bulan pukul 9:00 |
0 10 15 * * | Tanggal 15 setiap bulan pukul 10:00 |
0 8 1 1 * | Setiap 1 Januari pukul 8:00 |
Waktu mengikuti timezone pengingat. Gunakan lima field saja: jangan tambahkan field detik atau singkatan seperti @daily.
Variabel template#
Placeholder berikut di message diganti setiap kali pengingat dijalankan. Tanggal dan jam mengikuti timezone pengingat.
| Variabel | Diganti dengan | Contoh |
|---|---|---|
{current_date} | Tanggal | 2026-10-01 |
{current_date_formatted} | Tanggal dalam kata-kata, hari diawali angka nol | October 01, 2026 |
{current_time} | Jam format 24 jam | 09:00:00 |
{current_time_12h} | Jam format 12 jam | 09:00 AM |
{current_datetime} | Tanggal dan jam | 2026-10-01 09:00:00 |
{timezone} | Nilai timezone | Asia/Kolkata |
{timezone_short} | Singkatan zona waktu | IST |
{reminder_name} | Nilai reminder_name | Monthly rent reminder |
{to_number} | Nilai phone yang disimpan | 919876543210 |
{client_name} | Nama pemilik workspace | |
{organisation_name} | Nama workspace Anda |
Pengingat gambar#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week'\''s timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week's timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.status_code, response.text)// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Weekly class timetable",
phone: "919876543210",
msg_type: 1,
img_url: "https://example.com/timetable.png",
message: "Here is this week's timetable.",
cron_expression: "0 8 * * 1",
timezone: "Asia/Kolkata",
}),
});
console.log(response.status, await response.text());<?php
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Weekly class timetable',
'phone' => '919876543210',
'msg_type' => 1,
'img_url' => 'https://example.com/timetable.png',
'message' => "Here is this week's timetable.",
'cron_expression' => '0 8 * * 1',
'timezone' => 'Asia/Kolkata',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Contoh PHP mengirim field formulir, bukan JSON. Keduanya berfungsi.
Respons#
Request yang berhasil mengembalikan HTTP 200:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| Field | Tipe | Deskripsi |
|---|---|---|
status | integer | 1 jika pengingat dibuat, 0 jika request gagal. |
message | string | Reminder created successfully, selain itu berisi error. |
reminder_id | integer | ID pengingat baru. Simpan untuk membatalkan pengingat nanti. Hanya ada jika berhasil. |
Pengingat baru langsung aktif.
Error#
Error mengembalikan HTTP 400 dengan status bernilai 0, kecuali disebutkan lain:
{ "status": 0, "message": "Invalid timezone" }
| Pesan | Cara memperbaikinya |
|---|---|
Invalid JSON format: … | Body JSON tidak valid, sering kali karena koma di akhir atau baris baru tanpa escape di message. Gunakan \n untuk baris baru. Anda juga mendapatkan error ini untuk request formulir tanpa client_id, atau untuk request GET apa pun. |
Invalid client id. | Kirim client_id sebagai angka. |
Reminder name cannot be null | Tambahkan reminder_name. |
Phone number cannot be null | Tambahkan phone. |
Message template cannot be null | Tambahkan message. |
Cron expression cannot be null | Tambahkan cron_expression. |
Auth Error - Please send correct API key and Client id | Kirim api_key yang tidak kosong. |
Invalid cron expression | Pastikan ekspresi memiliki lima field yang valid. Lihat Ekspresi cron. |
Invalid timezone | Gunakan nama IANA seperti Asia/Kolkata, bukan singkatan seperti IST. |
Image URL cannot be null for image messages | Untuk msg_type 1, kirim img_url. |
File URL cannot be null for file messages | Untuk msg_type 2, kirim file_name. |
Auth Error: invalid api key | Key tersebut milik client_id lain. |
Auth Error: please check client id | Key tidak terhubung ke workspace. Buat key baru di workspace yang ingin Anda gunakan. |
Demo Account cannot access APIs | Gunakan akun biasa. |
Not enough credits | Paket Anda sudah tidak memiliki sisa pesan. |
Upgrade your plan to use reminders feature | Paket Anda tidak mencakup pengingat. Upgrade paket Anda. |
WhatsApp Logged Out. Please Reconnect!! | Nomor whatsapp_client terputus. Hubungkan kembali di WhatsApp settings. |
Invalid WhatsApp client id | Kirim whatsapp_client sebagai angka. |
Error creating reminder: … (HTTP 500) | Pengingat tidak dapat disimpan. Periksa nilai yang Anda kirim, misalnya img_url maksimal 1.000 karakter dan file_name maksimal 100 karakter. |
Cara pengingat dijalankan#
- Jadwal diperiksa dalam
timezonepengingat, dan pesan dimasukkan ke antrean ketika waktu saat ini cocok dengan ekspresi cron. - Setiap putaran membuat pesan biasa yang dikirim dari nomor WhatsApp Anda, jadi nomor tersebut harus tetap terhubung.
- Sebuah putaran dilewati jika workspace Anda tidak memiliki sisa kredit, atau jika
whatsapp_clienttidak diisi dan tidak ada nomor di workspace Anda yang terhubung saat itu. - Jika
whatsapp_clientdiisi, setiap putaran dimasukkan ke antrean nomor tersebut meskipun nomornya sudah terputus sejak itu, dan menunggu di sana. Tidak ada peralihan ke nomor lain. - Pengingat diperiksa secara berkala, tidak sampai ke hitungan detik, lalu pesan menunggu di antrean pengiriman seperti pesan lainnya. Jangan mengandalkan waktu yang persis. Jika pemeriksaan berjalan terlambat, putaran tersebut tetap dikirim hingga 10 menit terlambat (hingga 1 menit terlambat untuk putaran pertama pengingat); setelah itu putaran dilewati. Putaran yang sama tidak pernah dikirim dua kali.
Tips#
- Lihat daftar dan bersihkan: dapatkan pengingat Anda beserta ID-nya dengan Daftar pengingat, dan hentikan salah satunya dengan Batalkan pengingat.
- Menjeda dan mengedit tidak tersedia melalui API. Gunakan halaman Reminders di dashboard Anda.
- Banyak pengingat sekaligus: halaman Reminders juga dapat mengimpor pengingat dari file CSV.
- Baris baru di JSON: tulis sebagai
\ndi dalammessage. Baris baru mentah membuat JSON tidak valid.
