Mesajlaşma API'si
Mesaj geçmişi API'si
Çalışma alanınızdaki mesajların bir tarih aralığı için listesini, her birinin durumuyla birlikte alın. Gönderilenleri mutabakat için karşılaştırmak, raporlar oluşturmak veya yeniden denenecek başarısız mesajları bulmak için kullanın.
https://wbiztool.com/api/v1/report/Gövde: JSON (ilk sayfadan sonraki sayfalar için gerekli) veya form alanları
Geçmiş, API anahtarınızın çalışma alanındaki her mesajı kapsar; API, panel veya bir kampanya üzerinden gönderilmiş olması fark etmez. Sonuçlar sayfa başına 200 adet, en eskiden başlayarak gelir. Aynı veriler Raporlar sayfasında da bulunur.
Hızlı örnek#
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 ve YOUR_API_KEY değerlerini kendi değerlerinizle değiştirin. Bunları nerede bulacağınız için Kimlik doğrulama bölümüne bakın.
İstek parametreleri#
Kimlik doğrulama
client_idintegerzorunluAyarlar → API anahtarları sayfasındaki API Client ID'niz.
api_keystringzorunluAynı sayfadaki API anahtarınız.
Filtreler
start_datestringzorunluDahil edilecek ilk gün,
DD-MM-YYYYbiçiminde; örneğin01-09-2026.end_datestringzorunluAralığın sonu,
DD-MM-YYYYbiçiminde. Bu günün kendisi dahil değildir. Bkz. Tarih aralığı.whatsapp_clientintegeristeğe bağlıYalnızca bu WhatsApp numarasından gönderilen mesajları döndürür; WhatsApp ayarları sayfasındaki ID'sini kullanın. Tüm numaralarınızdan gelen mesajları almak için göndermeyin.
pageintegeristeğe bağlıSayfa numarası,
1(varsayılan) ile başlar. Her sayfa en fazla 200 mesaj içerir. JSON sayısı olarak gönderin.0veya negatif bir sayı, boş birhistoryiletotaldöndürür.
Tarih aralığı#
Tarihler, Hindistan Standart Saati'ne (IST, UTC+5:30) göre o günün başlangıcındaki gece yarısı olarak okunur ve mesajlar gönderildikleri zamana göre değil, oluşturuldukları (kuyruğa alındıkları veya zamanlandıkları) zamana göre eşleştirilir. Aralık start_date 00:00'dan end_date 00:00'a kadar sürer; yani:
"start_date": "01-09-2026", "end_date": "08-09-2026"1–7 Eylül arasını döndürür. 8 Eylül dahil değildir.- Tek bir günü almak için
end_datedeğerini bir sonraki gün yapın:"start_date": "15-09-2026", "end_date": "16-09-2026". - İki tarih aynıysa hiç mesaj almazsınız.
Sayfalama#
Her yanıt, tüm aralıktaki mesaj sayısı olan total değerini ve history içinde bunların en fazla 200'ünü içerir. page × 200 en az total olana kadar page 2, 3 vb. isteyin.
Yanıt#
Başarılı bir istek HTTP 200 döndürür:
{
"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" }
]
}
| Alan | Tür | Açıklama |
|---|---|---|
message | string | İstek başarılı olduğunda Success, aksi halde hata mesajı. |
status | integer | Her zaman 0. Başarıyı anlamak için kullanmayın. |
total | integer | Tüm sayfalarda, tarih aralığındaki mesaj sayısı. Yalnızca başarıda bulunur. |
history | dizi | Bu sayfadaki en fazla 200 mesaj, en eskiden başlayarak. Hata olduğunda boştur. |
history[].id | integer | Mesaj ID'si; gönderildiğinde dönen msg_id ile aynıdır. |
history[].msg_type | string | Text, Image veya File. |
history[].contact | string | Ülke koduyla birlikte alıcının telefon numarası veya grup mesajlarında grup adı. |
history[].message_status | string | Aşağıdaki tabloya bakın. |
Mesaj durumu değerleri#
message_status | Anlamı |
|---|---|
Pending | Kuyrukta veya zamanlanmış, henüz gönderilmedi (durum 0). |
Sent | WhatsApp numaranızdan gönderildi (durum 1). |
Delivered | Ayrılmış, şu anda döndürülmüyor. |
Read | Ayrılmış, şu anda döndürülmüyor. |
Failed | Gönderilemedi veya gönderim yarıda kesildi (durum 2). error değerini görmek için Mesaj durumu kullanın. |
Cancelled | Gönderilmeden önce iptal edildi (durum 3). |
Expired | expire_after_seconds süresi dolmadan gönderilemedi (durum 4). |
Teslim ve okundu tikleri şu anda kaydedilmiyor; bu yüzden gönderilen mesajlar her zaman Sent olarak görünür. Delivered ve Read ayrılmış değerlerdir; bir gün görünürlerse bunları Sent olarak değerlendirin.
Hatalar#
Aksi belirtilmedikçe hatalar, status değeri 0 olarak HTTP 200 döndürür:
{ "message": "Error", "status": 0, "history": [] }
| Mesaj | Nasıl düzeltilir |
|---|---|
Error | start_date veya end_date eksik ya da DD-MM-YYYY biçiminde değil, JSON gövdesi geçerli değil (genellikle sondaki bir virgül) veya istek POST değil. |
Auth Error | client_id ve api_key değerlerinin ikisini de gönderin. |
Invalid Client Id | client_id değerini sayı olarak gönderin. HTTP 403 ile, history olmadan döner. |
Auth Error: invalid api key | Anahtarın mevcut olduğunu, silinmediğini ve bu client_id değerine ait olduğunu kontrol edin. HTTP 400 ile, history olmadan döner. |
Demo Account can not access apis | Normal bir hesap kullanın. |
İpuçları#
- Geçmişi küçük aralıklarla çekin: bir seferde bir gün veya bir hafta almak sayfa sayısını düşük tutar.
- Başarısız mesajları bulun:
historylistesiniFailediçin filtreleyin, ardından nedenini görmek için heridile Mesaj durumu endpoint'ini çağırın. Yeniden denemeden önceerrordeğerini kontrol edin:Sending was interrupted and may have been delivered…alıcıda mesajın zaten olabileceği anlamına gelir. - Eski mesajlar temizlenir: son durumuna ulaşmış ve yaklaşık 90 gündür değişmemiş mesajlar temizlenebilir ve artık burada görünmez; bağlantısı kesik veya silinmiş bir numarada, oluşturulduktan veya zamanlandıktan 90 gün sonra hâlâ kuyrukta olan mesajlar da öyle.
- Anlık takip: mesajlar gönderildikçe tepki vermek için bu endpoint'i sorgulamak yerine mesajı gönderirken bir
webhookiletin.
