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 או של חשבון ה-Telegram שממנו שולחים, מהדף הגדרות WhatsApp. אם לא תשלחו אותו, או שהמזהה לא נמצא בסביבת העבודה שלכם, כל תזכורת נשלחת ממספר שמחובר בזמן הריצה, WhatsApp קודם: מספר ה-WhatsApp המחובר הראשון, או חשבון Telegram רק כשהוא המחובר היחיד. תזכורת אל
@username, קישורt.meאוtg:<id>נשלחת מחשבון Telegram מחובר.
תזכורת
reminder_namestringחובהשם לתזכורת, שמוצג בדף Reminders וזמין בתוך ההודעה כ-
{reminder_name}.phonestringחובהמספר ה-WhatsApp של הנמען עם קידומת המדינה, למשל
919876543210. אין פרמטרcountry_codeנפרד. מוסרים רווחים,+,-,.וסוגריים, וגם00מוביל ו-0מוביל, כך שהמספר נשמר בספרות בלבד: +91 98765-43210ו-0091 98765 43210נשמרים שניהם כ-919876543210. מספר בלי קידומת המדינה שלו, כמו9876543210או09876543210, נשמר בלי ה-0ומושלם כשהתזכורת רצה, לפי המדינה של המספר שב-whatsapp_client, ואם אין – לפי המדינה למספרים בלי קידומת מדינה של סביבת העבודה. כשלא ידועה אף מדינה, הוא נשלח כפי שנכתב. ערכים מגיליון כמו919876543210.0ו-9.19876543210E+11נקראים כספרות שלהם. ערך מעוגל מגיליון כמו9.19877E+11נדחה, כי חסרות בו ספרות. ערך עם אותיות או סימנים אחרים מטופל כשם של קבוצת WhatsApp ונשמר כפי שכתבתם אותו. יוצא מן הכלל: @username, קישורt.me/usernameאוtg:<id>הם משתמש Telegram, ונשלחים מחשבון Telegram. העבירו את המזהה של החשבון הזה כ-whatsapp_client.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 1, 2026 |
{current_time} | שעה בפורמט 24 שעות | 09:00:00 |
{current_time_12h} | שעה בפורמט 12 שעות | 9: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} | |
{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. |
Phone number was rounded by a spreadsheet (like 9.19877E+11): send all of its digits as text | עצבו את עמודת הטלפון כטקסט או כמספר שלם ושלחו את המספר המלא. |
Invalid phone number or group name | מספר צריך להיות באורך של 7 עד 15 ספרות, למשל 919876543210. ערך שכולו אפסים, או ערך עם מעט מדי או יותר מדי ספרות, אינו מספר ואינו שם קבוצה. |
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ואין באותו רגע אף מספר מחובר בסביבת העבודה שלכם. ריצה שחורגת מהמגבלה היומית של המספר (1,000 הודעות ב-24 שעות) נוצרת כהודעה שנכשלה עם "Daily limit reached: …". - אם
whatsapp_clientהוגדר, כל ריצה נכנסת לתור של המספר הזה גם אם הוא התנתק בינתיים, וממתינה שם. אין מעבר למספר אחר. - התזכורות נבדקות מדי פעם, לא בדיוק של שנייה, ולאחר מכן ההודעה ממתינה בתור השליחה כמו כל הודעה אחרת. אל תסתמכו על תזמון מדויק. אם בדיקה מתעכבת, הריצה עדיין נשלחת באיחור של עד 10 דקות (עד דקה אחת באיחור בריצה הראשונה של תזכורת); אחרי זה היא מדולגת. אותה ריצה אף פעם לא נשלחת פעמיים.
טיפים#
- הצגה וניקוי: קבלו את התזכורות שלכם ואת המזהים שלהן באמצעות רשימת תזכורות, ועצרו תזכורת באמצעות ביטול תזכורת.
- השהיה ועריכה לא זמינות דרך ה-API. השתמשו בדף Reminders בלוח הבקרה שלכם.
- תזכורות רבות בבת אחת: בדף Reminders אפשר גם לייבא תזכורות מקובץ CSV.
- שורות חדשות ב-JSON: כתבו אותן כ-
\nבתוךmessage. ירידת שורה גולמית הופכת את ה-JSON ללא תקין.
