API v2 (beta)
Media
Direktori media menyimpan fail ruang kerja anda: senarai harga, menu, risalah, foto produk. Muat naik fail sekali, kemudian hantarnya sekerap yang anda mahu dengan "media": {"media_id": …} dalam mesej atau peringatan. Ia ialah direktori yang sama seperti halaman Direktori media dalam papan pemuka, jadi fail yang dimuat naik di sana turut disenaraikan di sini.
| Operasi | Endpoint | Skop |
|---|---|---|
| Muat naik fail | POST /api/v2/media | media |
| Senaraikan fail | GET /api/v2/media | media |
| Dapatkan fail | GET /api/v2/media/{id} | media |
| Padam fail | DELETE /api/v2/media/{id} | media |
Muat naik fail#
https://wbiztool.com/api/v2/mediaBody: multipart/form-data
Hantar satu fail bagi setiap permintaan sebagai multipart/form-data, dalam medan file. Ini satu-satunya endpoint v2 yang tidak menerima JSON. Responsnya ialah 201 dengan objek Media.
- Sehingga 64 MB bagi setiap fail.
- Jenis: jenis ditentukan oleh sambungan di hujung nama fail, jadi kekalkannya.
| Jenis | Sambungan |
|---|---|
| Imej | .jpg, .jpeg, .jpe, .png, .gif, .webp, .bmp |
| Dokumen | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .txt |
| Audio | .mp3, .m4a, .wav, .ogg, .oga, .aac |
| Video | .mp4, .mov, .avi |
| Arkib | .zip, .rar |
- Storan: semua fail ruang kerja bersama-sama boleh menggunakan ruang sebanyak yang dibenarkan oleh pelannya, dari 250 MB hingga 10 GB (lihat Storan mengikut pelan). Fail yang tidak muat ditolak dengan
storage_full. - Fail imej (
typeimage) dihantar sebagai imej secara lalai; yang lain sebagai fail. - Hantar
Idempotency-Keysupaya cubaan semula selepas tamat masa tidak menyimpan fail dua kali.
curl -X POST https://wbiztool.com/api/v2/media \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Idempotency-Key: price-list-2026-10" \
-F "file=@./price list.pdf"import os
import requests
with open("price list.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v2/media",
headers={"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"},
files={"file": ("price list.pdf", f, "application/pdf")},
timeout=120,
)
media = response.json()
print(response.status_code, media.get("id"), media.get("url"))// 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("file", await openAsBlob("./price list.pdf"), "price list.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v2/media", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}` },
body: form,
});
const media = await response.json();
console.log(response.status, media.id, media.url);<?php
$ch = curl_init('https://wbiztool.com/api/v2/media');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY')],
// An array body makes cURL send multipart/form-data.
CURLOPT_POSTFIELDS => ['file' => new CURLFile('/path/to/price list.pdf', 'application/pdf', 'price list.pdf')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$media = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $media['id'] . ' ' . $media['url'];Respons (201):
{
"id": 3301,
"name": "price list.pdf",
"type": "file",
"mime_type": "application/pdf",
"size": 182344,
"url": "https://media.wbiztool.com/media/org_5012/media_5012_17608123450000_0.pdf",
"created_at": "2026-10-18T10:31:40.120Z"
}
Kemudian hantarnya:
{
"to": { "phone": "+919876543210" },
"text": "Here is our new price list.",
"media": { "media_id": 3301 }
}
Penerima melihat nama yang digunakan semasa ia dimuat naik (price list.pdf); tetapkan media.file_name dalam mesej untuk memaparkan nama lain.
Ralat semasa memuat naik#
| HTTP | Kod | Bila |
|---|---|---|
400 | validation_failed | Tiada fail dalam medan file, atau lebih daripada satu |
413 | file_too_large | Fail melebihi 64 MB |
415 | unsupported_file_type | Sambungannya bukan salah satu jenis di atas |
415 | unsupported_content_type | Permintaan bukan multipart/form-data (contohnya JSON) |
422 | storage_full | Fail tidak muat dalam storan pelan; used dan limit menyatakan jumlahnya, dalam bait |
502 | upload_failed | Fail tidak dapat disimpan. Cuba lagi (dengan Idempotency-Key yang sama) |
Senaraikan fail#
https://wbiztool.com/api/v2/mediaFail ruang kerja, yang terbaharu dahulu, dalam halaman (limit 1 hingga 100, lalai 25, dan cursor).
curl "https://wbiztool.com/api/v2/media?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Responsnya ialah {"data": [Media, …], "next_cursor": "…" or null}.
Dapatkan fail#
https://wbiztool.com/api/v2/media/{id}curl https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Fail yang tidak wujud atau telah dipadam menjawab 404 media_not_found.
Padam fail#
https://wbiztool.com/api/v2/media/{id}Memadam fail daripada Direktori media dan daripada storan, jadi url-nya berhenti berfungsi. Mesej yang telah dihantar mengekalkan salinannya pada telefon penerima.
Ia ditolak selagi masih ada sesuatu yang akan menghantar fail itu: mesej yang menunggu untuk dihantar (termasuk mesej kempen), peringatan yang aktif, atau pencetus Google Sheets yang aktif. Responsnya kemudian ialah 409 media_in_use, dan count menyatakan berapa banyak. Batalkan atau ubah semua itu dahulu, atau tunggu sehingga mesej telah dihantar.
curl -X DELETE https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 3301, "deleted": true }
| HTTP | Kod | Bila |
|---|---|---|
404 | media_not_found | Tiada fail sedemikian |
409 | media_in_use | Mesej yang menunggu, peringatan yang aktif atau pencetus Google Sheets masih menggunakannya |
Objek Media#
| Medan | Jenis | Penerangan |
|---|---|---|
id | integer | ID fail: media_id untuk menghantarnya. |
name | string | Nama yang digunakan semasa ia dimuat naik. |
type | string | image bagi fail imej, file bagi yang lain. |
mime_type | string | Seperti application/pdf atau image/jpeg. |
size | integer | Saiz dalam bait. |
url | string | Pautan awam ke fail. Sesiapa yang mempunyai pautan boleh membukanya, jadi jangan muat naik fail yang mesti kekal peribadi. |
created_at | string | Bila ia dimuat naik. |
Berkaitan#
- Direktori media dalam papan pemuka
- Mesej → Media: menghantar dengan
media_idatau pautan - Ralat
