Alan Maskeleri Kullanılarak Güncellemeler

Google Ads API'de güncellemeler bir alan maskesi kullanılarak yapılır. Alan maskesi listeleri güncellemeyle değiştirmek istediğiniz tüm alanlar ve belirtilen tüm alanlar verileri, sunucuya gönderilse bile yoksayılır.

FieldMaskUtil

Alan maskeleri oluşturmak için önerilen yol, yerleşik alan maskemizi kullanmaktır özel ayrıntıların çoğunu gizleyen ve kullanarak alan oluşturmanıza olanak tanıyan maskeleri otomatik olarak devre dışı bırakabilirsiniz.

Bir kampanyayı güncellemek için alan maskesini nasıl oluşturacağınız aşağıda açıklanmıştır:

campaign = client.resource.campaign
campaign.resource_name = client.path.campaign(customer_id, campaign_id)

mask = client.field_mask.with campaign do
  campaign.status = :PAUSED
  campaign.network_settings = client.resource.network_settings do |ns|
    ns.target_search_network = false
  end
end

Kod önce boş bir Campaign nesnesi oluşturur, ardından kaynak adını güncellendiği kampanya hakkında API'ye bilgi vermelidir.

Bu örnekte, başlamak için kampanyada client.field_mask.with yöntemi kullanılmaktadır: güncellemeleri de kapsayan bloklar. Bu bloğun sonunda, yardımcı program engellemeden sonraki kampanyanın mevcut durumunu, durumunu gösterir ve otomatik olarak bir alan oluşturur. maskeleme ya da örtüşme katmanıdır. Bu alan maskesini işlemini aşağıdaki gibi değiştirebilirsiniz:

operation = client.operation.campaign
operation.update = campaign
operation.update_mask = mask

Bu yöntem karmaşık bir işlem yaparken önerilir her adım üzerinde hassas kontrol sahibi olmak ister. Ancak çoğu durumda daha basit Ruby kitaplığı yardımcı programını kullanabilirsiniz:

operation = client.operation.update_resource.campaign do |c|
  c.status = :PAUSED
  c.network_settings = client.resource.network_settings do |ns|
    ns.target_search_network = false
  end
end

Bu yöntem, otomatik olarak yeni bir boş kampanya kaynağı oluşturur, alan maskesini blok içinde yaptığınız değişikliklere göre oluşturur, güncelleme işlemini oluşturur ve nihai işlemi update ve update_mask ile doldurulmuş olarak döndürür. Ayrıca, aşağıdakileri sağlamak için bir kampanyayı campaign yöntemine de iletebilirsiniz. kampanyanın başlangıç durumunu da belirtir. Bu kalıp tüm kaynaklara ekleyebilirsiniz.

Manuel olarak maske oluşturma

Herhangi bir kitaplık yardımcı programını kullanmadan sıfırdan bir alan maskesi oluşturmak için önce bir Google::Protobuf::FieldMask oluşturur, ardından bir dizi oluşturur istediğiniz tüm alanların adlarını girin ve son olarak diziyi, alan maskesinin path alanına atayın.

mask = Google::Protobuf::FieldMask.new
mask.path = ["status", "name"]

Mesaj alanlarını ve alt alanlarını güncelleme

MESSAGE alanlarının alt alanları olabilir (ör. Üç tane olan MaximizeConversions: target_cpa_micros, cpc_bid_ceiling_micros ve cpc_bid_floor_micros) veya hiçbirine sahip olamaz (ManualCpm gibi).

Tanımlanmış alt alanı olmayan mesaj alanları

Herhangi bir alt alanla tanımlanmamış bir MESSAGE alanını güncellerken FieldMaskUtil'i kullanır.

Tanımlanmış alt alanları olan ileti alanları

Aşağıdaki değer içermeyen alt alanlarla tanımlanmış bir MESSAGE alanını güncellerken: alt alanlardan herhangi birini açıkça ayarladığınızda, FieldMask öğesine ait değişebilir MESSAGE alt alanlarının her biri, önceki örneği inceleyelim.

