הטמעת צבירת מוצרים מספקים מרובים באתר שלך

כאשר מוצרים מגיעים מספקים מרובים, הקטלוג הופך לכאוס: כפילויות, מחירים ומלאים שונים, ואיבוד מכירות. אנחנו מיישמים איגוד מוצרים, ממזגים קטלוגים לחלון ראווה אחד עם בחירה אוטומטית של ההצעה הטובה ביותר. הצוות שלנו מטפל בכל המחזור—מביקורת ועד הטמעה ותמיכה—כך שהלקוחות רואים מחירים ומלאי עדכניים, והעסק פועל בצורה אמינה ללא הפרעות.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הטמעת צבירת מוצרים מספקים מרובים באתר שלך
מורכב
~2-4 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

אנו מיישמים מערכת לאיגום מוצרים ממספר ספקים: כרטיס מוצר אחד עם בחירת ההצעה הטובה ביותר. ללא כפילויות, עם מחירים ומלאי עדכניים. דמיינו: יש לכם 10 ספקים, לכל אחד קטלוג משלו. המוצרים חופפים ב-70%, אך מק"טים שונים. המחירים משתנים מדי יום. הלקוח רואה כרטיס אחד, ומאחוריו — מבחר של 5 הצעות עם מחירים וזמני אספקה שונים. נספר לכם כיצד לבנות זאת ללא כפילויות ושגיאות. אנו מסתמכים על 10 שנות ניסיון בשילוב פתרונות מסחר אלקטרוני. אנו מבטיחים פעילות יציבה עם 100,000+ מוצרים. חיסכון ממוצע לאחר היישום — מ-200,000 רובל בשנה.

ההבדל בין ייבוא לאיגום

ייבוא הוא שמירת נתונים 'כמו שהם'. איגום הוא בניית חנות מעל נתונים גולמיים ממספר ספקים. עם ייבוא, אתם מסתכנים בכפילויות ומחירים מיושנים. איגום נותן כרטיס אחד עם בחירה אוטומטית של ההצעה הטובה ביותר.

קריטריון ייבוא איגום
נתונים כמו שהם מכל ספק כרטיס מנורמל אחד
מחיר רשומות מרובות למוצר כרטיס אחד עם בחירה
עדכון החלפה/הוספה חישוב מחדש אוטומטי של ההצעה הטובה ביותר

כיצד לזהות מוצרים זהים מספקים שונים?

זיהוי הוא משימת המפתח של האיגום. אנו משתמשים במספר רמות של התאמה: התאמה מדויקת לפי מק"ט (supplier_sku), התאמה לפי ברקוד, ובמידת הצורך, השוואת שמות מטושטשת באמצעות מרחק לוונשטיין. בכרטיס הראשי (products), מאוחסן master_sku, אליו מקושרות כל ההצעות (product_offers) מספקים שונים. דיוק ההתאמה מגיע ל-99% כאשר קיימים מק"טים.

כיצד להגדיר איגום? תוכנית שלב-אחר-שלב

  1. ניתוח נתוני ספקים — איסוף פורמטים, זיהוי חפיפות ומאפיינים ייחודיים.
  2. עיצוב סכמה — יצירת טבלאות 'products' ו-'product_offers', הגדרת אינדקסים.
  3. יישום התאמה — כתיבת אלגוריתמי התאמה עם תמיכה בחיפוש מטושטש.
  4. פיתוח BestOfferResolver — הגדרת ניקוד בהתחשב במחיר, מלאי וזמן אספקה.
  5. שילוב החנות — הכנת API עם שדות מאוגדים.

סכמת נתונים לאיגום

-- Мастер-карточка (агрегированная)
CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    master_sku VARCHAR(255) UNIQUE NOT NULL,
    name TEXT NOT NULL, -- из "главного" поставщика
    description TEXT,
    attributes JSONB DEFAULT '{}',
    category_id INT REFERENCES categories(id),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

