API להודעות
ממשק API לשליחה למספרים מרובים
שלחו את אותה הודעת WhatsApp לכמה מספרי טלפון וקבוצות בבקשה אחת. השתמשו בו לתפוצות קטנות, כמו ניוזלטרים, מבצעים והודעות.
https://wbiztool.com/api/v1/send_msg/multi/גוף הבקשה: JSON או שדות טופס
מערכת Wbiztool יוצרת הודעה אחת לכל נמען ומחזירה msg_id לכל אחת, כך שאפשר לבדוק את הסטטוס שלהן בנפרד.
דוגמה מהירה#
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
-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,9812345670,Sales Team Mumbai",
"msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/multi/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": ",".join(["9876543210", "9812345670", "Sales Team Mumbai"]),
"msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
for item in result["messages"]:
print(item["contact"], "->", item["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/send_msg/multi/", {
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", "9812345670", "Sales Team Mumbai"].join(","),
msg: "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
for (const item of result.messages) {
console.log(item.contact, "->", item.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' => implode(',', ['9876543210', '9812345670', 'Sales Team Mumbai']),
'msg' => 'Our Diwali sale starts tomorrow. Get 20% off on all orders!',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/multi/');
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) {
foreach ($result['messages'] as $item) {
echo $item['contact'] . ' -> ' . $item['msg_id'] . PHP_EOL;
}
} 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 הזה אף פעם לא בוחר מספר בשבילכם.
נמענים והודעה
phonestringחובהמספרי טלפון ושמות קבוצות במחרוזת אחת מופרדת בפסיקים, למשל
9876543210,9812345670,Sales Team Mumbai. אל תשלחו מערך JSON. ראו איך הנמענים מזוהים.country_codestringאופציונליקידומת החיוג של המדינה בלי
+, למשל91. היא מתווספת לפני כל מספר טלפון, אלא אם המספר כבר מתחיל בה. ב-JSON שלחו אותה כמחרוזת ("91"), לא כמספר. אם תשלחו מספר, כל מספר טלפון ברשימה יטופל כשם קבוצה (is_group: true), וההודעות האלה ייכשלו.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אופציונלישם הקובץ שהנמענים רואים, למשל
price-list.pdf. הוא נשלח באותיות קטנות, תווים כמו& : ? * $ ;מוחלפים ב-_, והוא נחתך ל-150 תווים. אם לא תשלחו אותו, השם יילקח מכתובת ה-URL.
אפשרויות מסירה
webhookstringאופציונליכתובת URL שמקבלת בקשת
POSTעבור כל הודעה כשהיא נשלחת או נכשלת. התוכן זהה לזה של שליחת הודעה.
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 1,
"country_code": "91",
"phone": "9876543210,9812345670",
"img_url": "https://example.com/offers/diwali-sale.jpg",
"msg": "Our Diwali sale starts tomorrow."
}'איך הנמענים מזוהים#
מערכת Wbiztool מפצלת את phone לפי פסיקים, מסירה רווחים סביב כל פריט ואז מחליטה מה כל פריט:
- ספרות בלבד (
+בהתחלה או אפסים מובילים הם בסדר): מטופל כמספר טלפון. הקידומתcountry_codeמתווספת, אלא אם המספר כבר מתחיל בה, ואז המספר חייב להיות באורך של 6 עד 15 ספרות. - כל דבר אחר: מטופל כשם של קבוצת WhatsApp, שמאותרת באותה דרך כמו ב-שליחה לקבוצה.
- קבוצה ששמה מורכב מספרות בלבד (למשל
2024) מטופלת כמספר טלפון, ואי אפשר לשלוח מה-endpoint הזה לקבוצות ששמן מכיל פסיקים. לקבוצות כאלה השתמשו ב-שליחה לקבוצה.
דברים נוספים שכדאי לדעת:
- מספרים קצרים מדי או ארוכים מדי אחרי הוספת קידומת המדינה מדולגים בשקט. הם לא מופיעים בתגובה ולא מקבלים
msg_id. - כפילויות לא מוסרות. מספר שמופיע פעמיים מקבל שתי הודעות.
- אם מספר מקומי מתחיל במקרה באותן ספרות כמו
country_code(למשל9123456780עםcountry_code91), הקידומת לא מתווספת. שלחו מספרים כאלה כשקידומת המדינה כבר כלולה בהם (919123456780). - כתובות URL של תמונות וקבצים לא נבדקות כשאתם קוראים ל-API. הן מורדות בזמן שליחת כל הודעה, כך שקישור שבור גורם להודעות להיכשל מאוחר יותר, ולא לבקשה עצמה. חלים אותם כללים של זמן שליחה כמו בשליחת הודעה: תמונות מעל 16 MB וסרטונים מעל 64 MB נכשלים, אודיו WAV ו-OGG לא נתמך, ולקבצים (
msg_type2) בלי סיומת נתמכת מתווסף .pdf. ראו שליחת תמונות וקבצים.
קרדיטים#
לפני שנוצר משהו, כל האצווה נבדקת מול הקרדיטים שנותרו לכם. כל פריט לא ריק ב-phone נספר, כולל פריטים שמדולגים בהמשך. אם הספירה גבוהה מהקרדיטים שנותרו לכם, לא נוצרת אף הודעה ומתקבלת התגובה:
{
"message": "Not enough credits: 120 messages requested, 85 credits remaining",
"status": 0
}
הודעות שנמצאות בתור אבל עוד לא נשלחו נספרות גם הן מול הקרדיטים שנותרו לכם. פצלו רשימות גדולות לבקשות קטנות יותר או הוסיפו קרדיטים לחבילה. לקמפיינים גדולים, העלו במקום זאת גיליון אלקטרוני מהדף Campaigns (קמפיינים).
תגובה#
בקשה מוצלחת מחזירה HTTP 200:
{
"msg_ids": [9817263, 9817264, 9817265],
"messages": [
{ "msg_id": 9817263, "contact": "919876543210", "is_group": false },
{ "msg_id": 9817264, "contact": "919812345670", "is_group": false },
{ "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
],
"message": "Successfully created 3 messages",
"status": 1
}
| שדה | סוג | תיאור |
|---|---|---|
status | integer | 1 אם לפחות הודעה אחת נכנסה לתור, אחרת 0. |
message | string | Successfully created N messages בהצלחה, אחרת השגיאה. |
msg_ids | array of integers | המזהים של ההודעות שבתור, לפי הסדר ב-phone. מופיע רק בהצלחה. |
messages | array | אובייקט אחד לכל הודעה שבתור. מופיע רק בהצלחה. |
messages[].msg_id | integer | המזהה של ההודעה. |
messages[].contact | string | מספר הטלפון אחרי הוספת קידומת המדינה, או שם הקבוצה. |
messages[].is_group | boolean | true אם הפריט טופל כשם קבוצה. |
השוו את messages לרשימה ששלחתם כדי למצוא מספרים שדולגו, ובדקו שהערך של is_group הוא false בכל פריט שהתכוונתם אליו כמספר טלפון.
שגיאות#
רוב השגיאות מחזירות HTTP 200 עם status שמוגדר ל-0, לכן תמיד בדקו את status בגוף התגובה. מלבד שגיאות HTTP 400 ו-403, התגובות (כולל תגובות מוצלחות) הן JSON שנשלח עם Content-Type: text/html, לכן פענחו את הגוף בעצמכם ואל תסתמכו על זיהוי JSON אוטומטי (למשל בכלי no-code):
{ "message": "Invalid whatsapp client", "status": 0 }
| הודעה | איך לתקן |
|---|---|
Auth Error | שלחו גם client_id וגם api_key. |
Invalid Client Id | שלחו את client_id כמספר. מוחזר עם HTTP 403. |
Auth Error: invalid api key | ודאו שהמפתח קיים, לא נמחק ושייך ל-client_id הזה. מוחזר עם HTTP 400. |
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. |
Not enough credits: … messages requested, … credits remaining | שלחו לפחות נמענים או הוסיפו קרדיטים. ראו קרדיטים. |
Invalid whatsapp client | המזהה whatsapp_client הזה לא נמצא בסביבת העבודה שלכם. |
No valid contacts found | כל הפריטים ב-phone היו ריקים או דולגו. ודאו שהמספרים באורך 6 עד 15 ספרות כולל קידומת המדינה. |
Demo Account can not access apis | השתמשו בחשבון רגיל. |
Invalid JSON format: … | גוף ה-JSON לא תקין, או ששלחתם שדות טופס בלי client_id. |
טיפים#
- שלחו את
phoneכמחרוזת: חברו את הרשימה שלכם בפסיקים. מערך JSON מחזיר{}. - אל תשתמשו כרגע ב-
send_bulk_messagesשל לקוח ה-Python: הוא שולח את הרשימה בתורphones, וה-endpoint הזה מתעלם מזה. קראו ל-endpoint ישירות, כמו בדוגמאות שלמעלה. - עקבו אחרי כל הודעה: שמרו כל
msg_idמתוךmessages, או העבירוwebhookכדי לקבל התראה כשכל הודעה נשלחת או נכשלת. - השאירו את המספר מחובר: כל הודעה נשלחת ממספר ה-WhatsApp שלכם, ולכן הוא חייב להישאר מחובר בהגדרות WhatsApp עד שכל האצווה יוצאת.
- טקסט שונה לכל אדם: ה-endpoint הזה שולח את אותו
msgלכולם. כדי להתאים אישית כל הודעה, קראו ל-שליחת הודעה פעם אחת לכל נמען.
