كيف توقف بيع صنف ناقص: مزامنة المخزون بين موقعك ونظامك

تزامن مخزون موقعك مع نظامك بطريقتين لا ثالث لهما: ويبهوك يرسله نظامك لموقعك عند كل حركة، أو مهمة مجدولة داخل موقعك تسأل نظامك كل 15 دقيقة. الأولى لحظية وتناسب أي حجم كتالوج، والثانية أبسط وتناسب كتالوجاً صغيراً. الرقم يعيش بحقل على صف المنتج بقاعدة بيانات الموقع، وزر الشراء يقفل تلقائياً لما يوصل صفراً. وقبل أي شيء لازم تقرّر قراراً واحداً: مين المصدر الرسمي للرقم — الموقع أم نظامك.

نُشر في:

ابدأ مجاناً
م
لوحة المبيعاتمباشرآخر ٣٠ يوم ▾
٤٥٢ طلب هالشهر١٢٬٤٠٠ مبيعات د.أ+١٨٪نمو شهري
المبيعات عبر الوقت٦٨٪هدف الشهر
موقع تبنيه بابني بالعربي

من حركة المستودع إلى زر الشراء

أربع محطات، والقرار الوحيد اللي يخصّك هو شكل المحطة الثانية.

نظام المخزون أو الكاشير
الرقم الرسمي عندك
ويبهوك أو مهمة كل 15 دقيقة
توصيل التغيير
صف المنتج في cloud.db
حقل الكمية يتحدّث
زر الشراء
يقفل تلقائياً على الصفر
الموقع ما يخمّن الكمية ولا يحسبها من الطلبات القديمة — يقرأها من الحقل اللي وصله من نظامك.

اختر الطريقة حسب حجم كتالوجك

ما في طريقة وحدة صحيحة للكل. الجدول يحدّد المسار حسب عدد أصنافك وقدرات نظامك.

حالتكالطريقة الصحيحةكم تتأخر المزامنة
حتى 200 صنف ونظامك يعطي APIمهمة مجدولة كل 15 دقيقة تسحب الكميات وتحدّث الصفوفحتى 15 دقيقة
أكثر من 200 صنفويبهوك لكل تغيير، وتقسيم أي عملية كبيرة على مهام مؤجلةثوانٍ للتغيير الواحد
نظامك يقدر يرسل ويبهوك عند كل حركةملف باسم ينتهي بـ -webhook.js يستقبل ويحدّث الصفلحظي
عندك متجر شوبيفاي قائمcloud.commerce تقرأ منتجات متجرك والدفع يتم على صفحة شوبيفايلحظي — المصدر متجرك نفسه
كاشير بدون API إطلاقاًتحديث يدوي من لوحة الموقع أو رفع ملف دوريحسب رفعك أنت
نظام مثبّت داخل شبكة المحلغير قابل للربط المباشر — يحتاج طرفاً عاماً وسيطاًلا ينطبق

خمس خطوات لمزامنة تشتغل فعلاً

١

قرّر مين المصدر الرسمي للرقم

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

٢

خزّن الكمية على صف المنتج

الكمية والسعر وحالة التوفّر تعيش بصف المنتج بقاعدة بيانات الموقع. الصف يتحمّل حتى 32 كيلوبايت، فهو للأرقام والنصوص لا للملفات — صور المنتجات ترفع للتخزين ويُحفظ رابطها على الصف. حدود التخزين: 10 ميغابايت للملف الواحد، و250 ميغابايت و2000 ملف للمشروع، والصيغ المقبولة PNG وJPG وWEBP وGIF وPDF بفحص للبايتات لا للامتداد.

٣

افتح طريق التحديث

لو نظامك يرسل ويبهوك: الملف لازم يكون باسم ينتهي بـ -webhook.js، لأن هذي الملفات فقط هي المتاحة على رابط عام وباقي دوالك تبقى خاصة. ولو الموقع هو اللي يسأل: تسجّل المهمة بملف functions/_jobs.json بجدولة every_15m أو hourly بتوقيتك أنت. المهام لها حدود صريحة: أقصى 10 مهام للموقع، و200 تشغيلة باليوم للمهمة، والمهمة تتعطّل تلقائياً بعد 10 إخفاقات متتالية. والمشغّل يحجز المهمة قبل ما يشغّلها فما تنفّذ مرتين.

