التوثيق

توثيق واجهة البرمجة

Edu4 Whatsapp Business API واجهة REST للشركات والمطورين لإرسال قوالب WhatsApp Business وإدارة حالة الحملات.

عنوان الأساس
https://whatsapp.alnwabgh.com/api/v1/

هذه الصفحة عامة ولا تتطلب تسجيل دخول. لا تضع أسرارًا في الأمثلة، واستخدم مفتاحًا حقيقيًا فقط من بيئتك الخاصة.

كيف تبدأ

  1. اطلب من مسؤول المنصة إنشاء عميل واجهة وإصدار API Key.
  2. ضع المفتاح في رأس Authorization فقط.
  3. استدعِ GET /whatsapp/templates لمعرفة القوالب المسموحة لحسابك.
  4. أرسل أول حملة عبر POST /whatsapp/bulk-send مع Idempotency-Key.
  5. تابع الحالة عبر GET /whatsapp/bulk-status.
  6. عالج الأخطاء وحدود الاستخدام، واستقبل Webhooks إن لزم.

المصادقة

تتم المصادقة حصريًا عبر رأس HTTP:

Authorization: Bearer {API_KEY}

مثال:

Authorization: Bearer edu4_live_xxxxxxxxx
  • ضع المفتاح في رأس Authorization فقط.
  • لا تضعه في عنوان URL أو في Query.
  • لا تضعه في جسم الطلب (Request Body).
  • لا تشاركه في البريد أو المستودعات أو لقطات الشاشة.
  • المفتاح الكامل يظهر مرة واحدة عند إنشائه أو تدويره من لوحة التحكم حسب سياسة المنصة. بعد ذلك لا يمكن استرجاع القيمة الكاملة.
  • بادئة المفاتيح الحية: edu4_live_

إرسال حملة رسائل

POST /api/v1/whatsapp/bulk-send

ينشئ حملة من نوع المصدر api ويضع الرسائل في الطابور ثم يعيد 202. لا يُستدعى Meta داخل نفس طلب HTTP.

المصادقة

مطلوبة: Authorization: Bearer.

الرؤوس

  • Content-Type: application/json (إلزامي)
  • Authorization: Bearer {API_KEY} (إلزامي)
  • Idempotency-Key (موصى به بشدة)
  • X-Request-Id (اختياري)

جسم الطلب

  • template_name: اسم القالب.
  • language: لغة القالب مثل ar_EG.
  • messages: قائمة مستلمين. كل عنصر يحتوي phone وparameters لـ BODY.
  • اختياري لكل رسالة: header وbuttons إذا كان تعريف القالب يتطلبهما.

الحد الأقصى للرسائل في الطلب الواحد حاليًا: 1000 (قابل للتخصيص لكل عميل، وبحد إعدادات المنصة).

الحد الأقصى لحجم JSON: 2 MiB.

مثال طلب

{
  "template_name": "student_absence_today",
  "language": "ar_EG",
  "messages": [
    {
      "phone": "201001234567",
      "parameters": [
        "محمد علي",
        "2026-08-17"
      ]
    }
  ]
}

مثال استجابة 202

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

bulk_id هو المعرّف العام للحملة ويبدأ بـ cmp_ ثم 32 محرفًا سداسيًا. لا يُستخدم الرقم الداخلي لقاعدة البيانات.

رموز الحالة الشائعة

202 نجاح الطابور. 400 JSON أو نوع المحتوى. 401 مصادقة. 403 قالب غير مسموح. 409 تعارض المفتاح. 413 حجم كبير. 422 تحقق. 429 حد المعدل. 503 المزوّد غير جاهز.

حالة الحملة

GET /api/v1/whatsapp/bulk-status?bulk_id={bulk_id}

bulk_id هو المعرّف الذي أُرجع عند الإرسال. الحملة يجب أن تخص نفس العميل المصادق. خلاف ذلك تكون الاستجابة 404 CAMPAIGN_NOT_FOUND.

الحقول المعادة:

  • bulk_id
  • status حالة الحملة
  • total_messages عدد الرسائل
  • queued / processing / sent / delivered / read / failed
  • created_at / started_at / completed_at

هذا المسار لا يعيد أرقام الهواتف.

