API למדיה
ממשק API להעלאת מדיה
העלו קובץ תמונה, מסמך, אודיו או וידאו לספריית המדיה של סביבת העבודה שלכם, וקבלו בחזרה כתובת URL להורדה. העבירו את הכתובת הזו ל-שליחת הודעה, או, לתמונות בלבד, ל-יצירת תזכורת בתור img_url, כשאין לכם אחסון קבצים משלכם.
https://wbiztool.com/api/v1/media/upload/גוף הבקשה: multipart/form-data
הקובץ נשמר מיד, והתגובה כוללת את ה-file_url שלו. קבצים שהועלו מופיעים גם בדף Media Directory (ספריית מדיה) בלוח הבקרה שלכם.
דוגמה מהירה#
curl -X POST https://wbiztool.com/api/v1/media/upload/ \
-F client_id=12345 \
-F api_key=YOUR_API_KEY \
-F media_file=@./invoice-4821.pdfimport requests
with open("invoice-4821.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v1/media/upload/",
data={"client_id": 12345, "api_key": "YOUR_API_KEY"},
files={"media_file": f},
timeout=120,
)
try:
result = response.json()
except ValueError:
# A proxy can reject a very large upload with an HTML page before it reaches Wbiztool.
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check the file size.")
if result["status"] == 1:
print("Uploaded:", result["data"]["file_url"])
else:
print("Failed:", result["message"])// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const form = new FormData();
form.append("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("media_file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v1/media/upload/", { method: "POST", body: form });
const result = await response.json();
if (result.status === 1) {
console.log("Uploaded:", result.data.file_url);
} else {
console.error("Failed:", result.message);
}<?php
$ch = curl_init('https://wbiztool.com/api/v1/media/upload/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
// An array body (not json_encode) makes cURL send multipart/form-data.
CURLOPT_POSTFIELDS => [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'media_file' => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Uploaded: ' . $result['data']['file_url'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}החליפו את 12345 ו-YOUR_API_KEY בערכים שלכם. בסעיף אימות מוסבר איפה למצוא אותם.
פרמטרי הבקשה#
שלחו את הבקשה כ-multipart/form-data. ה-endpoint הזה לא קורא גופי JSON ופרמטרים ב-query string.
client_idintegerחובהמזהה הלקוח שלכם ל-API (API Client ID) מהדף Settings → API keys.
api_keystringחובהמפתח ה-API שלכם מאותו דף.
media_filefileחובההקובץ להעלאה, עד 64 MB. הסוג שלו נקבע לפי הסיומת של שם הקובץ, ולכן השם חייב להסתיים באחת מהסיומות הנתמכות.
סוגי קבצים נתמכים#
| קטגוריה | סיומות |
|---|---|
| תמונות | .jpg, .jpeg, .png, .gif |
| מסמכים | .pdf, .doc, .xls, .ppt, .txt, .csv |
| אודיו | .mp3, .wav |
| וידאו | .mp4, .mov |
| ארכיונים | .zip |
תמונות נשמרות עם file_type שמוגדר ל-image; כל השאר נשמר כ-file.
תגובה#
בקשה מוצלחת מחזירה HTTP 200:
{
"status": 1,
"message": "File uploaded successfully",
"data": {
"id": 5122,
"file_name": "media_12345_17895804001234.pdf",
"original_file_name": "invoice-4821.pdf",
"file_url": "https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895804001234.pdf",
"file_type": "file",
"file_size": 248312,
"file_size_display": "242.5 KB",
"mime_type": "application/pdf",
"is_image": false,
"file_extension": "pdf",
"created_at": "2026-09-16T10:20:31.512934+00:00"
}
}
| שדה | סוג | תיאור |
|---|---|---|
status | integer | 1 אם הקובץ הועלה, 0 אם הבקשה נכשלה. |
message | string | File uploaded successfully, אחרת השגיאה. |
data.id | integer | המזהה של קובץ המדיה. השתמשו בו עם קבלת קובץ מדיה. |
data.file_name | string | השם שתחתיו הקובץ נשמר, שנוצר על ידי Wbiztool. |
data.original_file_name | string | השם של הקובץ שהעליתם. |
data.file_url | string | כתובת URL להורדה ישירה. השתמשו בה בתור img_url או file_url בזמן השליחה. |
data.file_type | string | image או file. |
data.file_size | integer | הגודל בבייטים. |
data.file_size_display | string | גודל קריא עם ספרה אחת אחרי הנקודה, למשל 242.5 KB. |
data.mime_type | string | סוג MIME שנגזר מהסיומת, למשל application/pdf. |
data.is_image | boolean | true כש-file_type הוא image. |
data.file_extension | string | הסיומת של original_file_name באותיות קטנות, בלי הנקודה. |
data.created_at | string | זמן ההעלאה, בפורמט ISO 8601 לפי UTC עם הפרש +00:00. |
שגיאות#
גם שגיאות מחזירות HTTP 200, עם status שמוגדר ל-0:
{ "status": 0, "message": "File is too large. Maximum size is 64MB. Your file: 71.3MB" }
| הודעה | איך לתקן |
|---|---|
Only POST method is supported | שלחו בקשת POST. |
client_id is required | הוסיפו client_id כשדה טופס. ודאו שהגוף הוא multipart/form-data ולא JSON. |
api_key is required | הוסיפו api_key כשדה טופס. |
media_file is required | שלחו את הקובץ בשדה בשם media_file. |
client_id must be a valid integer | שלחו את client_id כמספר. |
Invalid API key | ודאו שהמפתח קיים ולא נמחק או הושבת. |
Invalid client_id for this API key | המפתח שייך ל-client_id אחר. |
File is too large. Maximum size is 64MB. Your file: …MB | העלו קובץ בגודל 64 MB לכל היותר. |
File type not supported. Type detected: … | השתמשו באחת מהסיומות הנתמכות. |
Error uploading file: … | לא ניתן היה להשלים את ההעלאה. נסו שוב. ההודעה הזו מופיעה גם אם מפתח ה-API לא מקושר לסביבת עבודה; צרו מפתח חדש בסביבת העבודה שבה אתם רוצים להשתמש. |
העלאה ושליחה#
העלו את הקובץ, ואז העבירו את file_url ל-שליחת הודעה: בתור img_url עם msg_type 1 לתמונות, או בתור file_url עם msg_type 2 לקבצים אחרים.
import requests
BASE = "https://wbiztool.com/api/v1"
AUTH = {"client_id": 12345, "api_key": "YOUR_API_KEY"}
with open("invoice-4821.pdf", "rb") as f:
upload = requests.post(f"{BASE}/media/upload/", data=AUTH, files={"media_file": f}, timeout=120).json()
if upload["status"] != 1:
raise SystemExit("Upload failed: " + upload["message"])
media = upload["data"]
message = {
**AUTH,
"whatsapp_client": 678,
"country_code": "91",
"phone": "9876543210",
"msg": "Your invoice for order #4821 is attached.",
}
if media["is_image"]:
message.update(msg_type=1, img_url=media["file_url"])
else:
message.update(msg_type=2, file_url=media["file_url"], file_name=media["original_file_name"])
sent = requests.post(f"{BASE}/send_msg/", json=message, timeout=60).json()
print(sent)// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const BASE = "https://wbiztool.com/api/v1";
const form = new FormData();
form.append("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("media_file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
const upload = await (await fetch(`${BASE}/media/upload/`, { method: "POST", body: form })).json();
if (upload.status !== 1) throw new Error(`Upload failed: ${upload.message}`);
const media = upload.data;
const message = {
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
country_code: "91",
phone: "9876543210",
msg: "Your invoice for order #4821 is attached.",
...(media.is_image
? { msg_type: 1, img_url: media.file_url }
: { msg_type: 2, file_url: media.file_url, file_name: media.original_file_name }),
};
const sent = await fetch(`${BASE}/send_msg/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(message),
});
console.log(await sent.json());לשליחת הודעה יש רשימת סיומות קבצים משלה. מבין הסוגים שה-API הזה מקבל, קובצי .doc, .ppt, .csv, .zip, .wav ו-.mov שנשלחים עם msg_type 2 נמסרים כשלשם מתווסף .pdf (למשל brochure.doc.pdf). המירו מסמכים ל-PDF לפני שאתם שולחים אותם. ראו שליחת תמונות וקבצים. השם גם נשלח באותיות קטנות (Invoice-4821.PDF מגיע כ-invoice-4821.pdf).
תמונות שנשלחות עם msg_type 1 חייבות להיות בגודל 16 MB לכל היותר. תמונות גדולות יותר מועלות כאן בלי בעיה, אבל נכשלות בשליחה עם File exceeds WhatsApp size limit (16MB max). דחסו אותן קודם, או שלחו אותן כקובץ עם msg_type 2.
טיפים#
- השתמשו שוב בקבצים שהועלו. שמרו את ה-
idאו את ה-file_url, ושלחו את אותו קובץ פעמים רבות במקום להעלות אותו מחדש. - הקפידו על שם מקורי בעל משמעות. ה-
original_file_nameהוא מה שמוצג בלוח הבקרה, והוא ערך טוב ל-file_nameבזמן השליחה. - מצאו קבצים שהועלו קודם באמצעות רשימת מדיה.
