मैसेजिंग API
संदेश हिस्ट्री API
किसी तारीख की रेंज के लिए अपने वर्कस्पेस के संदेशों की सूची, हर संदेश के स्टेटस के साथ पाएं। इसका इस्तेमाल भेजे गए संदेशों का मिलान करने, रिपोर्ट बनाने या दोबारा भेजने के लिए फेल हुए संदेश ढूंढने में करें।
https://wbiztool.com/api/v1/report/बॉडी: JSON (पहले पेज के बाद के पेजों के लिए ज़रूरी) या फॉर्म फील्ड
हिस्ट्री में आपकी API की वाले वर्कस्पेस का हर संदेश शामिल है, चाहे वह API, डैशबोर्ड या कैंपेन से भेजा गया हो। नतीजे हर पेज पर 200 आते हैं, सबसे पुराने पहले। यही डेटा रिपोर्ट्स पेज पर भी उपलब्ध है।
छोटा उदाहरण#
curl -X POST https://wbiztool.com/api/v1/report/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"start_date": "01-09-2026",
"end_date": "08-09-2026",
"page": 1
}'import requests
page = 1
history = []
while True:
response = requests.post(
"https://wbiztool.com/api/v1/report/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"start_date": "01-09-2026",
"end_date": "08-09-2026",
"page": page, # must be a JSON number, not a string
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("message") != "Success" or "total" not in result:
print("Failed:", result.get("message", "no message in response"))
break
history.extend(result["history"])
if page * 200 >= result["total"]:
break
page += 1
failed = [m for m in history if m["message_status"] == "Failed"]
print(len(history), "messages,", len(failed), "failed")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const history = [];
let page = 1;
while (true) {
const response = await fetch("https://wbiztool.com/api/v1/report/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
start_date: "01-09-2026",
end_date: "08-09-2026",
page, // must be a JSON number, not a string
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.message !== "Success" || !("total" in result)) {
console.error("Failed:", result.message ?? "no message in response");
break;
}
history.push(...result.history);
if (page * 200 >= result.total) break;
page += 1;
}
const failed = history.filter((m) => m.message_status === "Failed");
console.log(`${history.length} messages, ${failed.length} failed`);<?php
$history = [];
$page = 1;
do {
$ch = curl_init('https://wbiztool.com/api/v1/report/');
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',
'start_date' => '01-09-2026',
'end_date' => '08-09-2026',
'page' => $page, // an integer, so json_encode sends a number
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['message'] ?? '') !== 'Success' || !isset($result['total'])) {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
break;
}
$history = array_merge($history, $result['history']);
$page++;
} while (($page - 1) * 200 < $result['total']);
echo count($history) . ' messages';12345 और YOUR_API_KEY की जगह अपनी वैल्यू डालें। ये कहां मिलेंगी, यह जानने के लिए ऑथेंटिकेशन देखें।
रिक्वेस्ट पैरामीटर#
ऑथेंटिकेशन
client_idintegerआवश्यकसेटिंग्स → API Keys से आपका API क्लाइंट ID।
api_keystringआवश्यकउसी पेज से आपकी API की।
फिल्टर
start_datestringआवश्यकशामिल किया जाने वाला पहला दिन,
DD-MM-YYYYफॉर्मेट में, उदाहरण के लिए01-09-2026।end_datestringआवश्यकरेंज का अंत,
DD-MM-YYYYफॉर्मेट में। यह दिन खुद शामिल नहीं होता। तारीख की रेंज देखें।whatsapp_clientintegerवैकल्पिकसिर्फ इस WhatsApp नंबर से भेजे गए संदेश लौटाएं, WhatsApp सेटिंग्स से उसका ID इस्तेमाल करके। अपने सभी नंबरों के संदेश पाने के लिए इसे न भेजें।
pageintegerवैकल्पिकपेज नंबर,
1(डिफॉल्ट) से शुरू। हर पेज में ज़्यादा से ज़्यादा 200 संदेश होते हैं। इसे JSON नंबर के रूप में भेजें।0या नेगेटिव नंबर भेजने परtotalके साथ खालीhistoryलौटता है।
तारीख की रेंज#
तारीखों को भारतीय मानक समय (IST, UTC+5:30) में उस दिन की शुरुआत की आधी रात माना जाता है, और संदेशों का मिलान इस आधार पर होता है कि वे कब बनाए गए (कतार में डाले गए या शेड्यूल किए गए), न कि कब भेजे गए। रेंज start_date 00:00 से end_date 00:00 तक चलती है, इसलिए:
"start_date": "01-09-2026", "end_date": "08-09-2026"से 1 से 7 सितंबर तक के संदेश मिलते हैं। 8 सितंबर शामिल नहीं है।- सिर्फ एक दिन के संदेश पाने के लिए
end_dateको अगला दिन रखें:"start_date": "15-09-2026", "end_date": "16-09-2026"। - अगर दोनों तारीखें एक ही हैं, तो कोई संदेश नहीं मिलता।
पेजिनेशन#
हर रिस्पॉन्स में total होता है, यानी पूरी रेंज में संदेशों की संख्या, और history में उनमें से ज़्यादा से ज़्यादा 200 संदेश। page 2, 3 और आगे तब तक रिक्वेस्ट करें जब तक page × 200 कम से कम total के बराबर न हो जाए।
रिस्पॉन्स#
सफल रिक्वेस्ट HTTP 200 लौटाती है:
{
"message": "Success",
"status": 0,
"total": 3,
"history": [
{ "id": 9817263, "msg_type": "Text", "contact": "919876543210", "message_status": "Sent" },
{ "id": 9817264, "msg_type": "File", "contact": "919812345670", "message_status": "Failed" },
{ "id": 9817265, "msg_type": "Image", "contact": "Sales Team Mumbai", "message_status": "Pending" }
]
}
| फील्ड | टाइप | विवरण |
|---|---|---|
message | string | रिक्वेस्ट सफल होने पर Success, वरना एरर। |
status | integer | हमेशा 0। सफलता पहचानने के लिए इसका इस्तेमाल न करें। |
total | integer | सभी पेजों को मिलाकर तारीख की रेंज में संदेशों की संख्या। केवल सफल होने पर मौजूद होता है। |
history | array | इस पेज पर ज़्यादा से ज़्यादा 200 संदेश, सबसे पुराने पहले। एरर होने पर खाली। |
history[].id | integer | संदेश ID, वही जो संदेश भेजते समय msg_id के रूप में मिला था। |
history[].msg_type | string | Text, Image या File। |
history[].contact | string | देश के कोड के साथ प्राप्तकर्ता का फोन नंबर, या ग्रुप संदेशों के लिए ग्रुप का नाम। |
history[].message_status | string | नीचे दी गई टेबल देखें। |
संदेश स्टेटस वैल्यू#
message_status | मतलब |
|---|---|
Pending | कतार में है या शेड्यूल है, अभी भेजा नहीं गया (स्टेटस 0)। |
Sent | आपके WhatsApp नंबर से भेज दिया गया (स्टेटस 1)। |
Delivered | रिज़र्व्ड, फिलहाल नहीं लौटाया जाता। |
Read | रिज़र्व्ड, फिलहाल नहीं लौटाया जाता। |
Failed | नहीं भेजा जा सका, या भेजना बीच में रुक गया (स्टेटस 2)। error देखने के लिए संदेश स्टेटस इस्तेमाल करें। |
Cancelled | भेजे जाने से पहले कैंसल कर दिया गया (स्टेटस 3)। |
Expired | अपनी expire_after_seconds समय-सीमा से पहले नहीं भेजा जा सका (स्टेटस 4)। |
डिलीवरी और रीड टिक फिलहाल दर्ज नहीं किए जाते, इसलिए भेजे गए संदेश हमेशा Sent दिखते हैं। Delivered और Read रिज़र्व्ड वैल्यू हैं; अगर ये कभी दिखें, तो इन्हें Sent मानें।
एरर#
जब तक अलग से न बताया गया हो, एरर HTTP 200 के साथ आते हैं और उनमें status 0 होता है:
{ "message": "Error", "status": 0, "history": [] }
| संदेश | कैसे ठीक करें |
|---|---|
Error | start_date या end_date मौजूद नहीं है या DD-MM-YYYY फॉर्मेट में नहीं है, JSON बॉडी सही नहीं है (अक्सर आखिर में छूटे कॉमा की वजह से), या रिक्वेस्ट POST नहीं थी। |
Auth Error | client_id और api_key दोनों भेजें। |
Invalid Client Id | client_id को नंबर के रूप में भेजें। HTTP 403 के साथ, बिना history के लौटता है। |
Auth Error: invalid api key | जांचें कि की मौजूद है, डिलीट नहीं हुई है और इसी client_id की है। HTTP 400 के साथ, बिना history के लौटता है। |
Demo Account can not access apis | सामान्य अकाउंट इस्तेमाल करें। |
सुझाव#
- हिस्ट्री छोटी रेंज में लें: एक बार में एक दिन या एक हफ्ता लेने से पेजों की संख्या कम रहती है।
- फेल हुए संदेश ढूंढें:
historyकोFailedके लिए फिल्टर करें, फिर हरidके साथ संदेश स्टेटस कॉल करके देखें कि वह क्यों फेल हुआ। दोबारा कोशिश करने से पहलेerrorजांचें:Sending was interrupted and may have been delivered…का मतलब है कि हो सकता है प्राप्तकर्ता को संदेश पहले ही मिल चुका हो। - पुराने संदेश हटा दिए जाते हैं: जो संदेश अंतिम स्टेटस पर पहुंच चुके हैं और लगभग 90 दिनों से नहीं बदले, वे हटाए जा सकते हैं और फिर यहां नहीं दिखते। यही उन संदेशों के साथ भी होता है जो बनने या शेड्यूल होने के 90 दिन बाद भी किसी डिसकनेक्ट या डिलीट हो चुके नंबर पर कतार में हैं।
- रियल-टाइम ट्रैकिंग: संदेश भेजे जाते ही प्रतिक्रिया देने के लिए, इस एंडपॉइंट को पोल करने की जगह संदेश भेजते समय
webhookपास करें।
