Учебное руководство 2: Рабочий процесс выполнения заказов
Узнайте, как обрабатывать заказы клиентов и управлять операциями выполнения.
Что вы создадите
Полную систему выполнения заказов, которая:
- Получает ожидающие заказы клиентов
- Извлекает детальную информацию о заказах
- Обновляет статус заказа через этапы выполнения
- Генерирует транспортные накладные для доставки
Примерное время: 45 минут Сложность: Средний
Цели обучения
К концу этого руководства вы сможете:
- ✅ Понимать модели выполнения FBS и FBW
- ✅ Получать и фильтровать заказы по статусу
- ✅ Правильно обрабатывать переходы состояния заказов
- ✅ Генерировать транспортные накладные и информацию для отслеживания
- ✅ Грамотно обрабатывать ошибки выполнения заказов
Предварительные требования
Перед началом убедитесь, что у вас есть:
- ✅ Установленный Node.js ≥ 20.0.0
- ✅ API ключ Wildberries с доступом к заказам
- ✅ Установленный SDK (
npm install wb-api-sdk) - ✅ Пройденное Руководство по быстрому старту
- ✅ Базовое понимание рабочих процессов выполнения заказов
Введение
Выполнение заказов - это сердце операций электронной коммерции. Wildberries поддерживает две модели выполнения:
FBS (Fulfillment by Seller - Выполнение продавцом)
- Вы управляете складированием, упаковкой и доставкой
- Вы генерируете транспортные накладные
- Вы управляете возвратами на вашем складе
- Больший контроль над запасами и опытом клиентов
FBW (Fulfillment by Wildberries - Выполнение Wildberries)
- Wildberries управляет складированием и доставкой
- Wildberries управляет возвратами
- Меньший контроль, но проще операции
- Фокус на поставке товаров и маркетинге
Это руководство фокусируется на FBS (наиболее распространено для новых продавцов). Для FBW см. Учебное руководство 4: Мульти-модульная интеграция.
Понимание состояний заказов
Заказы проходят через определенные состояния. Понимание переходов критически важно:
┌─────────┐
│ NEW │ ← Заказ размещен клиентом
└────┬────┘
│
▼
┌─────────────┐
│ CONFIRMED │ ← Продавец подтверждает заказ
└──────┬──────┘
│
▼
┌───────────┐
│ ASSEMBLED │ ← Товары собраны и упакованы
└─────┬─────┘
│
▼
┌──────────┐
│ SHIPPED │ ← Накладная сгенерирована, передано перевозчику
└────┬─────┘
│
▼
┌────────────┐
│ DELIVERED │ ← Клиент получил посылку
└────────────┘
ИЛИ
┌───────────┐
│ CANCELLED │ ← Заказ отменен продавцом/клиентом
└───────────┘Важно: Вы не можете пропускать состояния или возвращаться назад (кроме как в CANCELLED).
Шаг 1: Список ожидающих заказов (10 минут)
Давайте получим все заказы, требующие обработки.
Понимание фильтров заказов
Вы можете фильтровать заказы по:
- Статусу: new, confirmed, assembled, shipped, delivered, cancelled
- Диапазону дат: Фильтр по дате создания заказа
- Типу выполнения: FBS или FBW
Пример кода
Создайте файл order-fulfillment.ts:
import { WildberriesSDK } from 'wb-api-sdk';
const sdk = new WildberriesSDK({
apiKey: process.env.WB_API_KEY
});
async function listPendingOrders() {
try {
// Получение всех новых заказов (еще не подтверждены)
const newOrders = await sdk.ordersFBS.getOrders({
status: 'new',
limit: 50
});
console.log(`Найдено ${newOrders.data.length} новых заказов`);
// Отображение сводки по заказам
newOrders.data.forEach(order => {
console.log(`\nЗаказ ${order.orderId}:`);
console.log(` - Статус: ${order.status}`);
console.log(` - Товаров: ${order.items.length}`);
console.log(` - Всего: ${order.totalAmount} RUB`);
console.log(` - Срок доставки: ${order.deliveryDeadline}`);
});
// Получение заказов, готовых к отправке
const readyToShip = await sdk.ordersFBS.getOrders({
status: 'assembled',
limit: 50
});
console.log(`\n${readyToShip.data.length} заказов готовы к отправке`);
return newOrders.data;
} catch (error) {
console.error('Ошибка получения заказов:', error.message);
throw error;
}
}
listPendingOrders();Ожидаемый результат
Найдено 3 новых заказов
Заказ WB-12345678:
- Статус: new
- Товаров: 2
- Всего: 3499 RUB
- Срок доставки: 2024-11-01T12:00:00Z
Заказ WB-12345679:
- Статус: new
- Товаров: 1
- Всего: 1299 RUB
- Срок доставки: 2024-11-01T15:00:00Z
Заказ WB-12345680:
- Статус: new
- Товаров: 3
- Всего: 5999 RUB
- Срок доставки: 2024-11-02T10:00:00Z
3 заказов готовы к отправкеФильтрация по диапазону дат
async function getTodaysOrders() {
const today = new Date();
today.setHours(0, 0, 0, 0);
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
const orders = await sdk.ordersFBS.getOrders({
dateFrom: today.toISOString(),
dateTo: tomorrow.toISOString()
});
console.log(`Сегодняшние заказы: ${orders.data.length}`);
return orders.data;
}Шаг 2: Подтверждение заказов (10 минут)
После получения новых заказов, вам нужно подтвердить, что вы можете их выполнить.
Процесс подтверждения
Подтверждение означает:
- Вы проверили наличие на складе
- Вы можете выполнить в срок
- Вы принимаете условия заказа
Пример кода
async function confirmOrder(orderId: string) {
try {
// Подтверждение заказа
await sdk.ordersFBS.confirmOrder(orderId);
console.log(`✓ Заказ ${orderId} подтвержден`);
console.log('Статус изменён: NEW → CONFIRMED');
} catch (error) {
if (error.name === 'InvalidOrderStateError') {
console.error(`Не могу подтвердить: заказ в состоянии ${error.currentState}`);
} else {
console.error('Ошибка подтверждения заказа:', error.message);
}
}
}
// Подтверждение нескольких заказов
async function confirmMultipleOrders(orderIds: string[]) {
for (const orderId of orderIds) {
await confirmOrder(orderId);
// SDK автоматически обрабатывает лимиты запросов
}
console.log(`\n✓ Подтверждено ${orderIds.length} заказов`);
}Ожидаемый результат
✓ Заказ WB-12345678 подтвержден
Статус изменён: NEW → CONFIRMED
✓ Заказ WB-12345679 подтвержден
Статус изменён: NEW → CONFIRMED
✓ Заказ WB-12345680 подтвержден
Статус изменён: NEW → CONFIRMED
✓ Подтверждено 3 заказовШаг 3: Сборка и упаковка (10 минут)
После подтверждения начните комплектацию и упаковку товаров.
Процесс сборки
- Соберите все товары из заказа со склада
- Проверьте качество и количество
- Упакуйте безопасно для доставки
- Обновите статус заказа в ASSEMBLED
Пример кода
async function assembleOrder(orderId: string) {
try {
// Получение деталей заказа
const order = await sdk.ordersFBS.getOrderDetails(orderId);
console.log(`\nСборка заказа ${orderId}:`);
console.log('Требуемые товары:');
order.items.forEach(item => {
console.log(` - ${item.productName} x ${item.quantity}`);
console.log(` Артикул: ${item.sku}`);
});
// После физической сборки и упаковки...
await sdk.ordersFBS.markAssembled(orderId);
console.log('\n✓ Заказ отмечен как собранный');
console.log('Статус изменён: CONFIRMED → ASSEMBLED');
} catch (error) {
console.error('Ошибка сборки заказа:', error.message);
}
}Ожидаемый результат
Сборка заказа WB-12345678:
Требуемые товары:
- ТехБренд Смартфон Про 15 x 1
Артикул: SKU-12345
- Защитный чехол x 1
Артикул: SKU-67890
✓ Заказ отмечен как собранный
Статус изменён: CONFIRMED → ASSEMBLEDШаг 4: Генерация транспортной накладной (10 минут)
Сгенерируйте транспортную накладную для передачи перевозчику.
Информация на накладной
Содержит:
- Номер заказа и штрих-код
- Информацию о доставке клиента
- Вес и размеры посылки
- Инструкции для перевозчика
Пример кода
async function generateShippingLabel(orderId: string) {
try {
// Генерация транспортной накладной
const label = await sdk.ordersFBS.generateLabel({
orderId: orderId,
format: 'pdf', // или 'zpl' для принтеров этикеток
size: 'A4' // или '100x150' для термопринтеров
});
console.log('✓ Транспортная накладная сгенерирована');
console.log(` - URL накладной: ${label.url}`);
console.log(` - Номер отслеживания: ${label.trackingNumber}`);
// Скачивание и печать накладной
const response = await fetch(label.url);
const pdfBuffer = await response.arrayBuffer();
// Сохранение или отправка на принтер
console.log('✓ Накладная готова к печати');
// Обновление статуса в SHIPPED
await sdk.ordersFBS.markShipped({
orderId: orderId,
trackingNumber: label.trackingNumber
});
console.log('✓ Заказ отмечен как отправленный');
console.log('Статус изменён: ASSEMBLED → SHIPPED');
} catch (error) {
console.error('Ошибка генерации накладной:', error.message);
}
}Ожидаемый результат
✓ Транспортная накладная сгенерирована
- URL накладной: https://marketplace-api.wildberries.ru/labels/WB-12345678.pdf
- Номер отслеживания: WB1234567890RU
✓ Накладная готова к печати
✓ Заказ отмечен как отправленный
Статус изменён: ASSEMBLED → SHIPPEDПолный пример рабочего процесса
Вот полный рабочий процесс выполнения заказов:
import { WildberriesSDK } from 'wb-api-sdk';
const sdk = new WildberriesSDK({
apiKey: process.env.WB_API_KEY
});
async function processOrderFulfillment() {
try {
console.log('=== Начало процесса выполнения заказов ===\n');
// Шаг 1: Получение новых заказов
console.log('Шаг 1: Получение новых заказов...');
const newOrders = await sdk.ordersFBS.getOrders({
status: 'new',
limit: 10
});
console.log(`✓ Найдено ${newOrders.data.length} новых заказов\n`);
if (newOrders.data.length === 0) {
console.log('Нет заказов для обработки');
return;
}
// Шаг 2: Подтверждение заказов
console.log('Шаг 2: Подтверждение заказов...');
for (const order of newOrders.data) {
await sdk.ordersFBS.confirmOrder(order.orderId);
console.log(` ✓ Подтвержден: ${order.orderId}`);
}
console.log(`✓ Подтверждено ${newOrders.data.length} заказов\n`);
// Шаг 3: Сборка заказов
console.log('Шаг 3: Сборка заказов...');
for (const order of newOrders.data) {
// Здесь происходит физическая сборка
await sdk.ordersFBS.markAssembled(order.orderId);
console.log(` ✓ Собран: ${order.orderId}`);
}
console.log(`✓ Собрано ${newOrders.data.length} заказов\n`);
// Шаг 4: Генерация накладных и отправка
console.log('Шаг 4: Генерация накладных...');
for (const order of newOrders.data) {
const label = await sdk.ordersFBS.generateLabel({
orderId: order.orderId,
format: 'pdf',
size: 'A4'
});
await sdk.ordersFBS.markShipped({
orderId: order.orderId,
trackingNumber: label.trackingNumber
});
console.log(` ✓ Отправлен: ${order.orderId}`);
console.log(` Отслеживание: ${label.trackingNumber}`);
}
console.log(`\n✓ Обработано ${newOrders.data.length} заказов`);
console.log('\n🎉 Процесс выполнения заказов завершен!');
} catch (error) {
console.error('\n❌ Ошибка процесса выполнения:', error.message);
process.exit(1);
}
}
// Запуск процесса
processOrderFulfillment();Запустите
# Установите ваш API ключ
export WB_API_KEY='ваш_api_ключ_здесь'
# Запустите скрипт
npx tsx order-fulfillment.tsОжидаемый результат
=== Начало процесса выполнения заказов ===
Шаг 1: Получение новых заказов...
✓ Найдено 3 новых заказов
Шаг 2: Подтверждение заказов...
✓ Подтвержден: WB-12345678
✓ Подтвержден: WB-12345679
✓ Подтвержден: WB-12345680
✓ Подтверждено 3 заказов
Шаг 3: Сборка заказов...
✓ Собран: WB-12345678
✓ Собран: WB-12345679
✓ Собран: WB-12345680
✓ Собрано 3 заказов
Шаг 4: Генерация накладных...
✓ Отправлен: WB-12345678
Отслеживание: WB1234567890RU
✓ Отправлен: WB-12345679
Отслеживание: WB1234567891RU
✓ Отправлен: WB-12345680
Отслеживание: WB1234567892RU
✓ Обработано 3 заказов
🎉 Процесс выполнения заказов завершен!Обработка ошибок
Ошибки состояния заказа
try {
await sdk.ordersFBS.confirmOrder(orderId);
} catch (error) {
if (error.name === 'InvalidOrderStateError') {
console.error(`Не могу подтвердить: заказ в состоянии ${error.currentState}`);
console.error(`Ожидаемое состояние: ${error.expectedState}`);
// Обработайте соответственно
}
}Ошибки не найденного заказа
try {
const order = await sdk.ordersFBS.getOrderDetails(orderId);
} catch (error) {
if (error.name === 'OrderNotFoundError') {
console.error(`Заказ ${orderId} не найден`);
// Возможно, уже обработан или отменен
}
}Лимиты скорости
try {
await sdk.ordersFBS.confirmOrder(orderId);
} catch (error) {
if (error.name === 'RateLimitError') {
console.log(`Лимит запросов. SDK повторит попытку автоматически.`);
// SDK обрабатывает повторные попытки
}
}Устранение неполадок
Распространенные проблемы
Проблема: "Не могу изменить статус заказа"
- Причина: Неправильная последовательность состояний
- Решение: Убедитесь, что следуете NEW → CONFIRMED → ASSEMBLED → SHIPPED
Проблема: "Генерация накладной не удалась"
- Причина: Заказ не в состоянии ASSEMBLED
- Решение: Сначала отметьте заказ как собранный
Проблема: "Отсутствует информация о доставке"
- Причина: Неполные детали заказа
- Решение: Используйте
getOrderDetails()для получения полной информации
Следующие шаги
Поздравляем! Вы освоили выполнение заказов. Продолжайте обучение:
- Учебное руководство 3: Панель аналитики - Отслеживайте производительность заказов
- Учебное руководство 4: Мульти-модульная интеграция - Соединение всех модулей
- Руководство по лучшим практикам - Паттерны для production
- Справочник API - Полная документация модуля заказов
Ключевые выводы
✅ Понимайте разницу между FBS и FBW ✅ Всегда следуйте правильной последовательности состояний ✅ Подтверждайте заказы перед сборкой ✅ Генерируйте накладные для отслеживания доставки ✅ Обрабатывайте ошибки состояний грамотно ✅ SDK автоматически управляет лимитами запросов
← Назад к Началу работы | Предыдущее руководство: Каталог товаров ← | English Version