Yaygın bir örnek, yeni teklif stratejisindeki alanların hiçbirini ayarlamadan bir kampanyanın teklif stratejisini güncellemektir. Aşağıdaki örnek bir kampanyanın MaximizeConversions teklif stratejisi teklif stratejisindeki alt alanlardan hiçbirini ayarlamadan.

Bu örnekte, FieldMaskUtil'in yerleşik karşılaştırmasını ve amaçlanan hedefe ulaşmaktır.

Aşağıdaki kod, maximize_conversions içeren bir alan maskesi oluşturur. Ancak Google Ads API, bu durumu önlemek için bu davranışa izin vermez: alanları yanlışlıkla temizler ve FieldMaskError.FIELD_HAS_SUBFIELDS hatası.

# Creates a campaign with the proper resource name.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
end

# Update the maximize conversions field within the update block, so it's
# captured in the field mask
operation = client.operation.update_resource.campaign(campaign) do |c|
  c.maximize_conversions = client.resource.maximize_conversions
end

# Sends the operation in a mutate request that will result in a
# FieldMaskError.FIELD_HAS_SUBFIELDS error because empty MESSAGE fields cannot
# be included in a field mask.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
)

Aşağıdaki kod, bir kampanyanın Alt alanlarını ayarlamadan MaximizeConversions teklif stratejisi uygulayabilirsiniz.

# Create the operation directly from the campaign's resource name. Don't do
# anything in the block so that the field mask is empty. You could modify other
# fields in this block, just not the message field that is intended to have a
# blank subfield. We'll add that below.
campaign_resource_name = client.path.campaign(customer_id, campaign_id)
operation = client.operation.update_resource.campaign(campaign_resource_name) {}

# Manually add the maximize conversions subfield to the field mask so the API
# knows to clear it.
operation.update_mask.paths << "maximize_conversions.target_cpa_micros"

# This operation succeeds.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
)

Alanları temizleme

Bazı alanlar açıkça temizlenebilir. Önceki örneğe benzer şekilde, bu alanları açık bir şekilde alan maskesine eklemenizi öneririz. Örneğin, MaximizeConversions teklif stratejisi kullanan ve target_cpa_micros alanı, 0 değerinden büyük bir değerle ayarlanmış.

Aşağıdaki kod çalıştırılır: ancak maximize_conversions.target_cpa_micros alan maskesine eklenmez ve bu nedenle target_cpa_micros alanı:

# Create a campaign object representing the campaign you want to change.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
end

# The field mask in this operation will include 'maximize_conversions',
# but not 'maximize_conversions.target_cpa_micros', so it will result in an
# error.
operation = client.operation.update_resource.campaign(campaign) do |c|
  c.maximize_conversions = client.resource.maximize_conversions do |mc|
    mc.target_cpa_micros = 0
  end
end

# Operation will fail since field mask is incorrect.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
end

Aşağıdaki kod, target_cpa_micros etiketinin nasıl düzgün bir şekilde silineceğini gösterir alanına MaximizeConversions ulaşabilirsiniz.

# Create a campaign including the maximize conversions fields right away, since
# we're going to manually add them to the field mask.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
  c.maximize_conversions = client.resource.maximize_conversions do |mc|
    mc.target_cpa_micros = 0
  end
end

# Create the operation with an empty field mask. You may add a block here with
# other changes that will automatically get added to the field mask.
operation = client.operation.update_resource.campaign(campaign) {}

# Add the field to the field mask so the API knows to clear it.
operation.update_mask.paths << 'maximize_conversions.target_cpa_micros'

# Operation will succeed since we specified the correct field mask.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
end

"Yanlış" bilginin kod, tanımlanmış alanlar için amaçlandığı gibi çalışıyor Google Ads API'de protocol buffers optional olarak. Ancak target_cpa_micros optional alanı değil, "yanlış" kod, teklifi güncellemez stratejisini kullanarak target_cpa alanını temizleyin.