انتقل إلى المقال

Hollinaمرجع واجهة API

مرجع واجهة API

كل مسار تخدمه واجهة API، ومن يستطيع استدعاءه، وكيف تعمل المصادقة والصلاحيات والأخطاء والقوائم والحجوزات والحدود.

لحزمة الحزمة الكاملة

العنوان الأساسي وصيغة الاستجابة

كل مسار يُخدم تحت البادئة /api. محليًا يكون العنوان الأساسي http://localhost:8000/api. وعلى الخادم هو عنوان واجهة API متبوعًا بـ /api، وهي القيمة نفسها التي تقرؤها الواجهتان الأماميتان من NEXT_PUBLIC_API_BASE_URL (متغيرات البيئة). وتُخدم الصور خارج البادئة، على /media/….

مسارات الموقع عامة؛ أما مسارات لوحة التحكم فتحتاج إلى رمز Bearer لمسؤول، ومعظمها يحتاج أيضًا إلى صلاحية. أجسام الطلبات JSON، عدا رفع الملفات. تأتي كل إجابة في الغلاف نفسه:

الغلاف
{
  "success": true,
  "data": { },
  "message": ""
}

يحمل data النتيجة. وmessage جملة قصيرة تملؤها بعض عمليات الكتابة، بلغة الطلب، وتكون فارغة غير ذلك. الأسعار بالدولار الأمريكي الكامل، والتواريخ أيام تقويمية للشركة تُكتب YYYY-MM-DD.

فحص السلامة لا يحتاج إلى رمز:

الطرفية
curl http://localhost:8000/api/health
الاستجابة
{"success":true,"data":{"status":"ok","database":"up"},"message":""}

عندما يتعذر قراءة قاعدة البيانات يجيب أيضًا بـ 200، مع "status":"degraded" و"database":"down". يقرأ فحص السلامة في صورة Docker هذا الحقل.

الأخطاء

يحتفظ الفشل بالغلاف، مع success: false وحالة HTTP. وmessage جملة بلغة الطلب، وcode المفتاح غير المترجم خلفها، والرفض الذي يسمّي شيئًا يضيف القيم خلف جملته في details:

الخطأ
{
  "success": false,
  "data": null,
  "message": "Booking B0021 already holds some of these nights.",
  "code": "dates_taken",
  "details": { "held_by": "booking", "reference": "B0021" }
}

الجسم الذي يرفضه مسار التحقق يحمل code: "validation_failed" وerrors، مفهرسة باسم كل حقل الكامل:

خطأ في التحقق
{
  "success": false,
  "data": null,
  "message": "guest_email must be an email",
  "errors": { "guest_email": ["guest_email must be an email"] },
  "code": "validation_failed"
}
  • اعتمد على code لا على الجملة، التي تتغير مع اللغة. وترفض الحجوزات والتوفر بأكواد مثل dates_taken وmin_nights وcapacity وcancellation_window_passed وawaiting_payment وpayment_method_unavailable، وللحد rate_limited.
  • يظهر errors عند فشل التحقق، مع المشكلات تحت اسم الحقل كما كتبه الطلب (check_in وguest_email). ويُرفض الحقل المجهول في الجسم.
  • المسار المحمي من دون رمز، أو برمز منتهي، يجيب بـ 401؛ والرمز الذي ينقصه الصلاحية يجيب بـ 403.
  • الليالي المحتجزة بالفعل تُجاب بـ 409، وخطوة حجز من حالة خاطئة بـ 422، والطلب الذي يتجاوز حدًا بـ 429.

القوائم والتقسيم إلى صفحات

قائمة
{ "data": [ ], "page": 1, "page_size": 6, "total": 12, "total_pages": 2 }
  • تتصفح الإقامات والحجوزات والاستفسارات والتقييمات بـ page وpage_size: 6 إقامات في الصفحة في الموقع (24 على الأكثر)، و20 في لوحة التحكم (50 على الأكثر)، و10 حجوزات و20 استفسارًا (50 على الأكثر لكل منهما)، و8 تقييمات. وتعيد قوائم لوحة التحكم أيضًا counts لكل حالة.
  • يتصفح المسؤولون والأدوار والإعدادات بـ page وpage_count (وتقبل الإعدادات page_size أيضًا)، 10 افتراضيًا و100 على الأكثر، وتجيب بـ { data, page, limit, total, totalPages }.
  • يُتحقق من مرشحات إقامات الموقع: القيمة المجهولة تُرفض بـ 400 بدل تجاهلها، بينما يُتجاهل المفتاح الذي لا تقرؤه واجهة API، فيعمل الرابط المشارَك ذو المعاملات الزائدة.

