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 bir Ruby kitaplık yardımcı programı:
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 maskesi, blok içinde yaptığınız değişikliklere dayalı olarak
işlemi ve update ve update_mask ile son işlemi döndürür
önceden doldurulmuştur. 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 alanlara sahip mesaj 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 olarak, bir kampanyanın teklif stratejisini
yeni teklif stratejisindeki alanların herhangi birine dokunun. 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 değerini 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 temizleniyor
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
Not: “yanlış” 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.