٤

اقفل البيع على الصفر بدل ما تخفي المنتج

لما توصل الكمية صفراً، خلّي المنتج ظاهراً بشارة «نفد المخزون» وزر بديل «نبّهني لما يتوفر». الزر يخزّن إيميل الزائر بصف، ومهمة مجدولة ترسل له لما ترجع الكمية فوق الصفر. إخفاء المنتج يخسّرك الزائر والصفحة معاً، وأسوأ منه إنك تخلي زر الشراء شغّالاً فيصير الطلب ويجي الاعتذار بعده.

٥

شغّل مهمة تسوية وراقبها

حتى مع الويبهوك، خلّ عندك مهمة تسوية تقارن أرقام الموقع بأرقام نظامك مرة بالساعة أو باليوم وترسل لك ملخّص الفروقات بالإيميل. الويبهوك يضيع أحياناً وما حدا يلاحظ، والتسوية هي شبكة الأمان. جوّا التشغيلة المجدولة هوية المستخدم فارغة، فالمهمة تشتغل بصلاحية صاحب الموقع.

شكل الصنف الناقص على موقعك

متجرك.الرئيسيةالمنتجاتعنّاالسلة ٢
الأكثر مبيعاًعود ملكي فاخر٤٥ د.أ ٦٠ د.أ · شحن مجانيأضف للسلة
مسك الليل★★★★★٣٢ د.أورد طائفي★★★★☆٢٨ د.أمنتج مميّز★★★★★٣٩ د.أ
الصنف الناقص يبقى ظاهراً بالكتالوج مع شارة «نفد المخزون» وزر «نبّهني لما يتوفر». إخفاء المنتج يخسّرك الزائر وأرشفة الصفحة معاً، وترك زر الشراء شغّالاً يخسّرك ثقته.

المزامنة التلقائية: الربح والثمن

خذ القرار وأنت عارف الحدود، لا بعد ما تصطدم فيها.

تكسب

  • توقف بيع الناقص، وهذا أرخص من كل اعتذار واسترجاع بعده.
  • الرقم يتحدّث بدون ما يفتح أحد الموقع — الويبهوك والمهام تشتغل على الخادم.
  • تشغيل المهمة محجوز قبل التنفيذ فما تشتغل مرتين على نفس الصنف.
  • منتجات متجر شوبيفاي القائم تُقرأ كما هي عبر cloud.commerce بلا نقل يدوي.
  • زر «نبّهني لما يتوفر» يحوّل نفاد المخزون من خسارة زائر إلى قائمة انتظار.

تدفع

  • ebnii.db.list داخل الدالة يوقف عند 200 صف بلا offset، وlistAll مو موجودة على الخادم — كتالوج أكبر لازم يتقسّم على مهام مؤجلة.
  • 8 نداءات خارجية بالتشغيلة الواحدة، ترتفع بحد أقصى 24 لتشغيلة صاحب الموقع — يعني ما تسحب خمسين صفحة من واجهة المورّد مرة وحدة.
  • المهام المجدولة ما تشتغل إلا على موقع منشور، وأقصاها 10 مهام للموقع و200 تشغيلة باليوم للمهمة.
  • ما في مكتبات npm: لا SDK للكاشير ولا مكتبة إكسل — الصندوق QuickJS بدون require ولا Node.
  • الصف الواحد أقصاه 32 كيلوبايت، فالمخزون أرقام ونصوص لا ملفات.
  • ebnii.jobs.enqueue تعطي حداً أدنى للتأخير لا موعداً مضموناً — لا تبني عليها توقيتاً دقيقاً.

أخطاء تتكرّر بمزامنة المخزون

خمسة أخطاء نشوفها كثير، وكلها تنتهي بنفس النتيجة: زبون طلب شيئاً مو موجود.

تخفي المنتج بدل ما تقفل الشراء

الصفحة تختفي، والزائر اللي جا يدوّرها يطلع بلا نتيجة. الأصح إن الصفحة تبقى وتتحوّل لحالة «نفد المخزون» مع زر تنبيه.

تنسى تنشر الموقع

المهام المجدولة ما تشتغل على موقع غير منشور نهائياً، والشغل المؤجل لموقع غير منشور تنتهي صلاحيته بعد ثلاثة أيام. تنشر أول، وبعدين تعتمد على الجدولة.