مثال استجابة

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "processing",
        "total_messages": 3,
        "queued": 1,
        "processing": 0,
        "sent": 1,
        "delivered": 1,
        "read": 0,
        "failed": 0,
        "created_at": "2026-08-17 08:00:00",
        "started_at": "2026-08-17 08:00:02",
        "completed_at": null
    }
}

حالات الحملة

الحالةالمعنى
queued في الانتظار — الحملة أُنشئت والرسائل في الطابور ولم يبدأ الإرسال بعد.
processing قيد المعالجة — بدأ العامل معالجة رسائل الحملة.
completed مكتملة — انتهت كل الرسائل بنجاح دون فشل.
partially_completed مكتملة جزئيًا — انتهت الحملة مع نجاح لبعض الرسائل وفشل لبعضها.
failed فشلَت — انتهت الحملة وكل النتائج فشل أو لا يوجد نجاح.
cancelled ملغاة — أُلغيت الحملة قبل اكتمال الإرسال.

عدادات الرسائل

الحقلالمعنى
queued في الانتظار — رسائل لم تُرسل بعد.
processing قيد الإرسال — رسائل سحبها العامل وما زالت قيد المعالجة.
sent أُرسلت — قبلها المزوّد ولم تُحدَّث بعد إلى تسليم أو قراءة.
delivered وُصلت — تأكيد التسليم من المزوّد.
read قُرئت — تأكيد القراءة من المزوّد إن توفر.
failed فشلَت — تعذر الإرسال أو رُفضت.

قائمة القوالب

GET /api/v1/whatsapp/templates

يعيد القوالب المعيَّنة للعميل المصادق فقط. لا يعيد قوالب عملاء آخرين، ولا معرّفات داخلية، ولا أسرار المزوّد، ولا JSON المكوّنات الكامل.

الحقول: name، language، status، category، parameter_counts لـ body/header/buttons.

لمعرفة القوالب المسموح لك استخدامها: استدعِ هذا المسار. إن لم يظهر القالب في القائمة فستحصل عند الإرسال على TEMPLATE_NOT_ALLOWED.

مثال استجابة

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "templates": [
            {
                "name": "student_absence_today",
                "language": "ar_EG",
                "status": "APPROVED",
                "category": "UTILITY",
                "parameter_counts": {
                    "body": 2,
                    "header": 0,
                    "buttons": 0
                }
            }
        ]
    }
}

القوالب بالتفصيل

التعريفات التالية مأخوذة من النسخة المخزّنة في النظام للغة ar_EG. عدد القوالب الموثّقة من التعريف الكامل: 13 من 13.

student_payment_received

اسم القالب

student_payment_received

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: مرحبًا …، تم تأكيد سداد مصروفات الشهر … بنجاح. نتمنى لك التوفيق في دراستك.

المكوّنات

Body
مرحبًا {{1}}، تم تأكيد سداد مصروفات الشهر {{2}} بنجاح. نتمنى لك التوفيق في دراستك.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 الاسم الذي يظهر بعد الترحيب نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: الاسم الذي يظهر بعد الترحيب. محمد علي
2 الشهر المذكور في جملة المصروفات نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: الشهر المذكور في جملة المصروفات. يناير

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "student_payment_received",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "يناير"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

student_absence_today

اسم القالب

student_absence_today

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: مرحبًا …، لاحظنا غيابك عن حصة اليوم بتاريخ …. نرجو متابعة الدروس بانتظام.

المكوّنات

Body
مرحبًا {{1}}، لاحظنا غيابك عن حصة اليوم بتاريخ {{2}}. نرجو متابعة الدروس بانتظام.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 الاسم الذي يظهر بعد الترحيب نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: الاسم الذي يظهر بعد الترحيب. محمد علي
2 التاريخ المذكور بعد «بتاريخ» نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «بتاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "student_absence_today",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

parent_student_payment_received

اسم القالب

parent_student_payment_received

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة ولي الأمر، تم استلام مصروفات الشهر … الخاصة بالطالب … بنجاح. شكرًا لتعاونكم.

المكوّنات