اللغة

أرسل Accept-Language: ar لتصلك الرسائل بالعربية؛ وأي قيمة أخرى تُجاب بالإنجليزية. وتحمل الإقامات والوجهات وأسئلة الصفحة الرئيسية اللغتين على شكل { "en": "…", "ar": "…" } أيًا كانت الترويسة، ويختار العميل واحدة.

تسجيل الدخول

  1. تسجيل دخول مسؤول

    الطرفية
    curl -X POST http://localhost:8000/api/auth/login \
      -H "Content-Type: application/json" \
      -d '{"email":"admin@hollina.example","password":"Admin@123"}'

    data.access_token هو الرمز، مع token_type بالقيمة Bearer والمسؤول بأدواره وصلاحياته. يدوم الرمز JWT_EXPIRATION، وهو 7d افتراضيًا، ويبلّغ expires_in عن تلك القيمة كما كُتبت. ويعيد GET /api/auth/me المسؤول المسجّل بأدواره وصلاحياته.

  2. استدعِ مسارًا محميًا

    الطرفية
    curl http://localhost:8000/api/bookings/manage -H "Authorization: Bearer YOUR_TOKEN"
  • البريد غير المعروف وكلمة المرور الخاطئة يجيبان كلاهما بـ 401 مع الرسالة نفسها.
  • عشر محاولات دخول فاشلة من عنوان واحد خلال 15 دقيقة تُجاب بـ 429 حتى يمضي 15 دقيقة على أقدم محاولة فاشلة (RATE_LIMIT_LOGIN). ولا تُحتسب عمليات الدخول الناجحة.
  • لا يوجد مسار تسجيل ولا مسار تسجيل خروج: الحسابات تأتي من البيانات الأولية أو من إدارة المسؤولين، ويسجّل العميل الخروج بنسيان رمزه.
  • ليس للضيوف حسابات. تأخذ مسارات حجز الضيف access_token الخاص بالحجز كـ ?token=، أو البريد الذي أُجري به كـ ?email=؛ والزوج الخاطئ يُجاب بـ 404.
الطريقةالمسارمن يحق له استدعاؤهوظيفته
POST/api/auth/loginأي شخصتسجيل دخول المسؤول: email وpassword
GET/api/auth/meأي مسؤول مسجّل دخولهالمسؤول المسجّل وأدواره وصلاحياته

الصلاحيات

تفحص مسارات لوحة التحكم صلاحية اسمها <area>.<action>. ويملك المسؤول كل صلاحية من كل دور لديه، والمسار الذي يسمّي عدة صلاحيات يقبل أيًا منها. والصلاحيات الـ 32 والدوران المضافان مسرودة في المسؤولون والأدوار والصلاحيات.

الإقامات في الموقع

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/staysأي شخصالإقامات المنشورة. destination (المعرّف النصي) وcheckIn وcheckOut (YYYY-MM-DD، كلاهما أو لا شيء: الإقامات الخالية في كل ليلة فقط) وguests (أقل عدد يجب أن تتسع له) وtype (villa وapartment وcabin وchalet وloft وcottage) وsort (recommended وprice_asc وprice_desc وrating) وpage وpage_size
GET/api/stays/featuredأي شخصالإقامات المختارة في الصفحة الرئيسية: المراجع في إعداد home_featured_references، بالترتيب، المنشورة فقط
GET/api/stays/heroأي شخصالإقامة التي يسميها home_hero_stay_reference، أو null
GET/api/stays/facetsأي شخصالإقامات المنشورة معدودة بالنوع وبالوجهة، للمرشحات والصفحة الرئيسية
GET/api/stays/lookupأي شخصالإقامات المنشورة بالمعرّف، للإقامات المحفوظة: ?ids=1,2,3، 12 على الأكثر
GET/api/stays/:slugأي شخصإقامة منشورة واحدة كاملة، مع صورها ومرافقها وقواعد المنزل ووجهتها
GET/api/stays/:slug/similarأي شخصحتى ثلاث إقامات منشورة مشابهة
GET/api/stays/:slug/availabilityأي شخصالليالي المحتجزة بالفعل بين from وto، 92 يومًا على الأكثر
GET/api/stays/:slug/quoteأي شخصcheckIn وcheckOut وguests (من 1 إلى 50): الليالي وسعر الليلة والمجموع الفرعي ورسوم التنظيف والإجمالي وavailable وسبب الرفض reason (past وmin_nights وcapacity وtaken)
GET/api/stays/:slug/reviewsأي شخصالتقييمات المنشورة للإقامة، الأحدث أولًا، مع متوسطها