تخلي الموقع مصدر الرقم وأنت تبيع بالمحل

لو الكاشير يبيع وما يخبر الموقع، أرقام الموقع تصير خيالاً خلال يوم. حدّد مصدراً رسمياً واحداً واجعل الثاني ينسخ منه.

تسحب الكتالوج كامل كل ربع ساعة

هذا يصطدم بسقف 200 صف داخل الدالة وبسقف 8 نداءات خارجية بالتشغيلة. الأصح إنك تسحب المتغيّر فقط، أو تستقبل ويبهوك لكل حركة.

تحط رقم المخزون بصفّ يقدر أي زائر يعدّله

cloud.db فيه أربعة مستويات وصول لسبب. صفوف المنتجات تُقرأ من الجميع وتُكتب من صاحب الموقع أو من دالة سحابة فقط، لا من كود الصفحة بيد الزائر.

أسئلة شائعة

هل تشتغل المزامنة مع أي نظام كاشير؟

تشتغل مع أي نظام عنده REST API عام يُنادى بمفتاح، أو يقدر يرسل ويبهوك لرابط تعطيه له. النظام المثبّت داخل شبكة المحل بدون طرف عام مو قابل للربط: النداءات للشبكات الخاصة والعناوين المحلية مرفوضة من المنصة، وحتى سلسلة التحويلات تُفحص عنواناً بعنوان. لو نظامك بهذي الحالة، البديل تصدير ملف دوري وتحديث من لوحة الموقع.

عندي متجر شوبيفاي — لازم أنقل المنتجات كلها؟

لا. cloud.commerce تقرأ منتجات متجرك على شوبيفاي مباشرة، والدفع يتم على صفحة الدفع المستضافة عندهم — يعني متجرك يبقى مصدر الحقيقة للمخزون والأسعار، والموقع اللي بناه ابني يصير الواجهة. لو رجع الرد بأن المتجر غير مربوط، معناها إنك ما ربطت متجرك بعد لا أكثر.

كم صنف يتحمّل موقعي؟

من كود الصفحة، cloud.db.listAll تصفّح 500 صف بالمرة وتقف عند حاجز 5000 صف — وهذا يغطي كتالوجات كبيرة للعرض. لكن داخل الدالة السحابية، القراءة تقف عند 200 صف بلا offset. يعني: العرض للزائر يتحمّل كثيراً، والمعالجة الجماعية على الخادم لازم تتقسّم على مهام مؤجلة.

إذا ما ربطت أي نظام، أقدر أدير المخزون يدوياً؟

نعم، وهذا مسار مشروع تماماً للمتاجر الصغيرة. الكمية حقل على صف المنتج، وتعدّله من لوحة إدارة موقعك، وزر الشراء يقفل لحاله عند الصفر. تقدر تبدأ يدوياً وتضيف الربط لما يكبر الكتالوج — نفس الحقل ونفس المنطق، بس مصدر الرقم يتغيّر.

كل قد إيش تتحدّث الأرقام؟

بالويبهوك: خلال ثوانٍ من الحركة عند نظامك. بالمهمة المجدولة: أسرع جدولة كل 15 دقيقة، ولها 200 تشغيلة باليوم كحد. الفرق يهم فعلاً إذا كنت تبيع بالمحل وبالموقع بنفس الوقت على أصناف قليلة العدد — عندها الويبهوك مو رفاهية.

هل مزامنة المخزون تستهلك محفظة الذكاء الاصطناعي؟

لا. محفظة الذكاء الاصطناعي مخصّصة لميزات الذكاء داخل موقعك — الشات بوت والردود والتلخيص — ولا علاقة لها بمزامنة الأرقام. ولا تستهلك رصيد البناء أثناء التشغيل: الرصيد يُصرف على بناء الميزة وتعديلها، مو على كل تشغيلة بعدها.

اقرأ أيضاً

ربط أي API خارجي بموقعكالمهام المجدولة داخل موقعكاستقبال الويبهوك من نظامكمتجر إلكتروني كامل بابنيحوّل موقعك الحالي لمتجر

وقّف بيع الناقص من اليوم

قل لابني: «زامن كميات المنتجات مع نظامي كل 15 دقيقة، واقفل زر الشراء لما توصل صفر» — وشوف أول صنف يقفل نفسه.

ابدأ مجاناً