إنتقل إلى المحتوى الرئيسي

قوائم المتجر

قائمة المتجر هي الروابط التي يختارها التاجر لشريط التنقل وللقائمة الجانبية على الهاتف وللتذييل. تقرأها الواجهة البرمجية وتكتبها كوثيقة واحدة: حتى 12 رابطاً في الأعلى مع حتى 10 روابط فرعية لكل واحد، وحتى 3 مجموعات في التذييل من 10 روابط، وزر واحد للوحة الفئات العريضة. المتجر الذي لم يحفظ قائمة أبداً يعرض الروابط التلقائية، وتُرجع له هاتان النقطتان automatic: true.

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

قبل أن تبدأ​

  • تحتاج القراءة إلى store:read وتحتاج الكتابات إلى store:write. مفاتيح التاجر تحمل الاثنتين.
  • PUT تستبدل الوثيقة كلها. اقرأها أولاً، وغيّر ما تحتاجه، ثم أرسلها مع قيمة version التي قرأتها.
  • Idempotency-Key اختياري مع PUT. وPUT الذي يحمل مفتاحاً يُعاد جوابه لمدة 24 ساعة. انظر Idempotency.

وثيقة القائمة​

الحقلالنوعملاحظات
vintدائماً 1.
megabooleantrue يفعّل لوحة الفئات العريضة. انظر اللوحة العريضة.
toparray من العناصرروابط شريط التنقل بالترتيب. من 1 إلى 12. home وproducts وcategories وtrack وcontact وcart يظهر كل منها مرة واحدة على الأكثر هنا، دون حساب children.
footerarray من المجموعاتأعمدة التذييل بالترتيب. حتى 3.

العناصر​

الحقلالنوعملاحظات
typestringواحد من home وproducts وcategories وcategory وpage وtrack وcontact وcart وurl. انظر أنواع العناصر.
labelstringحتى 40 حرفاً. الفارغ يعني اسم الهدف نفسه، بلغة الزائر في الأنواع الجاهزة. إلزامي مع url.
refint أو nullرقم الفئة مع category، ورقم الصفحة مع page، وnull مع الأنواع الأخرى.
urlstringالعنوان مع url، حتى 500 بايت. فارغ مع الأنواع الأخرى.
show_subcategoriesbooleanعناصر category في المستوى الأعلى فقط: يعرض أيضاً حتى 10 فئات فرعية لتلك الفئة. يُحفظ false في كل مكان آخر، بما فيه children وروابط التذييل.
childrenarray من العناصرعناصر الأعلى فقط: حتى 10 روابط فرعية. الرابط الفرعي ليس له children خاص به ولا يمكن أن يكون عنصر categories.

المجموعات​

الحقلالنوعملاحظات
keystring أو nullquick_links أو categories للمجموعتين التلقائيتين، وnull لمجموعة تضيفها أنت.
labelstringعنوان العمود، حتى 40 حرفاً. يمكن أن يكون فارغاً فقط إذا كان key موجوداً: يعرض المتجر حينها العنوان التلقائي بلغة الزائر. والعنوان المكتوب يظهر كما هو في كل اللغات.
linksarray من العناصرمن رابط واحد إلى 10 روابط. روابط التذييل ليس لها children ولا show_subcategories.

تُحفظ الأسماء نصاً عادياً: تُحذف وسوم HTML وتُزال المسافات من الطرفين. والوثيقة كلها 16 KB على الأكثر.

أنواع العناصر​

typeيفتح الرابط
home/، الصفحة الرئيسية للمتجر.
products/products، كل المنتجات.
categoriesقائمة منسدلة بالفئات الرئيسية وفئاتها الفرعية، مع سطر لكل المنتجات. وفي التذييل، جزء الفئات في الصفحة الرئيسية.
category/category/{ref}. يجب أن يكون ref فئة من هذا المتجر.
page/pages/{slug} للصفحة ref. يجب أن يكون ref صفحة منشورة من هذا المتجر. انظر صفحات المتجر.
track/track-order.
contactجزء الاتصال في الصفحة الرئيسية.
cart/cart.
urlurl: مسار في المتجر مثل /pages/delivery، أو مرساة مثل #products، أو عنوان http:// أو https://، أو tel: أو mailto:.

قيمة url بلا بروتوكول تشبه نطاقاً، مثل instagram.com/x، تُحفظ https://instagram.com/x. وjavascript: وdata: و// والشرطات المائلة العكسية وعلامات الاقتباس والمسافات والأقواس الزاوية مرفوضة بالرمز bad_url.

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

اللوحة العريضة​

