⚙️ FBS Special API - Специальные функции
Продвинутые возможности FBS API — арбитраж, коды курьеров, ограничения, многокоробочные отправления, международные операции.
📋 Методы (7 endpoints)
Метод |
Endpoint |
Назначение |
moveToArbitration |
/v2/posting/fbs/arbitration |
Открытие споров по отправлениям |
verifyPickupCode |
/v1/posting/fbs/pick-up-code/verify |
Проверка кодов курьеров rFBS Express |
getRestrictions |
/v1/posting/fbs/restrictions |
Ограничения пунктов приема |
setMultiBoxQtyV3 |
/v3/posting/multiboxqty/set |
Количество коробок (многокоробочные) |
getEtgb |
/v1/posting/global/etgb |
Таможенные декларации для Турции |
getUnpaidLegalProductList |
/v1/posting/unpaid-legal/product/list |
Неоплаченные B2B заказы |
moveToAwaitingDelivery |
/v2/posting/fbs/awaiting-delivery |
Передача спорных заказов к отгрузке |
🚀 Быстрый старт
Арбитраж отправлений
try {
// Открыть спор если отправление не отсканировано в СЦ
const result = await client.fbs.moveToArbitration({
posting_number: ['12345-0001-1', '12345-0002-1']
});
if (result.result) {
console.log('✅ Отправления переведены в арбитраж');
} else {
console.log('❌ Ошибка открытия спора');
}
} catch (error) {
console.error('❌ Ошибка арбитража:', error);
}
Проверка кода курьера (rFBS Express)
try {
// Проверить код курьера при передаче
const verification = await client.fbs.verifyPickupCode({
code: '123456',
posting_number: '12345-0001-1'
});
if (verification.result) {
console.log('✅ Код курьера верный, можно передавать отправление');
} else {
console.log('❌ Неверный код курьера');
}
} catch (error) {
console.error('❌ Ошибка проверки кода:', error);
}
Ограничения пунктов приема
try {
// Получить ограничения для отправления
const restrictions = await client.fbs.getRestrictions({
posting_number: '12345-0001-1'
});
if (restrictions.result) {
const { max_weight, max_dimensions } = restrictions.result;
console.log(`📏 Макс. вес: ${max_weight}кг`);
if (max_dimensions) {
console.log(`📦 Макс. габариты: ${max_dimensions.length}x${max_dimensions.width}x${max_dimensions.height}см`);
}
}
} catch (error) {
console.error('❌ Ошибка получения ограничений:', error);
}
🎯 Методы API
moveToArbitration()
- Арбитраж
interface FbsMovePostingRequest {
/** Номера отправлений */
posting_number: string[];
}
interface FbsBooleanResponse {
/** Результат операции */
result: boolean;
}
verifyPickupCode()
- Проверка кода курьера
interface FbsPickupCodeVerifyRequest {
/** Код курьера */
code: string;
/** Номер отправления */
posting_number: string;
}
interface FbsPickupCodeVerifyResponse {
/** Результат проверки */
result: boolean;
}
getRestrictions()
- Ограничения пункта
interface FbsGetRestrictionsRequest {
/** Номер отправления */
posting_number: string;
}
interface FbsGetRestrictionsResponse {
result?: {
/** Максимальный вес (кг) */
max_weight: number;
/** Максимальные габариты */
max_dimensions?: {
length: number;
width: number;
height: number;
};
/** Другие ограничения */
restrictions?: string[];
};
}
setMultiBoxQtyV3()
- Многокоробочные отправления
interface FbsMultiBoxQtySetV3Request {
/** Номер отправления */
posting_number: string;
/** Количество коробок */
multi_box_qty: number;
}
interface FbsMultiBoxQtySetV3Response {
/** Результат операции */
result: boolean;
}
getEtgb()
- Таможенные декларации
interface FbsGetEtgbRequest {
/** Номера отправлений */
posting_number: string[];
/** Тип документа */
doc_type: 'ETGB';
}
interface FbsGetEtgbResponse {
result?: {
/** Номер отправления */
posting_number: string;
/** URL документа */
document_url: string;
/** Статус декларации */
status: string;
}[];
}
💡 Практические примеры
Workflow арбитража
const handleArbitration = async (postingNumbers: string[]) => {
try {
console.log(`🔄 Открытие арбитража для ${postingNumbers.length} отправлений...`);
// 1. Открыть арбитраж
const arbitration = await client.fbs.moveToArbitration({
posting_number: postingNumbers
});
if (arbitration.result) {
console.log('✅ Арбитраж открыт, отправления в статусе "arbitration"');
// 2. Дождаться решения и передать к отгрузке
setTimeout(async () => {
const delivery = await client.fbs.moveToAwaitingDelivery({
posting_number: postingNumbers
});
if (delivery.result) {
console.log('✅ Спорные заказы переданы к отгрузке');
}
}, 24 * 60 * 60 * 1000); // 24 часа
}
} catch (error) {
console.error('❌ Ошибка workflow арбитража:', error);
}
};
Проверка ограничений пакетно
const checkBulkRestrictions = async (postingNumbers: string[]) => {
const results = [];
for (const postingNumber of postingNumbers) {
try {
const restrictions = await client.fbs.getRestrictions({
posting_number: postingNumber
});
if (restrictions.result) {
results.push({
posting: postingNumber,
maxWeight: restrictions.result.max_weight,
maxDimensions: restrictions.result.max_dimensions,
valid: true
});
}
// Пауза между запросами
await new Promise(resolve => setTimeout(resolve, 1000));
} catch (error) {
console.error(`❌ Ошибка для ${postingNumber}:`, error);
results.push({
posting: postingNumber,
valid: false,
error: error.message
});
}
}
return results;
};
rFBS Express интеграция
const handleRfbsExpress = async (posting: string, courierCode: string) => {
try {
// 1. Проверить код курьера
const verification = await client.fbs.verifyPickupCode({
code: courierCode,
posting_number: posting
});
if (!verification.result) {
throw new Error('Неверный код курьера');
}
console.log('✅ Код курьера подтвержден');
// 2. Получить ограничения для проверки совместимости
const restrictions = await client.fbs.getRestrictions({
posting_number: posting
});
if (restrictions.result) {
console.log(`📋 Ограничения проверены: макс. ${restrictions.result.max_weight}кг`);
}
// 3. Передать отправление курьеру
console.log('📦 Отправление можно передать курьеру rFBS Express');
return { success: true, verified: true };
} catch (error) {
console.error('❌ Ошибка rFBS Express:', error);
return { success: false, error: error.message };
}
};
Работа с многокоробочными отправлениями
const setupMultiBoxPostings = async (postings: Array<{number: string, boxes: number}>) => {
const results = [];
for (const { number, boxes } of postings) {
try {
const result = await client.fbs.setMultiBoxQtyV3({
posting_number: number,
multi_box_qty: boxes
});
if (result.result) {
console.log(`✅ Установлено ${boxes} коробок для ${number}`);
results.push({ posting: number, boxes, success: true });
} else {
console.log(`❌ Ошибка установки коробок для ${number}`);
results.push({ posting: number, boxes, success: false });
}
} catch (error) {
console.error(`❌ Ошибка для ${number}:`, error);
results.push({ posting: number, boxes, success: false, error: error.message });
}
}
return results;
};
⚠️ Особенности использования
Арбитраж
- ✅ Только для отправлений, переданных в доставку, но не отсканированных в СЦ
- ⏰ Статус изменится на
arbitration
- 📝 После решения используйте
moveToAwaitingDelivery()
Коды курьеров rFBS Express
- 🔐 Только для схемы rFBS Express
- ✅ Код должен быть получен от курьера перед передачей
- ⚠️ Неверный код блокирует передачу отправления
Ограничения пунктов приема
- 📏 Вес и габаритные ограничения для каждого пункта
- ⚠️ Превышение ограничений может заблокировать доставку
- 🔄 Проверяйте ограничения перед упаковкой
Многокоробочные отправления
- 📦 Только для схемы rFBS Агрегатор
- ✅ Используется при доставке партнерами OZON
- 🔢 Указывается точное количество коробок
ETGB декларации
- 🇹🇷 Только для продавцов из Турции
- 📋 Elektronik Ticaret Gümrük Beyannamesi
- 🌐 Требуется для международной торговли