मैसेजिंग API
कई नंबरों पर भेजें API
एक ही रिक्वेस्ट में एक ही WhatsApp संदेश कई फोन नंबरों और ग्रुप को भेजें। इसे न्यूज़लेटर, ऑफर और घोषणाओं जैसे छोटे ब्रॉडकास्ट के लिए इस्तेमाल करें।
https://wbiztool.com/api/v1/send_msg/multi/बॉडी: JSON या फॉर्म फील्ड
Wbiztool हर प्राप्तकर्ता के लिए एक अलग संदेश बनाता है और हर संदेश का msg_id लौटाता है, ताकि आप हर संदेश का स्टेटस अलग से जांच सकें।
छोटा उदाहरण#
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');
}12345, YOUR_API_KEY और 678 की जगह अपनी वैल्यू डालें। ये कहां मिलेंगी, यह जानने के लिए ऑथेंटिकेशन देखें।
रिक्वेस्ट पैरामीटर#
ऑथेंटिकेशन
client_idintegerआवश्यकसेटिंग्स → API Keys से आपका API क्लाइंट ID।
api_keystringआवश्यकउसी पेज से आपकी API की।
whatsapp_clientintegerआवश्यकउस WhatsApp नंबर का ID जिससे संदेश भेजना है, WhatsApp सेटिंग्स से। संदेश भेजें API के उलट, यह एंडपॉइंट आपके लिए कभी अपने आप नंबर नहीं चुनता।
प्राप्तकर्ता और संदेश
phonestringआवश्यकफोन नंबर और ग्रुप के नाम कॉमा से अलग की गई एक ही स्ट्रिंग में, उदाहरण के लिए
9876543210,9812345670,Sales Team Mumbai। JSON ऐरे न भेजें। प्राप्तकर्ता कैसे पढ़े जाते हैं देखें।country_codestringवैकल्पिक+के बिना देश का कॉलिंग कोड, उदाहरण के लिए91। यह हर फोन नंबर के आगे जोड़ा जाता है, जब तक कि नंबर पहले से इसी से शुरू न होता हो। JSON में इसे नंबर नहीं, स्ट्रिंग ("91") के रूप में भेजें। अगर आप इसे नंबर के रूप में भेजते हैं, तो सूची का हर फोन नंबर ग्रुप का नाम माना जाता है (is_group: true), और वे संदेश फेल हो जाते हैं।msg_typeintegerवैकल्पिक0टेक्स्ट (डिफॉल्ट),1इमेज,2फाइल या डॉक्यूमेंट।msgstringmsg_type 0 होने पर ज़रूरीसंदेश का टेक्स्ट। इमेज और फाइलों के लिए यह कैप्शन होता है और खाली रह सकता है। WhatsApp फॉर्मेटिंग काम करती है:
*bold*,_italic_,~strikethrough~।messageको भी इसके दूसरे नाम (alias) के रूप में स्वीकार किया जाता है।
इमेज और फाइलें
img_urlstringmsg_type 1 होने पर ज़रूरीइमेज का पब्लिक
httpयाhttpsURL।file_urlstringmsg_type 2 होने पर ज़रूरीपब्लिक
httpयाhttpsURL, जहां से फाइल सीधे डाउनलोड हो सके।file_namestringवैकल्पिकफाइल का वह नाम जो प्राप्तकर्ताओं को दिखता है, जैसे
price-list.pdf। यह छोटे अक्षरों (lower case) में भेजा जाता है,& : ? * $ ;जैसे कैरेक्टर_से बदल दिए जाते हैं, और इसे 150 कैरेक्टर तक काट दिया जाता है। अगर आप इसे न भेजें, तो नाम URL से लिया जाता है।
डिलीवरी विकल्प
webhookstringवैकल्पिकवह URL जिसे हर संदेश के भेजे जाने या फेल होने पर एक
POSTमिलता है। पेलोड वही है जो संदेश भेजें में है।
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."
}'प्राप्तकर्ता कैसे पढ़े जाते हैं#
Wbiztool phone को कॉमा पर बांटता है, हर आइटम के आसपास की स्पेस हटाता है और फिर तय करता है कि हर आइटम क्या है:
- सिर्फ अंक (शुरुआत में
+या शून्य होना ठीक है): इसे फोन नंबर माना जाता है।country_codeजोड़ा जाता है, जब तक कि नंबर पहले से उसी से शुरू न होता हो; इसके बाद नंबर 6 से 15 अंकों का होना चाहिए। - बाकी सब कुछ: इसे WhatsApp ग्रुप का नाम माना जाता है, और ग्रुप उसी तरह ढूंढा जाता है जैसे ग्रुप में भेजें में।
- जिस ग्रुप के नाम में सिर्फ अंक हैं (जैसे
2024), उसे फोन नंबर माना जाता है, और जिन ग्रुप के नाम में कॉमा है उन्हें इस endpoint से नहीं भेजा जा सकता। उनके लिए ग्रुप में भेजें इस्तेमाल करें।
ध्यान रखने वाली दूसरी बातें:
- देश का कोड जोड़ने के बाद जो नंबर बहुत छोटे या बहुत लंबे हों, उन्हें बिना किसी सूचना के छोड़ दिया जाता है। वे रिस्पॉन्स में नहीं दिखते और उन्हें
msg_idनहीं मिलता। - डुप्लिकेट नहीं हटाए जाते। जो नंबर दो बार लिखा गया है, उसे दो संदेश मिलते हैं।
- अगर कोई लोकल नंबर संयोग से
country_codeवाले अंकों से ही शुरू होता है (उदाहरण के लिएcountry_code91के साथ9123456780), तो कोड नहीं जोड़ा जाता। ऐसे नंबर देश के कोड सहित भेजें (919123456780)। - API कॉल करते समय इमेज और फाइल के URL नहीं जांचे जाते। वे हर संदेश भेजे जाते समय डाउनलोड होते हैं, इसलिए टूटा हुआ लिंक रिक्वेस्ट को नहीं, बल्कि बाद में संदेशों को फेल करता है। भेजते समय संदेश भेजें वाले ही नियम लागू होते हैं: 16 MB से बड़ी इमेज और 64 MB से बड़े वीडियो फेल होते हैं, WAV और OGG ऑडियो सपोर्ट नहीं होते, और बिना समर्थित एक्सटेंशन वाली फाइलों (
msg_type2) में.pdfजुड़ जाता है। इमेज और फाइलें भेजना देखें।
क्रेडिट#
कुछ भी बनाने से पहले पूरे बैच को आपके बचे हुए क्रेडिट से मिलाकर जांचा जाता है। phone का हर गैर-खाली आइटम गिना जाता है, उन आइटम सहित जिन्हें बाद में छोड़ दिया जाता है। अगर यह संख्या आपके बचे हुए क्रेडिट से ज़्यादा है, तो कोई भी संदेश नहीं बनाया जाता और आपको यह मिलता है:
{
"message": "Not enough credits: 120 messages requested, 85 credits remaining",
"status": 0
}
जो संदेश कतार में हैं लेकिन अभी भेजे नहीं गए, वे भी आपके बचे हुए क्रेडिट में गिने जाते हैं। बड़ी सूचियों को छोटी रिक्वेस्ट में बांटें या अपना प्लान टॉप अप करें। बड़े कैंपेन के लिए, इसकी जगह कैंपेन पेज से स्प्रेडशीट अपलोड करें।
रिस्पॉन्स#
सफल रिक्वेस्ट 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
}
| फील्ड | टाइप | विवरण |
|---|---|---|
status | integer | अगर कम से कम एक संदेश कतार में गया तो 1, वरना 0। |
message | string | सफल होने पर Successfully created N messages, वरना एरर। |
msg_ids | array of integers | कतार में गए संदेशों के ID, phone के क्रम में। केवल सफल होने पर मौजूद होता है। |
messages | array | कतार में गए हर संदेश के लिए एक ऑब्जेक्ट। केवल सफल होने पर मौजूद होता है। |
messages[].msg_id | integer | संदेश का ID। |
messages[].contact | string | देश का कोड लगाने के बाद का फोन नंबर, या ग्रुप का नाम। |
messages[].is_group | boolean | अगर आइटम को ग्रुप का नाम माना गया तो true। |
छोड़े गए नंबर ढूंढने के लिए messages को अपनी भेजी गई सूची से मिलाएं, और जांचें कि जिन आइटम को आपने फोन नंबर के रूप में भेजा था, उन सभी के लिए is_group false हो।
एरर#
ज़्यादातर एरर HTTP 200 के साथ आते हैं और उनमें status 0 होता है, इसलिए हमेशा बॉडी में status जांचें। HTTP 400 और 403 एरर को छोड़कर, सभी रिस्पॉन्स (सफल रिस्पॉन्स भी) Content-Type: text/html के साथ भेजे गए JSON होते हैं, इसलिए अपने आप JSON पहचानने पर भरोसा करने की बजाय (जैसे नो-कोड टूल में) बॉडी को खुद पार्स करें:
{ "message": "Invalid whatsapp client", "status": 0 }
| संदेश | कैसे ठीक करें |
|---|---|
Auth Error | client_id और api_key दोनों भेजें। |
Invalid Client Id | client_id को नंबर के रूप में भेजें। HTTP 403 के साथ लौटता है। |
Auth Error: invalid api key | जांचें कि की मौजूद है, डिलीट नहीं हुई है और इसी client_id की है। HTTP 400 के साथ लौटता है। |
Msg cant be null | टेक्स्ट संदेशों (msg_type 0) के लिए msg ज़रूरी है। |
Image Url Can't be null | msg_type 1 के लिए img_url भेजें। |
File Url Can't be null | msg_type 2 के लिए file_url भेजें। |
Not enough credits: … messages requested, … credits remaining | कम प्राप्तकर्ता भेजें या क्रेडिट जोड़ें। क्रेडिट देखें। |
Invalid whatsapp client | वह whatsapp_client ID आपके वर्कस्पेस में नहीं है। |
No valid contacts found | phone का हर आइटम खाली था या छोड़ दिया गया। जांचें कि देश के कोड के साथ नंबर 6 से 15 अंकों के हों। |
Demo Account can not access apis | सामान्य अकाउंट इस्तेमाल करें। |
Invalid JSON format: … | JSON बॉडी सही नहीं है, या आपने client_id के बिना फॉर्म फील्ड भेजे हैं। |
सुझाव#
phoneको स्ट्रिंग के रूप में भेजें: अपनी सूची को कॉमा से जोड़ें। JSON ऐरे भेजने पर{}मिलता है।- फिलहाल Python क्लाइंट का
send_bulk_messagesइस्तेमाल न करें: यह सूची कोphonesके रूप में भेजता है, जिसे यह endpoint नज़रअंदाज़ करता है। ऊपर दिए उदाहरणों की तरह endpoint को सीधे कॉल करें। - हर संदेश ट्रैक करें:
messagesसे हरmsg_idसेव करें, याwebhookपास करें ताकि हर संदेश के भेजे जाने या फेल होने पर आपको सूचना मिले। - अपना नंबर कनेक्टेड रखें: हर संदेश आपके WhatsApp नंबर से भेजा जाता है, इसलिए पूरा बैच भेजे जाने तक इसे WhatsApp सेटिंग्स में कनेक्टेड रहना चाहिए।
- हर व्यक्ति के लिए अलग टेक्स्ट: यह एंडपॉइंट सभी को एक ही
msgभेजता है। हर संदेश को पर्सनलाइज़ करने के लिए हर प्राप्तकर्ता के लिए एक बार संदेश भेजें कॉल करें।
