打通 Odoo 与 WooCommerce 库存订单同步桥接

解决多平台电商运营痛点:通过 AI 自动生成 Python 脚本,连接 Odoo ERP 后端系统与 WooCommerce 前端商店,实现产品目录、实时库存、订单流转及客户信息的自动化双向同步。

为什么需要这个技能

在跨境电商业务中,商家常使用 Odoo 作为后端 ERP 管理库存和财务,而用 WooCommerce 作为 WordPress 前端店铺销售。若手动维护两端数据,极易出现超卖、库存不一致或订单处理延迟。

本技能利用 WooCommerce REST API 和 Odoo XML-RPC 接口,让 AI 自动生成桥接脚本,确保前店后仓数据实时对齐,无需人工干预。

适用场景

  • 需要每天自动将 WooCommerce 新订单导入 Odoo 并转为销售订单。
  • 需根据 Odoo 仓库库存实时扣减 WooCommerce 显示销量,防止超卖。
  • 产品 SKU 在 Odoo 中变更(如名称、描述),需同步更新到 WooCommerce 前端页面。
  • 客户信息需从 WooCommerce 自动补全到 Odoo 的联系人记录中。

核心工作流

  1. 激活技能:在对话中提及 @odoo-woocommerce-bridge 并描述同步需求。
  2. 设计映射:获取 WooCommerce 字段与 Odoo 对象的对应关系表(如订单状态 processing 对应 Odoo 的 sale)。
  3. 生成脚本:收到包含 WooCommerce REST API 调用和 Odoo 数据写入逻辑的 Python 代码。
  4. 部署运行:将脚本部署到服务器,配置环境变量(如 API URL、密钥、数据库凭据)即可运行。

代码示例

以下是生成的 Python 脚本,用于从 WooCommerce 拉取待处理订单并写入 Odoo:

from woocommerce import API
import xmlrpc.client
import os

# WooCommerce client
wcapi = API(
    url=os.getenv("WC_URL", "https://mystore.com"),
    consumer_key=os.getenv("WC_KEY"),
    consumer_secret=os.getenv("WC_SECRET"),
    version="wc/v3"
)

# Odoo client
odoo_url = os.getenv("ODOO_URL", "https://myodoo.example.com")
db = os.getenv("ODOO_DB", "my_db")
uid = int(os.getenv("ODOO_UID", "2"))
pwd = os.getenv("ODOO_PASSWORD")
models = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")


def sync_orders():
    # Get unprocessed WooCommerce orders
    orders = wcapi.get("orders", params={"status": "processing", "per_page": 50}).json()

    for wc_order in orders:
        # Find or create Odoo partner
        email = wc_order['billing']['email']
        partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search',
            [[['email', '=', email]]])
        if not partner:
            partner_id = models.execute_kw(db, uid, pwd, 'res.partner', 'create', [{
                'name': f"{wc_order['billing']['first_name']} {wc_order['billing']['last_name']}",
                'email': email,
                'phone': wc_order['billing']['phone'],
                'street': wc_order['billing']['address_1'],
                'city': wc_order['billing']['city'],
            }])
        else:
            partner_id = partner[0]

        # Create Sale Order in Odoo
        order_lines = []
        for item in wc_order['line_items']:
            product = models.execute_kw(db, uid, pwd, 'product.product', 'search',
                [[['default_code', '=', item['sku']]]])
            if product:
                order_lines.append((0, 0, {
                    'product_id': product[0],
                    'product_uom_qty': item['quantity'],
                    'price_unit': float(item['price']),
                }))

        models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{
            'partner_id': partner_id,
            'client_order_ref': f"WC-{wc_order['number']}",
            'order_line': order_lines,
        }])

        # Mark WooCommerce order as on-hold (processed by Odoo)
        wcapi.put(f"orders/{wc_order['id']}", {"status": "on-hold"})

以及用于将 Odoo 库存同步回 WooCommerce 的脚本:

def sync_inventory_to_woocommerce():
    # Get all products with a SKU from Odoo
    products = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',
        [[['default_code', '!=', False], ['type', '=', 'product']]],
        {'fields': ['default_code', 'qty_available']}
    )

    for product in products:
        sku = product['default_code']
        qty = int(product['qty_available'])

        # Update WooCommerce by SKU
        wc_products = wcapi.get("products", params={"sku": sku}).json()
        if wc_products:
            wcapi.put(f"products/{wc_products[0]['id']}", {
                "stock_quantity": qty,
                "manage_stock": True,
            })

最佳实践与限制

  • 推荐:始终使用 SKU 作为链接 Odoo 产品与 WooCommerce 产品的唯一标识。
  • 推荐:设置定时任务(如每 15-30 分钟)运行库存同步,避免触碰 API 频率限制。
  • 推荐:将所有 API 调用日志记录到数据库表,便于排查错误。
  • 避免:切勿将状态为 draftcancelled 的 WooCommerce 订单同步至 Odoo。
  • 避免:不要在导入后立即再次处理同一订单,应立即将其状态标记为 on-hold

下载和安装

下载 odoo-woocommerce-bridge 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体配置参考内附文档。

你可能还需要

暂无推荐