资源服务发生变异

使用资源的专用服务是在 Google Ads API 中创建、更新或移除单个资源类型的实体的最直接方式。

Mutate 端点

每个可变资源都有对应的服务和操作类型。如需使用资源的专用服务来更改资源,请在操作中填充以下某个字段,然后将其发送到服务的更改端点:

  • 创建 (create):要创建的新资源对象。
  • 更新 (update):修改后的资源对象,附带一个 update_mask,用于指定已更改的字段。
  • 移除 (remove):要移除的目标资源的 resource_name 字符串。

例如,如需创建新的 Campaign,请完成以下步骤:

  1. 使用所选属性构造 Campaign 对象。
  2. 将其分配给 CampaignOperation 的 create 字段。
  3. 以 MutateCampaignsRequest 的形式将操作发送到 CampaignService.MutateCampaigns。

此模式适用于 Google Ads API 中的所有特定于资源的服务:

以下 REST JSON 载荷展示了对 CampaignService.MutateCampaigns 的请求:

{
  "customerId": "CUSTOMER_ID",
  "operations": [
    {
      "create": {
        "name": "Interplanetary Cruise #1",
        "advertisingChannelType": "SEARCH",
        "status": "PAUSED",
        "manualCpc": {},
        "campaignBudget": "customers/CUSTOMER_ID/campaignBudgets/BUDGET_ID",
        "containsEuPoliticalAdvertising": "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING"
      }
    }
  ],
  "partialFailure": false,
  "validateOnly": false
}

多项操作和限制

由于 mutate 请求的 operations 字段是重复的,因此单个请求可以包含针对相应资源类型的多个操作(每个请求最多 10,000 个操作)。默认情况下,请求中的所有操作都会以原子方式执行,除非您将 partial_failure 设置为 true。

不过,各个资源服务存在两个重要限制:

  • 单一资源类型:对资源服务的请求只能更改由该特定服务管理的资源。
  • 无临时资源 ID 或交叉引用:资源专用更改调用中的操作是独立处理的。您无法分配临时负 ID(例如 customers/CUSTOMER_ID/campaigns/-1),也无法在同一请求中引用其他操作中新创建的实体。

如果您需要在单个请求中更改多种资源类型,或者在相关操作中引用临时资源名称,请改用 GoogleAdsService.Mutate。

版本特定的差异

在变异资源时,请注意以下支持的 Google Ads API 版本之间的差异:

  • 生命周期目标服务:在 v25 及更高版本中,所有生命周期目标(包括“新客户获取”目标 (new_customer_acquisition_goal_settings)、“客户留存”目标 (retention_goal_settings) 和“忠诚度留存”目标 (loyalty_retention_goal_settings))都通过 GoalService.MutateGoals 和 CampaignGoalConfigService.MutateCampaignGoalConfigs 使用标准重复 operations 字段进行变异。这取代了 CustomerLifecycleGoalService.ConfigureCustomerLifecycleGoals 和 CampaignLifecycleGoalService.ConfigureCampaignLifecycleGoals(用于 v24 及更早版本中的“新客户获取”,并接受单个 operation 字段)。
  • 广告系列日期和时间字段:创建或更新 Campaign 时,v23 及更高版本使用 start_date_time 和 end_date_time (yyyy-MM-dd HH:mm:ss),取代了 v22 中使用的仅包含日期的 start_date 和 end_date 字段。
  • 合成内容证明的可变性:虽然 Asset.synthetic_content_info 和 Ad.synthetic_content_info 出现在 v22 及更高版本的架构中,但 synthetic_content_info.advertiser_attestation.status 和 synthetic_content_info.advertiser_attestation.source 字段仅在 v23 及更高版本中可变(system_attestation 始终为 OUTPUT_ONLY)。尝试在 v22 中更改 advertiser_attestation 子字段会返回不可变字段错误("The field attempted to be mutated is immutable" 或 "Field cannot be set")。