Merchant API 地区表示可作为与 accounts.products.regionalInventories 资源相关的目标使用的地理区域。您可以将地区定义为邮政编码的集合,也可以在某些国家/地区使用预定义地理位置定位目标。如需了解详情,请参阅设置地区。
Merchant API 提供用于管理地区的批量端点,让您可以在单次 API 调用中创建、更新和删除最多 100 个地区。这非常适合大规模管理地区性库存状况和价格 (RAAP) 的商家,可提高效率并简化集成。
概览
借助 Batch API 和关联的方法,您可以完成以下操作:
- 在单个请求中创建多个区域:regions:batchCreate
- 一次性删除多个地区:regions:batchDelete
- 同时更新多个地区:regions:batchUpdate
前提条件
所有批量请求都需要 ADMIN 用户角色进行身份验证。
创建多个区域
此示例展示了如何在一次 BatchCreateRegions 调用中创建两个新区域,一个按邮政编码定义,另一个按地理位置定位定义。
请求
按如下方式构建请求网址:
POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchCreate
请求正文包含 requests 的列表,其中每个对象都指定了 regionId 和要创建的 region 数据。
{
  "requests": [
    {
      "regionId": "seattle-area-98340",
      "region": {
        "displayName": "Seattle Region",
        "postalCodeArea": {
          "regionCode": "US",
          "postalCodes": [
            {
              "begin": "98340"
            }
          ]
        }
      }
    },
    {
      "regionId": "co-de-states",
      "region": {
        "displayName": "Colorado and Delaware",
        "geoTargetArea": {
          "geotargetCriteriaIds": [
            "21138",
            "21141"
          ]
        }
      }
    }
  ]
}
响应
如果请求成功,则返回新的 region 对象列表。
{
  "regions": [
    {
      "name": "accounts/{ACCOUNT_ID}/regions/seattle-area-98340",
      "displayName": "Seattle Region",
      "postalCodeArea": {
        "regionCode": "US",
        "postalCodes": [
          {
            "begin": "98340"
          }
        ]
      },
      "regionalInventoryEligible": true,
      "shippingEligible": true
    },
    {
      "name": "accounts/{ACCOUNT_ID}/regions/co-de-states",
      "displayName": "Colorado and Delaware",
      "geotargetArea": {
        "geotargetCriteriaIds": [
          "21138",
          "21141"
        ]
      },
      "regionalInventoryEligible": false,
      "shippingEligible": false
    }
  ]
}
更新多个区域
此示例展示了如何使用 BatchUpdateRegions 更新两个现有区域的 displayName 和 postalCodeArea。您必须提供 region.name 才能更新目标区域。
请求
按如下方式构建请求网址:
POST https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchUpdate
请求正文包含一个 requests 列表。每个对象都必须指定要更新的 region 数据。region.name 字段必须包含要更新的区域的 ID,例如“98005”。将资源指定为 name,而不是 accounts/{ACCOUNT_ID}/regions/name。您可以选择是否添加 updateMask 来指明要更改的字段。
{
  "requests": [
    {
      "region": {
        "name": "98005",
        "displayName": "Seattle Updated Region",
        "postalCodeArea": {
          "regionCode": "US",
          "postalCodes": [
            {
              "begin": "98330"
            }
          ]
        }
      },
      "updateMask": "displayName,postalCodeArea"
    },
    {
      "region": {
        "name": "07086",
        "displayName": "NewYork Updated Region",
        "postalCodeArea": {
          "regionCode": "US",
          "postalCodes": [
            {
              "begin": "11*"
            }
          ]
        }
      },
      "updateMask": "displayName,postalCodeArea"
    }
  ]
}
响应
如果请求成功,则会返回更新后的 region 对象列表。
{
  "regions": [
    {
      "name": "accounts/{ACCOUNT_ID}/regions/98005",
      "displayName": "Seattle Updated Region",
      "postalCodeArea": {
        "regionCode": "US",
        "postalCodes": [
          {
            "begin": "98330"
          }
        ]
      },
      "regionalInventoryEligible": true,
      "shippingEligible": true
    },
    {
      "name": "accounts/{ACCOUNT_ID}/regions/07086",
      "displayName": "NewYork Updated Region",
      "postalCodeArea": {
        "regionCode": "US",
        "postalCodes": [
          {
            "begin": "11*"
          }
        ]
      },
      "regionalInventoryEligible": true,
      "shippingEligible": true
    }
  ]
}
删除多个区域
您可以在一次调用中删除多个区域。
请求
此示例展示了如何使用 BatchDeleteRegions 在一次调用中删除两个区域。
POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchDelete
请求正文包含 requests 的列表,其中每个对象都指定要删除的区域的 name(不含 "accounts/{ACCOUNT_ID}/regions/")。
{
  "requests":
   [
    {
      "name": "98005"
    },
    {
      "name": "07086"
    }
   ]
}
响应
如果请求成功,则返回空的响应正文,表示已删除(或不存在)指定区域。
{}
限制
在开始之前,请注意以下规则:
- 原子操作:批量请求是原子操作。如果批处理中的任何单个操作失败(例如,某个区域未能成功创建),整个批处理都会失败,并且不会进行任何更改。API 将返回一条错误消息,详细说明失败的原因。
- 批次限制:每个批次请求最多可包含 100 个区域操作。
- 配额:这些端点使用与其单操作对应项 (regions.create、regions.delete、regions.update) 相同的配额组。
常见错误和问题
下面列出了一些常见误区及其解决方案。
“批次中的请求数量过大”
如果请求数组中的操作数超过 100 的限制,则会出现此错误。
"error":
  {
    "code": 400,
    "message": "The number of requests in a batch is too large.",
    "status": "INVALID_ARGUMENT"
  }
如需解决此问题,请将操作拆分为多个批处理请求,每个请求包含 100 个或更少的操作。
必填字段未填写
当缺少必填字段时,会发生此错误。错误消息会指明缺少的参数。
错误消息如下所示:
- 对于 batchCreate:[regionId] Required parameter: regionId
- 对于 batchUpdate:[region.name] Required field not provided.
- 对于 batchDelete:[name] Required parameter: name
如需解决此问题,请验证每个操作中是否包含所有必填字段。例如,batchUpdate 请求中的每个条目都必须包含 region.name。发布以下请求会导致错误:
{
  "requests":
  [
    {
      "region":
        {
          "displayName": "An update without a region name"
        },
        "updateMask": "displayName"
    }
  ]
}
“具有指定 ID 的地区已存在”
如果您尝试创建具有已存在的 regionId 的区域,则会发生错误。
错误消息为 [regionId] Region with specified id already exists.。
如需解决此问题,请验证批次中的所有 regionId 值是否都是唯一的,并且不与现有区域冲突。
“发现字段 region.name 或 regionId 存在重复值”
如果您尝试在单个批量请求中创建或更新具有相同 ID 的多个区域,则会发生错误。
错误消息为 Duplicate value found for field {fieldName} in this batch
request with value {duplicated_value}.。
如需解决此问题,请验证单个批次请求中的所有 regionId(对于 batchCreate)或 region.name(对于 batchUpdate)值是否都是唯一的。
“找不到商品”
使用 batchUpdate 时,如果请求中指定的任何区域不存在,则整个批处理作业将失败并返回 404 NOT_FOUND 错误。这与 batchDelete 不同,后者对于不存在的区域也会成功。
"error": {
    "code": 404,
    "message": "item not found",
    "status": "NOT_FOUND"
}
如需解决此问题,请在发送请求之前验证您尝试更新的所有区域是否存在。