API להודעות
ממשק API לתזמון הודעות WhatsApp
תזמנו הודעת WhatsApp עם טקסט, תמונה או מסמך שתישלח למספר טלפון או לקבוצה בתאריך ובשעה שתבחרו. השתמשו בו לתזכורות לפגישות, לברכות יום הולדת, להודעות מעקב ולמבצעים מוגבלים בזמן.
https://wbiztool.com/api/v1/schedule_msg/גוף הבקשה: JSON או שדות טופס
ההודעה ממתינה בתור שלכם עד המועד שנקבע, ואז נשלחת ממספר ה-WhatsApp שלכם. התגובה מחזירה msg_id שבעזרתו אפשר לבדוק את הסטטוס שלה או לבטל אותה.
דוגמה מהירה#
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');
}החליפו את 12345, YOUR_API_KEY ו-678 בערכים שלכם. בסעיף אימות מוסבר איפה למצוא אותם.
פרמטרי הבקשה#
אימות
client_idintegerחובהמזהה הלקוח שלכם ל-API (API Client ID) מהדף Settings → API keys.
api_keystringחובהמפתח ה-API שלכם מאותו דף.
whatsapp_clientintegerחובההמזהה של מספר ה-WhatsApp שממנו שולחים, מהדף הגדרות WhatsApp. בשונה משליחת הודעה, ה-endpoint הזה אף פעם לא בוחר מספר בשבילכם.
תזמון
datestringחובההיום שבו תישלח ההודעה, בפורמט
dd/mm/yyyy, למשל24/12/2026.timestringחובההשעה שבה תישלח ההודעה, בפורמט 24 שעות
HH:MM, למשל09:00או18:45. אל תכללו שניות.timezonestringאופציונליאזור הזמן של
dateו-time. ברירת המחדל היאIST(הודו) אם לא תשלחו אותו. ראו אזורי זמן.
נמען והודעה
phonestringחובה, אלא אם שולחים group_nameמספר ה-WhatsApp של הנמען, ספרות בלבד. רווחים,
+,-,.וסוגריים מוסרים בשבילכם. שלחו את המספר עם קידומת המדינה (919876543210) או בלי קידומת (9876543210) יחד עםcountry_code.group_namestringחובה, אלא אם שולחים phoneשם של קבוצת WhatsApp שהמספר שלכם חבר בה. הקבוצה מאותרת באותה דרך כמו ב-שליחה לקבוצה. שלחו
phoneאוgroup_name, לעולם לא את שניהם.country_codestringאופציונליקידומת החיוג של המדינה בלי
+, למשל91להודו או1לארה"ב. היא מתווספת לפניphone, אלא אם המספר כבר מתחיל בה. חריג: עם91, מספר בן 10 ספרות תמיד מקבל את הקידומת. עם קידומות אחרות, שלחו מספרים מקומיים שמתחילים באותן ספרות כשקידומת המדינה כבר כלולה בהם. המערכת מתעלמת ממנה בקבוצות.msg_typeintegerאופציונלי0טקסט (ברירת מחדל),1תמונה,2קובץ או מסמך.msgstringחובה כש-msg_type הוא 0טקסט ההודעה. בתמונות ובקבצים זה הכיתוב, והוא יכול להיות ריק. עיצוב של WhatsApp עובד:
*bold*,_italic_,~strikethrough~. אפשר להשתמש גם בשם החלופיmessage.
תמונות וקבצים
img_urlstringחובה כש-msg_type הוא 1כתובת URL ציבורית של התמונה, ב-
httpאו ב-https.file_urlstringחובה כש-msg_type הוא 2כתובת URL ציבורית ב-
httpאו ב-httpsשממנה אפשר להוריד את הקובץ ישירות.file_namestringאופציונלישם הקובץ שהנמען רואה, למשל
invoice-4821.pdf. הוא נשלח באותיות קטנות, תווים כמו& : ? * $ ;מוחלפים ב-_, והוא נחתך ל-150 תווים. אם לא תשלחו אותו, השם יילקח מכתובת ה-URL.
אפשרויות מסירה
webhookstringאופציונליכתובת URL שמקבלת בקשת
POSTכשההודעה נשלחת או נכשלת. התוכן זהה לזה של שליחת הודעה.
מתי ההודעה נשלחת#
- מערכת Wbiztool ממירה את
date,timeו-timezoneלרגע אחד, ושולחת את ההודעה ברגע שהוא עבר, כל עוד מספר ה-WhatsApp שלכם מחובר. - מועד בעבר מתקבל. ההודעה נשלחת מיד, כמו שליחה רגילה. בדקו היטב את פורמט התאריך (
dd/mm/yyyy, היום קודם) כדי שלא תשלחו הודעה חודשים מוקדם מדי. - אם המספר שלכם מנותק במועד שנקבע, ההודעה ממתינה ויוצאת ברגע שהמספר מתחבר מחדש, גם אם זה הרבה אחרי המועד המתוכנן. ל-endpoint הזה אין תפוגה, לכן בטלו את ההודעה אם היא כבר לא רלוונטית. הודעה שעדיין ממתינה במספר מנותק או שנמחק 90 יום אחרי המועד שנקבע לה נמחקת.
- עד שהיא נשלחת, להודעה יש סטטוס
0(Created) ואפשר לבטל אותה. בזמן ההמתנה היא גם נספרת מול הקרדיטים שנותרו לכם.
אזורי זמן#
הפרמטר timezone מקבל שם של אזור זמן או אחד מהקיצורים שלמטה.
שמות של אזורי זמן, כמו Asia/Kolkata, America/New_York, Europe/London או Australia/Sydney. כל שם ממסד הנתונים של אזורי הזמן של IANA עובד. זו האפשרות האמינה ביותר. רשימה נמצאת במדריך אזורי זמן.
קיצורים חייבים להיכתב באותיות גדולות. כל קיצור ממופה לאזור, ושעון הקיץ של אותו אזור מוחל אוטומטית:
| קיצור | מטופל כ- |
|---|---|
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 |
לדוגמה, EST ביולי פירושו שעון הקיץ של ניו יורק (UTC−4), ולא הפרש קבוע של UTC−5.
תזמון לקבוצה#
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);תגובה#
בקשה מוצלחת מחזירה HTTP 200:
{
"msg_id": 9817263,
"message": "Created",
"status": 1
}
| שדה | סוג | תיאור |
|---|---|---|
status | integer | 1 אם ההודעה תוזמנה, 0 אם הבקשה נכשלה. |
message | string | Created בהצלחה, אחרת השגיאה. |
msg_id | integer | המזהה של ההודעה המתוזמנת. שמרו אותו כדי לבדוק את הסטטוס או לבטל אותה בהמשך. מופיע רק בהצלחה. |
התגובה לא חוזרת על המועד שנקבע או על אזור הזמן, לכן תעדו בלוג את מה ששלחתם.
שגיאות#
רוב השגיאות מחזירות HTTP 200 עם status שמוגדר ל-0, לכן תמיד בדקו את status בגוף התגובה:
{ "message": "Scheduled date & time is not in valid format", "status": 0 }
| הודעה | איך לתקן |
|---|---|
Auth Error | שלחו גם client_id וגם api_key. |
Invalid Client Id | שלחו את client_id כמספר. מוחזר עם HTTP 403. |
Auth Error: invalid api key | ודאו שהמפתח קיים, לא נמחק ושייך ל-client_id הזה. מוחזר עם HTTP 400. |
Either phone or group_name parameter is required | הוסיפו phone או group_name. |
Please provide either phone OR group_name, not both | הסירו אחד מהם. |
Invalid phone number | השדה phone חייב להכיל ספרות בלבד (בין 6 ל-17), ויכול להתחיל ב-+. |
Invalid Contact Number "…" | אחרי הוספת קידומת המדינה, המספר חייב להיות באורך של 6 עד 15 ספרות. |
Msg cant be null | הודעות טקסט (msg_type 0) דורשות msg. |
Image Url Can't be null | עבור msg_type 1, שלחו img_url. |
File Url Can't be null | עבור msg_type 2, שלחו file_url. |
Scheduled date & time is not in valid format | date או time חסרים, או ש-timezone הוא מחרוזת ריקה. |
Not enough credits | לא נותרו הודעות בחבילה שלכם. |
Demo Account can not access apis | השתמשו בחשבון רגיל. |
Invalid JSON format: … | גוף ה-JSON לא תקין, או ששלחתם שדות טופס בלי client_id. |
טיפים#
-
בנו את התאריך בזהירות: ב-Python השתמשו ב-
strftime("%d/%m/%Y")וב-strftime("%H:%M"). ב-JavaScript, עצבו את התאריך והשעה באותו אזור זמן שאתם שולחים ב-timezone, ולא לפי השעה המקומית של השרת שלכם: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" -
אמתו את השעה: תזמנו הודעת בדיקה חמש דקות קדימה ובדקו שהיא מגיעה בזמן שציפיתם.
-
שינוי תוכניות: כדי לשנות מועד, בטלו את ההודעה ותזמנו הודעה חדשה.
-
בינתיים אל תתזמנו עם הלקוחות הרשמיים:
schedule_messageשל Python שולח את התאריך בפורמטYYYY-MM-DD(והתגובה היא{}), ו-scheduleMessageשל Node שולחschedule_time, שה-endpoint הזה לא קורא. קראו ל-endpoint ישירות כמו בדוגמאות למעלה. -
הודעות חוזרות: להודעות שחוזרות על עצמן, כמו תזכורות תשלום חודשיות, ראו יצירת תזכורת.
