在 AdGroupCriterion.listing_group 或 AssetGroupListingGroupFilter 的上下文中处理产品信息组过滤条件时,请在设计集成时考虑以下事项。
批次拆分
如果批量作业中包含任何广告组条件或素材资源组产品信息组过滤条件,则当 Google Ads API 服务器收到该批量作业时,其中的操作会被拆分为多个子批次。与批处理作业中的标准操作不同,包含商品详情组过滤操作的每个子批次都会被视为原子操作。
包含产品信息组过滤条件的批量作业拆分为子批次的方式取决于以下因素:
- 产品信息组过滤条件的类型
AdGroup或AssetGroup产品信息组过滤条件所定位到的- 操作顺序
考虑如何对操作进行分组:
- 针对同一
AssetGroup的所有连续AssetGroupListingGroupFilterOperation操作(create、update和remove)都将分组到原子子批次中(不会出现部分失败行为)。 - 对于以同一
AdGroup为目标的LISTING_GROUP条件 (AdGroupCriterion.listing_group),所有连续的AdGroupCriterionOperation操作(create、update和remove)都将分组到一个原子子批次中(不会出现部分失败行为)。 - 所有其他连续操作都将分组到非原子子批次中(部分失败行为)。
下图展示了这一概念。每个灰色框都表示使用 Google Ads API 提交的批量作业。在灰色框内,各个操作按颜色分组,表示 Google Ads API 服务器创建的子批次。每个灰色框中的操作顺序与这些操作添加到批量作业中的顺序相对应。
限制
在批量作业中处理产品信息组过滤条件时,存在以下限制:
- 针对同一
AdGroup的连续AdGroupCriterionOperation操作(create、update和remove)的单个原子子批次(AdGroupCriterion.listing_group)不能超过 20,000 个操作。LISTING_GROUP条件不过,建议不要超过 10,000 次操作。由于每个AddBatchJobOperationsRequest的上限为 10,000 次操作,因此包含 10,001 至 20,000 次操作的AdGroup子批次必须通过至少两个连续的AddBatchJobOperations请求上传。 - 针对同一
AssetGroup的连续AssetGroupListingGroupFilterOperation操作(create、update和remove)的单个原子子批次不得超过 10,000 次操作。 - 如果违反了上述任一操作数限制(或超出服务器针对单个子批次的内部序列化字节大小限制),系统会中止相应子批次的批处理作业:之前已完成的任何子批次仍会保持提交状态,而违规子批次中的所有操作以及任何后续子批次都会失败,并显示
InternalError.INTERNAL_ERROR。
问题排查
批量作业中的产品信息组过滤条件操作会作为一项事务进行处理,这可能会导致因少量错误操作而导致许多操作失败。此外,由于 BatchJob 操作的处理方式,故障的根本原因可能会出现在下游故障之前的索引处,也可能会出现在下游故障之后的索引处。
例如,在处理来自 ListBatchJobResults 的响应时:
- 对于
AdGroupCriterionOperation商品详情组,您可能会发现,针对同一AdGroup的连续操作失败,并显示CriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATION(Product group operations are atomic within the same ad group. This operation failed because another operation targeting the same ad group ID was invalid.)。 - 对于
AssetGroupListingGroupFilterOperation操作,您可能会发现以同一AssetGroup为目标的连续操作失败,并显示BatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILURE。
这些错误表明,相应索引处的操作已回滚,因为同一原子子批次中的另一项操作失败。为了确定问题的根本原因,请针对共享相同 AdGroup 或 AssetGroup ID 的操作,遍历每个 BatchJobResult 中 status 消息(在交易错误 operation_index 之前和之后)。