דלגו לתוכן
WbizTool

API להודעות

ממשק API לשליחה למספרים מרובים

שלחו את אותה הודעת WhatsApp לכמה מספרי טלפון וקבוצות בבקשה אחת. השתמשו בו לתפוצות קטנות, כמו ניוזלטרים, מבצעים והודעות.

POSThttps://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!"
  }'

החליפו את 12345, YOUR_API_KEY ו-678 בערכים שלכם. בסעיף אימות מוסבר איפה למצוא אותם.

פרמטרי הבקשה#

אימות

client_idintegerחובה

מזהה הלקוח שלכם ל-API (API Client ID) מהדף Settings → API keys.

api_keystringחובה

מפתח ה-API שלכם מאותו דף.

whatsapp_clientintegerחובה

המזהה של מספר ה-WhatsApp או של חשבון ה-Telegram שממנו שולחים, מהדף הגדרות WhatsApp. בשונה משליחת הודעה, ה-endpoint הזה אף פעם לא בוחר מספר בשבילכם.

נמענים והודעה

phonestringחובה

מספרי טלפון ושמות קבוצות במחרוזת אחת מופרדת בפסיקים, למשל 9876543210,9812345670,Sales Team Mumbai. אל תשלחו מערך JSON. ראו איך הנמענים מזוהים.

country_codestringאופציונלי

קידומת החיוג של המדינה בלי +, למשל 91. היא מתווספת לפני כל מספר טלפון, אלא אם המספר כבר מתחיל בה או נכתב עם + או 00. ב-JSON גם מחרוזת ("91") וגם מספר (91) עובדים.

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 עבור כל הודעה כשהיא נשלחת, נכשלת, מבוטלת או פגה. התוכן זהה לזה של שליחת הודעה.

תמונה מכתובת URLcURL
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 לפי פסיקים, מסירה רווחים סביב כל פריט ואז מחליטה מה כל פריט:

  • מספרי טלפון אפשר לכתוב כמו שהם אצלכם: ‎+91 98765 43210, ‏‎98765-43210, ‏‎(987) 654-3210, ‏‎0091 98765 43210 ו-‎+44 (0)20 7946 0018 עובדים כולם, וגם ערכים מגיליון כמו 919876543210.0 ו-9.19876543210E+11.
  • country_code מתווספת אלא אם המספר כבר מתחיל בה או נכתב עם + או 00: ‎+44 20 7946 0018 עם country_code 91 נשאר 442079460018. לכן אפשר לערבב ברשימה אחת מספרים מכמה מדינות: כתבו את המספרים של המדינות האחרות עם +.
  • מספר מקומי שנכתב עם ה-0 המוביל שלו עובד גם הוא: 09876543210 עם country_code 91 נשלח אל 919876543210, ו-0612345678 עם 39 (איטליה, שבה ה-0 הוא חלק מהמספר) נשלח אל 390612345678.
  • אחרי הוספת קידומת המדינה, מספר חייב להיות באורך של 7 עד 15 ספרות.
  • טקסט עם אותיות או סימנים אחרים, כמו Sales Team Mumbai או Family 2024, מטופל כשם של קבוצת WhatsApp, שמאותרת באותה דרך כמו ב-שליחה לקבוצה.
  • שם קבוצה בלי אותיות, כמו ‎2024-2025, נקרא כמספר טלפון, אלא אם יש בו פחות מ-10 ספרות וסביבת העבודה שלכם כבר שלחה הודעה לקבוצה בדיוק בשם הזה (היא מופיעה תחת קבוצות באנשי קשר). שם קצר עם פחות מ-7 ספרות ועם מקף, נקודה או סוגריים, כמו ‎2024-25 או ‎(2024), הוא תמיד שם קבוצה. אי אפשר לשלוח מה-endpoint הזה לקבוצות ששמן מכיל פסיקים. לקבוצות כאלה השתמשו ב-שליחה לקבוצה.
  • מחשבון Telegram, ‎@username, קישור t.me/username או tg:<id> הם אדם ולא שם של קבוצה, ומספר טלפון נשלח לאותו אדם ב-Telegram. ממספר WhatsApp, שמות משתמש, קישורי t.me ו-tg:<id> מדולגים.

