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

Kinoraمرجع واجهة API

مرجع واجهة API

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

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

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

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

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

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

يحتوي data على النتيجة. وmessage جملة قصيرة تملؤها بعض عمليات الكتابة، مترجمة إلى لغة الطلب، وتكون فارغة في غير ذلك.

فحص السلامة هو المسار الوحيد خارج الغلاف. لا يحتاج إلى رمز ولا يخضع لتحديد المعدل:

الطرفية
curl http://localhost:8000/api/health
الاستجابة
{"status":"ok"}

يُرجع 503 مع {"status":"unavailable"} ما دام لا يمكن الوصول إلى قاعدة البيانات أو كانت خالية من الجداول، لذا يمكن للمنصة استخدامه كفحص للجاهزية.

الأخطاء

يُجيب الطلب الفاشل برمز حالة HTTP المطابق وبالغلاف نفسه، مع success: false وdata: null، ومع المشكلات لكل حقل عند فشل التحقق:

الاستجابة (400)
{
  "success": false,
  "data": null,
  "message": "<the first field's problem>",
  "errors": {
    "email": ["<the problem with email>"]
  }
}
الحالةمتى
400فشل حقل في التحقق، أو يحتوي محتوى الطلب على حقل لا يقبله المسار: الحقول غير المعروفة تُرفض ولا تُتجاهل. وأيضًا الرفع من دون حاوية مضبوطة.
401الرمز مفقود أو منتهي الصلاحية، أو فشل تسجيل الدخول (الإجابة نفسها سواء لم يكن للبريد الإلكتروني حساب أو كانت كلمة المرور خاطئة)، أو مفتاح إدخال مفقود أو غير معروف.
403أدوار الحساب لا تمنح صلاحية المسار: "You need one of these permissions: …".
404لا يوجد سجل كهذا، أو السجل لا يخص المستدعي.
409حذف سيكسر شيئًا لا يزال يستخدم السجل، مثل exercise_in_use.
429أكثر من 10 محاولات في الدقيقة من عنوان واحد على مسار تسجيل الدخول أو التسجيل أو حذف الحساب. تحدد الترويسة Retry-After عدد الثواني التي يجب انتظارها.
503فحص السلامة قبل أن تصبح قاعدة البيانات جاهزة.
500فشل غير متوقع. تبقى الرسالة عامة وتذهب التفاصيل إلى سجل واجهة API.

تحمل أخطاء كثيرة مفتاحًا تترجمه لوحة التحكم، مثل member_not_found أو event_full، في message.

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

تأخذ القوائم page، بدءًا من 1، وpage_count، وهو حجم الصفحة. تحتوي الصفحة على 100 صف كحد أقصى: الحجم الأكبر يُقرأ 100، والأصغر يُقرأ 1، والحجم المفقود أو غير المقروء يعود إلى القيمة الافتراضية للقائمة. وتجيب القائمة بشكل واحد:

الاستجابة
{
  "success": true,
  "data": { "data": [ ], "page": 1, "limit": 15, "total": 35, "totalPages": 3 },
  "message": ""
}
القائمةحجم الصفحة الافتراضي
الأعضاء، وكتالوجات المحتوى15
المدربون، والأدوار، والإعدادات10

تُرتَّب قوائم المحتوى حسب updated_at، الأحدث أولًا افتراضيًا (order=asc أو desc)، مع المعرّف كمعيار ترجيح، وتقبل search وفلاترها الخاصة.

اللغة

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