-- Предложения поставщиков к мастер-карточке
CREATE TABLE product_offers (
    id BIGSERIAL PRIMARY KEY,
    product_id BIGINT NOT NULL REFERENCES products(id),
    supplier_id INT NOT NULL REFERENCES suppliers(id),
    supplier_sku VARCHAR(255) NOT NULL,
    price NUMERIC(12,2) NOT NULL,
    stock INT NOT NULL DEFAULT 0,
    lead_time_days SMALLINT, -- срок поставки
    is_primary BOOLEAN DEFAULT FALSE, -- источник контента для карточки
    last_synced_at TIMESTAMP,
    UNIQUE(supplier_id, supplier_sku)
);

-- Индексы для быстрого поиска лучшего предложения
CREATE INDEX idx_offers_product_price ON product_offers(product_id, price) WHERE stock > 0;

כיצד לבחור את ההצעה הטובה ביותר בחנות?

ההצעה הטובה ביותר נקבעת על ידי כללים הניתנים להגדרה. האפשרות הטיפוסית היא המחיר המינימלי בקרב ספקים עם מלאי. אנו גם משתמשים בניקוד עם מקדמי משקל (מחיר, מלאי, זמן אספקה), המאפשר התחשבות מדויקת יותר בסדרי עדיפויות עסקיים. שיטת הניקוד שלנו מדויקת פי 2 מבחירת מחיר מינימלי פשוטה.

class BestOfferResolver {
    public function resolve(int $productId): ?ProductOffer {
        return ProductOffer::where('product_id', $productId)
            ->where('stock', '>', 0)
            ->orderByRaw(' price * (1 + COALESCE( (SELECT markup FROM suppliers WHERE id = supplier_id), 0 ) / 100) ')
            ->orderBy('lead_time_days')
            ->first();
    }
}

חנות מאוגדת ב-API

תגובת ה-API לכרטיס מוצר צריכה לכלול נתונים מאוגדים: מחיר מינימלי ומקסימלי, מלאי כולל, וכן רשימת הצעות לבחירת הקונה.

class ProductResource extends JsonResource
{
    public function toArray($request): array
    {
        $bestOffer = $this->bestOffer;
        return [
            'id' => $this->id,
            'name' => $this->name,
            'description' => $this->description,
            'attributes' => $this->attributes,
            // Агрегированные цены
            'price' => $bestOffer?->price,
            'price_min' => $this->offers->where('stock', '>', 0)->min('price'),
            'price_max' => $this->offers->where('stock', '>', 0)->max('price'),
            'in_stock' => $this->offers->where('stock', '>', 0)->count() > 0,
            'total_stock' => $this->offers->sum('stock'),
            // Список предложений (если магазин показывает их явно)
            'offers' => OfferResource::collection(
                $this->offers->where('stock', '>', 0)->sortBy('price')
            ),
        ];
    }
}

עדכון איגום כאשר הצעות משתנות

ערכים מאוגדים חייבים להתעדכן בכל שינוי בהצעת ספק. אנו משתמשים ב-Observer שמבטל מטמון ומחשב מחדש שדות דה-נורמליזציה.

class ProductOfferObserver {
    public function saved(ProductOffer $offer): void {
        // Пересчёт агрегатов в кэше
        Cache::forget("product.{$offer->product_id}.best_offer");
        Cache::forget("product.{$offer->product_id}.price_range");

        // Обновление денормализованных полей в products
        $this->recalculate($offer->product_id);
    }

    private function recalculate(int $productId): void {
        $agg = ProductOffer::where('product_id', $productId)
            ->where('stock', '>', 0)
            ->selectRaw('MIN(price) as min_price, MAX(price) as max_price, SUM(stock) as total_stock')
            ->first();

        Product::where('id', $productId)->update([
            'price_min' => $agg->min_price,
            'price_max' => $agg->max_price,
            'total_stock' => $agg->total_stock,
            'updated_at' => now(),
        ]);
    }
}

הצגת מספר הצעות בכרטיס המוצר

