При работе с фильтрами групп объявлений в контексте AdGroupCriterion.listing_group или AssetGroupListingGroupFilter , при проектировании интеграции следует учитывать следующие моменты.
Разделение на партии
Если в пакетном задании есть операции, содержащие критерии для групп объявлений или фильтры для групп активов, то при получении сервером Google Ads API эти операции разбиваются на несколько подпакетов . В отличие от стандартных операций в пакетном задании, каждый подпакет, содержащий операции с фильтрами групп объявлений, обрабатывается атомарно.
Способ разделения пакетных заданий, содержащих фильтры групп, на подпакеты определяется следующими факторами:
- Тип фильтра группы объявлений
- Группа
AdGroupилиAssetGroupна которую нацелен фильтр группы объявлений. - Порядок действий
Рассмотрим, как сгруппированы операции:
- Все последовательные операции
AssetGroupListingGroupFilterOperation(create,updateиremove), нацеленные на одну и ту жеAssetGroupгруппируются в атомарный подпакет (отсутствует частичное прерывание). - Все последовательные операции
AdGroupCriterionOperation(create,updateиremove) для критериевLISTING_GROUP(AdGroupCriterion.listing_group), нацеленные на одну и ту жеAdGroup, группируются в атомарный подпакет (отсутствует частичное поведение, приводящее к сбою). - Все остальные последовательные операции группируются в неатомарные подгруппы (поведение, характеризующееся частичным отказом).
Следующая диаграмма иллюстрирует эту концепцию. Каждый из серых прямоугольников представляет собой пакетное задание, отправленное с использованием API Google Ads. Внутри серых прямоугольников отдельные операции сгруппированы по цвету, чтобы представить подпакеты, создаваемые сервером API Google Ads. Порядок операций в каждом из серых прямоугольников соответствует порядку, в котором операции были бы добавлены в пакетное задание.
Ограничения
При работе с фильтрами групп в контексте пакетных заданий действуют следующие ограничения:
- Один атомарный подпакет последовательных операций
AdGroupCriterionOperation(create,updateиremove) для критериевLISTING_GROUP(AdGroupCriterion.listing_group), нацеленных на одну и ту жеAdGroup, не может превышать 20 000 операций. Однако рекомендуется не превышать 10 000 операций. Поскольку каждыйAddBatchJobOperationsRequestограничен 10 000 операциями, подпакетAdGroupот 10 001 до 20 000 операций должен быть загружен как минимум в двух последовательных запросахAddBatchJobOperations. - Количество последовательных атомарных подпакетов операций
AssetGroupListingGroupFilterOperation(create,updateиremove), нацеленных на одну и ту жеAssetGroupне может превышать 10 000 операций. - Нарушение любого из этих ограничений по количеству операций (или превышение внутреннего ограничения сервера на размер сериализованных байтов для одного подпакета) приводит к прерыванию пакетного задания на этом подпакете: все более ранние подпакеты, которые уже завершились, остаются зафиксированными, в то время как все операции в проблемном подпакете и любых последующих подпакетах завершаются с
InternalError.INTERNAL_ERROR.
Поиск неисправностей
Операции фильтрации по группам в пакетном задании обрабатываются как одна транзакция, что может привести к ситуациям, когда множество операций завершаются с ошибкой из-за небольшого количества ошибочных операций. Кроме того, из-за особенностей обработки операций BatchJob , первопричина сбоев может находиться в индексе до или после последующих сбоев.
Например, при обработке ответа от ListBatchJobResults :
- Для групп объявлений
AdGroupCriterionOperationможет наблюдаться ошибкаCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATION(Операции с группами товаров являются атомарными в рамках одной группыAdGroupProduct 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.
Эти ошибки указывают на то, что операция по этому индексу была отменена из-за сбоя другой операции в том же атомарном подпакете. Чтобы определить первопричину проблемы, пройдитесь по сообщениям status в каждом BatchJobResult — до и после operation_index ошибки транзакции — для операций, имеющих одинаковый идентификатор AdGroup или AssetGroup .