المصادقة

  • سجّل الدخول عبر POST /api/auth/login. تحتوي الإجابة على access_token، وهو JWT موقّع بـ JWT_SECRET، والحساب مع أدواره وصلاحياته. أرسله بالشكل Authorization: Bearer <token>.
  • يدوم الرمز طوال JWT_EXPIRATION، و7d افتراضيًا. لا يوجد مسار للتجديد: عندما تنتهي صلاحية الرمز، يُرجع الطلب التالي 401 ويسجّل العميل الدخول من جديد.
  • يقبل تسجيل الدخول والتسجيل وحذف الحساب 10 محاولات في الدقيقة من عنوان واحد، تُعدّ لكل مسار على حدة، ثم تُرجع 429. يُحفظ العدد في ذاكرة واجهة API، لذا يبدأ من جديد عند إعادة التشغيل. خلف خادم وكيل، راجع TRUST_PROXY (حل المشكلات).
  1. سجّل الدخول بصفتك المدرب الرئيسي المزروع

    الطرفية
    curl -X POST http://localhost:8000/api/auth/login \
      -H "Content-Type: application/json" \
      -d '{"email":"headcoach@example.com","password":"Coach@123"}'
    الاستجابة
    {
      "success": true,
      "data": {
        "access_token": "eyJhbGciOiJIUzI1NiIs...",
        "token_type": "Bearer",
        "expires_in": "7d",
        "account": { "email": "headcoach@example.com", "roles": [ ], "permissions": [ ] }
      },
      "message": "..."
    }
  2. استدعِ مسارًا محميًا بالرمز

    الطرفية
    curl "http://localhost:8000/api/users?page=1&page_count=5" \
      -H "Authorization: Bearer <access_token>"

    النتيجة المتوقعة: أول خمسة أعضاء، بشكل القائمة.

الطريقةالمسارمن يحق له استدعاؤهوظيفته
POST/api/auth/loginأي شخصيسجّل دخول أي حساب. يخضع لتحديد المعدل.
POST/api/auth/registerأي شخصينشئ حساب عضو (first_name وlast_name وemail وpassword من 8 أحرف أو أكثر، وusername اختياري) ويسجّل دخوله. يخضع لتحديد المعدل.
GET/api/auth/meأي حساب مسجّل الدخولالحساب مع أدواره وصلاحياته.
POST/api/auth/delete-accountأي حساب مسجّل الدخوليغلق حساب المستدعي نفسه بعد التحقق من password. يخضع لتحديد المعدل.
PATCH/api/coaches/profileأي حساب مسجّل الدخوليحدّث الملف الشخصي للمستدعي نفسه.
PATCH/api/coaches/profile/passwordأي حساب مسجّل الدخوليغيّر كلمة مرور المستدعي نفسه.

لا يوجد مسار لإعادة تعيين كلمة المرور. صفحتا نسيان كلمة المرور وإعادة تعيينها في لوحة التحكم واجهتان فقط: لا يُرسَل أي رابط لإعادة التعيين. يعيّن حساب طاقم يملك members.update كلمة مرور العضو عبر PATCH /api/users/:username/change-password.

غيّر كلمات المرور التجريبية

تستخدم الحسابات التجريبية كلمات مرور منشورة: Coach@123 وMember@123 وTrainer@123، وstaff123 لبقية الطاقم وpassword123 لبقية الأعضاء. غيّرها، أو ابدأ من جداول فارغة، قبل إطلاق أي شيء.

الصلاحيات

يتحقق المسار من الرمز أولًا، ثم من الصلاحية التي يحددها. يملك الحساب كل صلاحيات كل دور لديه؛ وحيث يحدد المسار عدة صلاحيات، تكفي أي واحدة منها. في الجداول أدناه، اسم الصلاحية في من يحق له استدعاؤه يعني حسابًا تمنحه أدواره تلك الصلاحية.

