API peringatan
API Cipta Peringatan
Cipta mesej WhatsApp berulang yang dihantar secara automatik mengikut jadual. Gunakannya untuk peringatan bayaran, semakan mingguan, susulan harian dan mesej lain yang berulang.
https://wbiztool.com/api/v1/reminder/create/Body: JSON atau medan borang
Anda menerangkan jadual dengan ungkapan cron dan zon waktu. Setiap kali jadual sepadan, Wbiztool memasukkan mesej ke dalam baris gilir untuk nombor telefon atau kumpulan, sama seperti mesej yang dihantar dengan Hantar mesej. Peringatan yang anda cipta di sini juga muncul di halaman Reminders (Peringatan) dalam papan pemuka anda, tempat anda boleh menjeda atau mengeditnya.
Contoh ringkas#
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'];
}Peringatan ini dihantar pada pukul 10:00 waktu India pada 1 haribulan setiap bulan. Gantikan 12345, YOUR_API_KEY dan 678 dengan nilai anda sendiri. Lihat Pengesahan identiti untuk mengetahui di mana nilai ini boleh didapati.
Parameter permintaan#
Hantar parameter sebagai badan JSON atau sebagai medan borang. Dalam JSON, hantar setiap nilai teks (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) sebagai rentetan.
Pengesahan identiti
client_idintegerwajibAPI Client ID anda dari Settings → API keys (Tetapan → Kunci API).
api_keystringwajibKunci API anda dari halaman yang sama.
Penghantar
whatsapp_clientintegerpilihanID nombor WhatsApp yang digunakan untuk menghantar, dari tetapan WhatsApp. Jika anda tidak menyertakannya, atau ID itu tiada dalam ruang kerja anda, setiap peringatan dihantar dari nombor pertama yang disambungkan dalam ruang kerja anda pada masa ia dijalankan.
Peringatan
reminder_namestringwajibNama untuk peringatan, dipaparkan di halaman Reminders dan boleh digunakan dalam mesej sebagai
{reminder_name}.phonestringwajibNombor WhatsApp penerima dengan kod negaranya, contohnya
919876543210. Tiada parametercountry_codeyang berasingan. Ruang,+,-,.dan kurungan dibuang, dan0di hadapan dibuang (sehingga dua sifar di hadapan dalam badan JSON). Nilai yang bukan digit sepenuhnya dianggap sebagai nama kumpulan WhatsApp.messagestringwajibTeks mesej. Ia boleh mengandungi pemboleh ubah templat yang diisi setiap kali peringatan dijalankan. Format WhatsApp boleh digunakan:
*bold*,_italic_,~strikethrough~.cron_expressionstringwajibMasa untuk menghantar, sebagai ungkapan cron lima medan seperti
0 9 * * 1-5. Lihat Ungkapan cron.timezonestringpilihanZon waktu tempat ungkapan cron dijalankan, sebagai nama zon waktu IANA seperti
Asia/Kolkata,America/New_YorkatauEurope/London. Jangan sertakannya untuk menggunakanUTC. Rentetan kosong memulangkanInvalid timezone. Lihat Rujukan zon waktu untuk senarai penuh.
Imej dan fail
msg_typeintegerpilihan0teks (lalai),1imej atau2fail, denganmessagesebagai kapsyen. Sebarang nilai lain dianggap sebagai0.img_urlstringWajib apabila msg_type ialah 1 atau 2URL
httpatauhttpsawam bagi imej, atau bagi fail untukmsg_type2, sehingga 1,000 aksara. Ia dimuat turun setiap kali peringatan dijalankan, jadi pastikan pautan itu terus berfungsi. Anda boleh mengehos fail dengan API Muat naik media.file_namestringWajib apabila msg_type ialah 2Untuk
msg_type2, nama fail beserta sambungannya, sehingga 100 aksara, contohnyainvoice.pdf. Diabaikan untuk jenis mesej lain.
Ungkapan cron#
Ungkapan cron ialah lima nilai yang dipisahkan dengan ruang. Peringatan dijalankan apabila masa semasa dalam timezone sepadan dengan kesemua lima nilai:
┌───────── 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 | Maksud | Contoh |
|---|---|---|
* | Setiap nilai | * dalam medan jam bermaksud setiap jam. |
, | Senarai nilai | 9,18 dalam medan jam bermaksud 9:00 dan 18:00. |
- | Julat | 1-5 dalam medan hari dalam minggu bermaksud Isnin hingga Jumaat. |
/ | Langkah | */6 dalam medan jam bermaksud setiap 6 jam. |
Contoh biasa#
| Ungkapan | Dijalankan |
|---|---|
0 9 * * * | Setiap hari pada 9:00 |
0 9 * * 1-5 | Isnin hingga Jumaat pada 9:00 |
0 9 * * 1 | Setiap Isnin pada 9:00 |
30 18 * * 0 | Setiap Ahad pada 18:30 |
0 9,18 * * * | Setiap hari pada 9:00 dan 18:00 |
0 */6 * * * | Setiap 6 jam, tepat pada awal jam |
*/30 9-17 * * 1-5 | Setiap 30 minit dari 9:00 hingga 17:30, Isnin hingga Jumaat |
0 9 1 * * | 1 haribulan setiap bulan pada 9:00 |
0 10 15 * * | 15 haribulan setiap bulan pada 10:00 |
0 8 1 1 * | Setiap 1 Januari pada 8:00 |
Masa adalah dalam timezone peringatan. Gunakan lima medan sahaja: jangan tambah medan saat atau pintasan seperti @daily.
Pemboleh ubah templat#
Pemegang tempat ini dalam message digantikan setiap kali peringatan dijalankan. Tarikh dan masa adalah dalam timezone peringatan.
| Pemboleh ubah | Digantikan dengan | Contoh |
|---|---|---|
{current_date} | Tarikh | 2026-10-01 |
{current_date_formatted} | Tarikh dalam perkataan (bahasa Inggeris), hari dengan sifar di hadapan | October 01, 2026 |
{current_time} | Masa 24 jam | 09:00:00 |
{current_time_12h} | Masa 12 jam | 09:00 AM |
{current_datetime} | Tarikh dan masa | 2026-10-01 09:00:00 |
{timezone} | Nilai timezone | Asia/Kolkata |
{timezone_short} | Singkatan zon waktu | IST |
{reminder_name} | Nilai reminder_name | Monthly rent reminder |
{to_number} | Nilai phone yang disimpan | 919876543210 |
{client_name} | Nama pemilik ruang kerja | |
{organisation_name} | Nama ruang kerja anda |
Peringatan imej#
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 menghantar medan borang dan bukannya JSON. Kedua-duanya berfungsi.
Respons#
Permintaan yang berjaya memulangkan HTTP 200:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| Medan | Jenis | Penerangan |
|---|---|---|
status | integer | 1 jika peringatan telah dicipta, 0 jika permintaan gagal. |
message | string | Reminder created successfully, jika tidak, mesej ralat. |
reminder_id | integer | ID peringatan baharu. Simpan untuk membatalkan peringatan kemudian. Hanya ada jika berjaya. |
Peringatan baharu aktif serta-merta.
Ralat#
Ralat memulangkan HTTP 400 dengan status ditetapkan kepada 0, kecuali dinyatakan sebaliknya:
{ "status": 0, "message": "Invalid timezone" }
| Mesej | Cara membetulkannya |
|---|---|
Invalid JSON format: … | Badan JSON tidak sah, selalunya kerana koma di hujung atau pemisah baris yang tidak di-escape dalam message. Gunakan \n untuk baris baharu. Anda juga menerima ralat ini untuk permintaan borang tanpa client_id, atau untuk sebarang permintaan GET. |
Invalid client id. | Hantar client_id sebagai nombor. |
Reminder name cannot be null | Tambah reminder_name. |
Phone number cannot be null | Tambah phone. |
Message template cannot be null | Tambah message. |
Cron expression cannot be null | Tambah cron_expression. |
Auth Error - Please send correct API key and Client id | Hantar api_key yang tidak kosong. |
Invalid cron expression | Pastikan ungkapan mempunyai lima medan yang sah. Lihat Ungkapan 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, hantar img_url. |
File URL cannot be null for file messages | Untuk msg_type 2, hantar file_name. |
Auth Error: invalid api key | Kunci itu milik client_id yang lain. |
Auth Error: please check client id | Kunci tidak dipautkan ke mana-mana ruang kerja. Cipta kunci baharu dalam ruang kerja yang anda mahu gunakan. |
Demo Account cannot access APIs | Gunakan akaun biasa. |
Not enough credits | Pelan anda tiada baki mesej. |
Upgrade your plan to use reminders feature | Pelan anda tidak termasuk peringatan. Naik taraf pelan anda. |
WhatsApp Logged Out. Please Reconnect!! | Nombor whatsapp_client terputus sambungan. Sambungkannya semula di tetapan WhatsApp. |
Invalid WhatsApp client id | Hantar whatsapp_client sebagai nombor. |
Error creating reminder: … (HTTP 500) | Peringatan tidak dapat disimpan. Semak nilai yang anda hantar, contohnya pastikan img_url tidak melebihi 1,000 aksara dan file_name tidak melebihi 100 aksara. |
Cara peringatan dijalankan#
- Jadual disemak dalam
timezoneperingatan, dan mesej dimasukkan ke dalam baris gilir apabila masa semasa sepadan dengan ungkapan cron. - Setiap larian mencipta mesej biasa yang dihantar dari nombor WhatsApp anda, jadi nombor itu mesti kekal disambungkan.
- Larian dilangkau jika ruang kerja anda tiada baki kredit, atau jika tiada
whatsapp_clientditetapkan dan tiada nombor dalam ruang kerja anda yang disambungkan pada saat itu. - Jika
whatsapp_clientditetapkan, setiap larian dimasukkan ke dalam baris gilir nombor itu walaupun ia telah terputus sambungan sejak itu, dan menunggu di sana. Tiada sandaran kepada nombor lain. - Peringatan disemak secara berkala, bukan tepat pada saatnya, dan mesej kemudiannya menunggu dalam baris gilir penghantaran seperti mesej lain. Jangan bergantung pada masa yang tepat. Jika semakan berjalan lewat, larian masih dihantar sehingga 10 minit lewat (sehingga 1 minit lewat untuk larian pertama peringatan); selepas itu ia dilangkau. Larian yang sama tidak akan dihantar dua kali.
Petua#
- Senaraikan dan kemas: dapatkan peringatan anda dan ID-nya dengan Senarai peringatan, dan hentikan satu peringatan dengan Batal peringatan.
- Menjeda dan mengedit tidak tersedia melalui API. Gunakan halaman Reminders dalam papan pemuka anda.
- Banyak peringatan sekali gus: halaman Reminders juga boleh mengimport peringatan daripada fail CSV.
- Baris baharu dalam JSON: tulis sebagai
\ndi dalammessage. Pemisah baris mentah menjadikan JSON tidak sah.