الوجهات والأسئلة وإعدادات الشركة

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/destinationsأي شخصالوجهات المعلَّمة ظاهرة، بترتيب فرزها
GET/api/destinations/:slugأي شخصوجهة واحدة
GET/api/faqأي شخصأسئلة الصفحة الرئيسية وأجوبتها، بالترتيب
GET/api/settings/publicأي شخصالإعدادات التي يعرضها الموقع: company_name، والشعار والوصف باللغتين، وcontact_email وcontact_phone وcontact_address_hint وcurrency وtimezone، وأوقات الوصول والمغادرة الافتراضية، وallow_pay_on_arrival وcancellation_policy وhome_featured_references وhome_hero_stay_reference وservice_email_signature
GET/api/payments/methodsأي شخصما قد يعرضه إتمام الطلب، بترتيب الأولوية: { methods: [{ method, hosted }], allowPayOnArrival, simulated }. تُسرد طرق المعالجات المضبوطة فقط، وon_arrival ما دام إعدادها مفعّلًا، وsimulated هو true ما دام المحاكي يقبل البطاقة وPayPal لأن لا معالج مضبوط

الحجوزات

الطريقةالمسارمن يحق له استدعاؤهوظيفته
POST/api/bookingsأي شخصإتمام الطلب: stay_slug وcheck_in وcheck_out وguests وguest_first_name وguest_last_name وguest_email وpayment_method (card وpaypal وon_arrival) وclient_token (من 8 إلى 64 حرفًا)، واختياريًا guest_phone وspecial_requests وlocale (en وar)، وللمحاكي فقط card_number وcard_name وcard_expiry (MM/YY) وcard_cvc. ويجيب بـ 201 مع { reference, access_token, status, payment_status, payment_method, total, currency, redirect_url, failure_reason }
GET/api/bookings/:referenceأي شخص معه رمز الحجز أو بريدهحجز الضيف، مع can_cancel وcan_review
POST/api/bookings/:reference/settleأي شخص معه رمز الحجز أو بريدهتستدعيه صفحة العودة: يلتقط طلب PayPal الموافق عليه، ويجيب بالحالة الحالية للحجز في حالة Stripe. آمن للاستدعاء مرارًا
POST/api/bookings/:reference/cancelأي شخص معه رمز الحجز أو بريدهيلغي الضيف، ما دام الحجز قيد الانتظار أو مؤكدًا وقبل سبعة أيام على الأقل من الوصول المحلي؛ وبعد ذلك يجيب بـ 422 مع cancellation_window_passed
POST/api/bookings/:reference/reviewأي شخص معه رمز الحجز أو بريدهتقييم حجز مكتمل، مرة واحدة: rating (من 1 إلى 5، ويُسمح بالأنصاف)، comment (من 10 إلى 2000 حرف)
POST/api/webhooks/payments/:providerالمزود، بتوقيعهstripe أو paypal. كل حدث متحقق منه يُجاب بـ 200؛ والتوقيع الخاطئ بـ 401، والمزود المجهول بـ 404
  • client_token المكرر يعيد إيصال الحجز الأول بدل إنشاء ثانٍ، والحقل company المملوء يُعامل كروبوت: يبدو الجواب نفسه ولا يُخزَّن شيء.
  • payment_method لا يسرده GET /api/payments/methods (PayPal مع Stripe وحده مضبوطًا، أو البطاقة مع PayPal وحده، أو الدفع عند الوصول وإعداده متوقف) يُجاب بـ 422 مع payment_method_unavailable، قبل كتابة أي شيء.
  • تُفحص الليالي حين يُكتب الحجز: الليالي المحتجزة تُجاب بـ 409 مع dates_taken، وحد الإقامة الأدنى أو سعتها أو وصول في الماضي بـ 422 مع السبب.
  • الطريقة المستضافة تُجاب بـ pending مع redirect_url إلى Stripe أو PayPal؛ ولا يؤكد الحجز إلا webhook المعالج أو التقاط PayPal.

