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

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 にはサブフィールドがあるため、update_maskmanual_cpc を追加すると、FieldMaskError.FIELD_HAS_SUBFIELDS エラーが発生します。マスク内のメッセージにサブフィールドがある場合、API にはより具体的な指定が必要です。

enhanced_cpc_enabled を設定しないまま campaign.manual_cpc を正しく設定するには:

  1. 空の ManualCpc オブジェクトをインスタンス化して、campaign.manual_cpc に割り当てます。
  2. ManualCpc の変更可能な各サブフィールドのパスを CampaignOperationupdate_mask に手動で追加します。この場合、関連するサブフィールドは 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.

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