Install
openclaw skills install skill-dropshipping-fulfillmentAutomates order fulfillment by pushing WooCommerce orders to CJ Dropshipping. Fetches "Processing" orders, matches line items to CJ variants via a supplier s...
openclaw skills install skill-dropshipping-fulfillmentAutomates the WooCommerce → CJ Dropshipping order flow. No manual copy-paste.
processing orders from WooCommercecj-supplier-selection.jsonon-hold (awaiting CJ dispatch)cj-fulfillment-log.json| File | Contents |
|---|---|
woo-api.json | { url, consumerKey, consumerSecret } |
cj-api.json | { apiKey, baseUrl, accessToken, tokenExpiry } |
cj-supplier-selection.json | Array of { sku, cjProductId, variantId, ... } |
# Dry run — preview without placing orders
node {baseDir}/scripts/fulfill.js --dry-run
# Fulfill all processing orders
node {baseDir}/scripts/fulfill.js
# Fulfill a single WooCommerce order
node {baseDir}/scripts/fulfill.js --order 1234
Full 6-field schema — one entry per product variant. Matching is SKU-first with fallback to wooProductId:wooVariationId.
[
{
"wooProductId": 77261,
"wooVariationId": 77265,
"sku": "CJYD2360896-BLACK",
"cjProductId": "CJ-PRODUCT-ID",
"variantId": "CJ-VARIANT-ID",
"productName": "My Product — Black"
}
]
Generate or rebuild this file from CJ API automatically:
node {baseDir}/scripts/rebuild-mapping.js
Products that should never be fulfilled via CJ (e.g. FBA, in-house). Set via env var:
FBA_PRODUCT_IDS=75927,75808,2382 node fulfill.js
These are skipped with a log entry: "FBA product — manual fulfillment required".
cj-fulfillment-log.json: append-only log with { orderId, status, cjOrderId, timestamp }cj-rejection-log.json: unmatched/skipped items for manual reviewIf a line item has no SKU match and no wooProductId:wooVariationId match, it's logged to the rejection log and the order is skipped. Fix by running rebuild-mapping.js or adding the entry manually.
CJ_SELECTION_PATH=/custom/path/selection.json node fulfill.js
FULFILL_LOG_PATH=/custom/path/log.json node fulfill.js