Manuel sipariş karşılama ölçeklenmez. WooCommerce mağazanız günde 50 siparişi geçtiğinde, manuel iş akışı — WooCommerce’i kontrol et, siparişi ERP’ye gir, topla ve paketle, takibi manuel güncelle — bir darboğaza dönüşür. ERP odaklı otomasyon, “sipariş verildi”den “teslim edildi”ye sürekli bir pipeline oluşturarak bu darboğazı ortadan kaldırır.

Otomatik Karşılama Pipeline’ı

Order Placed (WooCommerce)

→ Fraud Check

→ Payment Verification

→ Order Created in ERP

→ Inventory Reserved

→ Pick List Generated

→ Warehouse Picks & Packs

→ Shipping Label Created

→ Tracking Number → WooCommerce

→ Customer Notification

→ Order Marked "Completed"

Her adım otomatik olarak gerçekleşir. İnsan müdahalesi sadece istisnalar için gereklidir (dolandırıcılık flagleri, stok tükenmesi, adres sorunları).

Adım 1: Sipariş Yakalama

WooCommerce webhook’ları pipeline’ı gerçek zamanlı olarak tetikler:

// Webhook handler

app.post('/webhooks/order-created', async (req, res) => {

const order = req.body;

// Quick validation

if (order.status !== 'processing') {

return res.status(200).send('Skipped: not processing');

}

// Queue for processing

await orderQueue.add('process-order', {

orderId: order.id,

orderData: order,

receivedAt: new Date().toISOString()

});

res.status(200).send('Queued');

});

Adım 2: Dolandırıcılık ve Doğrulama Kontrolü

ERP’ye göndermeden önce siparişi doğrulayın:

async function validateOrder(order) {

const issues = [];

// Address validation

if (!order.shipping.postcode || order.shipping.postcode.length < 3) {

issues.push('Invalid shipping postcode');

}

// High-value order flag

if (parseFloat(order.total) > 1000) {

issues.push('High-value order - manual review');

}

// Duplicate order check (same customer, same items, within 5 minutes)

const recentOrders = await db.query(

'SELECT * FROM processed_orders WHERE customer_email = ? AND created_at > DATE_SUB(NOW(), INTERVAL 5 MINUTE)',

[order.billing.email]

);

if (recentOrders.length > 0) {

issues.push('Possible duplicate order');

}

return { valid: issues.length === 0, issues };

}

Adım 3: ERP Sipariş Oluşturma

Siparişi dönüştürün ve ERP’nize gönderin:

async function createERPOrder(wcOrder) {

// Find or create customer

let customer = await erp.findCustomer({ email: wcOrder.billing.email });

if (!customer) {

customer = await erp.createCustomer({

name: ${wcOrder.billing.first_name} ${wcOrder.billing.last_name},

email: wcOrder.billing.email,

phone: wcOrder.billing.phone,

address: mapAddress(wcOrder.shipping)

});

}

// Create sales order

const salesOrder = await erp.createSalesOrder({

customerId: customer.id,

externalRef: WC-${wcOrder.id},

orderDate: wcOrder.date_created,

lines: wcOrder.line_items.map(item => ({

sku: item.sku,

quantity: item.quantity,

unitPrice: parseFloat(item.price),

discount: parseFloat(item.total) < (item.quantity * parseFloat(item.price))

? (item.quantity * parseFloat(item.price)) - parseFloat(item.total)

: 0

})),

shippingMethod: wcOrder.shipping_lines[0]?.method_title,

shippingCost: parseFloat(wcOrder.shipping_total),

notes: wcOrder.customer_note || ''

});

// Store mapping

await db.query(

'INSERT INTO order_mapping (wc_order_id, erp_order_id, status) VALUES (?, ?, ?)',

[wcOrder.id, salesOrder.id, 'created']

);

return salesOrder;

}

Adım 4: Envanter Rezervasyonu

ERP, satış siparişi oluşturulduğunda envanteri hemen rezerve etmelidir (ayırmalıdır). Bu, sipariş oluşturma ile fiziksel toplama arasında fazla satışı önler.

