मैसेजिंग API
संदेश भेजें API
अपने कनेक्टेड WhatsApp नंबर से किसी एक फोन नंबर पर WhatsApp टेक्स्ट, इमेज या डॉक्यूमेंट भेजें। इसका इस्तेमाल ऑर्डर कन्फर्मेशन, पेमेंट रिमाइंडर, अलर्ट और सपोर्ट जवाबों के लिए करें।
https://wbiztool.com/api/v1/send_msg/बॉडी: JSON, फॉर्म फील्ड, या फाइल अपलोड करते समय multipart/form-data
संदेश कतार में जाता है और कुछ ही पलों में आपके WhatsApp नंबर से भेज दिया जाता है। रिस्पॉन्स में आपको एक msg_id मिलता है, जिससे आप उसका स्टेटस जांच सकते हैं।
छोटा उदाहरण#
curl -X POST https://wbiztool.com/api/v1/send_msg/ \
-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",
"msg": "Hi Aman, your order #4821 has shipped and will arrive on Thursday."
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": "9876543210",
"msg": "Hi Aman, your order #4821 has shipped and will arrive on Thursday.",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Queued with msg_id", result["msg_id"])
else:
print("Failed:", result.get("message"))// 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/", {
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",
msg: "Hi Aman, your order #4821 has shipped and will arrive on Thursday.",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Queued with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Hi Aman, your order #4821 has shipped and will arrive on Thursday.',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
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) {
echo 'Queued with msg_id ' . $result['msg_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}12345, YOUR_API_KEY और 678 की जगह अपनी वैल्यू डालें। ये कहां मिलेंगी, यह जानने के लिए ऑथेंटिकेशन देखें।
रिक्वेस्ट पैरामीटर#
ऑथेंटिकेशन
client_idintegerआवश्यकसेटिंग्स → API Keys से आपका API क्लाइंट ID।
api_keystringआवश्यकउसी पेज से आपकी API की।
whatsapp_clientintegerएक से ज़्यादा नंबर होने पर ज़रूरीजिस WhatsApp नंबर से भेजना है उसका ID, WhatsApp सेटिंग्स से। अगर आप इसे नहीं भेजते और आपके वर्कस्पेस में ठीक एक कनेक्टेड नंबर है, तो वही नंबर इस्तेमाल होता है।
प्राप्तकर्ता और संदेश
phonestringआवश्यकप्राप्तकर्ता का WhatsApp नंबर, सिर्फ अंक। स्पेस,
+,-,.और ब्रैकेट अपने आप हटा दिए जाते हैं। नंबर या तो कंट्री कोड के साथ (919876543210) भेजें, या कंट्री कोड के बिना (9876543210)country_codeके साथ भेजें। फॉर्म फील्ड के साथ शुरुआत का ट्रंक0(09876543210) शामिल न करें:country_codeजोड़े जाने से पहले यह हटाया नहीं जाता, इसलिए संदेश गलत नंबर पर जाता है। JSON रिक्वेस्ट इसे अपने आप हटा देती हैं।country_codestringवैकल्पिक+के बिना देश का कॉलिंग कोड, जैसे भारत के लिए91या अमेरिका के लिए1। यहphoneके आगे जोड़ा जाता है, जब तक कि नंबर पहले से इसी कोड से शुरू न होता हो। अपवाद:91के साथ, 10 अंकों वाले नंबर के आगे हमेशा कोड जुड़ता है। दूसरे कोड के साथ, जो लोकल नंबर उन्हीं अंकों से शुरू होता है उसके आगे कोड नहीं जुड़ता, इसलिए उसे कंट्री कोड सहित भेजें।msg_typeintegerवैकल्पिक0टेक्स्ट (डिफ़ॉल्ट),1इमेज,2फाइल या डॉक्यूमेंट।msgstringmsg_type 0 होने पर ज़रूरीसंदेश का टेक्स्ट, अधिकतम 3,000 कैरेक्टर। इमेज और फाइलों के लिए यह कैप्शन होता है और खाली भी हो सकता है। WhatsApp फॉर्मेटिंग काम करती है:
*bold*,_italic_,~strikethrough~।messageको भी इसके दूसरे नाम (alias) के रूप में स्वीकार किया जाता है।
इमेज और फाइलें
img_urlstringmsg_type 1 होने और कोई फाइल अपलोड न होने पर ज़रूरीइमेज का सार्वजनिक
httpयाhttpsURL।file_urlstringmsg_type 2 होने और कोई फाइल अपलोड न होने पर ज़रूरीसार्वजनिक
httpयाhttpsURL, जिससे फाइल सीधे डाउनलोड की जा सके।filefileवैकल्पिकURL देने के बजाय इमेज या फाइल अपलोड करें। रिक्वेस्ट को
multipart/form-dataके रूप में भेजें, और फील्ड का नामfileरखें।file_namestringवैकल्पिकप्राप्तकर्ता को दिखने वाला फाइल नाम, जैसे
invoice-4821.pdf। इसके एक्सटेंशन से तय होता है कि फाइल कैसे भेजी जाएगी, इसलिए एक्सटेंशन ज़रूर लिखें। यह छोटे अक्षरों (lower case) में भेजा जाता है,& : ? * $ ;जैसे कैरेक्टर_से बदल दिए जाते हैं, और इसे 150 कैरेक्टर तक काट दिया जाता है। अगर आप इसे नहीं भेजते, तो नाम URL या अपलोड की गई फाइल से लिया जाता है।
डिलीवरी विकल्प
expire_after_secondsintegerवैकल्पिकअगर संदेश इतने सेकंड में नहीं भेजा गया, तो उसे एक्सपायर (स्टेटस
4) मार्क करें, जैसे एक घंटे के लिए3600। डिलीवरी ETA जैसे समय-संवेदनशील संदेशों के लिए उपयोगी। यह काम एक बैकग्राउंड जॉब डेडलाइन के कम से कम 30 सेकंड बाद करता है, इसलिए एक मिनट से छोटी डेडलाइन के लिए इस पर भरोसा न करें।webhookstringवैकल्पिकवह URL जिसे संदेश भेजे जाने या फेल होने पर एक
POSTमिलता है। वेबहुक देखें।
इमेज और फाइलें भेजना#
img_url और file_url के लिए डाउनलोड सीमाएं:
- URL सार्वजनिक होना चाहिए:
httpयाhttps, और इंटरनेट से पहुंच योग्य। ज़्यादा से ज़्यादा 5 रीडायरेक्ट फॉलो किए जाते हैं, और हर रीडायरेक्ट भी किसी सार्वजनिक पते पर ही ले जाना चाहिए। - लिंक की गई फाइलें 100 MB तक की हो सकती हैं। सर्वर को 45 सेकंड के अंदर जवाब देना शुरू करना चाहिए और इससे ज़्यादा देर तक रुकना नहीं चाहिए।
- फाइल API कॉल करते समय ही डाउनलोड की जाती है, इसलिए टूटा हुआ लिंक तुरंत
Invalid file urlके साथ फेल हो जाता है।
समर्थित एक्सटेंशन: .pdf, .xlsx, .xls, .txt, .docx, .png, .jpg, .jpeg, .webp, .mp3, .mpga, .m4a, .mp4, .webm।
ये जांचें API कॉल करते समय नहीं, बल्कि संदेश भेजते समय होती हैं, इसलिए ये फेल सिर्फ संदेश स्टेटस और वेबहुक में दिखते हैं:
| समस्या | संदेश स्टेटस में error |
|---|---|
16 MB से बड़ी इमेज (msg_type 1) | File exceeds WhatsApp size limit (16MB max) |
64 MB से बड़ा वीडियो (.mp4, .webm), या खाली फाइल | File exceeds WhatsApp size limit (…) |
.ogg फाइल, या इमेज (msg_type 1) के रूप में भेजी गई .wav फाइल | File type not supported |
WAV और OGG ऑडियो सपोर्ट नहीं होते। फाइल (msg_type 2) के रूप में भेजी गई .wav फाइल रिजेक्ट नहीं होती, लेकिन recording.wav.pdf के रूप में पहुंचती है। पहले ऑडियो को .mp3 या .m4a में बदलें।
curl -X POST https://wbiztool.com/api/v1/send_msg/ \
-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",
"img_url": "https://example.com/offers/diwali-sale.jpg",
"msg": "Our Diwali sale starts today 🎉"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 1,
"country_code": "91",
"phone": "9876543210",
"img_url": "https://example.com/offers/diwali-sale.jpg",
"msg": "Our Diwali sale starts today 🎉",
},
timeout=60,
)
print(response.json())// 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/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 1,
country_code: "91",
phone: "9876543210",
img_url: "https://example.com/offers/diwali-sale.jpg",
msg: "Our Diwali sale starts today 🎉",
}),
});
console.log(await response.json());<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 1,
'country_code' => '91',
'phone' => '9876543210',
'img_url' => 'https://example.com/offers/diwali-sale.jpg',
'msg' => 'Our Diwali sale starts today 🎉',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);curl -X POST https://wbiztool.com/api/v1/send_msg/ \
-F client_id=12345 \
-F api_key=YOUR_API_KEY \
-F whatsapp_client=678 \
-F msg_type=2 \
-F country_code=91 \
-F phone=9876543210 \
-F "msg=Your invoice for order #4821 is attached." \
-F file_name=invoice-4821.pdf \
-F file=@./invoice-4821.pdfimport requests
with open("invoice-4821.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/",
data={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 2,
"country_code": "91",
"phone": "9876543210",
"msg": "Your invoice for order #4821 is attached.",
"file_name": "invoice-4821.pdf",
},
files={"file": f},
timeout=120,
)
print(response.json())// 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("whatsapp_client", "678");
form.append("msg_type", "2");
form.append("country_code", "91");
form.append("phone", "9876543210");
form.append("msg", "Your invoice for order #4821 is attached.");
form.append("file_name", "invoice-4821.pdf");
form.append("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/send_msg/", { method: "POST", body: form });
console.log(await response.json());<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
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',
'whatsapp_client' => 678,
'msg_type' => 2,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Your invoice for order #4821 is attached.',
'file_name' => 'invoice-4821.pdf',
'file' => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
echo curl_exec($ch);
curl_close($ch);आधिकारिक क्लाइंट का इस्तेमाल#
Python और Node.js क्लाइंट आपके लिए यह एंडपॉइंट कॉल करते हैं।
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id="12345")
result = client.send_message(
phone="9876543210",
country_code="91",
msg="Hi Aman, your order #4821 has shipped.",
whatsapp_client=678,
)
print(result)एरर होने पर requests.HTTPError रेज़ होता है। वजह e.response.json()["message"] से पढ़ें।
const { WbizToolClient } = require("wbiztool-client");
const client = new WbizToolClient({
clientId: 12345,
apiKey: "YOUR_API_KEY",
whatsappClient: 678,
});
(async () => {
// Errors throw, with the API's response in the error message.
const result = await client.sendMessage({
phone: "9876543210",
countryCode: "91",
message: "Hi Aman, your order #4821 has shipped.",
});
console.log(result);
})().catch(console.error);रिस्पॉन्स#
सफल रिक्वेस्ट HTTP 200 लौटाती है:
{
"status": 1,
"message": "Created",
"msg_id": 9817263
}
| फील्ड | टाइप | विवरण |
|---|---|---|
status | integer | संदेश कतार में चला गया हो तो 1, रिक्वेस्ट फेल हुई हो तो 0। |
message | string | सफल होने पर Created, वरना एरर। |
msg_id | integer | कतार में गए संदेश का ID। बाद में स्टेटस जांचने के लिए इसे सेव करें। केवल सफल होने पर मौजूद होता है। |
"status": 1 का मतलब है कि संदेश कतार में चला गया है, यह नहीं कि वह प्राप्तकर्ता तक पहुंच गया है। संदेश भेजा गया या नहीं, यह पक्का करने के लिए वेबहुक या संदेश स्टेटस इस्तेमाल करें।
एरर#
एरर HTTP 400 लौटाते हैं और status की वैल्यू 0 होती है (Account Disabled में status फील्ड नहीं होता):
{ "status": 0, "message": "Msg cant be null" }
| संदेश | कैसे ठीक करें |
|---|---|
Auth Error - Please send correct API key and Client id | खाली न हो ऐसा api_key भेजें। |
Invalid client id. | client_id को नंबर के रूप में भेजें। |
Auth Error: invalid api key | जांचें कि की मौजूद है, डिलीट नहीं हुई है और इसी client_id की है। |
Either phone or group_name parameter is required | phone जोड़ें। |
Please provide either phone OR group_name, not both | इनमें से एक हटा दें। |
Invalid phone number | phone में सिर्फ अंक (6–17 अंक) होने चाहिए, शुरुआत में + हो सकता है। |
Invalid Contact Number "…" | कंट्री कोड जोड़ने के बाद नंबर 6–15 अंकों का होना चाहिए। |
Msg cant be null | टेक्स्ट संदेशों (msg_type 0) के लिए msg ज़रूरी है। |
Message length is too long | msg को 3,000 कैरेक्टर या उससे कम रखें। |
Image Url Can't be null | msg_type 1 के लिए img_url भेजें या file अपलोड करें। |
File Url Can't be null | msg_type 2 के लिए file_url भेजें या file अपलोड करें। |
Invalid file url, Can't download / Invalid file url | URL सार्वजनिक नहीं है, टाइम आउट हो गया, या फाइल 100 MB से बड़ी है। |
Invalid whatsapp client | वह whatsapp_client ID आपके वर्कस्पेस में नहीं है। |
Invalid whatsapp client id. | whatsapp_client भेजें। जब आपके वर्कस्पेस में एक से ज़्यादा कनेक्टेड नंबर हों, तो यह ज़रूरी है। |
Not enough credits | आपके प्लान में कोई संदेश नहीं बचा है। |
Demo Account can not access apis | सामान्य अकाउंट इस्तेमाल करें। |
Account Disabled | आपका अकाउंट डिसेबल है। सपोर्ट से संपर्क करें। |
Invalid JSON format: … | JSON बॉडी सही नहीं है, अक्सर आखिर में लगे अतिरिक्त कॉमा या msg में बिना escape किए लाइन ब्रेक की वजह से। नई लाइन के लिए \n इस्तेमाल करें। |
कतार में लगा संदेश भेजते समय भी फेल हो सकता है, जैसे File exceeds WhatsApp size limit (…) के साथ। ऐसे एरर इस रिस्पॉन्स में कभी नहीं दिखते। इमेज और फाइलें भेजना देखें और संदेश स्टेटस जांचें।
वेबहुक#
अगर आप webhook पास करते हैं, तो संदेश भेजे जाने या फेल होने पर Wbiztool उस URL पर एक POST भेजता है। बॉडी JSON नहीं, बल्कि form-encoded (application/x-www-form-urlencoded) होती है:
msg_id=9817263&status=SENT
| फील्ड | वैल्यू |
|---|---|
msg_id | संदेश भेजते समय लौटाया गया msg_id। |
status | SENT या FAILED |
कोई भी 2xx कोड लौटाएं। अगर आपका एंडपॉइंट टाइम आउट हो जाता है (3 सेकंड के बाद) या 5xx लौटाता है, तो कॉल कुल मिलाकर अधिकतम 3 बार तक दोबारा की जाती है। 4xx रिस्पॉन्स पर दोबारा कोशिश नहीं की जाती। संदेश कैंसल या एक्सपायर होने पर कोई वेबहुक नहीं भेजा जाता; उनके लिए संदेश स्टेटस इस्तेमाल करें।
सुझाव#
- फोन नंबर: नंबरों को इंटरनेशनल फॉर्मेट में स्टोर करें और भ्रम से बचने के लिए उन्हें
country_codeके साथ भेजें। - JSON में नई लाइन:
msgके अंदर इन्हें\nलिखें। सीधा लाइन ब्रेक JSON को अमान्य बना देता है। - अपना नंबर कनेक्टेड रखें: संदेश आपके WhatsApp नंबर से भेजे जाते हैं, इसलिए वह WhatsApp सेटिंग्स में कनेक्टेड रहना चाहिए।
- कई प्राप्तकर्ता: एक ही रिक्वेस्ट में एक ही संदेश कई नंबरों पर भेजने के लिए कई नंबरों पर भेजें इस्तेमाल करें। बड़े कैंपेन के लिए इसके बजाय कैंपेन पेज से स्प्रेडशीट अपलोड करें।
