שילוב חנות מקוונת עם Ozon Seller API

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

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
שילוב חנות מקוונת עם Ozon Seller API
מורכב
~5 ימים

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

שאלות נפוצות

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

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

שילוב חנות מקוונת עם Ozon Seller API

תארו לעצמכם שאתם מעדכנים ידנית 5000 מוצרים ב-Ozon דרך החשבון האישי. עובד אחד מבזבז על זה יום שלם, ולמחרת המלאים שוב מתפזרים. אי-התאמות מובילות לביטולי הזמנות וקנסות מהמרקטפלייס. לפי סטטיסטיקות, עד 15% מההזמנות מבוטלות בדיוק בגלל נתוני מלאי מיושנים. זהו מצב מוכר למוכרים רבים. אנחנו פותרים זאת דרך Ozon Seller API — ערוץ יחיד לסנכרון דו-כיווני שמבטל את הגורם האנושי. המהנדסים שלנו מוסמכים על ידי Ozon ובעלי ניסיון של למעלה מחמש שנים באינטגרציות מסחר אלקטרוני. בתקופה זו, יישמנו פרויקטים עם קטלוגים החל מ-5000 מוצרים, שבהם האוטומציה צמצמה עבודה ידנית ב-120 שעות בחודש, וחסכה ללקוח כ-$5.4k–7.8k בשנה. צרו קשר לבדיקת התשתית הנוכחית שלכם.

אילו משימות פותר השילוב עם Ozon?

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

  • סנכרון מוצרים: ייבוא וייצוא של נומנקלטורה עם מאפיינים (שם, מותג, תיאור, מאפיינים). ייבוא אסינכרוני דורש טיפול נכון ב-task_id.
  • סנכרון מחירים ומלאי: עדכונים בזמן אמת מה-CRM או ה-ERP שלכם. אנו מתחשבים במגבלות קצב ובאצווה (עד 500 SKU לבקשה למלאים).
  • ניהול הזמנות: קבלת הזמנות חדשות, עדכון סטטוסים (awaiting_packaging → awaiting_deliver → delivered). האינטגרציה תומכת ב-FBS ו-FBO.

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

למה סנכרון אוטומטי משתלם יותר מניהול ידני?

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

איך אנחנו מיישמים סנכרון?

אנו משתמשים בתבנית Repository כדי להפשט קריאות API ובתור משימות לפעולות אסינכרוניות. בשגיאות (timeout, 429 Too Many Requests), אנו מיישמים exponential backoff עם ניסיונות חוזרים. Laravel 11 עם Redis ו-Horizon מאפשר ניהול תורים ללא אובדן נתונים.

אימות

$headers = [
    'Client-Id' => config('services.ozon.client_id'),
    'Api-Key' => config('services.ozon.api_key'),
    'Content-Type' => 'application/json',
];
$base = 'https://api-seller.ozon.ru';

יצירת/עדכון מוצרים

class OzonProductService {
    public function upsertProduct(Product $product): void {
        $payload = [
            'items' => [[
                'attributes' => [
                    ['id' => 9048, 'complex_id' => 0, 'values' => [['value' => $product->name]]],
                    ['id' => 4191, 'complex_id' => 0, 'values' => [['value' => $product->brand]]],
                    ['id' => 85, 'complex_id' => 0, 'values' => [['value' => $product->description]]],
                ],
                'barcode' => $product->barcode ?? '',
                'description_category_id' => $this->getCategoryId($product),
                'name' => $product->name,
                'offer_id' => $product->sku,
                'price' => (string) $product->price,
                'images' => $product->images->pluck('url')->all(),
                'vat' => '0.2',
            ]]
        ];

        $resp = Http::withHeaders($this->headers)
            ->post("{$this->base}/v3/product/import", $payload);

        $taskId = $resp->json('result.task_id');
        // Статус создания асинхронный — проверяем по task_id
        $this->waitForTask($taskId);
    }

    private function waitForTask(string $taskId): void {
        for ($i = 0; $i < 30; $i++) {
            sleep(2);
            $status = Http::withHeaders($this->headers)
                ->post("{$this->base}/v1/product/import/info", ['task_id' => $taskId])
                ->json('result.items.0.status');

            if ($status === 'imported') return;
            if ($status === 'failed') throw new OzonImportException("Task {$taskId} failed");
        }

        throw new OzonImportException("Task {$taskId} timeout");
    }
}

עדכון מחירים ומלאים

public function updatePrices(array $items): void {
    // items: [['offer_id' => 'SKU-123', 'price' => '1990', 'old_price' => '2490']]
    Http::withHeaders($this->headers)
        ->post("{$this->base}/v1/product/import/prices", ['prices' => $items]);
}

public function updateStocks(array $items): void {
    // items: [['offer_id' => 'SKU-123', 'stock' => 15, 'warehouse_id' => 12345]]
    Http::withHeaders($this->headers)
        ->post("{$this->base}/v2/products/stocks", ['stocks' => $items]);
}

קבלת הזמנות

public function getNewOrders(): array
{
    $resp = Http::withHeaders($this->headers)
        ->post("{$this->base}/v3/posting/fbs/list", [
            'filter' => [
                'since' => now()->subHours(24)->toIso8601String(),
                'to' => now()->toIso8601String(),
                'status' => 'awaiting_packaging',
            ],
            'limit' => 50,
        ]);

    return $resp->json('result.postings');
}

אסינכרוניות של ה-API

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

מתי אינטגרציה היא הכרחית?

אם הקטלוג שלכם עולה על 1000 SKU או שאתם פועלים תחת FBS עם עדכוני מלאי תכופים, סנכרון ידני הופך לצוואר בקבוק. שגיאות מלאי מובילות לביטולים — כל הזמנה מבוטלת יכולה לעלות עד $4–6 בקנסות בתוספת אובדן נאמנות. האוטומציה מחזירה את ההשקעה בתוך החודשים הראשונים.