Body
السيد/السيدة ولي الأمر، تم استلام مصروفات الشهر {{1}} الخاصة بالطالب {{2}} بنجاح. شكرًا لتعاونكم.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 الشهر المذكور في جملة المصروفات نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: الشهر المذكور في جملة المصروفات. يناير
2 اسم الطالب كما يظهر بعد كلمة الطالب نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: اسم الطالب كما يظهر بعد كلمة الطالب. محمد علي

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "parent_student_payment_received",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "يناير",
                "محمد علي"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

parent_student_payment_due

اسم القالب

parent_student_payment_due

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة ولي الأمر، نذكركم أن مصروفات الشهر … الخاصة بالطالب … لم يتم سدادها حتى الآن. يرجى السداد في أقرب وقت.

المكوّنات

Body
السيد/السيدة ولي الأمر، نذكركم أن مصروفات الشهر {{1}} الخاصة بالطالب {{2}} لم يتم سدادها حتى الآن. يرجى السداد في أقرب وقت.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 الشهر المذكور في جملة المصروفات نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: الشهر المذكور في جملة المصروفات. يناير
2 اسم الطالب كما يظهر بعد كلمة الطالب نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: اسم الطالب كما يظهر بعد كلمة الطالب. محمد علي

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "parent_student_payment_due",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "يناير",
                "محمد علي"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

parent_student_exam_result

اسم القالب

parent_student_exam_result

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة ولي الأمر، نود إبلاغكم بأن الطالب … حصل على درجة … في اختبار … بتاريخ … شكراً لكم

المكوّنات

