API לתזכורות
ממשק API ליצירת תזכורת
צרו הודעת WhatsApp חוזרת שנשלחת אוטומטית לפי לוח זמנים. השתמשו בו לתזכורות תשלום, לבדיקות שבועיות, למעקבים יומיים ולהודעות אחרות שחוזרות על עצמן.
https://wbiztool.com/api/v1/reminder/create/גוף הבקשה: JSON או שדות טופס
את לוח הזמנים מתארים באמצעות ביטוי cron ואזור זמן. בכל פעם שלוח הזמנים מתאים, Wbiztool מכניסה לתור הודעה למספר הטלפון או לקבוצה, בדיוק כמו הודעה שנשלחה עם שליחת הודעה. תזכורות שיוצרים כאן מופיעות גם בדף Reminders (תזכורות) בלוח הבקרה שלכם, שבו אפשר להשהות או לערוך אותן.
דוגמה מהירה#
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'];
}התזכורת הזו נשלחת בשעה 10:00 לפי שעון הודו ב-1 בכל חודש. החליפו את 12345, YOUR_API_KEY ו-678 בערכים שלכם. בסעיף אימות מוסבר איפה למצוא אותם.
פרמטרי הבקשה#
שלחו את הפרמטרים כגוף JSON או כשדות טופס. ב-JSON, שלחו כל ערך טקסט (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) כמחרוזת.
אימות
client_idintegerחובהמזהה הלקוח שלכם ל-API (API Client ID) מהדף Settings → API keys.
api_keystringחובהמפתח ה-API שלכם מאותו דף.
שולח
whatsapp_clientintegerאופציונליהמזהה של מספר ה-WhatsApp שממנו שולחים, מהדף הגדרות WhatsApp. אם לא תשלחו אותו, או שהמזהה לא נמצא בסביבת העבודה שלכם, כל תזכורת נשלחת מהמספר המחובר הראשון בסביבת העבודה שלכם בזמן הריצה.
תזכורת
reminder_namestringחובהשם לתזכורת, שמוצג בדף Reminders וזמין בתוך ההודעה כ-
{reminder_name}.phonestringחובהמספר ה-WhatsApp של הנמען עם קידומת המדינה, למשל
919876543210. אין פרמטרcountry_codeנפרד. רווחים,+,-,.וסוגריים מוסרים, וגם0בתחילת המספר מוסר (עד שני אפסים מובילים בגוף JSON). ערך שאינו מורכב כולו מספרות מטופל כשם של קבוצת WhatsApp.messagestringחובהטקסט ההודעה. הוא יכול לכלול משתני תבנית שמתמלאים בכל פעם שהתזכורת רצה. עיצוב של WhatsApp עובד:
*bold*,_italic_,~strikethrough~.cron_expressionstringחובהמתי לשלוח, כביטוי cron בן חמישה שדות, למשל
0 9 * * 1-5. ראו ביטויי cron.timezonestringאופציונליאזור הזמן שלפיו ביטוי ה-cron רץ, כשם אזור זמן של IANA, למשל
Asia/Kolkata,America/New_YorkאוEurope/London. השמיטו אותו כדי להשתמש ב-UTC. מחרוזת ריקה מחזירהInvalid timezone. הרשימה המלאה נמצאת במדריך אזורי זמן.
תמונות וקבצים
msg_typeintegerאופציונלי0טקסט (ברירת מחדל),1תמונה או2קובץ, כש-messageמשמש ככיתוב. כל ערך אחר מטופל כ-0.img_urlstringחובה כש-msg_type הוא 1 או 2כתובת URL ציבורית של התמונה, או של הקובץ עבור
msg_type2, ב-httpאו ב-https, עד 1,000 תווים. היא מורדת בכל פעם שהתזכורת רצה, לכן ודאו שהקישור ממשיך לעבוד. אפשר לארח קבצים בעזרת ה-API להעלאת מדיה.file_namestringחובה כש-msg_type הוא 2עבור
msg_type2, שם הקובץ עם הסיומת שלו, עד 100 תווים, למשלinvoice.pdf. המערכת מתעלמת ממנו בסוגי הודעות אחרים.
ביטויי cron#
ביטוי cron הוא חמישה ערכים שמופרדים ברווחים. התזכורת רצה בכל פעם שהשעה הנוכחית לפי timezone תואמת לכל החמישה:
┌───────── 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
| סימן | משמעות | דוגמה |
|---|---|---|
* | כל ערך | * בשדה השעה פירושו כל שעה. |
, | רשימת ערכים | 9,18 בשדה השעה פירושו 9:00 ו-18:00. |
- | טווח | 1-5 בשדה היום בשבוע פירושו שני עד שישי. |
/ | צעד | */6 בשדה השעה פירושו כל 6 שעות. |
דוגמאות נפוצות#
| ביטוי | רץ |
|---|---|
0 9 * * * | כל יום ב-9:00 |
0 9 * * 1-5 | שני עד שישי ב-9:00 |
0 9 * * 1 | כל יום שני ב-9:00 |
30 18 * * 0 | כל יום ראשון ב-18:30 |
0 9,18 * * * | כל יום ב-9:00 וב-18:00 |
0 */6 * * * | כל 6 שעות, בשעה עגולה |
*/30 9-17 * * 1-5 | כל 30 דקות מ-9:00 עד 17:30, שני עד שישי |
0 9 1 * * | ב-1 בכל חודש ב-9:00 |
0 10 15 * * | ב-15 בכל חודש ב-10:00 |
0 8 1 1 * | כל 1 בינואר ב-8:00 |
השעות הן לפי ה-timezone של התזכורת. השתמשו בחמישה שדות בלבד: אל תוסיפו שדה שניות או קיצורים כמו @daily.
משתני תבנית#
מצייני המיקום האלה ב-message מוחלפים בכל פעם שהתזכורת רצה. התאריכים והשעות הם לפי ה-timezone של התזכורת.
| משתנה | מוחלף ב- | דוגמה |
|---|---|---|
{current_date} | תאריך | 2026-10-01 |
{current_date_formatted} | תאריך במילים, עם אפס מוביל ביום | October 01, 2026 |
{current_time} | שעה בפורמט 24 שעות | 09:00:00 |
{current_time_12h} | שעה בפורמט 12 שעות | 09:00 AM |
{current_datetime} | תאריך ושעה | 2026-10-01 09:00:00 |
{timezone} | הערך של timezone | Asia/Kolkata |
{timezone_short} | קיצור אזור הזמן | IST |
{reminder_name} | הערך של reminder_name | Monthly rent reminder |
{to_number} | הערך השמור של phone | 919876543210 |
{client_name} | שם הבעלים של סביבת העבודה | |
{organisation_name} | שם סביבת העבודה שלכם |
תזכורת עם תמונה#
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);דוגמת ה-PHP שולחת שדות טופס במקום JSON. שתי הדרכים עובדות.
תגובה#
בקשה מוצלחת מחזירה HTTP 200:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| שדה | סוג | תיאור |
|---|---|---|
status | integer | 1 אם התזכורת נוצרה, 0 אם הבקשה נכשלה. |
message | string | Reminder created successfully, אחרת השגיאה. |
reminder_id | integer | המזהה של התזכורת החדשה. שמרו אותו כדי לבטל את התזכורת בהמשך. מופיע רק בהצלחה. |
תזכורות חדשות פעילות מיד.
שגיאות#
שגיאות מחזירות HTTP 400 עם status שמוגדר ל-0, אלא אם צוין אחרת:
{ "status": 0, "message": "Invalid timezone" }
| הודעה | איך לתקן |
|---|---|
Invalid JSON format: … | גוף ה-JSON לא תקין, לרוב בגלל פסיק מיותר בסוף או ירידת שורה בתוך message שלא עברה escape. השתמשו ב-\n לשורות חדשות. תקבלו את השגיאה הזו גם בבקשת טופס בלי client_id, או בכל בקשת GET. |
Invalid client id. | שלחו את client_id כמספר. |
Reminder name cannot be null | הוסיפו reminder_name. |
Phone number cannot be null | הוסיפו phone. |
Message template cannot be null | הוסיפו message. |
Cron expression cannot be null | הוסיפו cron_expression. |
Auth Error - Please send correct API key and Client id | שלחו api_key שאינו ריק. |
Invalid cron expression | ודאו שלביטוי יש חמישה שדות תקינים. ראו ביטויי cron. |
Invalid timezone | השתמשו בשם IANA כמו Asia/Kolkata, ולא בקיצור כמו IST. |
Image URL cannot be null for image messages | עבור msg_type 1, שלחו img_url. |
File URL cannot be null for file messages | עבור msg_type 2, שלחו file_name. |
Auth Error: invalid api key | המפתח שייך ל-client_id אחר. |
Auth Error: please check client id | המפתח לא מקושר לסביבת עבודה. צרו מפתח חדש בסביבת העבודה שבה אתם רוצים להשתמש. |
Demo Account cannot access APIs | השתמשו בחשבון רגיל. |
Not enough credits | לא נותרו הודעות בחבילה שלכם. |
Upgrade your plan to use reminders feature | החבילה שלכם לא כוללת תזכורות. שדרגו את החבילה. |
WhatsApp Logged Out. Please Reconnect!! | המספר של whatsapp_client מנותק. חברו אותו מחדש בדף הגדרות WhatsApp. |
Invalid WhatsApp client id | שלחו את whatsapp_client כמספר. |
Error creating reminder: … (HTTP 500) | לא ניתן היה לשמור את התזכורת. בדקו את הערכים ששלחתם, למשל ש-img_url באורך של 1,000 תווים לכל היותר ו-file_name באורך של 100 תווים לכל היותר. |
איך תזכורות רצות#
- לוח הזמנים נבדק לפי ה-
timezoneשל התזכורת, וההודעה נכנסת לתור כשהשעה הנוכחית תואמת לביטוי ה-cron. - כל ריצה יוצרת הודעה רגילה שנשלחת ממספר ה-WhatsApp שלכם, ולכן המספר חייב להישאר מחובר.
- ריצה מדולגת אם לא נותרו קרדיטים בסביבת העבודה שלכם, או אם לא הוגדר
whatsapp_clientואין באותו רגע אף מספר מחובר בסביבת העבודה שלכם. - אם
whatsapp_clientהוגדר, כל ריצה נכנסת לתור של המספר הזה גם אם הוא התנתק בינתיים, וממתינה שם. אין מעבר למספר אחר. - התזכורות נבדקות מדי פעם, לא בדיוק של שנייה, ולאחר מכן ההודעה ממתינה בתור השליחה כמו כל הודעה אחרת. אל תסתמכו על תזמון מדויק. אם בדיקה מתעכבת, הריצה עדיין נשלחת באיחור של עד 10 דקות (עד דקה אחת באיחור בריצה הראשונה של תזכורת); אחרי זה היא מדולגת. אותה ריצה אף פעם לא נשלחת פעמיים.
טיפים#
- הצגה וניקוי: קבלו את התזכורות שלכם ואת המזהים שלהן באמצעות רשימת תזכורות, ועצרו תזכורת באמצעות ביטול תזכורת.
- השהיה ועריכה לא זמינות דרך ה-API. השתמשו בדף Reminders בלוח הבקרה שלכם.
- תזכורות רבות בבת אחת: בדף Reminders אפשר גם לייבא תזכורות מקובץ CSV.
- שורות חדשות ב-JSON: כתבו אותן כ-
\nבתוךmessage. ירידת שורה גולמית הופכת את ה-JSON ללא תקין.