الأعضاء

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/usersmembers.viewصفحة من الأعضاء (order وsearch وemail وphone وcountry_id وusername وfirst_name وlast_name وfrom_date وto_date وverified).
GET/api/users/statisticmembers.viewأعداد الأعضاء لشاشة «النادي».
GET/api/users/:usernamemembers.viewعضو واحد.
POST/api/usersmembers.createينشئ عضوًا.
PATCH/api/users/:usernamemembers.updateيحدّث عضوًا.
PATCH/api/users/:username/change-passwordmembers.updateيضبط كلمة مرور عضو.
POST/api/users/:username/resend-verification-emailmembers.updateيُرجع نجاحًا؛ لا يُرسَل أي بريد إلكتروني، إذ لا يأتي القالب بناقل بريد.
POST/api/users/:username/make-verifiedmembers.verifyيعلّم البريد الإلكتروني كمؤكَّد.
POST/api/users/:username/make-unverifiedmembers.verifyيعلّمه كغير مؤكَّد.
DELETE/api/users/:usernamemembers.deleteينقل العضو إلى قائمة المحذوفين.
GET/api/users/deletedmembers.viewصفحة من الأعضاء المحذوفين.
GET/api/users/deleted/:usernamemembers.viewعضو محذوف واحد.
POST/api/users/deleted/:username/restoremembers.restoreيستعيد واحدًا منها.

المدربون والأدوار

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/coachescoaches.viewصفحة من حسابات الطاقم (email وname وphone).
GET/api/coaches/statisticscoaches.viewأعداد الموظفين.
GET/api/coaches/management/roles/selectcoaches.view أو coaches.assign_rolesالأدوار التي يمكن لنموذج الطاقم الاختيار منها.
GET/api/coaches/:idcoaches.viewحساب طاقم واحد، بالمعرّف أو باسم المستخدم.
POST/api/coachescoaches.createينشئ واحدًا.
PATCH/api/coaches/:idcoaches.editيحدّث واحدًا.
PATCH/api/coaches/:id/rolescoaches.assign_rolesيضبط أدواره.
DELETE/api/coaches/:idcoaches.deleteيحذف واحدًا.
GET/api/rolesroles.viewالأدوار (page وpage_count وname وguard_name وcreated_from وcreated_to)؛ وكل الأدوار من دون page_count.
GET/api/roles/statisticsroles.viewأعداد الأدوار.
GET/api/roles/selectroles.viewالأدوار لقائمة منسدلة.
GET/api/roles/permissionsroles.viewكل الصلاحيات، حسب الوحدة.
GET/api/roles/:idroles.viewدور واحد مع صلاحياته.
POST/api/rolesroles.createينشئ دورًا.
PUT/api/roles/:idroles.editيعيد تسميتها.
POST/api/roles/:id/permissionsroles.assign_permissionsيضبط صلاحياته.
DELETE/api/roles/:idroles.deleteيحذفه.

إعدادات التطبيق

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/settingssettings.viewصفحة من الإعدادات (search وcategory وtype).
GET/api/settings/:keysettings.viewإعداد واحد.
PATCH/api/settings/:keysettings.editيغيّر قيمته.
DELETE/api/settings/:keysettings.editيحذفه.

بيانات العضو الخاصة

