在 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的LISTING_GROUP条件 (AdGroupCriterion.listing_group) 的连续AdGroupCriterionOperation操作(create、update和remove)的单个原子子批次长度不能超过 20,000 个操作。不过,建议不要超过 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。
这些错误表示该索引处的运算已回滚,因为同一原子子批处理中的另一运算失败。如需找出问题的根本原因,请在每个 BatchJobResult 中(在事务错误的 operation_index 之前和之后)遍历 status 消息,以查找共享相同 AdGroup 或 AssetGroup ID 的操作。