API mesej
API Hantar ke Beberapa Nombor
Hantar mesej WhatsApp yang sama ke beberapa nombor telefon dan kumpulan dalam satu permintaan. Gunakannya untuk siaran kecil seperti surat berita, tawaran dan pengumuman.
https://wbiztool.com/api/v1/send_msg/multi/Body: JSON atau medan borang
Wbiztool mencipta satu mesej bagi setiap penerima dan memulangkan msg_id untuk setiap satu, supaya anda boleh menyemak statusnya secara berasingan.
Contoh ringkas#
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": "9876543210,9812345670,Sales Team Mumbai",
"msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/multi/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": ",".join(["9876543210", "9812345670", "Sales Team Mumbai"]),
"msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
for item in result["messages"]:
print(item["contact"], "->", item["msg_id"])
else:
print("Failed:", result.get("message", "no message in response"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/multi/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: ["9876543210", "9812345670", "Sales Team Mumbai"].join(","),
msg: "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
for (const item of result.messages) {
console.log(item.contact, "->", item.msg_id);
}
} else {
console.error("Failed:", result.message ?? "no message in response");
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => implode(',', ['9876543210', '9812345670', 'Sales Team Mumbai']),
'msg' => 'Our Diwali sale starts tomorrow. Get 20% off on all orders!',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/multi/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
foreach ($result['messages'] as $item) {
echo $item['contact'] . ' -> ' . $item['msg_id'] . PHP_EOL;
}
} else {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}Gantikan 12345, YOUR_API_KEY dan 678 dengan nilai anda sendiri. Lihat Pengesahan identiti untuk mengetahui di mana nilai ini boleh didapati.
Parameter permintaan#
Pengesahan identiti
client_idintegerwajibAPI Client ID anda dari Settings → API keys (Tetapan → Kunci API).
api_keystringwajibKunci API anda dari halaman yang sama.
whatsapp_clientintegerwajibID nombor WhatsApp yang digunakan untuk menghantar, dari tetapan WhatsApp. Tidak seperti Hantar mesej, endpoint ini tidak pernah memilih nombor untuk anda.
Penerima dan mesej
phonestringwajibNombor telefon dan nama kumpulan dalam satu rentetan yang dipisahkan dengan koma, contohnya
9876543210,9812345670,Sales Team Mumbai. Jangan hantar tatasusunan JSON. Lihat Cara penerima dibaca.country_codestringpilihanKod panggilan negara tanpa
+, contohnya91. Kod ini ditambah di hadapan setiap nombor telefon kecuali nombor itu sudah bermula dengannya. Dalam JSON, hantarkannya sebagai rentetan ("91"), bukan nombor. Jika anda menghantar nombor, setiap nombor telefon dalam senarai dianggap sebagai nama kumpulan (is_group: true), dan mesej tersebut akan gagal.msg_typeintegerpilihan0teks (lalai),1imej,2fail atau dokumen.msgstringWajib apabila msg_type ialah 0Teks mesej. Untuk imej dan fail, ini ialah kapsyen dan boleh dibiarkan kosong. Format WhatsApp boleh digunakan:
*bold*,_italic_,~strikethrough~.messagediterima sebagai alias.
Imej dan fail
img_urlstringWajib apabila msg_type ialah 1URL
httpatauhttpsawam bagi imej.file_urlstringWajib apabila msg_type ialah 2URL
httpatauhttpsawam tempat fail boleh dimuat turun secara terus.file_namestringpilihanNama fail yang dilihat oleh penerima, seperti
price-list.pdf. Nama dihantar dalam huruf kecil, aksara seperti& : ? * $ ;digantikan dengan_, dan nama dipotong kepada 150 aksara. Jika anda tidak menyertakannya, nama diambil daripada URL.
Pilihan penghantaran
webhookstringpilihanURL yang menerima
POSTbagi setiap mesej apabila ia dihantar atau gagal. Muatannya sama seperti untuk Hantar mesej.
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 1,
"country_code": "91",
"phone": "9876543210,9812345670",
"img_url": "https://example.com/offers/diwali-sale.jpg",
"msg": "Our Diwali sale starts tomorrow."
}'Cara penerima dibaca#
Wbiztool memisahkan phone mengikut koma, membuang ruang di sekeliling setiap item, kemudian menentukan jenis setiap item:
- Digit sahaja (
+atau sifar di hadapan dibenarkan): dianggap sebagai nombor telefon.country_codeditambah kecuali nombor itu sudah bermula dengannya, kemudian nombor mesti sepanjang 6 hingga 15 digit. - Selain itu: dianggap sebagai nama kumpulan WhatsApp, dicari dengan cara yang sama seperti dalam Hantar ke kumpulan.
- Kumpulan yang namanya hanya digit (contohnya
2024) dianggap sebagai nombor telefon, dan nama kumpulan yang mengandungi koma tidak boleh dihantar dari endpoint ini. Gunakan Hantar ke kumpulan untuk kumpulan sebegini.
Perkara lain yang perlu diketahui:
- Nombor yang terlalu pendek atau terlalu panjang selepas kod negara ditambah akan dilangkau tanpa pemberitahuan. Nombor ini tidak muncul dalam respons dan tidak mendapat
msg_id. - Pendua tidak dibuang. Nombor yang disenaraikan dua kali akan menerima dua mesej.
- Jika nombor tempatan kebetulan bermula dengan digit yang sama seperti
country_code(contohnya9123456780dengancountry_code91), kod tidak ditambah. Hantar nombor sebegini dengan kod negara sudah disertakan (919123456780). - URL imej dan fail tidak disemak semasa anda memanggil API. URL dimuat turun semasa setiap mesej dihantar, jadi pautan yang rosak menyebabkan mesej gagal kemudian, bukan permintaan. Peraturan semasa penghantaran yang sama seperti Hantar mesej terpakai: imej melebihi 16 MB dan video melebihi 64 MB akan gagal, audio WAV dan OGG tidak disokong, dan fail (
msg_type2) tanpa sambungan yang disokong akan ditambah.pdf. Lihat Menghantar imej dan fail.
Kredit#
Keseluruhan kelompok disemak berbanding baki kredit anda sebelum apa-apa dicipta. Setiap item yang tidak kosong dalam phone dikira, termasuk item yang kemudiannya dilangkau. Jika jumlahnya melebihi baki kredit anda, tiada mesej dicipta dan anda akan menerima:
{
"message": "Not enough credits: 120 messages requested, 85 credits remaining",
"status": 0
}
Mesej yang berada dalam baris gilir tetapi belum dihantar juga dikira dalam baki kredit anda. Pecahkan senarai besar kepada permintaan yang lebih kecil atau tambah nilai pelan anda. Untuk kempen besar, muat naik hamparan dari halaman Campaigns (Kempen).
Respons#
Permintaan yang berjaya memulangkan HTTP 200:
{
"msg_ids": [9817263, 9817264, 9817265],
"messages": [
{ "msg_id": 9817263, "contact": "919876543210", "is_group": false },
{ "msg_id": 9817264, "contact": "919812345670", "is_group": false },
{ "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
],
"message": "Successfully created 3 messages",
"status": 1
}
| Medan | Jenis | Penerangan |
|---|---|---|
status | integer | 1 jika sekurang-kurangnya satu mesej dimasukkan ke dalam baris gilir, jika tidak 0. |
message | string | Successfully created N messages jika berjaya, jika tidak, mesej ralat. |
msg_ids | tatasusunan integer | ID mesej dalam baris gilir, mengikut susunan phone. Hanya ada jika berjaya. |
messages | tatasusunan | Satu objek bagi setiap mesej dalam baris gilir. Hanya ada jika berjaya. |
messages[].msg_id | integer | ID mesej. |
messages[].contact | string | Nombor telefon dengan kod negara yang telah ditambah, atau nama kumpulan. |
messages[].is_group | boolean | true jika item itu dianggap sebagai nama kumpulan. |
Bandingkan messages dengan senarai yang anda hantar untuk mencari nombor yang dilangkau, dan pastikan is_group ialah false bagi setiap item yang anda maksudkan sebagai nombor telefon.
Ralat#
Kebanyakan ralat memulangkan HTTP 200 dengan status ditetapkan kepada 0, jadi sentiasa semak status dalam badan respons. Kecuali ralat HTTP 400 dan 403, respons (termasuk yang berjaya) ialah JSON yang dihantar dengan Content-Type: text/html, jadi huraikan badan respons sendiri dan jangan bergantung pada pengesanan JSON automatik (contohnya dalam alat tanpa kod):
{ "message": "Invalid whatsapp client", "status": 0 }
| Mesej | Cara membetulkannya |
|---|---|
Auth Error | Hantar kedua-dua client_id dan api_key. |
Invalid Client Id | Hantar client_id sebagai nombor. Dipulangkan dengan HTTP 403. |
Auth Error: invalid api key | Pastikan kunci wujud, belum dipadam dan milik client_id ini. Dipulangkan dengan HTTP 400. |
Msg cant be null | Mesej teks (msg_type 0) memerlukan msg. |
Image Url Can't be null | Untuk msg_type 1, hantar img_url. |
File Url Can't be null | Untuk msg_type 2, hantar file_url. |
Not enough credits: … messages requested, … credits remaining | Hantar kepada lebih sedikit penerima atau tambah kredit. Lihat Kredit. |
Invalid whatsapp client | ID whatsapp_client itu tiada dalam ruang kerja anda. |
No valid contacts found | Setiap item dalam phone kosong atau dilangkau. Pastikan nombor sepanjang 6 hingga 15 digit termasuk kod negara. |
Demo Account can not access apis | Gunakan akaun biasa. |
Invalid JSON format: … | Badan JSON tidak sah, atau anda menghantar medan borang tanpa client_id. |
Petua#
- Hantar
phonesebagai rentetan: gabungkan senarai anda dengan koma. Tatasusunan JSON memulangkan{}. - Jangan gunakan
send_bulk_messagesklien Python buat masa ini: ia menghantar senarai sebagaiphones, yang diabaikan oleh endpoint ini. Panggil endpoint secara terus seperti dalam contoh di atas. - Jejaki setiap mesej: simpan setiap
msg_iddaripadamessages, atau hantarwebhookuntuk dimaklumkan apabila setiap mesej dihantar atau gagal. - Pastikan nombor anda kekal disambungkan: setiap mesej dihantar dari nombor WhatsApp anda, jadi ia mesti kekal disambungkan di tetapan WhatsApp sehingga keseluruhan kelompok selesai dihantar.
- Teks berbeza bagi setiap orang: endpoint ini menghantar
msgyang sama kepada semua orang. Panggil Hantar mesej sekali bagi setiap penerima untuk memperibadikan setiap mesej.
