Простая и эффективная категория для управления штрихкодами — создание новых и привязка существующих штрихкодов к товарам в системе OZON.
Генерация новых уникальных штрихкодов для товаров без них
Связывание существующих штрихкодов с товарами в системе
Обработка до 100 товаров за один запрос
Контроль уникальности и корректности штрихкодов
Метод | Endpoint | Версия | Назначение |
---|---|---|---|
addBarcodes |
/v1/barcode/add |
v1 | Привязка существующих штрихкодов к товарам |
generateBarcodes |
/v1/barcode/generate |
v1 | Создание новых штрихкодов для товаров |
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
const client = new OzonSellerAPI({
clientId: 'your-client-id',
apiKey: 'your-api-key'
});
try {
// Создание штрихкодов для товаров без них
const generateResult = await client.barcode.generateBarcodes({
product_ids: ['123456789', '987654321', '555666777']
});
console.log('📊 Результаты создания штрихкодов:');
// Успешно созданные штрихкоды
generateResult.results?.forEach(result => {
console.log(`✅ Товар ${result.product_id}:`);
result.barcodes?.forEach((barcode, index) => {
console.log(` Штрихкод ${index + 1}: ${barcode}`);
});
});
// Обработка ошибок
if (generateResult.errors && generateResult.errors.length > 0) {
console.log('❌ Ошибки при создании штрихкодов:');
generateResult.errors.forEach(error => {
console.log(` Товар ${error.product_id}: ${error.error} (${error.code})`);
});
}
} catch (error) {
console.error('❌ Ошибка создания штрихкодов:', error);
}
try {
// Привязка готовых штрихкодов к товарам
const addResult = await client.barcode.addBarcodes({
barcodes: [
{
sku: '123456789',
barcode: '4600051000057' // EAN-13 штрихкод
},
{
sku: '987654321',
barcode: '123456789012' // UPC-A штрихкод
},
{
sku: '555666777',
barcode: 'CUSTOM_BARCODE_001' // Пользовательский код
}
]
});
console.log('📊 Результаты привязки штрихкодов:');
// Проверить результаты привязки
if (addResult.errors && addResult.errors.length > 0) {
console.log('❌ Ошибки при привязке:');
addResult.errors.forEach(error => {
console.log(` SKU ${error.sku}, код ${error.barcode}:`);
console.log(` Ошибка: ${error.error} (${error.code})`);
});
} else {
console.log('✅ Все штрихкоды успешно привязаны!');
}
} catch (error) {
console.error('❌ Ошибка привязки штрихкодов:', error);
}
async function createBarcodesForNewProducts() {
try {
// Получить товары без штрихкодов
const productsWithoutBarcodes = await client.product.getList({
filter: {
visibility: 'VISIBLE'
},
limit: 100
});
// Фильтровать товары, требующие штрихкоды
const productIds = productsWithoutBarcodes.result?.items
?.filter(product => !product.barcode || product.barcode.length === 0)
.map(product => product.id.toString())
.slice(0, 100) || []; // Максимум 100 за запрос
if (productIds.length === 0) {
console.log('✅ Все товары уже имеют штрихкоды');
return;
}
console.log(`🔄 Создаем штрихкоды для ${productIds.length} товаров...`);
// Создать штрихкоды пакетно
const result = await client.barcode.generateBarcodes({
product_ids: productIds
});
console.log(`✅ Создано штрихкодов: ${result.results?.length || 0}`);
console.log(`❌ Ошибок: ${result.errors?.length || 0}`);
return result;
} catch (error) {
console.error('❌ Ошибка массового создания штрихкодов:', error);
}
}
async function addBarcodesInBatches(barcodesToAdd: BarcodeInfo[]) {
const batchSize = 100; // Максимальный размер батча
const results: BarcodeAddResponse[] = [];
for (let i = 0; i < barcodesToAdd.length; i += batchSize) {
const batch = barcodesToAdd.slice(i, i + batchSize);
try {
console.log(`🔄 Обработка батча ${Math.floor(i / batchSize) + 1}/${Math.ceil(barcodesToAdd.length / batchSize)}`);
const result = await client.barcode.addBarcodes({
barcodes: batch
});
results.push(result);
// Статистика по батчу
const errors = result.errors?.length || 0;
const success = batch.length - errors;
console.log(` ✅ Успешно: ${success}, ❌ Ошибок: ${errors}`);
// Пауза между запросами (лимит 20 запросов в минуту)
if (i + batchSize < barcodesToAdd.length) {
console.log('⏳ Пауза 3 секунды...');
await new Promise(resolve => setTimeout(resolve, 3000));
}
} catch (error) {
console.error(`❌ Ошибка в батче ${Math.floor(i / batchSize) + 1}:`, error);
}
}
return results;
}
const processBarcodes = async (barcodes: BarcodeInfo[]) => {
const batchSize = 100;
for (let i = 0; i < barcodes.length; i += batchSize) {
const batch = barcodes.slice(i, i + batchSize);
await client.barcode.addBarcodes({ barcodes: batch });
// Пауза между запросами
if (i + batchSize < barcodes.length) {
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
};
const badExample = async () => {
// Слишком быстрые запросы
for (let i = 0; i < 25; i++) {
await client.barcode.addBarcodes({ barcodes: [/* ... */] });
}
// Слишком много товаров за раз
await client.barcode.generateBarcodes({
product_ids: Array(150).fill('').map((_, i) => i.toString()) // 150 > 100
});
};
interface BarcodeInfo {
/** Идентификатор товара в системе Ozon — SKU */
sku: string;
/** Значение штрихкода (не более 100 символов) */
barcode: string;
}
interface BarcodeAddRequest {
/** Список штрихкодов и товаров (максимум 100) */
barcodes: BarcodeInfo[];
}
interface BarcodeGenerateRequest {
/** Идентификаторы товаров для создания штрихкодов (максимум 100) */
product_ids: string[];
}
interface BarcodeError {
/** Код ошибки */
code: string;
/** Описание ошибки */
error: string;
/** SKU товара с ошибкой */
sku?: string;
/** Штрихкод с ошибкой */
barcode?: string;
/** ID товара с ошибкой */
product_id?: string;
}
interface BarcodeAddResponse {
/** Список ошибок при привязке */
errors?: BarcodeError[];
}
interface BarcodeGenerateResult {
/** ID товара */
product_id: string;
/** Созданные штрихкоды */
barcodes?: string[];
}
interface BarcodeGenerateResponse {
/** Результаты создания штрихкодов */
results?: BarcodeGenerateResult[];
/** Список ошибок при создании */
errors?: BarcodeError[];
}
Barcode API идеально подходит для автоматизации создания штрихкодов при массовом импорте товаров. Используйте пакетную обработку с соблюдением лимитов для максимальной эффективности.