پاسخ کوتاه: برای فروش همزمان در دیجیکالا، اسنپفود و بازارگاههای دیگر، یک انبار و یک دفتر سفارش لازم است، نه چند پنل جدا. هستهٔ بازارگاه ابرک همین را در اودو میسازد: موجودی آزاد انبار به همهٔ سکوها میرود، هر سفارش بازارگاه دقیقاً یک بار سفارش فروش اودو میشود و خطای همهٔ سکوها در یک لاگ دیده میشود.
یک فروشگاه لوازم آشپزخانه را در نظر بگیرید که ۴۰۰ کالا در دیجیکالا دارد و بخشی از همان کالاها را در اسنپمارکت هم میفروشد. صبح شنبه سه عدد از یک قابلمهٔ پرفروش در انبار مانده است. تا ظهر دو سفارش از دیجیکالا و دو سفارش از اسنپمارکت میرسد. یکی از این چهار سفارش لغو میشود و فروشنده جریمه میخورد، چون هیچکدام از دو پنل از فروش دیگری خبر نداشت.
این مسئلهٔ اصلی فروش چندبازارگاهی است. هر سکو موجودی را مال خودش میداند، ولی کالا فقط در یک انبار است.
چرا موجودی بازارگاهها با انبار نمیخواند؟
سه دلیل رایج داریم. اول، موجودی را با دست و چند بار در روز بهروز میکنید و میان دو بهروزرسانی، فروش ادامه دارد. دوم، عددی که به پنل میدهید موجودی دفتری است، در حالی که بخشی از آن برای سفارشهای دیگر رزرو شده است. سوم، کالایی که در یک سکو فروخته شده، دیرتر از سکوی دیگر کم میشود.
راه درست این است که فقط «موجودی آزاد» به بازارگاه برود، یعنی موجودی منهای رزروها، و چند عدد هم بهعنوان حاشیهٔ اطمینان کم شود. هستهٔ بازارگاه ابرک دقیقاً این کار را میکند. در فرم هر اتصال یک انبار انتخاب میکنید و فیلد «موجودی احتیاطی» تعیین میکند چند عدد از موجودی آزاد کم شود تا بیشفروشی پیش نیاید.
هستهٔ بازارگاه ابرک چه فرقی با یک کانکتور معمولی دارد؟
بیشتر افزونههای اتصال بازارگاه برای هر سکو از صفر نوشته میشوند. هر کدام مدل کالای خودش، جدول سفارش خودش و لاگ خودش را دارد. وقتی دو سکو دارید، دو نسخه از یک منطق دارید و خطای یکی در دیگری هم تکرار میشود.
ابرک راه دیگری رفته است. افزونهٔ abrak_marketplace_core منطق مشترک را یک بار مینویسد و کانکتور هر سکو فقط زبان API همان سکو را ترجمه میکند. امروز دو کانکتور روی این هسته کار میکنند: اتصال دیجیکالا و اتصال اسنپفود. هر کانکتور تازهای هم که بیاید، همان نگاشت، همان تبدیل پول و همان لاگ را به ارث میبرد.
قاعدهٔ اصلی هسته این است که محصول، انبار، لیست قیمت و سفارش فروش خود اودو مرجع بمانند. هیچ کاتالوگ موازی یا جدول سفارش جدایی ساخته نمیشود. سفارش دیجیکالا همان سفارش فروشی است که حسابدار، انباردار و گزارش فروش شما میشناسند.
ریال یا تومان: تبدیل قیمت کجا خراب میشود؟
بازارگاههای ایرانی معمولاً قیمت را به ریال میخواهند. بسیاری از فروشگاهها در اودو قیمت را تومانی نگه میدارند، چون مشتری حضوری با تومان حرف میزند. اگر کسی یک بار فراموش کند صفر آخر را بگذارد، کالای ۲ میلیون تومانی با قیمت ۲۰۰ هزار تومان در بازارگاه مینشیند.
در هستهٔ بازارگاه، فیلد «واحد قیمت در ابرک» دو گزینهٔ ریال و تومان دارد. اگر تومان را برگزینید، هسته پیش از ارسال قیمت آن را ده برابر میکند و مبلغ سفارش دریافتی را دوباره به تومان برمیگرداند. این تبدیل در یک نقطه از کد نوشته شده و همهٔ کانکتورها از همان استفاده میکنند. کانکتور دیجیکالا لایهٔ دومی هم دارد: «کف قیمت» برای هر تنوع، که قیمت پایینتر از آن را اصلاً ارسال نمیکند.
سفارش تکراری چطور پیش میآید و چطور جلویش گرفته میشود؟
کانکتور دیجیکالا سفارشها را از دو راه میگیرد: زمانبندی که هر ده دقیقه سر میزند و وبهوکی که با هر سفارش تازه بیدار میشود. اگر هر دو در یک لحظه به یک سفارش برسند، کانکتوری که مراقب نباشد آن را دو بار ثبت میکند. نتیجه دو برابر شدن کسر موجودی و دو فاکتور برای یک خرید است.
هستهٔ بازارگاه روی هر سفارش فروش سه فیلد مینویسد: «بازارگاه»، «اتصال بازارگاه» و شمارهٔ سفارش در بازارگاه. یک قید یکتایی در پایگاه داده نمیگذارد دو سفارش فروش با این سه مقدار یکسان ساخته شود. این مراقبت در لایهٔ پایگاه داده است، نه فقط در کد، پس حتی دو فرایند همزمان هم نمیتوانند از آن رد شوند.
در منوی فروش، فیلتر «سفارشهای بازارگاه» این سفارشها را از سفارشهای حضوری و فروشگاه اینترنتی جدا میکند. کلید «تأیید خودکار سفارش» هم انتخاب میکند که سفارش دریافتی همان لحظه تأیید و موجودیاش رزرو شود یا منتظر بماند تا کسی آن را ببیند.
نگاشت کالا: چطور ۴۰۰ کالا را بی کار دستی جفت کنیم؟
هر کالای بازارگاه سه شناسه دارد: «شناسه در بازارگاه»، «کد کالای فروشنده» و «عنوان در بازارگاه». هسته کالای بازارگاه را اول با کد داخلی محصول اودو و اگر نشد با بارکد جفت میکند. پس کار اصلی پیش از راهاندازی این است که در پنل بازارگاه، کد فروشندهٔ هر کالا را برابر کد داخلی همان محصول در اودو بگذارید.
اگر این کار را کرده باشید، بیشتر کالاها خودکار جفت میشوند و فقط چند مورد با نام «نگاشتنشده» باقی میماند که با دست به محصول وصل میکنید. در کانکتور دیجیکالا یک شمارنده روی فرم اتصال تعداد همینها را نشان میدهد.
وقتی چیزی خراب شد، کجا را نگاه کنیم؟
مدل «لاگ همگامسازی بازارگاه» برای همهٔ سکوها یکی است. هر ردیف میگوید کدام بازارگاه، کدام اتصال، چه عملیاتی، در چه جهتی، با چه نتیجهای، با چه کد پاسخی و در چند میلیثانیه. این گزارش در «فروش»، «پیکربندی»، «لاگ بازارگاهها» برای گروه «مدیر بازارگاه» باز است و فیلتر «خطاها» دارد.
دو نکتهٔ امنیتی هم در لاگ رعایت شده است. کلید API، توکن و کوکی پیش از ذخیره پوشانده میشوند و هرگز در لاگ نمیمانند. لاگهای کهنهتر از ۳۰ روز هم خودکار پاک میشوند تا جدول بیدلیل بزرگ نشود.
کلاینت پایهٔ هسته فقط به نشانی https و میزبان ثابت هر سکو درخواست میفرستد و ریدایرکت را دنبال نمیکند. فاصلهٔ کمینه میان درخواستها را رعایت میکند تا حساب فروشنده به سقف نرخ نخورد. اگر یکی از اتصالها در زمانبند خطا بدهد، بقیه کارشان را ادامه میدهند و یک فروشگاه گرفتار، فروشگاه دیگر را نمیخواباند.
دسترسی کاربران چطور تقسیم میشود؟
هسته دو گروه دارد: «کاربر بازارگاه» و «مدیر بازارگاه». کارهای دوربرد مثل آزمون اتصال، ارسال موجودی یا دریافت سفارش فقط برای مدیر همان شرکت باز است. در فضای کاری چندشرکتی، قاعدهٔ دسترسی لاگ هر شرکت را از شرکت دیگر جدا نگه میدارد. هر کانکتور هم گروه کاربر و مدیر خودش را دارد که گروه مدیر بازارگاه را در بر میگیرد.
فروش چندبازارگاهی با ابرک چقدر هزینه دارد؟
هستهٔ بازارگاه جدا فروخته نمیشود و با نصب هر کانکتور خودکار نصب میشود. هر کانکتور بازارگاه ۲۵۰٬۰۰۰ تومان (۲٬۵۰۰٬۰۰۰ ریال) به ازای هر کاربر در ماه است و پلن سازمانی ۲٬۵۰۰٬۰۰۰ تومان (۲۵٬۰۰۰٬۰۰۰ ریال) به ازای هر کاربر. برای مقایسهٔ پلنها صفحهٔ قیمت را ببینید.
اگر میخواهید همین حالا شروع کنید، آموزش راهاندازی هستهٔ بازارگاه در ابرک گامها را با نام دقیق منوها میگوید. صفحهٔ هستهٔ بازارگاه و صفحههای اتصال دیجیکالا و اتصال اسنپفود جزئیات هر کانکتور را دارند.
پرسشهای پرتکرار
آیا برای کالاهای بازارگاه کاتالوگ جدا ساخته میشود؟
خیر. محصول اودو مرجع میماند و هسته فقط یک نگاشت سبک میان کالای بازارگاه و محصول نگه میدارد.
اگر دو فروشگاه در دیجیکالا داشته باشم چه؟
برای هر فروشگاه یک اتصال جدا با انبار و لیست قیمت خودش میسازید. لاگ مشترک هر دو را با نام اتصال از هم جدا نشان میدهد.
ارسال قیمت بهطور پیشفرض روشن است؟
خیر. «ارسال خودکار قیمت» بهطور پیشفرض خاموش است و «ارسال خودکار موجودی» روشن.
لاگها تا کی میمانند؟
سی روز. پس از آن هسته خودکار پاکشان میکند.