Çoğu ERP bir satış siparişi oluşturulduğunda bunu otomatik olarak halleder. Bunu ERP’nizle doğrulayın — bazıları açık rezervasyon çağrıları gerektirir.

Adım 5: Kargo Etiketi Oluşturma

Etiketleri otomatik oluşturmak için kargo taşıyıcınızın API’siyle entegre olun:

async function generateShippingLabel(erpOrder, shippingAddress) {

// Example: ShipStation API

const shipment = await shipstation.createShipment({

orderId: erpOrder.externalRef,

carrierCode: selectCarrier(shippingAddress, erpOrder.totalWeight),

serviceCode: selectService(shippingAddress),

shipTo: {

name: ${shippingAddress.first_name} ${shippingAddress.last_name},

street1: shippingAddress.address_1,

street2: shippingAddress.address_2,

city: shippingAddress.city,

state: shippingAddress.state,

postalCode: shippingAddress.postcode,

country: shippingAddress.country

},

weight: { value: erpOrder.totalWeight, units: 'grams' },

dimensions: calculatePackageDimensions(erpOrder.lines)

});

return {

trackingNumber: shipment.trackingNumber,

labelUrl: shipment.labelData,

carrier: shipment.carrierCode

};

}

Adım 6: Takip Numarasını WooCommerce’e Geri Gönderme

WooCommerce siparişini takip bilgileriyle güncelleyin:

async function updateWooCommerceTracking(wcOrderId, tracking) {

// Update order meta with tracking info

await wooApi.put(orders/${wcOrderId}, {

status: 'completed',

meta_data: [

{ key: '_tracking_number', value: tracking.trackingNumber },

{ key: '_tracking_carrier', value: tracking.carrier },

{ key: '_tracking_url', value: tracking.trackingUrl }

]

});

// Add order note

await wooApi.post(orders/${wcOrderId}/notes, {

note: Order shipped via ${tracking.carrier}. Tracking: ${tracking.trackingNumber},

customer_note: true // Visible to customer

});

}

İstisna İşleme

Her sipariş sorunsuz akmaz. Yaygın istisnalar için işleyiciler oluşturun:

İstisna Eylem
Ürün stokta yok Siparişi beklet, müşteriye bildir, alternatif sun
Adres teslim edilemez Siparişi beklet, müşteriye adresi güncellemesi için bildir
Yetkilendirme sonrası ödeme başarısız ERP siparişini iptal et, envanteri serbest bırak
Dolandırıcılık flagı Manuel inceleme için beklet, gönderme
Kargo etiketi hatası Alternatif taşıyıcıyla yeniden dene
ERP çalışmıyor Siparişi kuyruğa al, ERP iyileştiğinde yeniden dene

İzleme

Pipeline sağlığınızı takip edin:

// Hourly pipeline metrics

const metrics = {

ordersReceived: await countOrders('received', lastHour),

ordersProcessed: await countOrders('processed', lastHour),

ordersShipped: await countOrders('shipped', lastHour),

ordersFailed: await countOrders('failed', lastHour),

avgProcessingTime: await avgTime('received', 'shipped', lastHour),

pendingOrders: await countOrders('pending')

};

Uyarı eşikleri:

  • İşlem süresi > 30 dakika: araştır
  • Başarısız siparişler > toplam %5: kritik uyarı
  • Bekleyen kuyruk > 100 sipariş: kapasite sorunu

Sonuç

ERP odaklı sipariş otomasyonu, karşılamayı manuel, hata açısından riskli bir süreçten güvenilir bir pipeline’a dönüştürür. Bu pipeline’ı oluşturma yatırımı kendisini hızlıca amorti eder — daha az hata, daha hızlı kargo, daha mutlu müşteriler ve ekip zamanının veri girişinden kurtarılması. Temel akışla başlayın (sipariş ERP’ye, takip WooCommerce’e geri), ardından kargo etiketi oluşturma ve istisna işlemeyi aşamalı olarak ekleyin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Close Search Window