השוואה בין תוכניות Ozon FBS ו-FBO

פרמטר FBS (מכירה מהמחסן שלכם) FBO (מכירה ממחסן Ozon)
ניהול מלאי אתם מעדכנים מלאים ידנית או דרך API Ozon שולט במלאים אוטומטית
מהירות אספקה תלויה בלוגיסטיקה שלכם מהירה יותר, הפריטים כבר במחסן Ozon
סיכון לאי-התאמות גבוה עם תנועות תכופות מינימלי
קנסות ביטול כן כן, אבל פחות תכופים בזכות סנכרון
מתודות API $headers = [ 'Client-Id' => config('services.ozon.client_id'), 'Api-Key' => config('services.ozon.api_key'), 'Content-Type' => 'application/json', ]; $base = 'https://api-seller.ozon.ru'; , class OzonProductService { public function upsertProduct(Product $product): void { $payload = [ 'items' => [[ 'attributes' => [ ['id' => 9048, 'complex_id' => 0, 'values' => [['value' => $product->name]]], ['id' => 4191, 'complex_id' => 0, 'values' => [['value' => $product->brand]]], ['id' => 85, 'complex_id' => 0, 'values' => [['value' => $product->description]]], ], 'barcode' => $product->barcode ?? '', 'description_category_id' => $this->getCategoryId($product), 'name' => $product->name, 'offer_id' => $product->sku, 'price' => (string) $product->price, 'images' => $product->images->pluck('url')->all(), 'vat' => '0.2', ]] ]; $resp = Http::withHeaders($this->headers) ->post("{$this->base}/v3/product/import", $payload); $taskId = $resp->json('result.task_id'); // Статус создания асинхронный — проверяем по task_id $this->waitForTask($taskId); } private function waitForTask(string $taskId): void { for ($i = 0; $i < 30; $i++) { sleep(2); $status = Http::withHeaders($this->headers) ->post("{$this->base}/v1/product/import/info", ['task_id' => $taskId]) ->json('result.items.0.status'); if ($status === 'imported') return; if ($status === 'failed') throw new OzonImportException("Task {$taskId} failed"); } throw new OzonImportException("Task {$taskId} timeout"); } } בעיקר זהות, אבל ללא עדכוני מלאי

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

ההישגים שלנו

אנו עובדים עם אינטגרציות Ozon למעלה מ-5 שנים, יישמנו 30+ פרויקטים לקטלוגים מ-1000 עד 100,000 SKU. חיסכון ממוצע בזמן לאחר אוטומציה — 120 שעות בחודש, והפחתת ביטולי הזמנות — עד 90%. קבלו ייעוץ ממהנדס — נעריך את הקטלוג שלכם ונגיד לכם איך לבצע אוטומציה של Ozon תוך שבועיים.

תהליך האינטגרציה

  1. אנליטיקה: אנו חוקרים את הקטלוג שלכם, מתודות API, תהליכים נוכחיים.
  2. עיצוב: בחירת תבנית (סינכרוני/אסינכרוני), הגדרת מיפוי שדות.
  3. יישום: כתיבת קוד באמצעות פיתוח מונחה בדיקות לחלקים קריטיים.
  4. בדיקות: בדיקות עומס עם סימולציה של עומסי שיא (למשל, Black Friday).
  5. פריסה: פריסה על השרת שלכם (Docker, Nginx, PHP 8.3). הדרכת הצוות שלכם לעבודה עם האינטגרציה.

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

  • תיעוד אינטגרציה מלא (ארכיטקטורה, נקודות קצה, סכמת נתונים).
  • הקמת ניטור והתראות (שגיאות API, אי-התאמות נתונים).
  • הדרכת המנהל שלכם לעבודה עם לוגים וסטטוסים.
  • אחריות לפעולה יציבה במהלך 30 הימים הראשונים לאחר הפריסה (תמיכה חינם).

לוח זמנים

אינטגרציה בסיסית (מוצרים + מחירים + מלאים + הזמנות) — מ-12 עד 18 ימי עבודה. ניתן לקצר את לוח הזמנים אם מפתח API מוכן ומבנה הנתונים ברור. נעריך את הפרויקט שלכם — צרו קשר לייעוץ.

אילו שגיאות אופייניות מתרחשות במהלך אינטגרציה וכיצד להימנע מהן?

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

סטטוסי הזמנות FBS

סטטוס תיאור
public function updatePrices(array $items): void { // items: [['offer_id' => 'SKU-123', 'price' => '1990', 'old_price' => '2490']] Http::withHeaders($this->headers) ->post("{$this->base}/v1/product/import/prices", ['prices' => $items]); } public function updateStocks(array $items): void { // items: [['offer_id' => 'SKU-123', 'stock' => 15, 'warehouse_id' => 12345]] Http::withHeaders($this->headers) ->post("{$this->base}/v2/products/stocks", ['stocks' => $items]); } ממתין לאריזה
public function getNewOrders(): array { $resp = Http::withHeaders($this->headers) ->post("{$this->base}/v3/posting/fbs/list", [ 'filter' => [ 'since' => now()->subHours(24)->toIso8601String(), 'to' => now()->toIso8601String(), 'status' => 'awaiting_packaging', ], 'limit' => 50, ]); return $resp->json('result.postings'); } ממתין למסירה לשליח
/v3/posting/fbs/list במשלוח
/v2/products/stocks נמסר
awaiting_packaging בוטל

צרו קשר לבדיקת האינטגרציה הנוכחית שלכם.