أسئلة إلى المضيف

الطريقةالمسارمن يحق له استدعاؤهوظيفته
POST/api/inquiriesأي شخصنموذج التواصل ونافذة السؤال في صفحة الإقامة: name وemail وmessage (من 10 إلى 4000 حرف) وclient_token، واختياريًا phone وstay_slug (إقامة منشورة) وcheck_in وcheck_out وguests
  • client_token المكرر يعيد الإرسال الأول بدل تخزين ثانٍ، والحقل company المملوء يُعامل كروبوت.
  • يمكن لكل عنوان إرسال خمسة حجوزات وخمسة أسئلة وخمسة تقييمات في عشر دقائق؛ والتالي يُجاب بـ 429.

إدارة الإقامات

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/stays/manageالمسؤولون الذين لديهم stays.viewكل إقامة، ومنها المسودات. status وtype وdestination وguests وbedrooms وnights (أطول حد أدنى) وprice (أعلى سعر ليلة) وsort (updated وrate_asc وrate_desc) وq وpage وpage_size
GET/api/stays/manage/:idالمسؤولون الذين لديهم stays.viewإقامة واحدة كاملة
POST/api/stays/manageالمسؤولون الذين لديهم stays.createأنشئ مسودة. المطلوب: title وshort_description وdescription وlocation_hint (en وar)، وtype وdestination_id وbedrooms وbeds وbathrooms وmax_guests وnightly_rate وcleaning_fee وmin_nights
PUT/api/stays/manage/:idالمسؤولون الذين لديهم stays.editغيّر أي حقل، ومنه المعرض (media، حتى 30 عنصرًا)
PATCH/api/stays/manage/:id/statusالمسؤولون الذين لديهم stays.publishاضبط status: draft أو published. النشر يحتاج إلى ثلاث صور واللغتين
PUT/api/stays/manage/:id/mediaالمسؤولون الذين لديهم stays.editاستبدل المعرض، بالترتيب؛ والموضع الأول هو الغلاف
DELETE/api/stays/manage/:idالمسؤولون الذين لديهم stays.deleteاحذف الإقامة؛ يُرفض بـ 409 ما دام يوجد حجز غير ملغى

التقويم والتواريخ المحظورة

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/calendarالمسؤولون الذين لديهم calendar.viewعرض الشهر: month (YYYY-MM) واختياريًا stay
GET/api/availability/blocksالمسؤولون الذين لديهم calendar.viewكل حظر، الأقرب أولًا
POST/api/availability/blocksالمسؤولون الذين لديهم calendar.blockاحظر ليالي: stay_id وfrom وto (حصري، مثل المغادرة)، واختياريًا reason (maintenance وowner_use وother) وnote. ويجيب التعارض بـ 409 مع code يساوي dates_taken وdetails: { held_by, reference }، مسمّيًا الحجز أو الحظر الذي يعترض الطريق
PUT/api/availability/blocks/:idالمسؤولون الذين لديهم calendar.blockغيّر حظرًا
DELETE/api/availability/blocks/:idالمسؤولون الذين لديهم calendar.blockأزل حظرًا

