קטלוג של 50,000 מוצרים. לכל אחד 20 מאפיינים, 5 שפות, מאות תמונות. מילוי מוצר אחד אורך 15 דקות. זה 1,250 שעות אדם עבור כל המגוון. עורכים מבזבזים ימים, שגיאות נתונים מצטברות. החזרות מתרבות. ללא מערכת PIM — כאוס. עם אינטגרציה של Akeneo ו-1C-Bitrix, אנחנו מביאים סדר: העשרה אוטומטית, מקור נתונים ראשי יחיד, סנכרון.
לקוח אחד עם 80,000 פריטי SKU קיצץ את זמן הכנת התוכן פי שלושה. חיסכון שנתי של כ-$18k–26k. אבל זה לא הגבול. עם אינטגרציה מתוכננת היטב של Akeneo-1C-Bitrix, ניתן להשיג יעילות גדולה עוד יותר. חיסכון בעבודה ידנית יכול להגיע ל-$14k–20k בשנה עבור קטלוג של 30,000 מוצרים.
בעיות אופייניות של קטלוג ללא PIM
אין מקור אמת יחיד. מוצרים מפוזרים בין Excel, Google Sheets, 1C. כרטיסים כפולים, מאפיינים מתפצלים. מנהלים עובדים עם גרסאות שונות. קונפליקטים הם בלתי נמנעים.
לוקליזציה היא כאב ראש. תרגום ידני של שמות, תיאורים, טקסטים ל-SEO עבור 10+ שפות הוא סיוט. כל שפה דורשת עריכות נפרדות. שגיאות תרגום מתרבות.
נכסי מדיה. מאות תמונות מקושרות ידנית, קישורים שבורים, בלבול עם טקסטי alt. אין סנכרון CDN.
כיצד Akeneo פותר את הבעיות הללו
התכנית האופיינית: 1C (מינוח, מחירים, מלאי) → Akeneo (תיאורים, מאפיינים, מדיה, תרגומים) → Bitrix (קטלוג, סל, הזמנות). Akeneo הוא המאסטר של תוכן המוצר. 1C הוא המקור ל-SKU ומחירים. Bitrix הוא ערוץ המכירות. כיוון סנכרון: Akeneo → Bitrix. זרימה הפוכה (הזמנות, סטטיסטיקות) מוקמת לעיתים רחוקות — רק לאנליטיקה.
אילו נתונים אנו מסנכרנים?
הסט גמיש. תצורה בסיסית: שם, תיאור מלא וקצר, מאפיינים (מותג, משקל, צבע, חומר, ארץ מקור), תמונות, מחירים, מלאי. עבור קטלוגים רב-לשוניים — גרסאות מתורגמות (ru_RU → ru, en_US → en, de_DE → de). מיפוי מאפיינים נשמר בקובץ תצורה או בלוק HL.
| מאפיין Akeneo | מאפיין Bitrix |
|---|---|
| description | DETAIL_TEXT |
| short_description | PREVIEW_TEXT |
| brand | BRAND |
| weight | WEIGHT |
| color | COLOR |
| material | MATERIAL |
| care_instructions | CARE |
| country_of_origin | COUNTRY_ORIGIN |
השוואה: Akeneo מול הרחבת אינפובלוקים
אינפובלוקים של Bitrix הם מנוע מכירות, אך לא לניהול תוכן גדול. Akeneo לוקח על עצמו העשרה, לוקליזציה ואימות. תוצאה: עדכוני קטלוג מהירים פי 3.
| קריטריון | ללא Akeneo | עם Akeneo |
|---|---|---|
| מהירות העשרה | ידני, עד יומיים לכל 1,000 מוצרים | אוטומטי, שעות |
| מקור יחיד | אינפובלוק עם כפילויות | PIM — נתוני מאסטר |
| לוקליזציה | קשה, עד 2 שפות | עד 10+ שפות מובנות |
כיצד אנו כותבים קוד סנכרון
Akeneo מספק REST API עם OAuth 2.0. אנו משתמשים ב-Bitrix\Main\Web\HttpClient. מגבלות בקשות (100/שעה) נעקפות עם תור של משימות דחויות. לפי Akeneo REST API Reference, המגבלה היא 100 בקשות לשעה. דוגמת לקוח:
class AkeneoClient { private string $baseUrl; private string $token; public function __construct( string $baseUrl, string $clientId, string $secret, string $username, string $password ) { $this->baseUrl = rtrim($baseUrl, '/'); $this->token = $this->authenticate($clientId, $secret, $username, $password); } private function authenticate( string $clientId, string $secret, string $username, string $password ): string { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Basic ' . base64_encode($clientId . ':' . $secret)); $http->setHeader('Content-Type', 'application/json'); $response = $http->post( $this->baseUrl . '/api/oauth/v1/token', json_encode([ 'grant_type' => 'password', 'username' => $username, 'password' => $password, ]) ); $data = json_decode($response, true); return $data['access_token'] ?? throw new \RuntimeException('Akeneo auth failed'); } public function getProducts(int $page = 1, int $limit = 100): array { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $this->token); $response = $http->get( $this->baseUrl . '/api/rest/v1/products' . '?page=' . $page . '&limit=' . $limit . '&with_attribute_options=true' ); return json_decode($response, true)['_embedded']['items'] ?? []; } public function getMediaFile(string $code): string { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $this->token); return $http->get($this->baseUrl . '/api/rest/v1/media-files/' . $code . '/download'); } } דוגמת תצורת מיפוי
מיפוי נשמר בקובץ PHP:
<?php return [ 'description' => 'DETAIL_TEXT', 'short_description' => 'PREVIEW_TEXT', 'brand' => 'BRAND', 'weight' => 'WEIGHT', 'color' => 'COLOR', 'material' => 'MATERIAL', 'care_instructions' => 'CARE', 'country_of_origin' => 'COUNTRY_ORIGIN', ]; אינטגרציה שלב אחר שלב: מבדיקה ועד פריסה
- בדיקת הקטלוג הנוכחי: רשימת מוצרים, מאפיינים, סעיפים. המלצות מיפוי.
- הגדרת Akeneo REST API: יצירת לקוח, קבלת טוקן, בדיקת בקשה.
- פיתוח מודול סנכרון: סוכן, מיפוי, לוגיקת עדכון (כולל מדיה).
- הטמעת מצב אינקרמנטלי: רישום זמן סנכרון אחרון.
- בדיקה על מדגם מוצרים: בדיקת תקינות נתונים, שגיאות, ביצועים.
- תיעוד והדרכה: תיאור סוכן, פקודות הפעלה ידניות, הוראות מנהל.
מצב אינקרמנטלי: הגישה היעילה
עבור 50,000+ פריטי SKU, סנכרון מלא בכל פעם הוא רוצח ביצועים. מצב אינקרמנטלי מושך רק שינויים מאז הסנכרון האחרון. זה מפחית עומס על Akeneo ו-Bitrix. הסוכן רץ לפי לוח זמנים:
function syncAkeneoProductsAgent(): string { $lastSync = \Bitrix\Main\Config\Option::get('akeneo_sync', 'last_sync', ''); $client = new AkeneoClient( AKENEO_URL, AKENEO_CLIENT_ID, AKENEO_SECRET, AKENEO_USER, AKENEO_PASSWORD ); $mapping = include '/local/config/akeneo-mapping.php'; $syncTime = date('c'); $page = 1; do { $products = $client->getProducts($page, 100); foreach ($products as $akeneoProduct) { syncSingleProduct($akeneoProduct, $mapping, $client); } $page++; } while (count($products) === 100); \Bitrix\Main\Config\Option::set('akeneo_sync', 'last_sync', $syncTime); return __FUNCTION__ . '();'; } function syncSingleProduct(array $product, array $mapping, AkeneoClient $client): void { $sku = $product['identifier']; $enabled = $product['enabled']; $existing = CIBlockElement::GetList( [], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'PROPERTY_CML2_ARTICLE' => $sku] )->Fetch(); $el = new CIBlockElement(); $fields = [ 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => $enabled ? 'Y' : 'N', 'NAME' => getAkeneoValue($product['values']['name'] ?? [], 'ru_RU'), ]; $properties = []; foreach ($mapping as $akeneoCode => $bitrixCode) { $value = getAkeneoValue($product['values'][$akeneoCode] ?? [], 'ru_RU'); if ($value !== null) { if (in_array($bitrixCode, ['DETAIL_TEXT', 'PREVIEW_TEXT', 'NAME'])) { $fields[$bitrixCode] = $value; } else { $properties[$bitrixCode] = $value; } } } if ($existing) { $el->Update($existing['ID'], $fields); CIBlockElement::SetPropertyValuesEx($existing['ID'], CATALOG_IBLOCK_ID, $properties); } else { $fields['IBLOCK_SECTION_ID'] = resolveCategoryId($product['categories'][0] ?? null); $newId = $el->Add($fields); if ($newId) { CIBlockElement::SetPropertyValuesEx($newId, CATALOG_IBLOCK_ID, $properties); } } } function getAkeneoValue(array $values, string $locale): mixed { foreach ($values as $entry) { if (($entry['locale'] === $locale || $entry['locale'] === null) && $entry['scope'] === null) { return $entry['data']; } } return null; } תמונות מורדות ונשמרות כ-MORE_PHOTO דרך CFile::MakeFileArray. אנו משתמשים במטמון מתויג — לא מורידים מחדש קבצים שכבר הורדו.
כיצד להימנע מכפילויות נתונים?
כפילויות יכולות להתרחש אם הסוכן רץ שוב בזמן שמוצר סונכרן חלקית. כדי להימנע מכך, אנו בודקים לפי מזהה ייחודי (CML2_ARTICLE) וחוסמים סנכרון חוזר של אותו מוצר בתוך ריצה אחת. אנו גם מתעדים את כל הפעולות ומסירים כפילויות לפי מזהה Akeneo.
מה לעשות בשגיאות סנכרון?
כל השגיאות מתועדות ביומן האירועים של Bitrix. אנו מגדירים ניטור והתראות למנהל. במידת הצורך, סנכרון חוזר למוצרים ספציפיים זמין מלוח הניהול. הלקוח יכול תמיד לבדוק את סטטוס הסנכרון האחרון.
סנכרון קטגוריות: אלגוריתם רקורסיבי
היררכיית הקטגוריות של Akeneo מסונכרנת לסעיפי אינפובלוק. אנו יוצרים סעיפים רקורסיבית דרך CIBlockSection::Add. התאמת akeneo_code ↔ IBLOCK_SECTION_ID נשמרת בלוק HL. אנו מתחשבים בלוגיקת ACTIVE ו-SORT.
ציר זמן ועלות
| היקף | היקף עבודה | זמן |
|---|---|---|
| 1,000–5,000 פריטי SKU, מאפיינים בסיסיים | לקוח + מיפוי + סוכן | 1–2 שבועות |
| 10,000–50,000 פריטי SKU + מדיה + i18n | סנכרון אינקרמנטלי + תור | 3–4 שבועות |
| סנכרון דו-כיווני + מודלי מוצר | החלפה מלאה + Webhook | 5–7 שבועות |
העלות מחושבת באופן אישי לאחר בדיקה. צרו קשר — נעריך את הפרויקט תוך שני ימי עסקים.
מה כלול
| שלב | תוצאה |
|---|---|
| בדיקת הקטלוג הנוכחי | רשימת מוצרים, מאפיינים, סעיפים. המלצות מיפוי |
| הגדרת Akeneo REST API | יצירת לקוח, קבלת טוקן, בדיקת בקשה |
| פיתוח מודול סנכרון | סוכן, מיפוי, לוגיקת עדכון (כולל מדיה) |
| בדיקה על מדגם מוצרים | תקינות נתונים, בדיקת שגיאות, ביצועים |
| תיעוד והדרכה | תיאור סוכן, פקודות הפעלה ידניות, הוראות מנהל |
למה לבחור בנו
אנחנו צוות עם 10+ שנות ניסיון בפיתוח 1C-Bitrix ו-Bitrix24. מומחים מוסמכים. השלמנו מעל 50 פרויקטי אינטגרציית PIM. אנו מבטיחים פעולת סנכרון יציבה ותמיכה מהירה. הזמינו אינטגרציה סוהר — קבלו פתרון אמין לקטלוג שלכם. צרו קשר לבדיקת המגוון שלכם.
בניגוד לאינטגרציית CommerceML הסטנדרטית, המוגבלת למינוח ומחירים, אינטגרציית Akeneo דרך REST API מאפשרת העברת מאפיינים עשירים, מדיה ותרגומים.







