API حسابات WhatsApp
ربط رقم WhatsApp (API)
ابدأ ربط رقم WhatsApp بمساحة العمل الخاصة بك من تطبيقك. يفتح Wbiztool جلسة WhatsApp جديدة ويرسل رمز QR، أو رمزًا من 8 أحرف عند استخدام login_method=phone، إلى عنوان URL الخاص بالـ webhook لديك. اعرضه على صاحب الهاتف، فيمسح رمز QR أو يكتب الرمز في WhatsApp، ويصبح الرقم جاهزًا لإرسال الرسائل. مع رمز QR لا تحتاج إلى معرفة الرقم مسبقًا: يقرؤه Wbiztool من WhatsApp بعد المسح ويرسله إلى الـ webhook الخاص بك.
هل تربط رقمك بنفسك يدويًا؟ اتبع ربط رقم WhatsApp الخاص بك.
https://wbiztool.com/api/v1/whatsapp/connect/النص (Body): JSON أو حقول نموذج
POST /api/v1/whatsapp-client/create/ اسم بديل مطابق: يشغّل الكود نفسه ويُرجع الاستجابات نفسها. يستمر المساران في العمل.
كيف يعمل الربط#
استدعاء API يبدأ الربط فقط. يصل رمز QR أو رمز الهاتف لاحقًا، إلى عنوان URL الخاص بالـ webhook لديك.
استدعِ API الربط
أرسل
webhook_url، إضافةً إلىwhatsapp_numberمعlogin_method=phone. لإعادة ربط رقم أضفته من قبل، أرسل أيضًاwhatsapp_client_idالخاص به. تمنحك الاستجابةwhatsapp_client_id. احفظه.استلم رمز QR أو رمز الهاتف
مع القيمة الافتراضية
login_method=qr، يستقبل الـ webhook الخاص بكstatus=qr_generatedمع صورة QR فيqr_image. يُعاد إرسال رمز QR كل بضع ثوانٍ ما دام Wbiztool ينتظر المسح، لذا اعرض أحدث رمز دائمًا. أمام الشخص نحو دقيقتين للمسح.مع
login_method=phone، يستقبل الـ webhook الخاص بكstatus=pairing_codeمع رمز من 8 أحرف فيpairing_code، مثلK5EWPGY5. يُرسَل مرة واحدة ويبقى صالحًا لنحو ثلاث دقائق.اعرض الصورة أو الرمز على صاحب الهاتف. إذا لم يُستخدم في الوقت المحدد، أو طلب WhatsApp إعادة تحميل الرمز، فستستقبل
not_connected؛ استدعِ API مرة أخرى للحصول على رمز جديد.اربط الهاتف
على الهاتف، افتح WhatsApp ← الأجهزة المرتبطة (Linked devices) ← ربط جهاز (Link a device). امسح رمز QR، أو اضغط على الربط برقم الهاتف بدلًا من ذلك (Link with phone number instead) واكتب الرمز المكوّن من 8 أحرف.
احصل على النتيجة
يستقبل الـ webhook الخاص بك
status=connectedمع الرقم المرتبط فيwhatsapp_numberعند ربط الرقم، أوstatus=not_connectedإذا لم يُمسح الرمز في الوقت المحدد أو فشل الاتصال. قد يصل الحدثconnectedقبل أن تُرجع حالة الاتصال القيمةConnectedببضع ثوانٍ. ردّ على الـ webhook أولًا، ثم استعلم من حالة الاتصال كل بضع ثوانٍ لمدة تصل إلى دقيقة. لا تتحقق منها مرة واحدة من داخل معالج الـ webhook.
مثال سريع#
curl -X POST https://wbiztool.com/api/v1/whatsapp/connect/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/whatsapp/connect/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
},
timeout=30,
)
result = response.json() # read the body even when the HTTP code is 400 or 403
if result.get("status") == 1:
print("Waiting for QR code, whatsapp_client_id", result["whatsapp_client_id"])
else:
print("Failed:", result.get("message"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/whatsapp/connect/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
webhook_url: "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400 or 403
if (result.status === 1) {
console.log("Waiting for QR code, whatsapp_client_id", result.whatsapp_client_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'webhook_url' => 'https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET',
];
$ch = curl_init('https://wbiztool.com/api/v1/whatsapp/connect/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Waiting for QR code, whatsapp_client_id ' . $result['whatsapp_client_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}استبدل 12345 وYOUR_API_KEY بقيمك الخاصة. راجع المصادقة لمعرفة مكان العثور عليها. للحصول على رمز هاتف بدلًا من ذلك، أضف "login_method": "phone" و"whatsapp_number": "919876543210".
معاملات الطلب#
client_idintegerمطلوبمعرّف العميل في API (API Client ID) من Settings → API keys (الإعدادات ← مفاتيح API).
api_keystringمطلوبمفتاح API الخاص بك من الصفحة نفسها. يُضاف الرقم إلى مساحة العمل التي أُنشئ فيها هذا المفتاح.
whatsapp_numberstringفقط مع login_method=phoneمع
login_method=phone، الرقم الدولي الكامل الذي سيُرسَل إليه الرمز، لأن WhatsApp يرسله إلى هذا الرقم بالضبط: رمز الدولة أولًا، بدون0بادئ، مثل919876543210. تُزال+والمسافات والشرطات تلقائيًا.مع
login_method=qrيُتجاهل، ويمكنك حذفه. يحفظ Wbiztool الرقم الذي يُبلغ عنه WhatsApp بعد المسح ويرسله في webhook connected.login_methodstringاختياري
qr(افتراضي) لاستلام رمز QR، أوphoneلاستلام رمز من 8 أحرف يكتبه صاحب الهاتف في WhatsApp ضمن الربط برقم الهاتف بدلًا من ذلك (Link with phone number instead). مفيد عندما لا يستطيع الهاتف مسح رمز QR، مثلًا عندما يكون هو الجهاز الوحيد.whatsapp_client_idintegerاختياريلإعادة ربط رقم موجود في مساحة العمل الخاصة بك لكنه غير متصل، أرسل
whatsapp_client_idالخاص به. يُحتفظ بالمعرّف نفسه، فتستمر استدعاءات API الأخرى لديك في العمل. احذفه لإضافة رقم جديد.يأخذ السجل أي رقم يُربط. إذا مسح هاتف مختلف رمز QR، أو أرسلت
whatsapp_numberمختلفًا معlogin_method=phone، فإنwhatsapp_client_idهذا يرسل من الرقم الجديد من ذلك الحين، بما في ذلك الرسائل الموجودة بالفعل في قائمة الانتظار الخاصة به.webhook_urlstringمطلوب لاستلام رمز QRعنوان URL الخاص بك الذي يبدأ بـ
httpأوhttpsويستقبل رمز QR وتحديثات الاتصال، حتى 250 حرفًا (تفشل العناوين الأطول مع HTTP500). يقبل API الطلب بدونه، لكن عندها لن يُرسَل إليك شيء ولن تكون لديك أي طريقة للحصول على رمز QR عبر API. راجع أحداث Webhook.
استخدام مكتبات العملاء الرسمية#
تستدعي مكتبة Python المسار /api/v1/whatsapp-client/create/ نيابةً عنك. وهي تطلب whatsapp_number؛ ومع رمز QR تُتجاهل القيمة.
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)
result = client.create_whatsapp_client(
whatsapp_number="919876543210",
webhook_url="https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
)
print(result)تُطلق مكتبة Python الاستثناء requests.exceptions.HTTPError عندما يُرجع API رمز HTTP 400 أو 403، لذا ضع الاستدعاء داخل try/except.
الاستجابة#
عند إنشاء طلب الربط، يُرجع API رمز HTTP 200:
{
"message": "Whatsapp Client Created",
"whatsapp_client_id": 678,
"login_method": "qr",
"status": 1
}
| الحقل | النوع | الوصف |
|---|---|---|
status | integer | 1 إذا أُنشئ طلب الربط، و0 إذا فشل. |
message | string | Whatsapp Client Created عند النجاح، وإلا نص الخطأ. |
whatsapp_client_id | integer | معرّف رقم WhatsApp. استخدمه كقيمة whatsapp_client في استدعاءات API الأخرى. يظهر عند النجاح فقط. |
login_method | string | qr أو phone، بحسب ما استُخدم في هذه المحاولة. يظهر عند النجاح فقط. |
تعني "status": 1 أن الطلب أُنشئ، لا أن الرقم متصل. واستدعاء API مرة أخرى لا يراكم الأرقام:
- مع رمز QR وبدون
whatsapp_client_id، تحصل علىwhatsapp_client_idنفسه حتى يُمسح أحد رموز QR الخاصة به. - مع
login_method=phone، يحصل الرقم الذي أُضيف من قبل لكنه غير متصل علىwhatsapp_client_idالحالي الخاص به. - مع
whatsapp_client_id، يُعاد ربط ذلك الرقم.
حتى يُمسح أول رمز QR له، لا يكون للرقم رقم هاتف بعد: يُرجع عرض الأرقام المتصلة وحالة الاتصال رقمًا فارغًا له.
الأخطاء#
| الرسالة | HTTP | طريقة الإصلاح |
|---|---|---|
login_method must be 'qr' or 'phone' | 400 | أرسل qr أو phone أو احذفه. |
For login_method phone, whatsapp_number must be the full international number with country code and no leading 0, e.g. 919876543210 | 400 | أرسل الرقم مع رمز الدولة، مثل 919876543210، لا 09876543210 ولا 9876543210. |
Auth Error | 200 | أرسل client_id وapi_key كليهما. يُرجَع أيضًا عندما يكون جسم JSON غير صالح. |
Invalid Client Id | 403 | أرسل client_id كعدد صحيح، مثل 12345. |
Auth Error: invalid api key | 400 | تأكد من أن المفتاح موجود، ولم يُحذف، وينتمي إلى client_id هذا. |
Higher Subscription Required | 200 | باقتك لا تتضمن هذا API. قم بترقية باقتك. |
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit | 200 | لديك بالفعل العدد الأقصى من الأرقام المتصلة الذي تسمح به باقتك. افصل رقمًا أو قم بالترقية. |
Already Connected With Given Number | 200 | مع login_method=phone، هذا الرقم متصل بالفعل في مساحة العمل هذه. ومع whatsapp_client_id، ذلك الرقم متصل بالفعل. لا حاجة إلى أي إجراء. إذا كنت قد بلغت بالفعل حد الأرقام في باقتك، فستحصل على WhatsApp Account Limit Reached بدلًا من ذلك. |
Invalid WhatsApp client | 400 | قيمة whatsapp_client_id غير موجودة، أو حُذفت، أو تنتمي إلى مساحة عمل أخرى. احذفها لإضافة رقم جديد. |
الطلب الذي ليس POST يُرجع كائنًا فارغًا {} مع HTTP 200.
أحداث Webhook#
يرسل Wbiztool طلب POST إلى webhook_url الخاص بك في كل خطوة. يكون الجسم مرمّزًا كنموذج (application/x-www-form-urlencoded)، وليس JSON.
رمز QR جاهز (يُعاد إرساله كل بضع ثوانٍ أثناء انتظار المسح، وغالبًا بعنوان URL نفسه):
status=qr_generated&whatsapp_client_id=678&qr_image=...
رمز الهاتف جاهز (مع login_method=phone، يُرسَل مرة واحدة):
status=pairing_code&whatsapp_client_id=678&pairing_code=K5EWPGY5
الرقم متصل، مع الرقم الذي سُجّل الدخول به، كما يُبلغ عنه WhatsApp:
status=connected&whatsapp_client_id=678&whatsapp_number=919876543210
فشل الاتصال، مثلًا لأن رمز QR لم يُمسح أو لم يُدخَل رمز الهاتف في الوقت المحدد:
status=not_connected&whatsapp_client_id=678
| الحقل | القيم |
|---|---|
status | qr_generated أو pairing_code أو connected أو not_connected |
whatsapp_client_id | قيمة whatsapp_client_id التي أرجعها API. |
whatsapp_number | مع connected فقط. الرقم المرتبط مع رمز الدولة، مثل 919876543210. استخدمه لمعرفة الرقم الذي مسح الرمز. يكون فارغًا في الحالات النادرة التي لم يُبلغ فيها WhatsApp عنه. |
pairing_code | مع pairing_code فقط. الرمز المكوّن من 8 أحرف الذي يُكتب في WhatsApp. اعرضه كما هو؛ ولا بأس بمسافات أو شرطة بين نصفيه. |
qr_image | مع qr_generated فقط. إمّا عنوان data: URL يحتوي على الصورة بترميز base64، أو عنوان https URL للصورة. تعامل مع الحالتين. يبقى عنوان https URL نفسه في كل تحديث للرقم نفسه، بينما تتغير الصورة خلفه. أضف استعلامًا لتجاوز التخزين المؤقت عند عرضها (مثل ?t=<timestamp>)، وإلا فقد يستمر المتصفح في عرض رمز منتهي الصلاحية. |
يجب أن يكون عنوان URL الخاص بك قابلًا للوصول من الإنترنت، وأن يستجيب خلال بضع ثوانٍ. ينتظر Wbiztool ردّك حتى 10 ثوانٍ؛ وإذا كان خادمك بطيئًا أو تعذّر الوصول إليه، يضيع ذلك الحدث لكن محاولة الربط تستمر. يُقبل أي رمز حالة HTTP. لا يُعاد إرسال الأحداث التي فشل تسليمها، ولا يُرسَل أي شيء إذا انقطع اتصال الرقم لاحقًا. لمتابعة رقم بعد اتصاله، استعلم من حالة الاتصال.
الاستعلام المتكرر بدلًا من webhooks#
إذا كان خادمك لا يستطيع استقبال webhooks، فستظل بحاجة إلى الـ webhook للحصول على رمز QR، لكن لا داعي للاعتماد عليه لمعرفة النتيجة. بعد مسح رمز QR، استدعِ حالة الاتصال مع whatsapp_client_id كل بضع ثوانٍ حتى تُرجع Connected. ويعرض عرض الحسابات الشيء نفسه لكل أرقامك.
نصائح#
- تعامل مع الأحداث المكررة: اجعل المعالج لديك آمنًا للتشغيل أكثر من مرة، في حال وصل حدث مرتين.
- اعرض أحدث رمز QR: استبدل الصورة في كل مرة يصل فيها حدث
qr_generatedجديد، مع إضافة استعلام لتجاوز التخزين المؤقت إلى عنوانhttpsURL. تتوقف الرموز الأقدم عن العمل. - امسح الرمز خلال دقيقتين تقريبًا: بعد ذلك ستحصل على
not_connected. استدعِ API مرة أخرى للحصول على رمز جديد. - تحقّق من الرقم بعد مسح رمز QR: قيمة
whatsapp_numberفي الحدثconnectedهي الرقم الذي رُبط فعلًا، وقد تختلف عن الرقم الذي كنت تتوقعه. - أدخل رمز الهاتف خلال ثلاث دقائق تقريبًا: كل محاولة تعطي رمزًا واحدًا. إذا انتهت صلاحيته فستحصل على
not_connected؛ استدعِ API مرة أخرى. - لم يصل رمز QR أو رمز الهاتف بعد 10 دقائق؟ انتهت صلاحية الطلب. استدعِ API مرة أخرى.
- الربط من لوحة التحكم أبسط عندما تربط رقمك الخاص. استخدم إعدادات WhatsApp وامسح الرمز هناك.
