دليل المطورين
كل ما تحتاجه لدمج WhatsApp API في تطبيقاتك — من المصادقة إلى إرسال الرسائل.
https://whatsapilight.cloud/apiنظرة عامة
WA API هي منصة SaaS توفر واجهة برمجية RESTful لإرسال واستقبال رسائل WhatsApp. تعتمد على Evolution API وتدعم إدارة جلسات متعددة، إرسال رسائل نصية ووسائط، واستقبال إشعارات عبر Webhooks.
سريع
زمن استجابة أقل من 200ms
آمن
مصادقة عبر API Keys مع تشفير
سهل الدمج
RESTful API بتنسيق JSON
البداية السريعة
# 1. احصل على مفتاح API من لوحة التحكم
# 2. أنشئ جلسة واتساب
curl -X POST https://whatsapilight.cloud/api/whatsapp/instances \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-instance"}'
# 3. امسح رمز QR للاتصال
# 4. أرسل رسالة
curl -X POST https://whatsapilight.cloud/api/whatsapp/send \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"instanceName": "my-instance", "phone": "12025550123", "purpose": "otp", "message": "رمز التحقق: 123456"}'المصادقة
يتم التحقق من الهوية عبر مفتاح API يُرسل في ترويسة الطلب. يمكنك إنشاء مفاتيح API من لوحة التحكم.
⚠️ حافظ على سرية مفتاح API — لا تشاركه في الكود المصدري العام أو في المتصفح.
# أضف الترويسة التالية لكل طلب
x-api-key: sk_live_xxxxxxxxxxxxxx
# مثال كامل
GET /api/whatsapp/instances HTTP/1.1
Host: whatsapilight.cloud
x-api-key: sk_live_xxxxxxxxxxxxxx
Content-Type: application/jsonإنشاء مفتاح API
- سجّل الدخول إلى لوحة التحكم
- انتقل إلى تبويب "مفاتيح API"
- انقر على "إنشاء مفتاح جديد"
- انسخ المفتاح واحفظه في مكان آمن
إدارة الجلسات
كل جلسة تمثل اتصال برقم WhatsApp واحد. يمكنك إنشاء وحذف وإعادة توصيل الجلسات عبر API.
/api/whatsapp/instancesاستعراض جميع جلسات WhatsApp الخاصة بحسابك.
{
"success": true,
"data": [
{
"name": "my-instance",
"status": "open",
"ownerJid": "12025550123@s.whatsapp.net",
"profileName": "John"
}
]
}/api/whatsapp/instancesإنشاء جلسة WhatsApp جديدة.
{
"name": "my-instance",
"webhookUrl": "https://your-app.com/webhook" // اختياري
}{
"success": true,
"data": {
"name": "my-instance",
"status": "connecting",
"qrcode": "data:image/png;base64,..."
}
}/api/whatsapp/instances/:name/qrcodeالحصول على رمز QR للمسح والاتصال بـ WhatsApp.
{
"success": true,
"data": {
"qrcode": "data:image/png;base64,...",
"status": "connecting"
}
}/api/whatsapp/instances/:name/reconnectإعادة توصيل جلسة WhatsApp غير متصلة.
{
"success": true,
"message": "تمت إعادة التوصيل"
}/api/whatsapp/instances/:nameحذف جلسة WhatsApp نهائياً.
{
"success": true,
"message": "تم حذف الجلسة"
}إرسال الرسائل
أرسل رسائل نصية عبر جلسة WhatsApp متصلة. يجب أن يكون الرقم بالصيغة الدولية بدون + أو 00.
/api/whatsapp/sendإرسال رسالة نصية أو OTP أو إشعار تشغيلي عبر نفس الواجهة. استخدم purpose لضبط السياسات وتقليل مخاطر الحظر.
{
"instanceName": "my-instance",
"phone": "12025550123",
"purpose": "otp",
"message": "رمز التحقق: 485923"
}{
"success": true,
"data": {
"messageId": "msg_abc123",
"status": "sent",
"to": "12025550123@s.whatsapp.net"
}
}/api/whatsapp/messages?instance=my-instance&limit=20استعراض سجل الرسائل المرسلة والمستلمة.
{
"success": true,
"data": {
"messages": [...],
"total": 150,
"page": 1
}
}عقد الإرسال الاحترافي (Purpose + Headers)
هذه القواعد مهمة لعملاء API الحاليين: نفس الواجهة، لكن بسلوك أوضح وأكثر أمانًا. لا يوجد كسر للتكاملات الحالية.
| purpose | الاستخدام | السلوك |
|---|---|---|
| otp | رموز التحقق | يسمح لأول إرسال مع حماية معدل صارمة لكل رقم. |
| transactional | إشعارات تشغيلية | مناسب للفواتير والحالة والشحن مع حدود وقائية. |
| default | رسائل عامة | تطبيق سياسة الموافقة + نافذة 24 ساعة + Template خارج النافذة. |
ترويسات التشخيص
X-Message-Purpose: otp | transactional | default
X-Message-Purpose-Mode: explicit | inferred | defaultقاعدة إعادة المحاولة
OTP_RATE_LIMIT -> retry after 60-120s
TRANSACTIONAL_RATE_LIMIT -> retry after 5-15m
TENANT_SEND_PAUSED -> use retryAfterSec if providedأمثلة بلغات مختلفة
// Node.js / JavaScript
const response = await fetch('https://whatsapilight.cloud/api/whatsapp/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'sk_live_xxxxxxxxxxxxxx'
},
body: JSON.stringify({
instanceName: 'my-instance',
phone: '12025550123',
purpose: 'transactional',
message: 'تم تحديث حالة طلبك إلى: قيد الشحن'
})
});
const data = await response.json();
const purpose = response.headers.get('X-Message-Purpose');
const mode = response.headers.get('X-Message-Purpose-Mode');
console.log({ data, purpose, mode });# Python
import requests
response = requests.post(
'https://whatsapilight.cloud/api/whatsapp/send',
headers={
'Content-Type': 'application/json',
'x-api-key': 'sk_live_xxxxxxxxxxxxxx'
},
json={
'instanceName': 'my-instance',
'phone': '12025550123',
'purpose': 'otp',
'message': 'رمز التحقق: 748392'
}
)
print(response.json())
print(response.headers.get('X-Message-Purpose'))// PHP
$ch = curl_init('https://whatsapilight.cloud/api/whatsapp/send');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'x-api-key: sk_live_xxxxxxxxxxxxxx'
],
CURLOPT_POSTFIELDS => json_encode([
'instanceName' => 'my-instance',
'phone' => '12025550123',
'purpose' => 'transactional',
'message' => 'تم إنشاء فاتورتك بنجاح'
])
]);
$raw = curl_exec($ch);
$response = json_decode($raw, true);
curl_close($ch);الرسائل التفاعلية
أرسل رسائل تفاعلية مع أزرار، قوائم، استطلاعات، مواقع، وجهات اتصال. جميعها عبر نفس النقطة /api/whatsapp/send مع تحديد النوع.
رسالة بأزرار
/api/whatsapp/sendإرسال رسالة مع أزرار تفاعلية (حتى 3 أزرار)
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "buttons",
"message": "اختر أحد الخيارات التالية:",
"buttons": [
{ "id": "btn_1", "text": "عروض اليوم" },
{ "id": "btn_2", "text": "تواصل مع الدعم" },
{ "id": "btn_3", "text": "معلومات الحساب" }
],
"footer": "WhatsApp API Service"
}{
"success": true,
"data": {
"messageId": "msg_xyz789",
"status": "sent"
}
}رسالة قائمة
/api/whatsapp/sendإرسال قائمة تفاعلية مع أقسام وعناصر متعددة
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "list",
"message": "مرحبًا! اختر من القائمة:",
"listTitle": "القائمة",
"sections": [
{
"title": "المنتجات",
"rows": [
{ "id": "p1", "title": "منتج 1", "description": "وصف المنتج الأول" },
{ "id": "p2", "title": "منتج 2", "description": "وصف المنتج الثاني" }
]
},
{
"title": "الخدمات",
"rows": [
{ "id": "s1", "title": "خدمة 1", "description": "وصف الخدمة" }
]
}
],
"footer": "اختر لمعرفة المزيد"
}استطلاع رأي
/api/whatsapp/sendإرسال استطلاع رأي (حتى 12 خيارًا)
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "poll",
"pollTitle": "ما هو يومك المفضل للتوصيل؟",
"pollOptions": ["السبت", "الأحد", "الاثنين", "الثلاثاء"],
"pollMultiSelect": false
}إرسال موقع
/api/whatsapp/sendإرسال موقع جغرافي مع اسم وعنوان
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "location",
"latitude": 40.7128,
"longitude": -74.0060,
"locationName": "نيويورك",
"locationAddress": "New York, United States"
}إرسال جهة اتصال
/api/whatsapp/sendإرسال بطاقة جهة اتصال
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "contact",
"contactName": "John Smith",
"contactPhone": "12025550199"
}إرسال وسائط
/api/whatsapp/sendإرسال صورة أو فيديو أو مستند أو تسجيل صوتي
{
"instanceName": "my-instance",
"to": "12025550123",
"type": "media",
"mediaUrl": "https://example.com/image.jpg",
"mediaType": "image", // image | video | audio | document
"caption": "صورة المنتج الجديد"
}أنواع الرسائل المدعومة
| النوع | القيمة | الوصف |
|---|---|---|
| text | type: "text" | رسالة نصية عادية |
| media | type: "media" | صورة / فيديو / صوت / مستند |
| buttons | type: "buttons" | رسالة مع أزرار تفاعلية |
| list | type: "list" | قائمة تفاعلية بأقسام |
| poll | type: "poll" | استطلاع رأي |
| location | type: "location" | موقع جغرافي |
| contact | type: "contact" | بطاقة جهة اتصال |
القوالب
أنشئ قوالب رسائل قابلة لإعادة الاستخدام مع متغيرات ديناميكية. يمكنك استخدامها في الرسائل الجماعية أو إرسالها مباشرة.
/api/whatsapp/templatesاسترجاع جميع القوالب مع فلترة وبحث
{
"success": true,
"data": [
{
"id": "tpl_abc123",
"name": "welcome_message",
"category": "marketing",
"messageType": "text",
"content": "مرحبًا {{name}}! شكرًا لتسجيلك...",
"variables": ["name"],
"usageCount": 150
}
],
"pagination": { "page": 1, "limit": 20, "total": 5 }
}/api/whatsapp/templatesإنشاء قالب رسالة جديد
{
"name": "order_confirmation",
"category": "transactional",
"messageType": "buttons",
"content": "مرحبًا {{name}}، تم تأكيد طلبك #{{orderId}}",
"buttons": [
{ "id": "track", "text": "تتبع الطلب" },
{ "id": "support", "text": "تواصل مع الدعم" }
],
"footer": "شكرًا لتسوقك معنا",
"variables": ["name", "orderId"]
}{
"success": true,
"data": {
"id": "tpl_xyz789",
"name": "order_confirmation",
"category": "transactional",
"messageType": "buttons"
}
}/api/whatsapp/templates/:idاسترجاع تفاصيل قالب محدد
{
"success": true,
"data": {
"id": "tpl_abc123",
"name": "welcome_message",
"content": "مرحبًا {{name}}! ...",
"messageType": "text",
"category": "marketing",
"variables": ["name"],
"usageCount": 150,
"createdAt": "2024-01-15T10:30:00Z"
}
}/api/whatsapp/templates/:idتحديث قالب موجود
{
"content": "مرحبًا {{name}}! عروضنا الجديدة:",
"buttons": [
{ "id": "offers", "text": "عرض العروض" }
]
}/api/whatsapp/templates/:idحذف قالب
{
"success": true,
"message": "Template deleted"
}/api/whatsapp/templates/:id/sendإرسال قالب مباشرة إلى رقم محدد مع استبدال المتغيرات
{
"instanceName": "my-instance",
"to": "12025550123",
"variables": {
"name": "John",
"orderId": "12345"
}
}استخدم {{name}} و {{phone}} كمتغيرات ديناميكية في محتوى القالب. يتم استبدالها تلقائيًا عند الإرسال.
الرسائل الجماعية (Broadcast)
أنشئ حملات رسائل جماعية لإرسال رسائل لعدة مستلمين دفعة واحدة. يدعم جميع أنواع الرسائل مع نظام إرسال ذكي لمنع الحظر.
/api/whatsapp/broadcastsاسترجاع جميع حملات الرسائل الجماعية
{
"success": true,
"data": [
{
"id": "bc_abc123",
"name": "حملة العروض الموسمية",
"status": "completed",
"instanceName": "my-instance",
"totalRecipients": 500,
"sentCount": 498,
"failedCount": 2,
"createdAt": "2024-01-15T10:00:00Z"
}
]
}/api/whatsapp/broadcastsإنشاء حملة رسائل جماعية جديدة
{
"name": "حملة العروض",
"instanceName": "my-instance",
"message": "مرحبًا! لدينا عروض حصرية اليوم.",
"messageType": "buttons",
"recipients": ["12025550123", "12025550199", "12025550000"],
"buttons": [
{ "id": "view", "text": "عرض العروض" },
{ "id": "ignore", "text": "لاحقًا" }
],
"footer": "WhatsApp API",
"scheduledAt": "2024-03-15T09:00:00Z" // اختياري - للجدولة
}{
"success": true,
"data": {
"id": "bc_xyz789",
"name": "حملة العروض",
"status": "draft",
"totalRecipients": 3
}
}/api/whatsapp/broadcasts/:id/sendبدء إرسال حملة (يستخدم نظام الإرسال الذكي لمنع الحظر)
{
"success": true,
"message": "Campaign started",
"data": {
"id": "bc_xyz789",
"status": "sending",
"totalRecipients": 500
}
}/api/whatsapp/broadcasts/:idحذف حملة رسائل جماعية
{
"success": true,
"message": "Broadcast deleted"
}مثال كامل: إنشاء وإرسال حملة
// 1. Create the broadcast campaign
const campaign = await fetch('https://whatsapilight.cloud/api/whatsapp/broadcasts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'sk_live_xxxxxxxxxxxxxx'
},
body: JSON.stringify({
name: 'Ramadan Offers',
instanceName: 'my-instance',
message: 'مرحبًا {{name}}! عروض اليوم المميزة.',
messageType: 'buttons',
recipients: ['12025550123', '12025550199'],
buttons: [
{ id: 'view', text: 'عرض العروض' },
{ id: 'later', text: 'لاحقًا' }
]
})
});
const { data } = await campaign.json();
// 2. Start sending (anti-ban system activates automatically)
await fetch(`https://whatsapilight.cloud/api/whatsapp/broadcasts/${data.id}/send`, {
method: 'POST',
headers: { 'x-api-key': 'sk_live_xxxxxxxxxxxxxx' }
});الحماية من الحظر (Anti-Ban)
نظام إرسال ذكي مدمج يحاكي السلوك البشري لحماية حسابك من الحظر عند إرسال الرسائل الجماعية.
تأخير ذكي
تأخير 2-45 ثانية بين كل رسالة مع عشوائية ±1.5 ثانية لمحاكاة السلوك الطبيعي
إرسال بالدفعات
كل 8 رسائل يتوقف 5 ثوانٍ، وكل 30 رسالة يتوقف 15 ثانية
استراحات طويلة
كل 100 رسالة يأخذ استراحة 60 ثانية تحاكي الاستراحة البشرية
تكيف تلقائي
عند فشل الإرسال، يزيد التأخير تلقائيًا ويعيد المحاولة، وعند النجاح يقلل التأخير تدريجيًا
نصائح لتجنب الحظر
- - لا ترسل أكثر من 500 رسالة في اليوم الواحد لحساب جديد
- - ابدأ بعدد قليل (50-100) ثم زد تدريجيًا
- - تأكد أن المحتوى ليس مكررًا تمامًا، استخدم المتغيرات {{name}}
- - لا ترسل في أوقات غير طبيعية (2-6 صباحًا)
- - استخدم رقمًا تم تفعيله منذ فترة وليس رقمًا جديدًا
آلية الإرسال الذكي
| المرحلة | التأخير | الوصف |
|---|---|---|
| بين كل رسالة | 2-45s + jitter | تأخير أساسي مع عشوائية ±1.5 ثانية |
| كل 8 رسائل | 5s | استراحة بين الدفعات |
| كل 30 رسالة | 15s | استراحة متوسطة |
| كل 100 رسالة | 60s | استراحة طويلة (محاكاة بشرية) |
| عند الفشل | x2 backoff | يضاعف التأخير عند الخطأ ثم يعيد المحاولة |
الويب هوكس
استقبل إشعارات فورية عند وصول رسائل جديدة أو تغيّر حالة الاتصال. حدد عنوان Webhook عند إنشاء الجلسة.
💡 يجب أن يكون عنوان Webhook متاح عبر HTTPS ويرد بـ 200 OK خلال 5 ثوانٍ.
أحداث Webhook
| الحدث | الوصف |
|---|---|
| messages.upsert | رسالة جديدة مستلمة أو مرسلة |
| connection.update | تغيّر حالة الاتصال (متصل، غير متصل) |
| qrcode.updated | تم تحديث رمز QR |
| messages.update | تحديث حالة الرسالة (تم التسليم، تم القراءة) |
// مثال payload للرسالة المستلمة
{
"event": "messages.upsert",
"instance": "my-instance",
"data": {
"key": {
"remoteJid": "12025550123@s.whatsapp.net",
"fromMe": false,
"id": "3EB0..."
},
"message": {
"conversation": "مرحبًا!"
},
"messageTimestamp": 1700000000
}
}رموز الأخطاء
جميع الاستجابات تتبع نفس التنسيق. في حالة الخطأ، ستحصل على كود HTTP مناسب مع رسالة توضيحية.
| الكود | الوصف | الحل |
|---|---|---|
| 400 | طلب غير صالح | تحقق من البيانات المرسلة |
| 401 | غير مصادق | تحقق من مفتاح API |
| 403 | غير مصرح | تأكد من صلاحيات المفتاح |
| 404 | غير موجود | تحقق من اسم الجلسة أو المسار |
| 429 | تجاوز الحد | انتظر ثم أعد المحاولة |
| 500 | خطأ في السيرفر | تواصل مع الدعم الفني |
// مثال استجابة خطأ
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "مفتاح API غير صالح أو منتهي الصلاحية"
}
}المكتبات و SDK
يمكنك استخدام أي مكتبة HTTP للتواصل مع API. إليك أمثلة سريعة:
JavaScript
fetch() / axios
Python
requests / httpx
PHP
curl / Guzzle
جاهز للبدء؟
أنشئ حسابك المجاني وابدأ بإرسال رسائل واتساب خلال دقائق