空のメッセージ オブジェクトをフィールドとして設定する

Google Ads API では、入札戦略の選択を示すために一部のメッセージ フィールドが使用されます。 キャンペーンたとえば、次のようなものがあります。

  • 完全に空のメッセージ: たとえば、 campaign.manual_cpm には サブフィールドが定義されていません。
  • オプションのフィールドを含むメッセージ: たとえば、campaign.manual_cpc にはオプションのサブフィールド enhanced_cpc_enabled があります。

campaign.name などのプリミティブ フィールドを更新するには、直接設定します。

campaign.name = "Test campaign value"

拡張クリック単価を有効にする際に、設定可能なサブフィールドを含むネストされたメッセージ(campaign.manual_cpc など)を更新するには、次のように設定します。

campaign.manual_cpc.enhanced_cpc_enabled = True

完全に空のメッセージを設定する

空の メッセージである manual_cpmなどの入札戦略を使用するには:

  1. メッセージ タイプ (ManualCpm)の空のインスタンスを取得します。
  2. client.copy_from を使用して、この空のインスタンスをキャンペーンのフィールドに割り当てます。
  3. CampaignOperationupdate_mask にフィールド名(manual_cpm)を手動で追加します。フィールド マスク ヘルパーは、空のメッセージが明示的に設定されていることを自動的に検出できません。
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Get an empty ManualCpm type
empty_cpm = client.get_type('ManualCpm')
# 2. Copy it to the campaign's manual_cpm field
client.copy_from(campaign.manual_cpm, empty_cpm)

# 3. Manually add "manual_cpm" to the update_mask.
from google.api_core.protobuf_helpers import field_mask
campaign_operation = client.get_type('CampaignOperation')
campaign_operation.update = campaign
campaign_operation.update_mask = field_mask(None, campaign)
campaign_operation.update_mask.paths.append("manual_cpm")

# The resulting proto sent to the API will include:
# manual_cpm {
# }

オプションのサブフィールドを含むメッセージを設定する

enhanced_cpc_enabled を有効にせずに manual_cpc を入札戦略として使用するには、ManualCpm と同様の方法を試すことができます。ただし、ManualCpc には サブフィールドがあるため、manual_cpcupdate_mask に追加すると、 FieldMaskError.FIELD_HAS_SUBFIELDS エラーが発生します。マスク内のメッセージにサブフィールドがある場合、API ではより具体的な指定が必要になります。

enhanced_cpc_enabled を設定せずに campaign.manual_cpc を正しく設定するには:

  1. 空の ManualCpc オブジェクトをインスタンス化して、campaign.manual_cpc に割り当てます。
  2. update_maskCampaignOperation に、ManualCpc の変更可能な各サブフィールドへのパスを手動で追加します。この場合、関連するサブフィールドは enhanced_cpc_enabledです。
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Instantiate and assign an empty ManualCpc
campaign.manual_cpc = client.get_type('ManualCpc')

# 2. Manually add the subfield path to the update_mask.
from google.api_core.protobuf_helpers import field_mask
campaign_operation = client.get_type('CampaignOperation')
campaign_operation.update = campaign
campaign_operation.update_mask = field_mask(None, campaign)

# For ManualCpc, because it has subfields, you MUST specify the subfield
# path in the update_mask. This tells the API you are updating something
# within manual_cpc. By not setting enhanced_cpc_enabled on the campaign
# object, it defaults to false.
campaign_operation.update_mask.paths.append("manual_cpc.enhanced_cpc_enabled")

# The update_mask paths will include: ['manual_cpc.enhanced_cpc_enabled']
# This correctly signals to the API that ManualCpc is the chosen strategy,
# with enhanced_cpc_enabled in its default state.

これらのパターンを使用してリクエストを送信する場合は、ペイロードを 確認するには、ロギングを有効にして リクエストを検査します。