Maski terenowe

W interfejsie Google Ads API aktualizacje są przeprowadzane za pomocą maski pola. Maska pola zawiera listę wszystkie pola, które chcesz zmienić w ramach aktualizacji, oraz wszystkie określone pola, nieuwzględnione w masce pola są ignorowane, nawet jeśli zostały wysłane na serwer.

Narzędzie FieldMasks

Zalecanym sposobem generowania masek pól jest użycie naszej wbudowanej maski pola za usługi komunalne (FieldMasks), który pozwala generować maski pól na podstawie zmodyfikowanego obiektu, zamiast od zera.

Oto przykład aktualizowania kampanii:

my $campaign = Google::Ads::GoogleAds::V17::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
    status => PAUSED,
    networkSettings =>
      Google::Ads::GoogleAds::V17::Resources::NetworkSettings->new({
        targetSearchNetwork => "false"
      })
    });

my $campaign_operation =
  Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign)
  });

W tym przykładzie najpierw tworzymy obiekt Campaign przez ustawienie jego nazwy zasobu za pomocą narzędzia ResourceNames. Dzięki temu interfejs API będzie wiedzieć, która kampania jest aktualizowana.

W przykładzie użyto funkcji FieldMasks::all_set_fields_of() w kampanii, aby automatycznie wygenerować maskę pola, która wylicza wszystkie ustaw pola. Zwróconą maskę możesz następnie przekazać bezpośrednio do wywołania aktualizacji.

FieldMasks::all_set_fields_of() to wygodny sposób na FieldMasks::field_mask() Porównuje przesłany obiekt z pustym obiektem tej samej klasy. W przypadku powyżej, możesz też użyć

field_mask(Google::Ads::GoogleAds::V17::Resources::Campaign->new({}), $campaign)

zamiast all_set_fields_of($campaign).

Ręczne tworzenie maski

Aby utworzyć od podstaw maskę pola, najpierw Google::Ads::GoogleAds::Common::FieldMask obiekt, a następnie ustaw odwołanie do tablicy wypełnione nazwami wszystkich pól którą chcesz zmienić, i na koniec przypisać odwołanie do tablicy do funkcji maski pola paths.

my $field_mask = Google::Ads::GoogleAds::Common::FieldMask->new({
    paths => ["status", "name"]
  });

Aktualizowanie pól obiektów i ich pól podrzędnych

Pola obiektu mogą zawierać pola podrzędne (takie jak MaximizeConversions, która obejmuje 3 elementy: target_cpa_micros, cpc_bid_ceiling_micros i cpc_bid_floor_micros); lub nie mogą nie mieć żadnej (np. ManualCpm).

Pola obiektu bez zdefiniowanych pól podrzędnych

Pole obiektu w języku Perl jest odpowiednikiem bufora protokołu MESSAGE w kliencie działających w gRPC. Podczas aktualizowania pola obiektu, które nie jest zdefiniowane z dowolnymi polami podrzędnymi, użyj narzędzia FieldMasks do wygenerowania maski pola, opisane powyżej.

Pola obiektu ze zdefiniowanymi polami podrzędnymi

Podczas aktualizowania pola obiektu zdefiniowanego za pomocą pól podrzędnych bez jawnie ustawiając dowolne z pól podrzędnych tej wiadomości, musisz ręcznie dodać każde zmiennych pól podrzędnych obiektów FieldMask, podobnie jak w przykładzie powyżej. który tworzy od zera maskę pola.

Typowy przykład to aktualizacja strategii ustalania stawek w kampanii bez ustawiania w nowej strategii określania stawek. Poniższy przykład pokazuje, jak zaktualizować kampanię, tak aby korzystała z Strategia ustalania stawek: MaximizeConversions bez konfigurowania żadnych pól podrzędnych strategii ustalania stawek.

W tym przypadku za pomocą metod all_set_fields_of() i field_mask() funkcji Narzędzie FieldMasks nie osiąga zamierzonego celu.

Ten przykład generuje maskę pola zawierającą maximize_conversions Interfejs Google Ads API nie zezwala na to jednak. w celu uniknięcia przypadkowego wyczyszczenia pól i wygenerowania FieldMaskError.FIELD_HAS_SUBFIELDS .

# Creates a campaign with the proper resource name and an empty
# MaximizeConversions field.
my $campaign = Google::Ads::GoogleAds::V17::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
    maximizeConversions =>
      Google::Ads::GoogleAds::V17::Resources::MaximizeConversions->new()
    });

# Constructs an operation, using the FieldMasks' all_set_fields_of utility to
# derive the update mask. The field mask will include 'maximize_conversions',
# which will produce a FieldMaskError.FIELD_HAS_SUBFIELDS error.
my $campaign_operation =
  Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign)
  });

# Sends the operation in a mutate request that will result in a
# FieldMaskError.FIELD_HAS_SUBFIELDS error because empty object fields cannot
# be included in a field mask.
my $response = $api_client->CampaignService()->mutate({
    customerId => $customer_id,
    operations => [$campaign_operation]
  });

Poniższy przykład pokazuje, jak prawidłowo zaktualizować kampanię, aby korzystała z MaximizeConversions strategia ustalania stawek bez ustawienia żadnego z pól podrzędnych.

# Creates a campaign with the proper resource name.
my $campaign = Google::Ads::GoogleAds::V17::Resources::Campaign->new({
    resourceName => Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
      $customer_id, $campaign_id
    )
  });

# Creates a field mask from the existing campaign and adds all of the fields
# on the MaximizeConversions bidding strategy to the field mask. Because these
# fields are included in the field mask but excluded from the campaign object,
# the Google Ads API will set the campaign's bidding strategy to a
# MaximizeConversions object with none of its subfields set.
# Only include 'maximize_conversions.target_cpa_micros' in the field mask
# as it is the only mutable subfield on MaximizeConversions when used as a
# standard bidding strategy.
#
# Learn more about standard and portfolio bidding strategies here:
# https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
my $field_mask = all_set_fields_of($campaign);
push @{$field_mask->{paths}}, "maximize_conversions.target_cpa_micros";

# Creates an operation to update the campaign with the specified fields.
my $campaign_operation =
  Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
    update     => $campaign,
    updateMask => $field_mask
  });

Czyszczenie pól

Pola można wyczyścić jawnie, dodając je do maski pola, jak pokazano na obrazku powyżej lub przez ustawienie w polu wartości pustej bądź niezdefiniowanej. Przykład: zakładamy, że masz kampanię, która korzysta ze strategii ustalania stawek MaximizeConversions a w polu target_cpa_micros ustawiona jest wartość większa niż 0

# Creates a campaign with the proper resource name and a MaximizeConversions
# object with target_cpa_micros set to 0.
my $campaign =
  Google::Ads::GoogleAds::V17::Resources::Campaign->new({
    resourceName => Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
      $customer_id, $campaign_id
    ),
    maximizeConversions => Google::Ads::GoogleAds::V17::Resources::MaximizeConversions->new({
      targetCpaMicros => 0
    })
  });

# Constructs an operation, using the FieldMasks' all_set_fields_of utility to
# derive the update mask, which will include 'maximize_conversions.target_cpa_micros'.
my $campaign_operation =
  Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign)
  });

Pamiętaj, że pola z zagnieżdżonymi polami podrzędnymi można wyczyścić tylko przez usunięcie każdego z poszczególnych pól podrzędnych, co pokazuje pola obiektów ze zdefiniowanymi wartościami .