كل مسار هنا يجيب عن الحساب صاحب الرمز ولا أحد غيره. رمز الطاقم يُرجع 403، لأن دور العضو وحده يملك fitness.view وfitness.edit. وتجيب كل عملية كتابة بالصفحة كاملة بعد تحديثها.

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/fitness/overviewfitness.viewيوم لوحة التحكم: الحلقات، والسعرات، والنوم، ومعدل ضربات القلب، والتمارين، والخطوات.
GET/api/fitness/activityfitness.viewصفحة النشاط (granularity بالقيمة days أو weeks أو months).
GET/api/fitness/activity/:slugfitness.viewنشاط واحد.
GET/api/fitness/nutritionfitness.viewصفحة التغذية.
POST/api/fitness/nutrition/mealsfitness.editيسجّل طبقًا من الكتالوج في اليوم الحالي.
PATCH/api/fitness/nutrition/hydrationfitness.editيضبط أكواب اليوم.
GET/api/fitness/nutrition/plannerfitness.viewمخطط يوم واحد (date).
POST/api/fitness/nutrition/plannerfitness.editيسجّل وجبة العضو الخاصة.
DELETE/api/fitness/nutrition/planner/:keyfitness.editيحذف واحدًا.
GET/api/fitness/sleepfitness.viewصفحة النوم.
POST/api/fitness/sleep/nightsfitness.editيسجّل ليلة.
DELETE/api/fitness/sleep/nights/:datefitness.editيحذف واحدًا.
GET/api/fitness/healthfitness.viewصفحة الصحة.
POST/api/fitness/health/readingsfitness.editيسجّل المؤشرات الحيوية ليوم.
DELETE/api/fitness/health/readings/:datefitness.editيحذفها.
GET/api/fitness/progressfitness.viewصفحة التقدم.
GET/api/fitness/progress/photosfitness.viewصفحة الصور (before وafter).
POST/api/fitness/progress/photosfitness.editيضيف نقطة تحقق.
PATCH/api/fitness/progress/photos/notesfitness.editيحفظ اليوميات.
PATCH/api/fitness/progress/goalfitness.editيضبط هدف الوزن.
POST/api/fitness/progress/readingsfitness.editيسجّل قراءة للجسم.
DELETE/api/fitness/progress/readings/:datefitness.editيحذف واحدًا.
GET/api/fitness/communityfitness.viewصفحة المجتمع.
GET/api/fitness/community/members/:usernamefitness.viewالملف الشخصي لعضو.
GET/api/fitness/community/groups/:slugfitness.viewمجموعة.
GET/api/fitness/community/discussions/:slugfitness.viewنقاش.
POST/api/fitness/community/groups/:slug/joinfitness.editينضم إلى مجموعة أو يغادرها.
POST/api/fitness/community/challenges/:slug/joinfitness.editينضم إلى تحدٍّ أو ينسحب منه.
POST/api/fitness/community/events/:slug/attendfitness.editيحضر فعالية أو يلغي حضوره.
POST/api/fitness/community/groups/:slug/postsfitness.editيكتب منشورًا.
POST/api/fitness/community/groups/:slug/posts/:postKey/likefitness.editيعجب به أو يلغي الإعجاب.
POST/api/fitness/community/groups/:slug/posts/:postKey/commentsfitness.editيعلّق.
POST/api/fitness/community/discussions/:slug/repliesfitness.editيرد.
GET/api/fitness/billingfitness.viewالخطة وفواتيرها. للقراءة فقط.
GET/api/fitness/settings-hubsettings.viewأرقام صفحة الإعدادات، والتنبيهات، والخصوصية، والمظهر.
PATCH/api/fitness/settings-hub/notificationsfitness.editمفاتيح التنبيهات الأربعة.
PATCH/api/fitness/settings-hub/privacyfitness.editمشاركة النشاط.
PATCH/api/fitness/settings-hub/appearancesettings.viewالمظهر، ولون التمييز، والحركة.
GET/api/fitness/settings-hub/exportfitness.viewكل ما سجّله العضو، بصيغة JSON.
GET/api/fitness/devicesfitness.viewالأجهزة واتصال الحساب بكل منها.
POST/api/fitness/devices/:key/togglefitness.editيربط جهازًا أو يفصله.
POST/api/fitness/devices/:key/syncfitness.editدائمًا 400 device_sync_unavailable.
GET/api/fitness/devices/keysfitness.viewمفاتيح الإدخال الخاصة بالحساب.
POST/api/fitness/devices/keysfitness.editينشئ مفتاحًا؛ والمفتاح الكامل موجود في هذه الإجابة فقط.
DELETE/api/fitness/devices/keys/:idfitness.editيلغي مفتاحًا.

