Как использовать фильтры групп предложений в пакетных заданиях

При работе с фильтрами групп предложений в контексте AdGroupCriterion.listing_group или AssetGroupListingGroupFilter учитывайте следующие рекомендации при разработке интеграции.

Пакетное разделение

Если в пакетном задании есть операции, содержащие критерии группы объявлений или фильтры группы товаров, то при получении сервером Google Рекламы API эти операции разбиваются на несколько подпакетов. В отличие от стандартных операций в пакетном задании, каждый подпакет, содержащий операции фильтрации групп товаров, обрабатывается атомарно.

Разделение пакетных заданий с фильтрами групп предложений на подпакеты определяется следующими факторами:

  1. Тип фильтра группы товаров
  2. Фильтр группы предложений AdGroup или AssetGroup
  3. Порядок действий

Рассмотрим, как группируются операции:

  • Все последовательные операции AssetGroupListingGroupFilterOperation (create, update и remove), направленные на один и тот же объект AssetGroup, группируются в атомарный подпакет (без частичного сбоя).
  • Все последовательные операции AdGroupCriterionOperation (create, update и remove) для критериев LISTING_GROUP (AdGroupCriterion.listing_group) с таргетингом на один и тот же объект AdGroup группируются в атомарный подпакет (частичные сбои невозможны).
  • Все остальные последовательные операции группируются в неатомарные подпакеты (поведение при частичном сбое).

Эта концепция проиллюстрирована на схеме ниже. Каждый серый прямоугольник представляет пакетное задание, отправленное с помощью Google Ads API. В серых блоках отдельные операции сгруппированы по цветам, которые обозначают подпакеты, созданные сервером Google Ads API. Порядок операций в каждом из серых полей соответствует порядку, в котором операции были бы добавлены в пакетное задание.

Диаграмма, показывающая пакетные операции, сгруппированные в подпакеты

Ограничения

При работе с фильтрами групп предложений в контексте пакетных заданий действуют следующие ограничения:

  • Один атомарный подпакет последовательных операций 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:

Эти ошибки указывают, что операция по указанному индексу была отменена, поскольку другая операция в том же атомарном подпакете не удалась. Чтобы определить основную причину проблемы, просмотрите сообщения status в каждом BatchJobResult до и после operation_index ошибки транзакции для операций с одинаковым идентификатором AdGroup или AssetGroup.