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.