التمارين والحركات والجلسة

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/fitness/workoutsfitness.viewصفحة الخطة.
GET/api/fitness/workouts/programsfitness.viewالبرامج والبرنامج النشط.
POST/api/fitness/workouts/programs/:slug/enrollfitness.editيبدأ برنامجًا أو يوقفه.
GET/api/fitness/workouts/:slugfitness.viewتمرين واحد.
POST/api/fitness/workouts/:slug/savefitness.editيحفظه أو يلغي حفظه.
GET/api/fitness/exercisesfitness.viewالمكتبة (muscle وequipment وdifficulty).
GET/api/fitness/exercises/:slugfitness.viewحركة واحدة؛ ويسجّل مشاهدة.
POST/api/fitness/exercises/:slug/savefitness.editيحفظه أو يلغي حفظه.
POST/api/fitness/exercises/:slug/log-setfitness.editيسجّل المجموعات والتكرارات والوزن.
GET/api/fitness/workouts/sessionfitness.viewالجلسة المفتوحة، تُفتح من خطة اليوم إن لم تكن هناك جلسة مفتوحة.
POST/api/fitness/workouts/session/sets/:setfitness.editيسجّل مجموعة (weightKg وreps وrpe).
POST/api/fitness/workouts/session/rest/skipfitness.editيتخطى الراحة.
PATCH/api/fitness/workouts/session/notesfitness.editيحفظ الملاحظة.
POST/api/fitness/workouts/session/exercisesfitness.editيضيف حركة (slug).
POST/api/fitness/workouts/session/exercises/:slug/selectfitness.editيجعلها الحالية.
DELETE/api/fitness/workouts/session/exercises/:slugfitness.editيحذفها.
POST/api/fitness/workouts/session/finishfitness.editينهي الجلسة.
POST/api/fitness/workouts/session/restartfitness.editيتجاهلها ويبدأ من جديد.

التدريب

تجيب مسارات قائمة العملاء عن المدرب الذي يرسل الطلب: عميل مدرب آخر يُرجع 404.

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/fitness/coaching/clientscoaching.clientsقائمة عملاء المستدعي.
GET/api/fitness/coaching/clients/:usernamecoaching.clientsعميل واحد.
GET/api/fitness/coaching/available-memberscoaching.clientsالأعضاء الذين ليس لديهم مدرب.
POST/api/fitness/coaching/clientscoaching.clientsيتولى عضوًا (username).
GET/api/fitness/coaching/workoutscoaching.clientsالجلسات التي يسند منها المدرب.
GET/api/fitness/coaching/roster/assigned-workcoaching.clientsعمل اليوم عبر قائمة العملاء.
GET/api/fitness/coaching/roster/check-inscoaching.clientsمتابعات هذا الأسبوع، بدءًا بالتي لم يُرد عليها.
GET/api/fitness/coaching/clients/:username/plancoaching.clientsالعمل المسند لعميل.
POST/api/fitness/coaching/clients/:username/plancoaching.clientsيسند تمرينًا (workoutSlug وstartsOn وnote).
DELETE/api/fitness/coaching/plan/:idcoaching.clientsيحذف إسنادًا.
GET/api/fitness/coaching/clients/:username/messagescoaching.clientsالسلسلة مع عميل.
POST/api/fitness/coaching/clients/:username/messagescoaching.clientsيكتب إليه (body وattachments).
GET/api/fitness/coaching/clients/:username/check-inscoaching.clientsمتابعات العميل.
POST/api/fitness/coaching/check-ins/:id/replycoaching.clientsيرد على إحداها (body).
GET/api/fitness/coaching/my-coachfitness.viewمدرب العضو، أو null.
GET/api/fitness/coaching/my-planfitness.viewما أسنده المدرب.
GET/api/fitness/coaching/messagesfitness.viewسلسلة العضو.
POST/api/fitness/coaching/messagesfitness.editيكتب إلى المدرب.
GET/api/fitness/coaching/check-insfitness.viewمتابعات العضو.
POST/api/fitness/coaching/check-insfitness.editيسجّل متابعة هذا الأسبوع (energy وweightKg وnotes).
GET/api/fitness/coaching/coachescoaching.assignالحسابات التي تحمل دور Coach، مع عدد عملاء كل منها.
GET/api/fitness/coaching/assignments/:usernamecoaching.assignمن يدرّب العضو.
POST/api/fitness/coaching/assignmentscoaching.assignينقل عضوًا إلى مدرب (coachUsername وmemberUsername).
DELETE/api/fitness/coaching/assignments/:usernamecoaching.assignيخرج عضوًا من كل قوائم العملاء.

كتالوجات المحتوى