Body
السيد/السيدة ولي الأمر، نود إبلاغكم بأن الطالب {{1}} حصل على درجة {{2}} في اختبار {{3}} بتاريخ {{4}} شكراً لكم

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم الطالب كما يظهر بعد كلمة الطالب نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم الطالب كما يظهر بعد كلمة الطالب. محمد علي
2 الدرجة نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: الدرجة. 18/20
3 اسم الاختبار نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: اسم الاختبار. الرياضيات
4 التاريخ المذكور بعد «بتاريخ» نص يُدرج في موضع {{4}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «بتاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "parent_student_exam_result",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "18/20",
                "الرياضيات",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (4).

parent_student_absence_two

اسم القالب

parent_student_absence_two

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة ولي الأمر، نود إعلامكم أن الطالب … قد تغيب بتاريخ … عن حصتين متتاليتين برجاء المتابعة.

المكوّنات

Body
السيد/السيدة ولي الأمر، نود إعلامكم أن الطالب {{1}} قد تغيب بتاريخ {{2}} عن حصتين متتاليتين برجاء المتابعة.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم الطالب كما يظهر بعد كلمة الطالب نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم الطالب كما يظهر بعد كلمة الطالب. محمد علي
2 التاريخ المذكور بعد «بتاريخ» نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «بتاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "parent_student_absence_two",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

parent_student_absence_multiple

اسم القالب

parent_student_absence_multiple

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة ولي الأمر، الطالب … قد تغيب عن … حصص حتى تاريخ …. نرجو التعاون لتفادي تكرار الغياب.

المكوّنات

Body
السيد/السيدة ولي الأمر، الطالب {{1}} قد تغيب عن {{2}} حصص حتى تاريخ {{3}}. نرجو التعاون لتفادي تكرار الغياب.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم الطالب كما يظهر بعد كلمة الطالب نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم الطالب كما يظهر بعد كلمة الطالب. محمد علي
2 عدد الحصص نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: عدد الحصص. 3
3 التاريخ المذكور بعد «حتى تاريخ» نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «حتى تاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "parent_student_absence_multiple",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "3",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (3).

employee_tasks

اسم القالب

employee_tasks

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، هذه هي مهام عملكم ليوم … هي … شكرا لكم علي مجهودكم

المكوّنات

Body
السيد/السيدة {{1}}، هذه هي مهام عملكم ليوم {{2}} هي {{3}} شكرا لكم علي مجهودكم

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 يوم المهام نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: يوم المهام. 2026-08-17
3 نص المهام نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: نص المهام. مراجعة ملفات اليوم

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_tasks",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "2026-08-17",
                "مراجعة ملفات اليوم"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (3).

employee_salary_details

اسم القالب

employee_salary_details

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، تفاصيل راتبكم لشهر … كالتالي: *الراتب*: … *الحوافز*: … *التأمينيات*: … *إجمالي خصم الغياب*: … *جزاءات*: … *تأخيرات*: … *سلف*: … *إضافات*: … *الراتب النهائي: …* شكرا لكم علي مجهودكم و نتمني لكم دوام التفوق.

المكوّنات

Body
السيد/السيدة {{1}}، تفاصيل راتبكم لشهر {{2}} كالتالي:
*الراتب*: {{3}}
*الحوافز*: {{4}}
*التأمينيات*: {{5}}
*إجمالي خصم الغياب*:  {{6}}
*جزاءات*: {{7}}
*تأخيرات*: {{8}}
*سلف*: {{9}}
*إضافات*: {{10}}
*الراتب النهائي: {{11}}*
شكرا لكم علي مجهودكم و نتمني لكم دوام التفوق.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 شهر تفاصيل الراتب نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: شهر تفاصيل الراتب. يناير
3 الراتب نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: الراتب. 5000
4 الحوافز نص يُدرج في موضع {{4}} في نص القالب المعتمد، ويمثّل: الحوافز. 200
5 التأمينيات نص يُدرج في موضع {{5}} في نص القالب المعتمد، ويمثّل: التأمينيات. 100
6 إجمالي خصم الغياب نص يُدرج في موضع {{6}} في نص القالب المعتمد، ويمثّل: إجمالي خصم الغياب. 50
7 جزاءات نص يُدرج في موضع {{7}} في نص القالب المعتمد، ويمثّل: جزاءات. 0
8 تأخيرات نص يُدرج في موضع {{8}} في نص القالب المعتمد، ويمثّل: تأخيرات. 25
9 سلف نص يُدرج في موضع {{9}} في نص القالب المعتمد، ويمثّل: سلف. 100
10 إضافات نص يُدرج في موضع {{10}} في نص القالب المعتمد، ويمثّل: إضافات. 150
11 الراتب النهائي نص يُدرج في موضع {{11}} في نص القالب المعتمد، ويمثّل: الراتب النهائي. 5175

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_salary_details",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "يناير",
                "5000",
                "200",
                "100",
                "50",
                "0",
                "25",
                "100",
                "150",
                "5175"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (11).

employee_salary_deduction

اسم القالب

employee_salary_deduction

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، تم تطبيق خصم قدره … على راتب شهر … بسبب … إذا كنت تعتقد بأنه هناك مشكله تواصل مع الإدارة.

المكوّنات

Body
السيد/السيدة {{1}}، تم تطبيق خصم قدره {{2}} على راتب شهر {{3}} بسبب {{4}} إذا كنت تعتقد بأنه هناك مشكله تواصل مع الإدارة.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 قيمة الخصم نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: قيمة الخصم. 1500
3 شهر الراتب نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: شهر الراتب. يناير
4 سبب الخصم كما يظهر في النص نص يُدرج في موضع {{4}} في نص القالب المعتمد، ويمثّل: سبب الخصم كما يظهر في النص. 1500

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_salary_deduction",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "1500",
                "يناير",
                "1500"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (4).

employee_bonus

اسم القالب

employee_bonus

اللغة

ar_EG

الحالة

APPROVED

التصنيف

MARKETING

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، تمت إضافة مكافأة قدرها … إلى راتب شهر … تقديرًا لجهودكم.

المكوّنات

Body
السيد/السيدة {{1}}، تمت إضافة مكافأة قدرها {{2}} إلى راتب شهر {{3}} تقديرًا لجهودكم.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 قيمة المكافأة نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: قيمة المكافأة. 1500
3 شهر الراتب نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: شهر الراتب. يناير

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_bonus",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "1500",
                "يناير"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (3).

employee_absence_one_day

اسم القالب

employee_absence_one_day

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، تم تسجيل غيابكم عن العمل بتاريخ …. برجاء التواصل مع الإدارة إذا كان هناك عذر رسمي.

المكوّنات

Body
السيد/السيدة {{1}}، تم تسجيل غيابكم عن العمل بتاريخ {{2}}. برجاء التواصل مع الإدارة إذا كان هناك عذر رسمي.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 التاريخ المذكور بعد «بتاريخ» نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «بتاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_absence_one_day",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (2).

employee_absence_multiple_days

اسم القالب

employee_absence_multiple_days

اللغة

ar_EG

الحالة

APPROVED

التصنيف

UTILITY

توجد نسخ بلغات أخرى في النظام: en_US. الأمثلة أدناه للغة التوثيق ar_EG.

الاستخدام

يُستخدم هذا القالب لإرسال النص المعتمد التالي بعد تعبئة المعاملات: السيد/السيدة …، تم تسجيل غيابكم لعدد … أيام متتالية حتى تاريخ …. يرجى التواصل مع الإدارة بشكل عاجل.

المكوّنات

Body
السيد/السيدة {{1}}، تم تسجيل غيابكم لعدد {{2}} أيام متتالية حتى تاريخ {{3}}. يرجى التواصل مع الإدارة بشكل عاجل.

المعاملات

الترتيب اسم الحقل النوع الوصف مثال
1 اسم المخاطَب بعد السيد/السيدة نص يُدرج في موضع {{1}} في نص القالب المعتمد، ويمثّل: اسم المخاطَب بعد السيد/السيدة. محمد علي
2 عدد الأيام المتتالية نص يُدرج في موضع {{2}} في نص القالب المعتمد، ويمثّل: عدد الأيام المتتالية. 3
3 التاريخ المذكور بعد «حتى تاريخ» نص يُدرج في موضع {{3}} في نص القالب المعتمد، ويمثّل: التاريخ المذكور بعد «حتى تاريخ». 2026-08-17

مثال استخدام

إرسال رسالة واحدة بهذا القالب إلى رقم تجريبي وهمي.

Request

POST /api/v1/whatsapp/bulk-send

{
    "template_name": "employee_absence_multiple_days",
    "language": "ar_EG",
    "messages": [
        {
            "phone": "201001234567",
            "parameters": [
                "محمد علي",
                "3",
                "2026-08-17"
            ]
        }
    ]
}

Response

{
    "success": true,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "data": {
        "bulk_id": "cmp_0123456789abcdef0123456789abcdef",
        "status": "queued",
        "total_messages": 1
    }
}

ملاحظات

  • لا يوجد Header في التعريف الحالي.
  • لا يوجد Footer في التعريف الحالي.
  • لا توجد Buttons في التعريف الحالي.
  • مصفوفة parameters في طلب الإرسال تمثّل معاملات BODY حسب الترتيب، وليست Header أو Buttons.
  • يجب أن يساوي عدد العناصر في parameters عدد مواضع BODY في القالب (3).

حدود الاستخدام

القيم التالية هي الإعدادات الحالية للمنصة. يمكن تخصيص حدود العميل من لوحة التحكم، وتُطبَّق الحدود الفعلية للعميل المصادق عند كل طلب.

الحدالقيمة الحالية
أقصى عدد رسائل في الطلب الواحد1000
أقصى عدد طلبات في الساعة (افتراضي للعميل)1000
أقصى عدد رسائل في الساعة (افتراضي للعميل)10000
نافذة الاحتسابساعة UTC الحالية

عند التجاوز: 429 RATE_LIMIT_EXCEEDED.

  • Retry-After: ثوانٍ حتى نهاية الساعة الحالية.
  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset: ختم Unix لنهاية النافذة.

Idempotency

الرأس: Idempotency-Key

  • يمنع إنشاء حملتين لنفس الطلب عند إعادة الإرسال بسبب انقطاع الشبكة أو مهلة العميل.
  • نفس العميل + نفس المفتاح + نفس جسم الطلب يعيد الاستجابة الأصلية للحملة، مع رأس Idempotent-Replay: true عند إعادة التشغيل.
  • نفس المفتاح مع جسم مختلف يعيد 409 IDEMPOTENCY_CONFLICT.
  • طول المفتاح حتى 191 محرفًا. المفتاح الفارغ أو الأطول غير صالح.
  • مدة صلاحية المفتاح الحالية: 24 ساعة (قابلة للإعداد في المنصة، بحد أقصى 168 ساعة).

معرّف الطلب

كل استجابة JSON تتضمن request_id، ويُعاد أيضًا في رأس X-Request-Id.

  • يمكنك إرسال X-Request-Id من طرفك إن طابق النمط المسموح؛ وإلا تُنشئ المنصة معرّفًا يبدأ بـ req_.
  • استخدمه لتتبع الطلب عند التواصل مع الدعم الفني.
  • لا يحتوي على أسرار.

Webhooks

تدعم المنصة إرسال أحداث إلى خادم شركتك عند تغيّر حالة الرسائل والحملات.

إعداد العنوان

عنوان الاستقبال والسر يُضبطان من لوحة التحكم بواسطة المسؤول في الإصدار الحالي. يمكنك قراءة الإعداد (دون السر) عبر:

GET /api/v1/whatsapp/webhook

التوقيع

الطلبات تُوقَّع بـ HMAC-SHA256:

signed_payload = timestamp + "." + raw_body
X-Webhook-Signature: sha256={hex}
  • X-Webhook-Timestamp: وقت Unix للتوقيع. ارفض الطلب خارج نافذة إعادة التشغيل الحالية (300 ثانية افتراضيًا).
  • X-Webhook-Event-Id: معرّف الحدث. عالج كل id مرة واحدة.
  • السر لا يُعاد عبر الواجهة.

إعادة المحاولة

عدد المحاولات الافتراضي 5. مهلة الطلب 8 ثوانٍ. التراجع بالثواني: 1,1,1,1,1. استجب بـ 2xx بسرعة. الترتيب غير مضمون.

الأحداث

  • message.sent — قَبِل المزوّد الرسالة
  • message.delivered — تم التسليم
  • message.read — تمّت القراءة
  • message.failed — فشلَت الرسالة
  • campaign.queued — أُنشئت حملة عبر الواجهة
  • campaign.processing — بدأت معالجة الحملة
  • campaign.completed — اكتملت الحملة بنجاح
  • campaign.partially_completed — اكتملت الحملة جزئيًا
  • campaign.failed — فشلَت الحملة
  • campaign.cancelled — أُلغيت الحملة
  • webhook.test — حدث اختبار يرسله المسؤول فقط

تفاصيل التشغيل للمسؤول موجودة في توثيق المنصة الداخلي للويب هوك، وهذه الصفحة تغطي ما يحتاجه المطوّر الخارجي للتحقق والمعالجة.

أخطاء API

شكل الخطأ الموحّد:

{
    "success": false,
    "request_id": "req_0123456789abcdef0123456789abcdef",
    "error": {
        "code": "INVALID_PHONE",
        "message": "One or more phone numbers are invalid.",
        "details": [
            {
                "index": 0,
                "phone": "invalid"
            }
        ]
    }
}
الرمز HTTP الشرح
AUTHENTICATION_REQUIRED 401 مطلوب مصادقة — لم يُرسل رأس Authorization أو صيغته ليست Bearer.
INVALID_API_KEY 401 مفتاح غير صالح — المفتاح غير موجود أو غير مكتمل أو لا يطابق أي مفتاح نشط.
API_KEY_REVOKED 401 مفتاح ملغى — المفتاح أُلغي ولم يعد قابلاً للاستخدام.
CLIENT_SUSPENDED 401 حساب معلّق — عميل الواجهة معلّق ولا يمكنه استدعاء النقاط المحمية.
RATE_LIMIT_EXCEEDED 429 تجاوز حد المعدل — تجاوز عدد الطلبات أو الرسائل المسموح بها خلال الساعة الحالية. راجع رأس Retry-After.
MAX_MESSAGES_EXCEEDED 422 عدد الرسائل أكبر من الحد — عدد العناصر في messages أكبر من حد الطلب الواحد للعميل أو الإعداد العام.
INVALID_TEMPLATE 422 قالب غير صالح — اسم القالب غير موجود، أو حالته لا تسمح بالإرسال.
TEMPLATE_NOT_ALLOWED 403 القالب غير مسموح — القالب موجود لكنه غير معيَّن لهذا العميل.
INVALID_LANGUAGE 422 لغة غير صالحة — حقل language فارغ أو لا يطابق لغة القالب المخزّنة.
INVALID_PHONE 422 رقم غير صالح — رقم واحد أو أكثر لا يطابق صيغة الهاتف المعتمدة في المنصة.
INVALID_PARAMETERS 422 معاملات غير مطابقة — عدد أو نوع parameters لا يطابق تعريف القالب، أو Idempotency-Key غير صالح، أو عنصر messages تالف.
EMPTY_MESSAGES 422 قائمة الرسائل فارغة — يجب أن تحتوي messages على مستلم واحد على الأقل.
DUPLICATE_PHONE 422 رقم مكرر — لا يُسمح بتكرار نفس الرقم داخل الطلب الواحد.
IDEMPOTENCY_CONFLICT 409 تعارض Idempotency — أُعيد استخدام نفس Idempotency-Key مع محتوى مختلف، أو الطلب السابق لم يكتمل بعد.
CAMPAIGN_NOT_FOUND 404 الحملة غير موجودة — قيمة bulk_id غير صالحة أو لا تخص هذا العميل. لا يُكشف إن كانت الحملة تخص عميلًا آخر.
PROVIDER_UNAVAILABLE 503 المزوّد غير جاهز — إعدادات WhatsApp غير مكتملة على المنصة عند إنشاء الحملة.
PAYLOAD_TOO_LARGE 413 جسم الطلب كبير — حجم JSON أكبر من الحد الأقصى المعتمد.
INVALID_JSON 400 JSON غير صالح — جسم الطلب ليس JSON صحيحًا أو ليس كائنًا.
INVALID_CONTENT_TYPE 400 نوع المحتوى غير صحيح — يجب أن يحتوي Content-Type على application/json.
INTERNAL_ERROR 500 خطأ داخلي — فشل غير متوقع. أرفق request_id عند التواصل مع الدعم. لا تُعاد أسرار أو تتبعات.

رموز HTTP

الرمز الاستخدام في هذه الواجهة
200 نجاح — استجابة ناجحة لـ bulk-status و templates و webhook و health.
202 قُبل الطلب للمعالجة — bulk-send أنشأ الحملة وأضاف الرسائل للطابور. لا يرسل إلى Meta داخل نفس طلب HTTP.
400 طلب غير صالح — INVALID_JSON أو INVALID_CONTENT_TYPE أو Idempotency-Key غير صالح.
401 غير مصرّح — مصادقة مفقودة أو مفتاح غير صالح أو ملغى أو عميل معلّق.
403 ممنوع — TEMPLATE_NOT_ALLOWED عندما القالب غير معيَّن للعميل.
404 غير موجود — CAMPAIGN_NOT_FOUND أو مسار API غير معروف.
409 تعارض — IDEMPOTENCY_CONFLICT.
413 الحجم كبير — PAYLOAD_TOO_LARGE.
422 تعذر المعالجة — أخطاء التحقق: القالب، اللغة، الهاتف، المعاملات، القائمة الفارغة، التكرار، تجاوز حد الرسائل.
429 حد المعدل — RATE_LIMIT_EXCEEDED مع Retry-After و X-RateLimit-*.
500 خطأ خادم — INTERNAL_ERROR.
502 بوابة غير صالحة — غير مستخدم في استجابات Public API الحالية (bulk-send/status/templates). فشل المزوّد يظهر لاحقًا في حالة الرسالة أو الحملة وليس كرد فوري على طلب الإرسال. غير مستخدم حاليًا في Public API
503 الخدمة غير متاحة — PROVIDER_UNAVAILABLE عندما إعدادات WhatsApp غير مكتملة.

أمثلة cURL

استبدل المفتاح الوهمي بمفتاحك. لا تضع مفتاحًا حقيقيًا في التوثيق أو المستودعات.

إرسال حملة

curl -sS -X POST 'https://whatsapp.alnwabgh.com/api/v1/whatsapp/bulk-send' \
  -H 'Authorization: Bearer edu4_live_xxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: bulk-send-example-001' \
  -d '{
    "template_name": "student_absence_today",
    "language": "ar_EG",
    "messages": [
      {"phone": "201001234567", "parameters": ["محمد علي", "2026-08-17"]}
    ]
  }'

حالة الحملة

curl -sS 'https://whatsapp.alnwabgh.com/api/v1/whatsapp/bulk-status?bulk_id=cmp_0123456789abcdef0123456789abcdef' \
  -H 'Authorization: Bearer edu4_live_xxxxxxxxx'

القوالب

curl -sS 'https://whatsapp.alnwabgh.com/api/v1/whatsapp/templates' \
  -H 'Authorization: Bearer edu4_live_xxxxxxxxx'