API v2 (beta)
Berpindah dari v1 ke v2
API v2 melakukan apa yang dilakukan oleh v1, dengan kunci yang lebih selamat, satu gaya URL, kod status HTTP yang sebenar dan webhook JSON bertandatangan. Halaman ini memetakan setiap endpoint dan medan v1 kepada padanannya dalam v2. Perkara yang baharu dalam v2 itu sendiri ada dalam gambaran keseluruhan.
Perkara yang berubah di semua tempat#
- Kunci:
client_id+api_keydalam v1 menjadi satu pengepala,Authorization: Bearer wbz_live_…. Cipta kunci v2 di Tetapan → Kunci API, dalam kad Kunci API v2, dengan skop yang diperlukan oleh aplikasi sahaja. Kunci v1 tidak berfungsi pada v2, dan kunci v2 tidak berfungsi pada v1. - JSON sahaja: tiada medan borang. Muat naik fail dihantar ke
POST /media(multipart) dan dihantar denganmedia_id. - Kaedah dan URL:
GETuntuk membaca,POSTuntuk mencipta,PATCHuntuk mengubah,DELETEuntuk membatalkan atau memadam, di bawahhttps://wbiztool.com/api/v2. - Kod status HTTP sebagai ganti
"status": 0atau1(lihat Respons dan ralat). - Nombor telefon dalam format antarabangsa dengan
+, tanpacountry_code. - Masa dalam ISO 8601 dengan ofset, sebagai ganti medan tarikh, masa dan zon waktu yang berasingan.
- Webhook ialah endpoint yang anda tambah sekali untuk ruang kerja, dengan peristiwa JSON bertandatangan, sebagai ganti URL
webhookpada setiap mesej.
Endpoint demi endpoint#
Laluan v2 adalah relatif kepada https://wbiztool.com/api/v2.
Menghantar, medan demi medan#
| v1 | v2 | Nota |
|---|---|---|
client_id + api_key (badan atau Authorization: Bearer) | Authorization: Bearer wbz_live_… | Kunci v2 baharu; tiada client_id |
phone + country_code | to.phone | Satu nombor dalam E.164 dengan +: "9876543210" dengan "country_code": "91" menjadi {"phone": "+919876543210"}. Tiada kod negara ditambah untuk anda |
phone dengan @username (Telegram) | to.username | @name, t.me/name atau tg: diikuti ID, dari akaun Telegram |
group_name | to.group | Nama tepat kumpulan |
| (tiada dalam v1) | to.contact_id | Kenalan yang disimpan |
whatsapp_client | from | id nombor; pilihan apabila satu nombor disambungkan, seperti sebelum ini |
msg (atau message) | text | Sehingga 3,000 aksara, seperti sebelum ini |
msg_type 0, 1, 2 | tiada | Mesej dengan media ialah mesej media; media.type (image atau file) apabila pautan tidak menunjukkan jenisnya |
img_url / file_url | media.url | Pautan http(s) awam |
file (muat naik dalam permintaan yang sama) | media.media_id | Muat naik dahulu, kemudian hantar ID itu sekerap yang anda mahu |
file_name | media.file_name | Bagi fail |
date + time + timezone dalam schedule_msg/ | send_at | Satu masa dengan ofsetnya: 24/12/2026, 10:30 dan Asia/Kolkata menjadi "2026-12-24T10:30:00+05:30" |
expire_after_seconds | expires_at | Satu masa, bukan tempoh: masa sekarang ditambah bilangan saat itu, dengan ofsetnya |
webhook | endpoint webhook | Ditambah sekali dengan POST /webhooks, untuk setiap mesej ruang kerja |
msg_id dalam respons | id | Message itu sendiri yang dipulangkan, dengan status-nya |
Penghantaran yang sama dalam v1 dan 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"}'
Beberapa tingkah laku v1 sengaja dibuang:
- Tiada tekaan kod negara. v1 meletakkan
country_codedi hadapan nombor (dengan91, sentiasa di hadapan nombor 10 digit). v2 menerima nombor tepat seperti yang ditulis dengan+. - Tiada muat turun fail semasa anda memanggil. v1 mengambil
img_urldanfile_urlsemasa permintaan. v2 menyemak bahawa pautan itu awam dan mengambil fail semasa mesej dihantar; pautan yang rosak muncul sebagai mesejfailed. - Tiada baris gagal apabila ditolak. Apabila v1 menolak penghantaran yang melebihi had harian 1,000, ia masih menyimpan mesej itu sebagai gagal. v2 tidak menyimpan apa-apa apabila ia menolak penghantaran.
- Medan yang tidak dikenali ditolak dan bukannya diabaikan.
Status#
Nombor dan perkataan dalam v1 menjadi satu medan status:
| v1 | status v2 |
|---|---|
0 Created / Pending | queued, atau scheduled semasa send_at-nya belum tiba |
1 Sent | sent, delivered atau read (tanda WhatsApp) |
2 Failed | failed |
3 Cancelled | cancelled |
4 Expired | expired |
Peristiwa webhook ialah message.sent, message.failed, message.cancelled dan message.expired, sepadan dengan SENT, FAILED, CANCELLED dan EXPIRED dalam v1.
Respons dan ralat#
v1 menjawab banyak ralat dengan HTTP 200 atau 400 dan "status": 0, dan kejayaan dengan "status": 1. v2 menggunakan kod status HTTP:
- Kejayaan ialah
200,201(dicipta) atau202(dalam baris gilir), dan badannya ialah objek itu sendiri, seperti Message. Tiada pembalutstatus: 1. - Ralat ialah
4xxatau5xxdengan satu bentuk:{"error": {"code", "message", "field", "docs", "request_id"}}. Buat keputusan berdasarkancode, bukanmessagedalam bahasa Inggeris. Setiap kod ada di halaman ralat.
# 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
Beberapa mesej v1 dan kod v2-nya:
| Mesej v1 | Kod v2 |
|---|---|
Auth Error: invalid api key | 401 invalid_api_key, api_key_revoked atau 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 |
Webhook#
Dalam v1, setiap mesej boleh membawa URL webhook yang menerima msg_id=…&status=SENT dalam format form-encoded. Dalam v2:
- Tambah endpoint sekali dengan
POST /webhooksdan simpansecret-nya. - Ia menerima peristiwa JSON untuk setiap mesej ruang kerja, dengan Message penuh dalam
data.message. Padankannya dengan rekod anda mengikutdata.message.id. - Sahkan tandatangan: skema yang sama seperti v1 (
WbizTool-Timestamp,WbizTool-Signature: v1=…), tetapi dengan rahsia endpoint itu sendiri dan bukannya rahsia ruang kerja. - Buang ulangan dengan
WbizTool-Event-Id. Cubaan semula berterusan selama kira-kira 23 jam, bukan 4 cubaan dalam beberapa minit seperti dalam v1, dan respons4xxjuga dicuba semula.
Peristiwa sambungan v1 (webhook_url pada whatsapp/connect/) belum mempunyai peristiwa v2: tinjau GET /numbers/{id} sebaliknya.
Senarai semak#
Cipta kunci v2 bagi setiap aplikasi
Di Tetapan → Kunci API, dengan skop yang diperlukannya sahaja. Cubanya dahulu dengan kunci ujian, yang menyemak semuanya dan tidak menghantar apa-apa.
Ubah permintaan
URL dan kaedah baharu, badan JSON,
to/from/text/media, nombor telefon dengan+, masa dengan ofset. TambahIdempotency-Keypada setiap penghantaran.Ubah pengendalian ralat
Semak status HTTP, kemudian
error.code. Kendalikan429dengan menunggu selamaRetry-After.Pindahkan webhook
Tambah endpoint, sahkan tandatangan dengan rahsianya, dan buang ulangan mengikut ID peristiwa.
Beralih dan tarik balik
Setelah aplikasi berjalan pada v2, padam kunci v1-nya di Tetapan → Kunci API.