مع "mega": true، عنصر الأعلى الذي لروابطه الفرعية روابط فرعية خاصة بها يظهر على الحاسوب كلوحة عريضة، فيها عمود لكل رابط فرعي. وهذا حال العنصر categories إذا كان لفئة رئيسية فئات فرعية. وعنصر category مع show_subcategories يعرض حتى 10 فئات فرعية، ومع mega حتى 10 من فئاتها الفرعية لكل واحدة، أي مستوى ثالثاً. والعنصر categories يحتفظ بحدود القائمة التلقائية: 10 فئات رئيسية مع 5 فئات فرعية لكل واحدة في شريط التنقل، و12 مع 6 في قالب Promobi. وعلى الهاتف تعرض القائمة الجانبية المستويات نفسها كقائمة تنفتح وتنغلق.

GET /v1/store/menus​

قائمة المتجر. للمتجر الذي لم يحفظ قائمة أبداً، menus هي القائمة التلقائية وautomatic قيمتها true.

المصادقة: مفتاح منصة بصلاحية store:read.

الطلب​

curl 'https://api.dzbuild.app/v1/store/menus' \
-H "Authorization: Bearer $DZ_KEY"

الاستجابة 200​

version هي القيمة التي ترسلها مع PUT. وmax يعطي الحدود وtypes أنواع العناصر المقبولة.

{
"data": {
"automatic": false,
"menus": {
"v": 1,
"mega": false,
"top": [
{"type": "home", "label": "", "ref": null, "url": "", "show_subcategories": false, "children": []},
{"type": "category", "label": "", "ref": 152, "url": "", "show_subcategories": true, "children": []},
{"type": "page", "label": "", "ref": 7, "url": "", "show_subcategories": false, "children": []}
],
"footer": [
{"label": "Infos", "links": [{"type": "track", "label": "", "ref": null, "url": ""}, {"type": "url", "label": "Instagram", "ref": null, "url": "https://instagram.com/my-store"}]}
]
},
"version": "3f9a1c07d2e4b851",
"max": {"top": 12, "children": 10, "groups": 3, "links": 10, "label": 40},
"types": ["home", "products", "category", "page", "track", "contact", "cart", "url", "categories"]
},
"meta": {"request_id": "5d2a8e1f07c3b946", "api_version": "v1"}
}

PUT /v1/store/menus​

تستبدل القائمة كلها.

المصادقة: مفتاح منصة بصلاحية store:write. وIdempotency-Key اختياري.

الجسم​

الحقلالنوعإلزاميملاحظات
menusobject أو nullنعمالوثيقة الجديدة. null يُرجع القائمة التلقائية.
versionstringلاقيمة version التي قرأتها. إذا لم تعد تطابق، يُرجع النداء 409 write_conflict ولا يغيّر شيئاً. وبدونها يكتب النداء فوق ما هو محفوظ.

الطلب​

curl -X PUT 'https://api.dzbuild.app/v1/store/menus' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: menus-sizes-1" \
-d '{"version": "3f9a1c07d2e4b851", "menus": {"v": 1, "mega": false, "top": [{"type": "home", "label": "", "ref": null, "url": "", "show_subcategories": false, "children": []}, {"type": "page", "label": "Guide des tailles", "ref": 9, "url": "", "show_subcategories": false, "children": []}], "footer": []}}'

الاستجابة 200​

menus هي الوثيقة كما حُفظت، وversion القيمة الجديدة، وchange_id رقم التغيير في سجل التغييرات. الجسم الذي لا يغيّر شيئاً يُرجع change_id: null.

{
"data": {
"menus": {
"v": 1,
"mega": false,
"top": [
{"type": "home", "label": "", "ref": null, "url": "", "show_subcategories": false, "children": []},
{"type": "page", "label": "Guide des tailles", "ref": 9, "url": "", "show_subcategories": false, "children": []}
],
"footer": []
},
"version": "b70e4d2a9c15f383",
"change_id": 90420,
"automatic": false
},
"meta": {"request_id": "a81c3f5e92d07b64", "api_version": "v1"}
}

"menus": null يُرجع automatic: true مع القائمة التلقائية في menus.

التراجع​

تُرجع PUT قيمة change_id. وPOST /v1/changes/{change_id}/undo يُرجع القائمة كما كانت قبل ذلك النداء، بما فيها القائمة التلقائية. يحتاج التراجع إلى store:write وإلى Idempotency-Key.

  • إذا تغيّرت القائمة مرة أخرى بعد ذلك النداء، يُرجع التراجع 409 menus_changed ولا يغيّر شيئاً. تراجع عن التغيير الأحدث أولاً.
  • التغيير الذي تتراجع عنه مرة ثانية يُرجع 409 already_undone.
  • القوائم التي يحفظها التاجر من صفحة التخصيص لا تُسجَّل، فلا يمكن التراجع عنها عبر الواجهة البرمجية.
  • GET /v1/changes?entity=store.menus يعرض تغييرات القائمة، الأحدث أولاً، مع store:read. وentity_id قيمته menus.
  • رمز التطبيق المثبّت لا يستطيع قراءة التغييرات ولا التراجع عنها: GET /v1/changes والتراجع يُرجعان 403 forbidden. وأجوبة الكتابة تحمل change_id رغم ذلك.