אם ההיגיון העסקי מאפשר לקונה לבחור ספק (כמו ב-Yandex.Market), אנו משתמשים ברכיב React לרשימת ההצעות.

// React-компонент списка предложений
const OfferList: React.FC<{ offers: Offer[] }> = ({ offers }) => {
  const sorted = [...offers].sort((a, b) => a.price - b.price);
  return (
    <div className="space-y-2">
      {sorted.map(offer => (
        <div key={offer.id} className="flex items-center justify-between border rounded p-3">
          <div>
            <span className="font-semibold">{formatPrice(offer.price)}</span>
            <span className="text-sm text-gray-500 ml-2">
              {offer.supplier.name}
            </span>
          </div>
          <div className="text-sm text-gray-500">
            {offer.stock > 0 ? `в наличии ${offer.stock} шт.` : 'нет в наличии'}
            {offer.lead_time_days && ` · доставка ${offer.lead_time_days} дн.`}
          </div>
          <button onClick={() => addToCart(offer)} disabled={offer.stock === 0} className="btn-primary">
            Купить
          </button>
        </div>
      ))}
    </div>
  );
};
טעויות אופייניות באיגום
  • חוסר נורמליזציה — שמירת נתוני ספק גולמיים ללא כרטיס ראשי מובילה לכפילויות ובלבול.
  • התעלמות ממשקלים — בחירת מחיר מינימלי בלבד ללא התחשבות במלאי וזמן אספקה מפחיתה המרות.
  • סנכרון ללא Observer — עדכון ידני של ערכים מאוגדים מוביל לנתונים מיושנים.

השוואת גישות: איגום ידני לעומת אוטומטי

פרמטר איגום ידני איגום אוטומטי (הפתרון שלנו)
זמן עדכון שעות/ימים זמן אמת או מושהה (15 דקות)
דיוק התאמה 80-90% 99% כאשר קיימים מק"טים
עלות תחזוקה גבוהה (משאבי אנוש) נמוכה (משאבי שרת)

יעילות כלכלית

איגום אוטומטי מפחית עלויות תחזוקת קטלוג בעד 40%. חיסכון טיפוסי לקטלוג של 50,000 מוצרים הוא מ-200,000 רובל בשנה. בהרחבה ל-200,000 מוצרים, החיסכון עולה על 500,000 רובל.

מה כלול בעבודה

אנו לוקחים על עצמנו יישום סוהר: מתכנון ארכיטקטורה ועד פריסה. במסגרת הפרויקט תקבלו:

  • סכמת מסד נתונים מנורמלת (כרטיסים ראשיים + הצעות);
  • משאבי API לחנות עם מטמון;
  • רכיבי פרונטאנד לבחירת ספק;
  • הגדרת אינדוקס Elasticsearch (במידת הצורך);
  • תיעוד תחזוקה והדרכת צוות.

לוח זמנים ליישום

לוחות זמנים משוערים לשלבים:

  • סכמה + לוגיקת מיזוג + BestOfferResolver: יומיים
  • Observer + דה-נורמליזציה של ערכים מאוגדים: יום אחד
  • משאב API עם הצעות + רכיב פרונטאנד: 1–2 ימים
  • שילוב Elasticsearch: +יומיים
  • הגדרת מקדמי משקל דרך פאנל ניהול: +יום אחד

איגום בסיסי ללא חיפוש: 4–5 ימי עבודה. צרו קשר לייעוץ — נכין ארכיטקטורה ולוחות זמנים מדויקים לפרויקט שלכם. בקשו הערכת עלות כדי לגלות כיצד איגום יכול להפחית עלויות תחזוקת קטלוג. בדקו את הקטלוג שלכם: אם אתם מבזבזים יותר מ-10 שעות בשבוע על עדכוני מחירים ידניים, הפתרון שלנו מחזיר את עצמו תוך 2-3 חודשים. קבלו ייעוץ מהנדס — נחשב את החיסכון עבור הפרויקט שלכם.