الحجوزات والاستفسارات والتقييمات

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/bookings/manageالمسؤولون الذين لديهم bookings.viewالحجوزات. status وfrom وto (نطاق الوصول) وq وstay وpayment وmethod وguests وsort (newest وcheck_in وtotal) وpage وpage_size؛ مع أعداد لكل حالة
GET/api/bookings/manage/:referenceالمسؤولون الذين لديهم bookings.viewحجز واحد مع جدوله الزمني والإجراءات المسموحة الآن، لكل منها سببه حين لا يكون مسموحًا
PATCH/api/bookings/manage/:referenceالمسؤولون الذين لديهم bookings.editaction (confirm وcheck_in وcomplete وcancel) وadmin_notes. الخطوة من حالة خاطئة تُجاب بـ 422 مع سببها
GET/api/inquiriesالمسؤولون الذين لديهم inquiries.viewالاستفسارات. status وq وfrom وto وstay وpage وpage_size؛ مع أعداد لكل حالة
GET/api/inquiries/:idالمسؤولون الذين لديهم inquiries.viewاستفسار واحد مع إقامته
PATCH/api/inquiries/:idالمسؤولون الذين لديهم inquiries.editاضبط status (new وreplied وclosed) وadmin_notes
GET/api/reviews/manageالمسؤولون الذين لديهم reviews.viewالتقييمات. status وstay (المعرّف أو المعرّف النصي) وrating (حد أدنى) وq وsince (7 و30 و90 و365 يومًا) وpage؛ مع الأعداد
PATCH/api/reviews/manage/:idالمسؤولون الذين لديهم reviews.moderateاضبط status: published أو hidden
GET/api/overviewالمسؤولون الذين لديهم overview.viewالنظرة العامة: بطاقات هذا الشهر، ووصول اليوم ومغادرته، والحجوزات قيد الانتظار والأحدث، وأفضل الإقامات، وبلدان الضيوف، والحجوزات حسب الحالة، وأحدث التقييمات، والاستفسارات المفتوحة
GET/api/overview/seriesالمسؤولون الذين لديهم overview.viewالحجوزات والإيرادات والإشغال لكل شهر من آخر اثني عشر شهرًا

الوجهات والأسئلة والإعدادات

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/destinations/manageالمسؤولون الذين لديهم destinations.viewكل وجهة، ومنها المخفية
POST/api/destinations/manageالمسؤولون الذين لديهم destinations.createأضف واحدة: name وtagline وdescription (en وar)، واختياريًا slug وcover_url وcover_alt وsort_order وis_active
PUT/api/destinations/manage/:idالمسؤولون الذين لديهم destinations.editغيّر واحدًا
DELETE/api/destinations/manage/:idالمسؤولون الذين لديهم destinations.deleteاحذف واحدة؛ يُرفض ما دامت تتبعها إقامات
GET/api/faq/manageالمشرفون الذين لديهم settings.viewكل سؤال في الصفحة الرئيسية، ومنها المخفية
POST/api/faq/manageالمشرفون الذين لديهم settings.editأضف واحدًا: question وanswer (en وar)، واختياريًا sort_order وis_active
PUT/api/faq/manage/:idالمشرفون الذين لديهم settings.editغيّر واحدًا
DELETE/api/faq/manage/:idالمشرفون الذين لديهم settings.editاحذف واحدًا
GET/api/settingsالمشرفون الذين لديهم settings.viewكل إعداد. search وcategory وpage وpage_size أو page_count
GET/api/settings/payments-statusالمشرفون الذين لديهم settings.view{ stripe: { configured, testMode }, paypal: { configured, sandbox }, simulator }: هل كل معالج مضبوط وهل هو تجريبي أم حقيقي، وهل المحاكي قيد الاستخدام، وهو كذلك فقط ما دام لا معالج مضبوط. ولا مفتاح أبدًا
GET/api/settings/:keyالمشرفون الذين لديهم settings.viewإعداد واحد بالمفتاح
PATCH/api/settings/:keyالمشرفون الذين لديهم settings.editغيّر value لإعداد واحد
DELETE/api/settings/:keyالمشرفون الذين لديهم settings.editاحذف إعدادًا واحدًا

