List<CampaignOperation> operations = new List<CampaignOperation>(); CampaignServiceClient campaignService = client.GetService(Services.V1.CampaignService); Campaign campaign = new Campaign { Id = adCampaignId, ResourceName = ResourceNames.Campaign(clientId, adCampaignId),
}; if (isSearchAdsRequest) { campaign.NetworkSettings = new NetworkSettings { TargetContentNetwork = false, TargetGoogleSearch = true, TargetSearchNetwork = false, TargetPartnerSearchNetwork = false }; } switch (adCampaign.BidStrategy.ToUpper()) { case BiddingStrategyAdwordsAPI.MAXIMIZE_CONVERSIONS: campaign.BiddingStrategyType = BiddingStrategyType.MaximizeConversions; campaign.MaximizeConversions = new MaximizeConversions(); break; } operations.Add(new CampaignOperation { Update = campaign, UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
});
try { MutateCampaignsResponse response = await campaignService.MutateCampaignsAsync(clientId.ToString(), operations.ToArray()); }
Request
-------
MethodName: google.ads.googleads.v3.services.CampaignService/MutateCampaigns
Endpoint: googleads.googleapis.com:443
Headers: {developer-token=REDACTED, login-customer-id=***, x-goog-api-client=gl-java/1.8.0_161 gapic/ gax/1.50.1 grpc/1.25.0}
Body: customer_id: "***"
operations {
update {
resource_name: "customers/***/campaigns/9648895439"
name {
value: "XYZ"
}
status: ENABLED
campaign_budget {
value: "customers/***/campaignBudgets/***"
}
tracking_url_template {
value: "{lpurl}?keyword={keyword}&campaign={campaignid}&device={device}"
}
network_settings {
target_google_search {
value: true
}
target_search_network {
}
target_content_network {
}
target_partner_search_network {
}
}
bidding_strategy_type: MAXIMIZE_CONVERSIONS
maximize_conversions {
}
geo_target_type_setting {
positive_geo_target_type: PRESENCE
negative_geo_target_type: PRESENCE_OR_INTEREST
}
}
update_mask {
paths: "resource_name"
paths: "name"
paths: "status"
paths: "tracking_url_template"
paths: "network_settings.target_google_search"
paths: "network_settings.target_search_network"
paths: "network_settings.target_content_network"
paths: "network_settings.target_partner_search_network"
paths: "geo_target_type_setting.positive_geo_target_type"
paths: "geo_target_type_setting.negative_geo_target_type"
paths: "campaign_budget"
paths: "bidding_strategy_type"
}
}
partial_failure: true
Response
--------
Headers: Metadata(content-disposition=attachment,content-type=application/grpc,request-id=kuHgaCpnz-F2Omneu_xm0g,date=Mon, 30 Mar 2020 14:52:05 GMT,alt-svc=quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000)
Body: results {
resource_name: "customers/***/campaigns/***"
}
Failure message: null
Status: Status{code=OK, description=null, cause=null}.
One peculiar thing is that since the MaximizeConversion strategy is an automated strategy, there's no values to set, ie. MaximizeConversions.newBuilder().build(), which results in
maximize_conversions {
}
I wonder if the API is not recognizing that this is a change in bidding strategy
If you have any interest in hopping on a call or hangout let me know.
Thanks
Pete