curl -X POST 'https://api.dzbuild.app/v1/changes/90420/undo' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Idempotency-Key: undo-90420"

الأخطاء​

HTTPالرمزالسبب
400bad_requestالجسم ليس كائن JSON، أو menus غائب أو ليس كائناً ولا null، أو version ليس نصاً.
401unauthorizedمفتاح خاطئ أو غائب.
402quota_exceededانتهت حصة الطلبات الشهرية للمتجر. انظر حدود المعدل.
403forbiddenMissing scope: store:read أو Missing scope: store:write، أو API access requires an active Enterprise plan لمفتاح تاجر متجره ليس على خطة Enterprise سارية.
404not_foundالمتجر غير موجود.
409write_conflictقيمة version التي أرسلتها لم تعد تطابق: يحمل الخطأ menus الحالية (null ما دام المتجر يعرض الروابط التلقائية) وversion الحالية، فتدمج ثم تعيد المحاولة. والرمز نفسه بدونهما يعني أن كتابة أخرى وصلت في اللحظة نفسها: اقرأ من جديد ثم أعد المحاولة.
409menus_changedفي التراجع فقط: تغيّرت القائمة بعد التغيير الذي تتراجع عنه.
409already_undoneفي التراجع فقط: سبق التراجع عن هذا التغيير.
413payload_too_largeالجسم يتجاوز 1 MB.
422invalid_menusرُفضت قيمة. يعطي fields القيمتين {path, code} لها. انظر الرموز أسفله.
422idempotency_key_reuseاستُعمل Idempotency-Key نفسه مع جسم آخر.
429rate_limitedطلبات كثيرة. انتظر Retry-After.
500server_errorفشل الطلب. أعد المحاولة بـ Idempotency-Key نفسه.

يبدأ path بـ menus. ويشير إلى القيمة المرفوضة، مثل menus.top.0.url أو menus.footer.1.links.10، ويكون menus وحدها مع too_large. وcode واحد من هذه.

codeالسبب
bad_urlurl فارغ أو مرفوض أو طويل جداً.
invalidخطأ في الشكل: قائمة مكان كائن أو العكس، مثل top ليس array.
too_manyأكثر من 12 عنصراً في الأعلى، أو 10 روابط فرعية، أو 3 مجموعات، أو 10 روابط في مجموعة. يذكر path أول عنصر يتجاوز الحد.
top_requiredtop فارغ. لترك قائمة خاصة، أرسل "menus": null.
unknown_typetype ليس من الأنواع التسعة.
unknown_keyقيمة key لمجموعة تذييل غير quick_links وcategories وnull.
unknown_categoryref ليس فئة من هذا المتجر.
unknown_pageref ليس صفحة منشورة من هذا المتجر.
label_requiredعنصر url بلا اسم، أو مجموعة تذييل بلا اسم وبلا key.
label_too_longاسم يتجاوز 40 حرفاً.
links_requiredمجموعة تذييل بلا رابط.
duplicate_typeعنصر ثانٍ من home أو products أو categories أو track أو contact أو cart في top.
nested_too_deepchildren داخل رابط فرعي أو رابط تذييل، أو عنصر categories كرابط فرعي.
too_largeالوثيقة تتجاوز 16 KB.
{
"error": {
"code": "invalid_menus",
"message": "Invalid menu at menus.top.0.url (bad_url); the caps and types are in GET /v1/store/menus.",
"fields": [{"path": "menus.top.0.url", "code": "bad_url"}]
},
"meta": {"request_id": "c27e90b4f13a5d68", "api_version": "v1"}
}

الحدود​

  • القائمة العلوية: 12 عنصراً، لكل واحد حتى 10 روابط فرعية.
  • التذييل: 3 مجموعات من 10 روابط على الأكثر.
  • الاسم: 40 حرفاً. العنوان: 500 بايت. الوثيقة: 16 KB.
  • الحدود نفسها في كل الخطط.

أدوات MCP​

يعطي خادم MCP، النسخة 1.9.0، المساعد الذكي أداتين للقائمة بالقواعد نفسها: menus_get تُرجع الوثيقة كلها مع version والحدود، وmenus_set تكتبها مع version نفسها، وchange_undo تتراجع عن كتابة.

هذه الصفحة لأدوات الذكاء الاصطناعيعرض بصيغة Markdownفتح في ChatGPTفتح في Claude