يجيب كل كتالوج عن المسارات الخمسة نفسها تحت /api/fitness/manage/<catalogue>، ويحتاج كل منها إلى fitness.manage. الكتالوجات هي exercises وworkouts وprograms وdishes وgroups وevents وchallenges وachievements وbadges.

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/fitness/manage/<catalogue>fitness.manageصفحة من السجلات (page وpage_count وsearch وorder وفلاتر الكتالوج الخاصة).
GET/api/fitness/manage/<catalogue>/:idfitness.manageسجل واحد.
POST/api/fitness/manage/<catalogue>fitness.manageينشئ سجلًا؛ والمعرّف النصي أو المفتاح المتروك يُصنع من الاسم الإنجليزي. يُرجع 201.
PATCH/api/fitness/manage/<catalogue>/:idfitness.manageيغيّر الحقول المرسلة؛ وتُستبدل القوائم داخل السجل بالكامل.
DELETE/api/fitness/manage/<catalogue>/:idfitness.manageيحذفه ويُرجع 200، أو 409 ما دام شيء ما لا يزال يستخدمه.
POST/api/fitness/manage/exercises/:id/featurefitness.manageيجعل هذه الحركة هي المميزة.

المعرّف غير المعروف يُرجع 404 record_not_found. تُرسل الأسماء والنصوص بالشكل { "en": "…", "ar": "…" }؛ ولا تُرسل سعرات الطبق أبدًا، بل تُحسب من غراماته.

الإدخال

الباب المخصص للأجهزة والمجمّعات. تأخذ هذه المسارات مفتاح إدخال في X-Api-Key، لا رمز bearer أبدًا، وتكتب لحساب المفتاح فقط.

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/ingest/whoamiمفتاح إدخالحساب المفتاح واسمه.
POST/api/ingest/daily-metricsمفتاح إدخاليُدرج أيامًا من أرقام الحركة أو يحدّثها (days).
POST/api/ingest/sessionsمفتاح إدخاليسجّل التمارين المنتهية (sessions).

البحث، والرفع، والإشعارات، والدول

الطريقةالمسارمن يحق له استدعاؤهوظيفته
GET/api/searchأي حساب مسجّل الدخولالنتائج لمصطلح عبر الأنواع التي يمكن للمستدعي فتحها (q وlocale وlimit).
POST/api/helpers/uploadأي حساب مسجّل الدخوليرفع ملفًا واحدًا (file، حتى 150 MB) إلى الحاوية؛ و400 إذا لم تُضبط حاوية.
POST/api/helpers/upload-chunkأي حساب مسجّل الدخولجزء من ملف أكبر (حتى 16 MB للجزء).
GET/api/notificationsأي حساب مسجّل الدخولإشعارات المستدعي.
PATCH/api/notifications/read-allأي حساب مسجّل الدخوليعلّمها كلها كمقروءة.
PATCH/api/notifications/:id/readأي حساب مسجّل الدخوليعلّم واحدًا كمقروء.
DELETE/api/notifications/:idأي حساب مسجّل الدخوليحذف واحدًا.
GET/api/helpers/countriesأي شخصالدول لقائمة منسدلة، بأسماء بلغة الطلب.

يدفع مجالا Socket.IO على الخادم نفسه التحديثات المباشرة: يوصل /notifications كل إشعار جديد، ويخبر /auth لوحة التحكم المسجّل دخولها بأن صلاحياتها تغيّرت. يقبلان المصادر الموجودة في FRONTEND_URL، أو CORS_ORIGIN إذا لم يُضبط.

المساعد الذكي

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

مسارات المحادثة، والنموذج، والاقتراحات الافتتاحية، وسجل المحادثات الخاصة بالمساعد.

خادم MCP

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

المسار الذي يستخدمه وكيل البرمجة، والمفتاح الذي يرسله.

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

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

المسارات التي يستخدمها العرض التجريبي العام ليعرّف بنفسه ويمنح كل زائر حسابًا.

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

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

حل المشكلات

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

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