API التحقق من الأرقام
نتائج التحقق من أرقام WhatsApp (API)
اقرأ نتائج التحقق من الأرقام صفحة بصفحة، مع التصفية حسب المهمة أو الحالة. استخدمه لتصدير الأرقام المسجّلة على WhatsApp، أو لتنظيف قائمة جهات الاتصال من الأرقام غير الصالحة، أو لمزامنة النتائج مع نظام CRM لديك.
https://wbiztool.com/api/v1/verification/results/بدون عوامل تصفية، يُرجع كل عمليات التحقق في مساحة العمل الخاصة بك، من الأحدث إلى الأقدم. ويشمل ذلك المهام التي أُنشئت من صفحة التحقق من الأرقام في لوحة التحكم، لا تلك التي أُنشئت عبر API فقط.
مثال سريع#
curl "https://wbiztool.com/api/v1/verification/results/?campaign_id=4521&status=verified&limit=100&offset=0" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
response = requests.get(
"https://wbiztool.com/api/v1/verification/results/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"campaign_id": 4521, "status": "verified", "limit": 100, "offset": 0},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 4xx or 5xx
if result["status"] == "success":
print(f"{result['returned_count']} of {result['total_count']} results")
for item in result["results"]:
print(item["number"], item["status"])
else:
print(f"Failed ({response.status_code}):", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const url = new URL("https://wbiztool.com/api/v1/verification/results/");
url.search = new URLSearchParams({ campaign_id: "4521", status: "verified", limit: "100", offset: "0" });
const response = await fetch(url, {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const result = await response.json(); // read the body even when the HTTP code is 4xx or 5xx
if (result.status === "success") {
console.log(`${result.returned_count} of ${result.total_count} results`);
for (const item of result.results) {
console.log(item.number, item.status);
}
} else {
console.error(`Failed (${response.status}):`, result.message);
}<?php
$query = http_build_query([
'campaign_id' => 4521,
'status' => 'verified',
'limit' => 100,
'offset' => 0,
]);
$ch = curl_init('https://wbiztool.com/api/v1/verification/results/?' . $query);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? '') === 'success') {
echo $result['returned_count'] . ' of ' . $result['total_count'] . " results\n";
foreach ($result['results'] as $item) {
echo $item['number'] . ': ' . $item['status'] . "\n";
}
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}معاملات الطلب#
توضع كل المعاملات في سلسلة الاستعلام (query string).
المصادقة
Authorizationheaderمطلوب
Bearer YOUR_API_KEY، باستخدام مفتاح من Settings → API keys (الإعدادات ← مفاتيح API). يمكنك تمرير المفتاح كمعامل استعلامapi_keyبدلًا من ذلك، لكن الترويسة تُبقيه بعيدًا عن سجلات الخوادم والوكلاء (proxies).
التصفية والتقسيم إلى صفحات
campaign_idintegerاختيارييُرجع فقط الأرقام من مهمة التحقق هذه. يجب أن تكون مهمة تحقق في مساحة العمل نفسها التي ينتمي إليها مفتاح API. احذفه للحصول على النتائج من كل المهام.
statusstringاختيارييُرجع فقط الأرقام التي لها هذه الحالة:
pendingأوverifiedأوinvalid. أي قيمة أخرى تُتجاهل ولا تُطبَّق أي تصفية حسب الحالة، بما في ذلكunknown، لذا فإنstatus=unknownيُرجع كل الحالات. القيم حساسة لحالة الأحرف:Verifiedتُتجاهل وتُرجع كل الحالات.limitintegerاختياريعدد النتائج في كل صفحة. القيمة الافتراضية
100. استخدم قيمة تساوي 1 أو أكثر.offsetintegerاختياريعدد النتائج التي يجب تخطّيها. القيمة الافتراضية
0. يجب أن تكون 0 أو أكثر.
الاستجابة#
يُرجع الطلب الناجح HTTP 200:
{
"status": "success",
"total_count": 2,
"returned_count": 2,
"limit": 100,
"offset": 0,
"has_more": false,
"results": [
{
"id": 88215,
"campaign_id": 4521,
"campaign_name": "Website leads - September",
"number": "14155550123",
"status": "verified",
"checked_at": "2026-09-16T10:16:26.730114+00:00",
"created_at": "2026-09-16T10:15:00.483101+00:00"
},
{
"id": 88213,
"campaign_id": 4521,
"campaign_name": "Website leads - September",
"number": "919876543210",
"status": "verified",
"checked_at": "2026-09-16T10:16:12.204551+00:00",
"created_at": "2026-09-16T10:15:00.482913+00:00"
}
]
}
| الحقل | النوع | الوصف |
|---|---|---|
status | string | "success". تُرجع الأخطاء "error". |
total_count | integer | عدد النتائج المطابقة لعوامل التصفية، عبر كل الصفحات. |
returned_count | integer | عدد النتائج في هذه الاستجابة. |
limit | integer | قيمة limit المستخدمة. |
offset | integer | قيمة offset المستخدمة. |
has_more | boolean | true إذا كان offset + limit أقل من total_count، أي توجد صفحة أخرى. |
results | array | النتائج، من الأحدث إلى الأقدم. |
results[].id | integer | معرّف سجل التحقق هذا. |
results[].campaign_id | integer or null | معرّف المهمة التي ينتمي إليها الرقم. |
results[].campaign_name | string or null | اسم تلك المهمة. |
results[].number | string | رقم الهاتف بعد التنظيف. |
results[].status | string | pending أو verified أو invalid، أو unknown لفحص أُلغي. |
results[].checked_at | string or null | وقت التحقق من الرقم، أو null ما دام معلّقًا. |
results[].created_at | string | وقت إضافة الرقم. |
الطوابع الزمنية بصيغة ISO 8601 بتوقيت UTC مع الفرق +00:00. لمعرفة معنى كل حالة، راجع قيم حالة الرقم.
الأخطاء#
تُرجع الأخطاء جسم JSON مع status بقيمة "error" ورمز خطأ HTTP:
{ "status": "error", "message": "Campaign not found" }
| HTTP | الرسالة | طريقة الإصلاح |
|---|---|---|
405 | Only GET method allowed | أرسل طلب GET. |
401 | API key required | أضف الترويسة Authorization: Bearer YOUR_API_KEY. |
401 | Invalid API key | تأكد من أن المفتاح موجود ولم يُحذف أو يُعطَّل. |
404 | Campaign not found | قيمة campaign_id غير موجودة، أو ليست مهمة تحقق، أو تنتمي إلى مساحة عمل أخرى. |
500 | Internal server error: … | غالبًا لا تكون قيمة campaign_id أو limit أو offset عددًا صحيحًا، أو تكون offset سالبة، أو يكون offset + limit سالبًا. |
قراءة كل الصفحات#
زِد offset بمقدار limit حتى تصبح قيمة has_more هي false.
import requests
numbers, offset, limit = [], 0, 500
while True:
response = requests.get(
"https://wbiztool.com/api/v1/verification/results/",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"campaign_id": 4521, "status": "verified", "limit": limit, "offset": offset},
timeout=60,
)
result = response.json()
if result["status"] != "success":
raise RuntimeError(result["message"])
numbers += [item["number"] for item in result["results"]]
if not result["has_more"]:
break
offset += limit
print(len(numbers), "numbers are on WhatsApp")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const numbers = [];
const limit = 500;
let offset = 0;
while (true) {
const url = new URL("https://wbiztool.com/api/v1/verification/results/");
url.search = new URLSearchParams({ campaign_id: "4521", status: "verified", limit: String(limit), offset: String(offset) });
const response = await fetch(url, { headers: { Authorization: "Bearer YOUR_API_KEY" } });
const result = await response.json();
if (result.status !== "success") throw new Error(result.message);
numbers.push(...result.results.map((item) => item.number));
if (!result.has_more) break;
offset += limit;
}
console.log(numbers.length, "numbers are on WhatsApp");نصائح#
- أزل التكرارات حسب
idأثناء التنقل بين الصفحات. تُرتَّب النتائج حسب وقت الإنشاء، من الأحدث إلى الأقدم. أرقام المهمة الواحدة تتشارك تقريبًا الطابع الزمني نفسه، وقد تُضاف عمليات تحقق جديدة أثناء تنقلك بين الصفحات، لذا قد يظهر صف في صفحتين أو يُتخطّى. التصفية حسبcampaign_idوانتظار انتهاء المهمة يقللان من ذلك. - انتظر الاكتمال قبل التصدير. تحقّق من حالة التحقق حتى تصبح قيمة
overall_statusهيcompleted، أو تعامل مع النتائجpendingفي الكود الخاص بك. - نظّف قائمة جهات الاتصال بتصدير
status=invalidوحذف تلك الأرقام قبل حملتك التالية. - حجم الصفحة: لا يوجد حد أقصى لـ
limit، لكن الصفحة الكبيرة جدًا تعني استجابة كبيرة وبطيئة.
