Fulfillment by Seller
Самая комплексная категория для управления отправлениями FBS — полный жизненный цикл заказов от получения до доставки со схемой фулфилмента от продавца.
Получение списков, фильтрация, отслеживание статусов
Создание и получение этикеток для отправлений
Управление отменами, арбитражами и проблемными заказами
Изменение весов, отмена отдельных позиций
Коды курьеров, ограничения, многокоробочные отправления
Таможенные декларации ETGB для турецких продавцов
Категория | Количество | Сложность | Описание |
---|---|---|---|
Управление отправлениями | 6 методов | 🟡 Средняя | Список, поиск, получение, отмена отправлений |
Этикетки и печать | 4 метода | 🟢 Простая | Создание, получение этикеток, пакетная печать |
Работа с товарами | 4 метода | 🟡 Средняя | Изменение весов, отмена позиций, страны-изготовители |
Специальные функции | 5 методов | 🔴 Сложная | Арбитраж, коды курьеров, ограничения, rFBS |
Международные операции | 2 метода | 🟡 Средняя | ETGB декларации, неоплаченные B2B заказы |
Причины отмены | 1 метод | 🟢 Простая | Справочник причин отмены |
import { OzonSellerAPI } from 'daytona-ozon-seller-api';
const client = new OzonSellerAPI({
clientId: 'your-client-id',
apiKey: 'your-api-key'
});
try {
// 1. Получить новые отправления
const newPostings = await client.fbs.getPostingListV3({
filter: {
since: '2024-01-01T00:00:00Z',
to: '2024-01-31T23:59:59Z',
status: 'awaiting_packaging' // Ожидают упаковки
},
limit: 50
});
console.log(`📦 Новых отправлений: ${newPostings.result?.postings?.length || 0}`);
// 2. Обработать каждое отправление
for (const posting of newPostings.result?.postings || []) {
console.log(`\n🔄 Отправление: ${posting.posting_number}`);
console.log(` Статус: ${posting.status}`);
console.log(` Товаров: ${posting.products?.length}`);
console.log(` Дата отгрузки: ${posting.shipment_date}`);
// 3. Создать этикетку для отправления
const label = await client.fbs.packageLabel({
posting_number: [posting.posting_number]
});
if (label.content) {
console.log(` ✅ Этикетка создана (${label.content.length} байт)`);
}
}
// 4. Получить необработанные отправления
const unfulfilledPostings = await client.fbs.getUnfulfilledListV3({
limit: 100
});
console.log(`⏳ Необработанных отправлений: ${unfulfilledPostings.result?.postings?.length || 0}`);
} catch (error) {
console.error('❌ Ошибка FBS workflow:', error);
}
→ Подробная документация: fbs-postings.html
Основные методы работы с отправлениями:
getPostingListV3()
— список отправлений (v3) с расширенной фильтрациейgetUnfulfilledListV3()
— необработанные отправленияgetPostingV3()
— детальная информация по IDgetPostingByBarcode()
— поиск по штрихкодуcancelPosting()
— отмена отправленияmoveToAwaitingDelivery()
— передача к отгрузке→ Подробная документация: fbs-labels.html
Методы для работы с этикетками:
packageLabel()
— прямая печать этикеток (до 20 за раз)createLabelBatch()
— создание задания на этикетки (асинхронно)createLabelBatchV2()
— улучшенная версия с поддержкой размеровgetLabelBatch()
— получение готовых этикеток→ Подробная документация: fbs-products.html
Методы управления товарами в отправлениях:
cancelPostingProduct()
— отмена отдельных товаровchangePostingProduct()
— изменение веса товаровgetProductCountryList()
— список стран-изготовителейsetProductCountry()
— установка страны-изготовителя→ Подробная документация: fbs-special.html
Продвинутые возможности FBS:
moveToArbitration()
— открытие споровverifyPickupCode()
— проверка кодов курьеров rFBS ExpressgetRestrictions()
— ограничения пунктов приемаsetMultiBoxQty()
— количество коробок для многокоробочных товаровgetEtgb()
— таможенные декларации для ТурцииСтатус | Описание | Действия продавца |
---|---|---|
awaiting_registration |
Ожидает регистрации | Ожидание |
acceptance_in_progress |
Идет приемка | Ожидание |
awaiting_approve |
Ожидает подтверждения | Подтвердить получение |
awaiting_packaging |
Ожидает упаковки | Упаковать и создать этикетку |
awaiting_deliver |
Ожидает отгрузки | Передать в доставку |
arbitration |
Арбитраж | Решить спорную ситуацию |
delivering |
Доставляется | Мониторинг |
delivered |
Доставлено | Завершено ✅ |
cancelled |
Отменено | Обработать отмену |
const createLabelWithRetry = async (postingNumbers: string[]) => {
let attempts = 0;
const maxAttempts = 5;
while (attempts < maxAttempts) {
try {
const label = await client.fbs.packageLabel({
posting_number: postingNumbers
});
return label;
} catch (error) {
if (error.message.includes("aren't ready")) {
attempts++;
console.log(`⏳ Этикетки не готовы, попытка ${attempts}/${maxAttempts}`);
await new Promise(resolve => setTimeout(resolve, 60000)); // 1 минута
} else {
throw error;
}
}
}
throw new Error('Этикетки не готовы после максимального количества попыток');
};
const badExample = async () => {
await client.fbs.packageLabel({ posting_number: ['123-456-1'] });
// Нет проверки готовности этикеток
};
// Определение подходящей схемы на основе товара
const chooseFbsScheme = (product: Product): 'FBS' | 'rFBS' => {
const criteria = {
weight: product.weight,
dimensions: product.dimensions,
fragility: product.fragile,
region: product.region
};
if (criteria.weight > 10000 || criteria.fragility) {
return 'FBS'; // Больше контроля для тяжелых/хрупких товаров
}
if (criteria.region === 'moscow' || criteria.region === 'spb') {
return 'rFBS'; // Быстрая доставка в крупных городах
}
return 'FBS';
};
FBS API требует понимания полного жизненного цикла заказов. Начните с базовых операций (список → этикетки → отгрузка) и постепенно добавляйте продвинутые функции как споры и специальные схемы доставки.