דברים נוספים שכדאי לדעת:

  • מספרים קצרים מדי או ארוכים מדי אחרי הוספת קידומת המדינה, ערכים מעוגלים מגיליון ופריטים שהם רק אפסים (0, 00) מדולגים בשקט. הם לא מופיעים בתגובה ולא מקבלים msg_id.
  • כפילויות לא מוסרות. מספר שמופיע פעמיים מקבל שתי הודעות.
  • אם מספר מקומי מתחיל במקרה באותן ספרות כמו country_code (למשל 9123456780 עם country_code 91), הקידומת לא מתווספת. שלחו מספרים כאלה כשקידומת המדינה כבר כלולה בהם (919123456780).
  • כתובות URL של תמונות וקבצים לא נבדקות כשאתם קוראים ל-API. הן מורדות בזמן שליחת כל הודעה, כך שקישור שבור גורם להודעות להיכשל מאוחר יותר, ולא לבקשה עצמה. חלים אותם כללים של זמן שליחה כמו בשליחת הודעה: תמונות מעל 16 MB וסרטונים מעל 64 MB נכשלים, אי אפשר לשלוח אודיו WAV ו-OGG כתמונה (msg_type 1), ולקבצים (msg_type 2) בלי סיומת, או עם סיומת שלא נתמכת, מתווסף ‎.pdf. ראו שליחת תמונות וקבצים.

מגבלות הודעות#

לפני שנוצר משהו, כל האצווה נבדקת, כך שרשימה אף פעם לא נשלחת באופן חלקי. כל פריט לא ריק ב-phone נספר, כולל פריטים שמדולגים בהמשך, וגם הודעות שנמצאות בתור אבל עוד לא נשלחו נספרות.

  • כל תוכנית: האצווה חייבת להיכנס במגבלת השימוש ההוגן היומית של המספר השולח – 1,000 הודעות בכל 24 שעות. אחרת לא נוצרת אף הודעה ומתקבלת התגובה:
{
  "message": "Daily limit reached: a number can send 1,000 messages in 24 hours (fair use). Send the rest tomorrow. 1200 messages requested, 640 more can go out from this number in the next 24 hours.",
  "code": "daily_limit_reached",
  "status": 0
}
  • תוכנית חינמית: האצווה חייבת להיכנס גם בהודעות החינמיות שנותרו לסביבת העבודה (50 בכל 30 יום). אחרת מתקבלת התגובה:
{
  "message": "Not enough credits: 120 messages requested, 35 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
}
שדהסוגתיאור
statusinteger1 אם לפחות הודעה אחת נכנסה לתור, אחרת 0.
messagestringSuccessfully created N messages בהצלחה, אחרת השגיאה.
msg_idsarray of integersהמזהים של ההודעות שבתור, לפי הסדר ב-phone. מופיע רק בהצלחה.
messagesarrayאובייקט אחד לכל הודעה שבתור. מופיע רק בהצלחה.
messages[].msg_idintegerהמזהה של ההודעה.
messages[].contactstringמספר הטלפון אחרי הוספת קידומת המדינה, או שם הקבוצה.
messages[].is_groupbooleantrue אם הפריט טופל כשם קבוצה.

השוו את 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ההודעות של התוכנית החינמית לא מספיקות לרשימה. שלחו לפחות נמענים או בחרו תוכנית. ראו מגבלות הודעות.
Daily limit reached: … messages requested, … more can go out from this number in the next 24 hours.פצלו את הרשימה על פני ימים או מספרים. ראו מגבלות הודעות.
Invalid whatsapp clientהמזהה whatsapp_client הזה לא נמצא בסביבת העבודה שלכם.
No valid contacts foundכל הפריטים ב-phone היו ריקים או דולגו. ודאו שהמספרים באורך 7 עד 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 לכולם. כדי להתאים אישית כל הודעה, קראו ל-שליחת הודעה פעם אחת לכל נמען.