在
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, andremove)的单个原子子批次不能超过 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之前和之后)。