API לאימות מספרים
תוצאות אימות מספרי WhatsApp (API)
קראו תוצאות של אימות מספרים דף אחר דף, מסוננות לפי משימה או לפי סטטוס. השתמשו בו כדי לייצא את המספרים שנמצאים ב-WhatsApp, לנקות מספרים לא תקינים מרשימת אנשי הקשר שלכם או לסנכרן תוצאות ל-CRM שלכם.
https://wbiztool.com/api/v1/verification/results/בלי מסננים, הוא מחזיר כל אימות בסביבת העבודה שלכם, מהחדש לישן. זה כולל משימות שנוצרו מהדף Number Verification (אימות מספרים) בלוח הבקרה, ולא רק כאלה שנוצרו דרך ה-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_key, אבל הכותרת מונעת ממנו להופיע בלוגים של שרתים ושל פרוקסי.
מסננים וחלוקה לדפים
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, אבל דף גדול מאוד יוצר תגובה גדולה ואיטית.
