API media
API Muat Naik Media
Muat naik fail imej, dokumen, audio atau video ke pustaka media ruang kerja anda dan dapatkan semula URL muat turun. Hantar URL itu kepada Hantar mesej, atau, untuk imej sahaja, kepada Cipta peringatan sebagai img_url, apabila anda tiada pengehosan fail sendiri.
https://wbiztool.com/api/v1/media/upload/Body: multipart/form-data
Fail disimpan serta-merta dan respons menyertakan file_urlnya. Fail yang dimuat naik juga muncul di halaman Media directory (Direktori media) dalam papan pemuka anda.
Contoh ringkas#
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');
}Gantikan 12345 dan YOUR_API_KEY dengan nilai anda sendiri. Lihat Pengesahan identiti untuk mengetahui di mana nilai ini boleh didapati.
Parameter permintaan#
Hantar permintaan sebagai multipart/form-data. Badan JSON dan parameter rentetan pertanyaan tidak dibaca oleh endpoint ini.
client_idintegerwajibAPI Client ID anda dari Settings → API keys (Tetapan → Kunci API).
api_keystringwajibKunci API anda dari halaman yang sama.
media_filefilewajibFail yang hendak dimuat naik, sehingga 64 MB. Jenisnya ditentukan oleh sambungan nama fail, jadi nama mesti berakhir dengan salah satu sambungan yang disokong.
Jenis fail yang disokong#
| Kategori | Sambungan |
|---|---|
| Imej | .jpg, .jpeg, .png, .gif |
| Dokumen | .pdf, .doc, .xls, .ppt, .txt, .csv |
| Audio | .mp3, .wav |
| Video | .mp4, .mov |
| Arkib | .zip |
Imej disimpan dengan file_type ditetapkan kepada image; selainnya ialah file.
Respons#
Permintaan yang berjaya memulangkan 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"
}
}
| Medan | Jenis | Penerangan |
|---|---|---|
status | integer | 1 jika fail telah dimuat naik, 0 jika permintaan gagal. |
message | string | File uploaded successfully, jika tidak, mesej ralat. |
data.id | integer | ID fail media. Gunakannya dengan Dapatkan fail media. |
data.file_name | string | Nama simpanan fail, dijana oleh Wbiztool. |
data.original_file_name | string | Nama fail yang anda muat naik. |
data.file_url | string | URL muat turun terus. Gunakannya sebagai img_url atau file_url semasa menghantar. |
data.file_type | string | image atau file. |
data.file_size | integer | Saiz dalam bait. |
data.file_size_display | string | Saiz yang mudah dibaca dengan satu tempat perpuluhan, contohnya 242.5 KB. |
data.mime_type | string | Jenis MIME yang ditentukan daripada sambungan, contohnya application/pdf. |
data.is_image | boolean | true apabila file_type ialah image. |
data.file_extension | string | Sambungan huruf kecil bagi original_file_name, tanpa titik. |
data.created_at | string | Masa muat naik, ISO 8601 dalam UTC dengan ofset +00:00. |
Ralat#
Ralat juga memulangkan HTTP 200, dengan status ditetapkan kepada 0:
{ "status": 0, "message": "File is too large. Maximum size is 64MB. Your file: 71.3MB" }
| Mesej | Cara membetulkannya |
|---|---|
Only POST method is supported | Hantar permintaan POST. |
client_id is required | Tambah client_id sebagai medan borang. Pastikan badan permintaan ialah multipart/form-data, bukan JSON. |
api_key is required | Tambah api_key sebagai medan borang. |
media_file is required | Hantar fail dalam medan bernama media_file. |
client_id must be a valid integer | Hantar client_id sebagai nombor. |
Invalid API key | Pastikan kunci wujud dan belum dipadam atau dinyahdayakan. |
Invalid client_id for this API key | Kunci itu milik client_id yang lain. |
File is too large. Maximum size is 64MB. Your file: …MB | Muat naik fail bersaiz 64 MB atau kurang. |
File type not supported. Type detected: … | Gunakan salah satu sambungan yang disokong. |
Error uploading file: … | Muat naik tidak dapat diselesaikan. Cuba lagi. Anda juga menerima ralat ini jika kunci API tidak dipautkan ke mana-mana ruang kerja; cipta kunci baharu dalam ruang kerja yang anda mahu gunakan. |
Muat naik dan hantar#
Muat naik fail, kemudian hantar file_url kepada Hantar mesej: sebagai img_url dengan msg_type 1 untuk imej, atau sebagai file_url dengan msg_type 2 untuk fail lain.
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());Hantar mesej mempunyai senarai sambungan failnya sendiri. Daripada jenis yang diterima oleh API ini, fail .doc, .ppt, .csv, .zip, .wav dan .mov yang dihantar dengan msg_type 2 akan diterima dengan .pdf ditambah pada nama (contohnya brochure.doc.pdf). Tukar dokumen kepada PDF sebelum anda menghantarnya. Lihat Menghantar imej dan fail. Nama juga dihantar dalam huruf kecil (Invoice-4821.PDF diterima sebagai invoice-4821.pdf).
Imej yang dihantar dengan msg_type 1 mesti bersaiz 16 MB atau kurang. Imej yang lebih besar boleh dimuat naik di sini tetapi gagal semasa dihantar, dengan File exceeds WhatsApp size limit (16MB max). Mampatkan imej dahulu, atau hantarkannya sebagai fail dengan msg_type 2.
Petua#
- Guna semula muat naik. Simpan
idataufile_urldan hantar fail yang sama berkali-kali dan bukannya memuat naiknya semula. - Pastikan nama asal bermakna.
original_file_nameialah nama yang anda lihat dalam papan pemuka dan nilai yang baik untukfile_namesemasa menghantar. - Cari muat naik terdahulu dengan Senarai media.