المسؤولون والأدوار

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/adminsالمشرفون الذين لديهم admins.viewالمسؤولون. email وname وphone وpage وpage_count
GET/api/admins/statisticsالمشرفون الذين لديهم admins.viewأعداد لقائمة المسؤولين
GET/api/admins/:idالمشرفون الذين لديهم admins.viewمسؤول واحد، بالمعرّف أو اسم المستخدم
POST/api/adminsالمشرفون الذين لديهم admins.createأضف مسؤولًا: first_name وlast_name وemail وpassword وpassword_confirmation (6 خانات أو أكثر)، واختياريًا phone
PATCH/api/admins/:idالمشرفون الذين لديهم admins.editغيّر مسؤولًا
PATCH/api/admins/:id/rolesالمشرفون الذين لديهم admins.assign_rolesاضبط أدوار مسؤول: role_ids
DELETE/api/admins/:idالمشرفون الذين لديهم admins.deleteاحذف مسؤولًا
PATCH/api/admins/profileأي مسؤول مسجّل دخولهغيّر first_name وlast_name وemail وphone وprofile_picture للمسؤول المسجّل نفسه. لكلمة المرور مسارها الخاص
PATCH/api/admins/profile/passwordأي مسؤول مسجّل دخولهغيّر بيانات دخول المسؤول المسجّل نفسه: current_password وpassword وpassword_confirmation
GET/api/rolesالمشرفون الذين لديهم roles.viewالأدوار. name وguard_name وcreated_from وcreated_to وpage وpage_count
GET/api/roles/statisticsالمشرفون الذين لديهم roles.viewأعداد لقائمة الأدوار
GET/api/roles/selectالمشرفون الذين لديهم roles.viewمعرّف كل دور واسمه، لقائمة الاختيار
GET/api/roles/permissionsالمشرفون الذين لديهم roles.viewكل صلاحية، مجمعة حسب المنطقة
GET/api/roles/:idالمشرفون الذين لديهم roles.viewدور واحد بصلاحياته
POST/api/rolesالمشرفون الذين لديهم roles.createأضف دورًا
PUT/api/roles/:idالمشرفون الذين لديهم roles.editأعد تسمية دور أو صفه
POST/api/roles/:id/permissionsالمشرفون الذين لديهم roles.assign_permissionsتعيين صلاحيات دور
DELETE/api/roles/:idالمشرفون الذين لديهم roles.deleteحذف دور

الإشعارات والملفات المرفوعة

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/notificationsأي مسؤول مسجّل دخولهأحدث 30 إشعارًا للمسؤول المسجّل
PATCH/api/notifications/read-allأي مسؤول مسجّل دخولهحدّدها كلها كمقروءة
PATCH/api/notifications/:id/readأي مسؤول مسجّل دخولهتعليم إشعار واحد كمقروء
DELETE/api/notifications/:idأي مسؤول مسجّل دخولهحذف إشعار واحد
POST/api/helpers/uploadأي مسؤول مسجّل دخولهخزّن ملفًا (multipart file، مع path للمجلد، وfor لإعداد الحجم المسبق مثل stay أو cover أو profile، وtype). تُعاد ترميز الصور بصيغة JPEG، بعرض أقصاه 1920 بكسل؛ وتُقبل الفيديوهات بصيغة MP4 أو WebM أو MOV أو M4V؛ حتى 150 ميغابايت. ويجيب بعناوين الملف المخزن

ليس للملف المرفوع صلاحية خاصة به: يفحص المسار الذي يحفظه ما يصير إليه الملف. تُحفظ الإشعارات 30 يومًا.

الحدود لكل عنوان

المسارالحدالمتغير
POST /api/auth/login10 محاولات دخول فاشلة كل 15 دقيقةRATE_LIMIT_LOGIN
POST /api/bookings5 كل 10 دقائقلا شيء
POST /api/inquiries5 كل 10 دقائقلا شيء
POST /api/bookings/:reference/review5 كل 10 دقائقلا شيء

الطلب الذي يتجاوز حدًّا يُجاب بـ 429. العدّادات محفوظة في ذاكرة واجهة API، لذلك يمسحها إعادة التشغيل. خلف وكيل عكسي، اضبط TRUST_PROXY ليُحسب كل زائر على عنوانه.

المساعد الذكي ومحادثاته

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

مسار بث المساعد، وقائمة نماذجه، والمحادثات المحفوظة.

خادم MCP

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

نقطة نهاية MCP لوكلاء البرمجة وكيفية التصريح لها.

التحديثات المباشرة عبر WebSocket

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

مساحات أسماء Socket.IO التي تستمع إليها لوحة التحكم، وأحداثها، وكيفية التصريح للاتصال.

مسارات وضع العرض التجريبي

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

المسارات الموجودة فقط لبناء العرض التجريبي العام.

توقفت عند خطوة؟

ابحث عن الحل قبل أن تبدأ من جديد.

حل المشكلات

تفضيلات ملفات تعريف الارتباط

نستخدم ملفات تعريف الارتباط لتعزيز تجربة التصفح الخاصة بك وتحليل حركة المرور على الموقع وتخصيص المحتوى. بالنقر على "قبول الكل"، فإنك توافق على استخدامنا لملفات تعريف الارتباط للتحليلات والإعلانات المخصصة.