Skill Dropshipping Fulfillment
by @zero2ai-hub
Automates order fulfillment by pushing WooCommerce orders to CJ Dropshipping. Fetches "Processing" orders, matches line items to CJ variants via a supplier s...
clawhub install skill-dropshipping-fulfillmentπ About This Skill
name: skill-dropshipping-fulfillment description: Automates order fulfillment by pushing WooCommerce orders to CJ Dropshipping. Fetches "Processing" orders, matches line items to CJ variants via a supplier selection map, submits orders to CJ API, updates WooCommerce order status, and logs results. Supports dry-run and single-order modes. metadata: openclaw: requires: { bins: ["node"] }
CJ Fulfillment Engine
Automates the WooCommerce β CJ Dropshipping order flow. No manual copy-paste.
What it does
1. Fetches allprocessing orders from WooCommerce
2. Maps line items to CJ variant IDs via cj-supplier-selection.json
3. Submits matched items to CJ API as a dropship order
4. Updates WooCommerce order status to on-hold (awaiting CJ dispatch)
5. Adds an order note with the CJ order ID
6. Logs all results to cj-fulfillment-log.jsonCredentials / paths
| File | Contents |
|---|---|
| woo-api.json | { url, consumerKey, consumerSecret } |
| cj-api.json | { apiKey, baseUrl, accessToken, tokenExpiry } |
| cj-supplier-selection.json | Array of { sku, cjProductId, variantId, ... } |
Usage
# Dry run β preview without placing orders
node {baseDir}/scripts/fulfill.js --dry-runFulfill all processing orders
node {baseDir}/scripts/fulfill.jsFulfill a single WooCommerce order
node {baseDir}/scripts/fulfill.js --order 1234
cj-supplier-selection.json format
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
FBA / excluded products
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".
Output
cj-fulfillment-log.json: append-only log with { orderId, status, cjOrderId, timestamp }cj-rejection-log.json: unmatched/skipped items for manual reviewUnmatched items
If 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.
Environment overrides
CJ_SELECTION_PATH=/custom/path/selection.json node fulfill.js
FULFILL_LOG_PATH=/custom/path/log.json node fulfill.js
π‘ Examples
# Dry run β preview without placing orders
node {baseDir}/scripts/fulfill.js --dry-runFulfill all processing orders
node {baseDir}/scripts/fulfill.jsFulfill a single WooCommerce order
node {baseDir}/scripts/fulfill.js --order 1234