API v2 (בטא)
מעבר מ-v1 ל-v2
API v2 עושה את מה ש-v1 עושה, עם מפתחות בטוחים יותר, סגנון אחד לכתובות URL, קודי סטטוס HTTP אמיתיים ו-Webhooks חתומים ב-JSON. הדף הזה ממפה כל endpoint ושדה של v1 למקבילה שלהם ב-v2. מה שחדש ב-v2 עצמו מופיע בסקירה.
מה משתנה בכל מקום#
- מפתחות: ה-
client_idוה-api_keyשל v1 הופכים לכותרת אחת,Authorization: Bearer wbz_live_…. צרו מפתח v2 בדף הגדרות ← מפתחות API, בכרטיס מפתחות API v2, רק עם ההרשאות שהאפליקציה צריכה. מפתחות v1 לא עובדים ב-v2, ומפתחות v2 לא עובדים ב-v1. - JSON בלבד: אין שדות טופס. העלאות קבצים נשלחות ל-
POST /media(multipart) והקבצים נשלחים לפיmedia_id. - שיטות וכתובות URL:
GETלקריאה,POSTליצירה,PATCHלשינוי,DELETEלביטול או למחיקה, תחתhttps://wbiztool.com/api/v2. - קודי סטטוס HTTP במקום
"status": 0או1(ראו תגובות ושגיאות). - מספרי טלפון בפורמט בינלאומי עם
+, בליcountry_code. - זמנים ב-ISO 8601 עם היסט, במקום שדות נפרדים לתאריך, לשעה ולאזור הזמן.
- Webhooks הם endpoints שמוסיפים פעם אחת לסביבת העבודה, עם אירועי JSON חתומים, במקום כתובת
webhookבכל הודעה.
endpoint אחר endpoint#
הנתיבים של v2 הם יחסית ל-https://wbiztool.com/api/v2.
שליחה, שדה אחר שדה#
| v1 | v2 | הערות |
|---|---|---|
client_id + api_key (בגוף או ב-Authorization: Bearer) | Authorization: Bearer wbz_live_… | מפתח v2 חדש; אין client_id |
phone + country_code | to.phone | מספר אחד ב-E.164 עם +: "9876543210" עם "country_code": "91" הופך ל-{"phone": "+919876543210"}. קידומת מדינה לא מתווספת בשבילכם |
phone עם @username (Telegram) | to.username | @name, t.me/name או tg: ומזהה, מחשבון Telegram |
group_name | to.group | השם המדויק של הקבוצה |
| (לא קיים ב-v1) | to.contact_id | איש קשר שמור |
whatsapp_client | from | ה-id של המספר; לא חובה כשמחובר מספר אחד, כמו קודם |
msg (או message) | text | עד 3,000 תווים, כמו קודם |
msg_type 0, 1, 2 | אין | הודעה עם media היא הודעת מדיה; media.type (image או file) כשהקישור לא מבהיר את הסוג |
img_url / file_url | media.url | קישור http(s) ציבורי |
file (העלאה באותה בקשה) | media.media_id | העלו קודם, ואז שלחו את המזהה כמה פעמים שתרצו |
file_name | media.file_name | לקבצים |
date + time + timezone של schedule_msg/ | send_at | זמן אחד עם ההיסט שלו: 24/12/2026, 10:30 ו-Asia/Kolkata הופכים ל-"2026-12-24T10:30:00+05:30" |
expire_after_seconds | expires_at | זמן, לא משך: עכשיו ועוד מספר השניות, עם ההיסט שלו |
webhook | endpoints של Webhooks | מתווספים פעם אחת עם POST /webhooks, לכל ההודעות של סביבת העבודה |
msg_id בתגובה | id | ה-Message עצמו חוזר, עם ה-status שלו |
אותה שליחה ב-v1 וב-v2:
# v1
curl -X POST https://wbiztool.com/api/v1/send_msg/ \
-H "Authorization: Bearer YOUR_V1_KEY" \
-H "Content-Type: application/json" \
-d '{"whatsapp_client": 101, "msg_type": 1, "country_code": "91", "phone": "9876543210",
"img_url": "https://example.com/offers/diwali-sale.jpg", "msg": "Our Diwali sale starts today",
"expire_after_seconds": 3600}'
# v2
curl -X POST https://wbiztool.com/api/v2/messages \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: diwali-9876543210" \
-d '{"from": 101, "to": {"phone": "+919876543210"},
"media": {"url": "https://example.com/offers/diwali-sale.jpg"}, "text": "Our Diwali sale starts today",
"expires_at": "2026-10-20T11:30:00+05:30"}'
כמה התנהגויות של v1 הוסרו בכוונה:
- אין ניחוש של קידומות מדינה. v1 הוסיף את
country_codeלפני מספר (עם91, תמיד לפני מספר בן 10 ספרות). v2 מקבל את המספר בדיוק כפי שהוא נכתב עם+. - אין הורדת קובץ כשאתם קוראים ל-API. v1 הוריד את
img_urlואתfile_urlבמהלך הבקשה. v2 בודק שהקישור ציבורי ומוריד את הקובץ כשההודעה נשלחת; קישור שבור מופיע כהודעה במצבfailed. - אין שורה של כישלון כשהשליחה נדחית. כש-v1 דוחה שליחה מעבר ל-1,000 ההודעות היומיות, הוא עדיין שומר את ההודעה כנכשלה. v2 לא שומר כלום כשהוא דוחה שליחה.
- שדות לא מוכרים נדחים במקום שהמערכת תתעלם מהם.
סטטוסים#
המספרים והמילים של v1 הופכים לשדה status אחד:
| v1 | status ב-v2 |
|---|---|
0 Created / Pending | queued, או scheduled כל עוד ה-send_at שלה בעתיד |
1 Sent | sent, delivered או read (הווי של WhatsApp) |
2 Failed | failed |
3 Cancelled | cancelled |
4 Expired | expired |
אירועי Webhook הם message.sent, message.failed, message.cancelled ו-message.expired, ומתאימים ל-SENT, FAILED, CANCELLED ו-EXPIRED של v1.
תגובות ושגיאות#
v1 מחזיר הרבה שגיאות עם HTTP 200 או 400 ו-"status": 0, והצלחה עם "status": 1. v2 משתמש בקוד הסטטוס של HTTP:
- הצלחה היא
200, 201(נוצר) או202(בתור), והגוף הוא האובייקט עצמו, למשל ה-Message. אין עטיפה שלstatus: 1. - שגיאות הן
4xxאו5xxעם מבנה אחד:{"error": {"code", "message", "field", "docs", "request_id"}}. התבססו עלcode, ולא על ה-messageבאנגלית. כל הקודים מופיעים בדף השגיאות.
# v1
result = response.json()
if result.get("status") == 1:
msg_id = result["msg_id"]
# v2
if response.status_code == 202:
message_id = response.json()["id"]
else:
error = response.json()["error"]
if error["code"] == "number_daily_cap_reached":
... # try again tomorrow
כמה הודעות של v1 והקודים שלהן ב-v2:
| ההודעה ב-v1 | הקוד ב-v2 |
|---|---|
Auth Error: invalid api key | 401 invalid_api_key, api_key_revoked או api_key_expired |
Invalid phone number / Invalid Contact Number "…" | 422 invalid_phone |
Msg cant be null | 400 text_required |
Message length is too long | 400 text_too_long |
Invalid whatsapp client | 422 number_not_found |
Invalid whatsapp client id. | 422 from_required |
Not enough credits | 402 no_credits |
Daily limit reached: … | 429 number_daily_cap_reached |
Demo Account can not access apis | 403 demo_account |
Account Disabled | 403 account_disabled |
Invalid JSON format: … | 400 invalid_json |
Webhooks#
ב-v1, כל הודעה יכולה לשאת כתובת webhook שמקבלת msg_id=…&status=SENT כשדות טופס. ב-v2:
- הוסיפו endpoint פעם אחת עם
POST /webhooksושמרו את ה-secretשלו. - הוא מקבל אירועי JSON על כל ההודעות של סביבת העבודה, עם ה-Message המלא ב-
data.message. התאימו אותם לרשומות שלכם לפיdata.message.id. - אמתו את החתימה: אותה שיטה כמו ב-v1 (
WbizTool-Timestamp, WbizTool-Signature: v1=…), אבל עם הסוד של ה-endpoint עצמו במקום הסוד של סביבת העבודה. - סננו כפילויות עם
WbizTool-Event-Id. הניסיונות החוזרים נמשכים כ-23 שעות, ולא 4 ניסיונות במשך כמה דקות כמו ב-v1, וגם תגובות4xxמנוסות שוב.
לאירועי החיבור של v1 (webhook_url ב-whatsapp/connect/) עדיין אין אירוע ב-v2: בצעו במקום זאת polling ל-GET /numbers/{id}.
רשימת בדיקה#
יצירת מפתח v2 לכל אפליקציה
בדף הגדרות ← מפתחות API, רק עם ההרשאות שהיא צריכה. נסו אותו קודם עם מפתח בדיקה, שבודק הכול ולא שולח כלום.
שינוי הבקשות
כתובות URL ושיטות חדשות, גוף JSON,
to/from/text/media, מספרי טלפון עם+, זמנים עם היסט. הוסיפוIdempotency-Keyלכל שליחה.שינוי הטיפול בשגיאות
בדקו את סטטוס ה-HTTP, ואז את
error.code. טפלו ב-429בהמתנה לפיRetry-After.העברת ה-Webhooks
הוסיפו endpoint, אמתו חתימות עם הסוד שלו, וסננו כפילויות לפי מזהה האירוע.
מעבר ומחיקת המפתח הישן
אחרי שהאפליקציה רצה על v2, מחקו את מפתח ה-v1 שלה בדף הגדרות ← מפתחות API.
