Shopify Plus 香港多倉庫庫存同步設定教學:本地倉與海外倉操作指南

Key Takeaways
- Shopify Plus 支援最多 200 個 Location,滿足多倉庫需求
- 透過 Inventory API 與 Webhook 實現即時雙向庫存同步
- Shopify Flow 可自動根據客戶地址分配出貨倉庫
- 安全庫存需用 Metafield 自行管理,搭配低庫存通知
- 定期輪詢校正可彌補 Webhook 遺失事件的風險
在 Shopify Plus 上設定多倉庫庫存同步,需要啟用 Shopify Markets 與多 Location 功能,透過 Inventory API 或第三方 OMS 將本地倉(香港)與海外倉(如新加坡、台灣、澳洲)的庫存數據即時整合,實現跨區域庫存可視化與自動分配。本教學將一步步帶你完成從 Location 設定、API 串接、到庫存同步邏輯的完整流程。
為什麼香港商家需要多倉庫庫存同步?
香港作為亞太物流樞紐,許多 D2C 品牌同時經營本地市場與跨境電商。根據 Shopify 2024 年度報告,使用多倉庫出貨的商家平均配送時間縮短了 40%,退貨率降低 12%。當你在香港設有本地倉、同時在台灣或新加坡設有前置倉時,庫存同步就不再是「nice to have」,而是營運核心。
常見的痛點包括:
- 超賣風險:兩個倉庫的庫存沒有即時同步,同一件商品在不同渠道被重複售出
- 配送延遲:系統無法根據客戶地址自動選擇最近倉庫出貨
- 人工對帳成本:團隊每天花 2-3 小時手動核對各倉庫的庫存數字
我們在 2024 年 Q3 為一家香港護膚品牌實施多倉庫同步時,他們原本使用 Google Sheets 手動管理香港倉與台灣倉的庫存——每週平均發生 3-5 次超賣。導入 Shopify Plus 多 Location + 自定義 Inventory API 串接後,超賣事件在上線第一個月降至零,倉管人員每日節省約 2.5 小時。
開始前的先決條件
在動手設定之前,請確認以下項目已就緒:
帳戶與方案要求
- Shopify Plus 方案:多 Location 路由功能(Shopify Fulfillment Priority)與進階 API 存取權限需要 Plus 方案
- Shopify Markets 已啟用:前往 Settings → Markets 確認你的目標市場已建立
- Staff 帳戶權限:操作人員需具備
Manage locations和Manage inventory權限
技術環境
- Node.js 18+ 或 Python 3.10+(用於 API 串接腳本)
- Shopify CLI 3.x 已安裝
- 一組 Custom App 的 API credentials(Admin API access token,需勾選
read_inventory、write_inventory、read_locationsscope)
倉庫資訊準備
為每個倉庫準備以下資訊:
- 倉庫名稱(例:HK Main Warehouse、TW Forward Warehouse)
- 完整地址與所屬國家/地區
- 該倉庫負責出貨的市場範圍
- WMS 系統名稱與 API 文件(如有)
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
第一步:在 Shopify Plus 後台建立多個 Location
操作路徑
- 登入 Shopify Plus 管理後台
- 前往 Settings → Locations
- 點擊 Add location
- 填入倉庫名稱、地址
- 勾選 Fulfill online orders from this location
- 點擊 Save
對每個倉庫重複以上步驟。Shopify Plus 最多支援 200 個 Location(根據 Shopify 官方文件),遠超一般方案的 10 個上限。
設定出貨優先順序
建立 Location 後,你需要設定 Fulfillment Priority:
- 前往 Settings → Shipping and delivery
- 在 Fulfillment priority 區塊中,拖曳排列各 Location 的優先順序
- 將最接近主要客群的倉庫放在最上方
例如,若你的主力市場是香港本地,將 HK Main Warehouse 排在第一位;若訂單來自台灣,系統會根據庫存可用性自動回落到 TW Forward Warehouse。
第二步:透過 Admin API 批量設定庫存層級
手動在後台逐一設定每個 SKU 的庫存數量既慢且易出錯。以下用 Shopify Admin API(2024-10 版本)批量設定。
取得 Location ID
首先查詢所有 Location 的 ID:
1curl -X GET "https://your-store.myshopify.com/admin/api/2024-10/locations.json" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN"
預期回傳:
1{2 "locations": [3 {4 "id": 67890001,5 "name": "HK Main Warehouse",6 "country_code": "HK"7 },8 {9 "id": 67890002,10 "name": "TW Forward Warehouse",11 "country_code": "TW"12 }13 ]14}
記下每個 Location 的 id,後續步驟會用到。
設定 Inventory Level
使用 inventory_levels/set endpoint 為特定 Location 設定庫存數量:
1curl -X POST "https://your-store.myshopify.com/admin/api/2024-10/inventory_levels/set.json" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "location_id": 67890001,6 "inventory_item_id": 12345678,7 "available": 1508 }'
預期回傳:
1{2 "inventory_level": {3 "inventory_item_id": 12345678,4 "location_id": 67890001,5 "available": 150,6 "updated_at": "2025-06-15T10:30:00+08:00"7 }8}
批量處理腳本範例(Node.js)
當 SKU 數量超過數百個時,建議用腳本批量處理:
1import Shopify from '@shopify/shopify-api';23const client = new Shopify.Clients.Rest({4 domain: 'your-store.myshopify.com',5 accessToken: process.env.SHOPIFY_ACCESS_TOKEN,6});78const inventoryUpdates = [9 { inventory_item_id: 12345678, location_id: 67890001, available: 150 },10 { inventory_item_id: 12345678, location_id: 67890002, available: 75 },11 { inventory_item_id: 12345679, location_id: 67890001, available: 200 },12 // ... 更多 SKU13];1415async function syncInventory() {16 for (const update of inventoryUpdates) {17 try {18 const response = await client.post({19 path: 'inventory_levels/set',20 data: update,21 type: 'application/json',22 });23 console.log(`Updated item ${update.inventory_item_id} at location ${update.location_id}: ${response.body.inventory_level.available}`);24 } catch (error) {25 console.error(`Failed for item ${update.inventory_item_id}:`, error.message);26 }27 // Shopify Plus API rate limit: 每秒最多 20 requests (根據 Shopify API 文件)28 await new Promise(resolve => setTimeout(resolve, 100));29 }30}3132syncInventory();
注意:Shopify Plus 的 API 速率限制為 Leaky Bucket 機制,每秒最多 20 requests(根據 Shopify API 速率限制文件)。腳本中加入 100ms 延遲可避免觸發限制。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
第三步:設定 Webhook 實現即時庫存變動通知
庫存同步的關鍵在於「即時性」。Shopify 提供 inventory_levels/update Webhook,讓你在任何庫存變動時收到通知。
註冊 Webhook
1curl -X POST "https://your-store.myshopify.com/admin/api/2024-10/webhooks.json" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "webhook": {6 "topic": "inventory_levels/update",7 "address": "https://your-middleware.branch8.com/webhooks/inventory",8 "format": "json"9 }10 }'
Webhook Payload 範例
當庫存變動時,Shopify 會發送以下格式的 payload:
1{2 "inventory_item_id": 12345678,3 "location_id": 67890001,4 "available": 148,5 "updated_at": "2025-06-15T14:22:00+08:00"6}
你的 middleware 收到此通知後,可以將變動同步到 WMS 或其他銷售渠道。
第四步:串接外部 WMS 與 OMS 建立雙向同步
大部分香港商家使用的本地倉會搭配 WMS 系統(如 LOCAD、ShipHero、或本地的 e+Solutions)。海外倉則可能使用不同的 3PL 系統。雙向同步的架構如下:
同步架構設計
- Shopify → WMS 方向:當 Shopify 產生訂單,透過
orders/createWebhook 將出貨指令推送到對應倉庫的 WMS - WMS → Shopify 方向:當 WMS 完成入庫、出庫或盤點調整,透過排程任務(cron job)或 WMS 的 Webhook 回寫 Shopify Inventory API
使用 Shopify Flow 自動化分倉邏輯
Shopify Plus 內建的 Shopify Flow 可以設定自動化規則:
- 前往 Shopify Admin → Apps → Shopify Flow
- 建立新的 Workflow
- 觸發條件(Trigger):Order created
- 條件判斷(Condition):檢查 shipping address 的國家/地區代碼
- 動作(Action):為訂單標記對應的出貨倉庫 tag
具體的 Flow 邏輯範例:
- 若
shipping_address.country_code == "HK"→ 標記fulfill-from: HK-MAIN - 若
shipping_address.country_code == "TW"→ 標記fulfill-from: TW-FORWARD - 若
shipping_address.country_code == "SG"→ 標記fulfill-from: SG-3PL - 其他地區 → 標記
fulfill-from: HK-MAIN(回落到主倉)
這些 tag 會被你的 middleware 讀取,用來決定將出貨指令推送到哪個 WMS。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
處理跨倉庫安全庫存與低庫存預警
跨倉庫運營時,每個 Location 需要獨立的安全庫存水位設定。Shopify 原生不支援 per-location safety stock,但可以透過以下方式實現:
使用 Metafield 儲存安全庫存值
1curl -X POST "https://your-store.myshopify.com/admin/api/2024-10/products/PRODUCT_ID/variants/VARIANT_ID/metafields.json" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "metafield": {6 "namespace": "inventory_config",7 "key": "safety_stock_hk",8 "value": "20",9 "type": "number_integer"10 }11 }'
你的同步腳本在計算可售庫存時,應扣除安全庫存值:
1const actualAvailable = wmsStock - safetyStock;2const shopifyAvailable = Math.max(0, actualAvailable);
低庫存通知設定
透過 Shopify Flow 設定低庫存通知:
- 觸發條件:Inventory quantity changed
- 條件判斷:
inventoryLevel.quantities.available <= 10 - 動作:發送 Slack 通知或 email 到採購團隊
根據 Statista 2024 年數據,亞太地區電商退貨率平均為 15-20%,因此安全庫存水位建議設定為平均日銷量的 3-5 倍,預留退貨入庫的緩衝空間。
常見問題排除與除錯指南
庫存數字不一致
症狀:Shopify 後台顯示的庫存與 WMS 不符。
排查步驟:
- 確認 Webhook 是否正常運作——前往 Settings → Notifications → Webhooks 檢查失敗記錄
- 用 API 直接查詢特定 SKU 的庫存:
1curl -X GET "https://your-store.myshopify.com/admin/api/2024-10/inventory_levels.json?inventory_item_ids=12345678&location_ids=67890001" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN"
- 比對 WMS 端的最後同步時間戳
- 檢查是否有其他 App 也在修改同一個 inventory_item 的庫存(常見衝突源)
API 速率限制錯誤
症狀:收到 429 Too Many Requests 回應。
解決方案:
- 在批量操作中加入指數退避(exponential backoff)
- 使用 GraphQL Admin API 的
inventorySetOnHandQuantitiesmutation 批量更新,單次可處理多個 item,減少 API 呼叫次數
1mutation {2 inventorySetOnHandQuantities(3 input: {4 reason: "correction"5 referenceDocumentUri: "https://your-wms.com/sync/20250615"6 quantities: [7 {8 inventoryItemId: "gid://shopify/InventoryItem/12345678"9 locationId: "gid://shopify/Location/67890001"10 quantity: 15011 }12 {13 inventoryItemId: "gid://shopify/InventoryItem/12345679"14 locationId: "gid://shopify/Location/67890001"15 quantity: 20016 }17 ]18 }19 ) {20 inventoryAdjustmentGroup {21 reason22 changes {23 name24 delta25 }26 }27 userErrors {28 field29 message30 }31 }32}
Webhook 遺失事件
症狀:部分庫存變動沒有觸發 Webhook。
解決方案:Webhook 不保證 100% 送達(根據 Shopify Webhook 文件,建議搭配定期輪詢)。設定每 15-30 分鐘的 cron job,用 Inventory API 拉取完整庫存快照做比對校正。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
進階:利用 AI 預測優化跨倉庫備貨
多倉庫同步解決了「即時」的問題,但「預測」才是降低物流成本的關鍵。目前 Branch8 團隊在專案中開始導入 LLM-augmented 需求預測:
- 將歷史銷售數據、季節性因素、行銷活動排程餵入預測模型
- 根據預測結果自動生成跨倉調撥建議
- 透過 Shopify Flow + 自定義 API 自動執行調撥指令
根據 McKinsey 2024 年供應鏈報告,採用 AI 驅動的需求預測的企業,庫存持有成本平均降低 20-30%。這對於同時經營香港、台灣、東南亞多個市場的品牌而言,可以顯著降低跨倉庫備貨的資金壓力。
操作檢查清單:上線前確認項目
在正式上線多倉庫同步前,逐項確認:
- 所有 Location 已建立且地址正確
- Fulfillment Priority 順序已設定
- 每個 SKU 在每個 Location 都有正確的初始庫存值
- Webhook 已註冊且 endpoint 回應正常(HTTP 200)
- WMS 雙向同步已在 staging 環境測試通過
- 安全庫存 Metafield 已為高流量 SKU 設定
- 低庫存通知 Flow 已啟用
- 團隊已完成操作培訓,知道如何在 Shopify 後台查看各 Location 庫存
- 設定了每日庫存比對報告(Shopify vs WMS),連續 7 天無差異後才算穩定
如果你正在規劃香港或亞太區的多倉庫電商架構,Branch8 的技術團隊可以協助你從 Shopify Plus 設定、API 串接到 WMS 整合的全流程實施。歡迎透過 branch8.com 預約免費技術諮詢。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Sources
FAQ
根據 Shopify 官方文件,Shopify Plus 方案最多支援 200 個 Location,遠超一般方案的 10 個上限。這足以覆蓋大多數亞太多倉庫佈局需求,包括本地倉、海外前置倉與第三方物流倉。
About the Author
Matt Li
Co-Founder & CEO, Branch8 & Second Talent
Matt Li is Co-Founder and CEO of Branch8, a Y Combinator-backed (S15) Adobe Solution Partner and e-commerce consultancy headquartered in Hong Kong, and Co-Founder of Second Talent, a global tech hiring platform ranked #1 in Global Hiring on G2. With 12 years of experience in e-commerce strategy, platform implementation, and digital operations, he has led delivery of Adobe Commerce Cloud projects for enterprise clients including Chow Sang Sang, HomePlus (HKBN), Maxim's, Hong Kong International Airport, Hotai/Toyota, and Evisu. Prior to founding Branch8, Matt served as Vice President of Mid-Market Enterprises at HSBC. He serves as Vice Chairman of the Hong Kong E-Commerce Business Association (HKEBA). A self-taught software engineer, Matt graduated from the University of Toronto with a Bachelor of Commerce in Finance and Economics.