Інтеграція 1С-Бітрікс із Competera (моніторинг цін)
Competera — платформа динамічного ціноутворення і моніторингу конкурентів. Ядро системи — алгоритми машинного навчання, які аналізують дані конкурентів, еластичність попиту і дають рекомендації щодо цін. Завдання інтеграції з 1С-Бітрікс: отримувати ці рекомендації і або застосовувати автоматично, або показувати категорійному менеджеру для ручного рішення.
API Competera
Competera надає REST API. Базовий URL: https://api.competera.io/v1/. Авторизація — API-ключ у заголовку X-Api-Key. Ключові ендпоінти:
-
GET /products— каталог товарів у Competera -
POST /products/upload— завантаження/оновлення каталогу -
GET /repricing/recommendations— рекомендації щодо цін -
POST /prices/upload— завантаження актуальних цін магазину -
GET /competitors/prices— ціни конкурентів по ваших товарах
Синхронізація каталогу 1С-Бітрікс → Competera
Competera потрібен каталог товарів з вашого боку: SKU, назва, EAN, поточна ціна, собівартість (опційно). Формат — CSV або JSON.
Агент вивантажує зміни раз на добу (або при зміні товару):
function SyncCatalogToCompetera(): string
{
$products = \CIBlockElement::GetList(
['ID' => 'ASC'],
['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
false,
['nPageSize' => 1000],
['ID', 'NAME', 'PROPERTY_ARTICLE', 'PROPERTY_BARCODE']
);
$rows = [['sku', 'name', 'ean', 'price', 'cost', 'category']];
while ($product = $products->GetNext()) {
$price = \CCatalogProduct::GetOptimalPrice($product['ID'])['PRICE']['PRICE'] ?? 0;
$cost = \CIBlockElement::GetProperty(CATALOG_IBLOCK_ID, $product['ID'], [], ['CODE' => 'COST_PRICE'])->Fetch()['VALUE'] ?? 0;
$rows[] = [
$product['PROPERTY_ARTICLE_VALUE'],
$product['NAME'],
$product['PROPERTY_BARCODE_VALUE'],
$price,
$cost,
$product['SECTION_NAME'],
];
}
$csv = implode("\n", array_map('str_getcsv', $rows));
$competera->post('/products/upload', ['file' => $csv, 'format' => 'csv']);
return __FUNCTION__ . '();';
}
Отримання рекомендацій і застосування цін
GET /repricing/recommendations повертає масив із рекомендованими цінами, причинами зміни та рівнем впевненості алгоритму:
{
"recommendations": [
{
"sku": "ART-12345",
"current_price": 4990.00,
"recommended_price": 4750.00,
"reason": "competitor_undercut",
"confidence": 0.87,
"competitor_min": 4720.00
}
]
}
Логіка застосування залежить від налаштувань:
foreach ($recommendations as $rec) {
$product = ProductRepository::findBySku($rec['sku']);
if (!$product) continue;
$autoApply = (bool)\Bitrix\Main\Config\Option::get('competera', 'auto_apply_' . $product['SECTION_ID'], false);
$minConfidence = (float)\Bitrix\Main\Config\Option::get('competera', 'min_confidence', 0.8);
if ($autoApply && $rec['confidence'] >= $minConfidence) {
// Застосовуємо автоматично
\CCatalogProduct::Update($product['ID'], ['PRICE' => $rec['recommended_price']]);
\CCatalogProduct::SetPrice($product['ID'], BASE_PRICE_TYPE_ID, $rec['recommended_price']);
PriceChangeLog::write($product['ID'], $rec['current_price'], $rec['recommended_price'], 'competera_auto');
} else {
// Ставимо в чергу на схвалення менеджеру
CompeteraPendingTable::add([
'PRODUCT_ID' => $product['ID'],
'CURRENT_PRICE' => $rec['current_price'],
'RECOMMENDED' => $rec['recommended_price'],
'CONFIDENCE' => $rec['confidence'],
'REASON' => $rec['reason'],
'STATUS' => 'pending',
]);
}
}
Інтерфейс схвалення рекомендацій
В адміністративній частині 1С-Бітрікс — сторінка «Рекомендації Competera» з таблицею:
| Товар | Артикул | Поточна ціна | Рек. ціна | Зміна | Конкуренти від | Впевненість | Дія |
|---|---|---|---|---|---|---|---|
| Фен Philips BHD... | ART-12345 | 4990 | 4750 | −4.8% | 4720 | 87% | [Застосувати] [Відхилити] |
При кліку «Застосувати» — виклик API зміни ціни в 1С-Бітрікс + оновлення статусу в bl_competera_pending. При «Відхилити» — статус rejected, рекомендація не застосовується.
Терміни
| Етап | Термін |
|---|---|
| API-клієнт Competera + автентифікація | 1 день |
| Синхронізація каталогу і цін | 2 дні |
| Отримання рекомендацій + логіка застосування | 2 дні |
| Інтерфейс схвалення менеджером | 2 дні |
| Логування і тестування | 1 день |
| Разом | 8–10 днів |







