You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify自动结账Bot误判L码库存问题排查求助

问题排查与修复方案

针对你的Shopify自动结账Bot无法正确识别有库存的L码变体问题,以下是具体排查点和修复代码:

核心问题分析

  1. 未验证变体库存状态:当前compare_variants仅匹配尺寸,未检查该变体是否实际有库存。即使找到尺寸匹配的变体,若其库存为0,函数仍会返回,导致后续逻辑误判为该尺寸不可用;或者第一个匹配的变体无库存,后续有库存的同尺寸变体未被遍历。
  2. 尺寸匹配逻辑存在误判风险:直接用selected_size in title的方式,会导致类似"XL"被误匹配为"L"(因为"l"是"xl"的子串)。
  3. 库存字段判断不准确:仅依赖inventory_quantity可能失效——部分Shopify店铺使用第三方库存管理时,该字段会为null,此时应优先使用变体自带的available布尔字段判断是否可购买。

修复后的代码

1. 优化get_product_variants函数

添加available字段的获取,同时保留inventory_quantity作为补充:

def get_product_variants(updated_link):
    endpoint = updated_link
    try:
        response = requests.get(endpoint)
        response.raise_for_status()
        product_data = response.json()
        variants = product_data.get('variants', [])
        variant_objects = []

        for variant in variants:
            vid = variant.get('id')
            title = variant.get('title')
            # 优先使用available字段判断是否可购买,inventory_quantity作为补充
            available = variant.get('available', False)
            stock = variant.get('inventory_quantity', 0)
            variant_objects.append(Variant(vid, title, stock, available))

        return variant_objects
    except requests.exceptions.HTTPError as e:
        print(f"Failed to get variants: {e}")
        return []

注意:需要同步修改Variant类,添加available属性。

2. 重构compare_variants函数

加入库存验证,优化尺寸匹配逻辑以避免误判:

import re

def compare_variants(variant_list, selected_size):
    size_synonyms = {
        "xs": ["extra small", "x-small", "xs"],
        "s": ["small", "s"],
        "m": ["medium", "m"],
        "l": ["large", "l"],
        "xl": ["extra large", "x-large", "xl"],
    }
    
    selected_size = selected_size.lower()
    # 找到目标尺寸的所有同义词(包括自身)
    target_size_keys = []
    for size_key, synonyms in size_synonyms.items():
        if selected_size == size_key or selected_size in synonyms:
            target_size_keys = [size_key] + synonyms
            break
    else:
        # 未找到匹配的尺寸同义词,直接返回None
        return None

    # 遍历变体,优先匹配有库存的
    for variant in variant_list:
        # 跳过无库存的变体
        if not variant.available and variant.stock <= 0:
            continue
            
        title = variant.title.lower()
        # 使用正则匹配完整的尺寸单词,避免子串误匹配(比如"xl"不会被当成"l")
        for size in target_size_keys:
            if re.search(rf'\b{re.escape(size)}\b', title):
                return variant
    
    return None

额外说明

  • 正则表达式中的\b用于匹配单词边界,确保"l"只会匹配独立的"L"或"large",不会被"xl"中的"l"触发。
  • 优先使用available字段是因为Shopify官方推荐用该字段判断变体是否可购买,它会综合inventory_quantity和inventory_policy(是否允许缺货下单)的状态。
  • 遍历变体时先跳过无库存的,确保返回的是实际可购买的变体。

内容的提问来源于stack exchange,提问作者axxtn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:48:28