使用临时 ID

临时资源名称

BatchJobService 支持临时资源名称,这些名称可在同一批量作业的后续操作中引用,包括使用 sequence_token 上传的多个连续 AddBatchJobOperations 请求。这样,您就可以在分配服务器端 ID 之前,通过单个批量作业创建广告系列及其依赖的广告组、广告和条件。在以下一般规则和示例中,单个请求是指一个完整的 BatchJob 及其所有 AddBatchJobOperations 上传。

如需在同一 mutate 请求或批量作业中引用新创建的资源,请在新资源的 resource_name 字段中指定一个负整数 ID(例如 -1 或 -2,不包括 0)。例如,在批量请求中创建广告系列时,请将其资源名称设置为 customers/CUSTOMER_ID/campaigns/-1。在同一请求的后续操作中创建广告组时,请将 customers/CUSTOMER_ID/campaigns/-1 引用为父级广告系列。API 会自动将 -1 替换为创建时生成的实际广告系列 ID。

使用限制

使用临时资源名称时,请注意以下规则:

  • 顺序很重要:您只能在定义临时资源名称后引用它。在操作列表中,依赖操作(例如创建广告组)必须出现在创建其父资源的操作(例如创建广告系列)之后。
  • 单请求或批量作业范围:临时资源名称不会在不同的作业或 mutate 请求之间保留。如需引用在之前的作业或 mutate 请求中创建的资源,请使用系统生成的实际资源名称。
  • 全局唯一性:在单个作业或 mutate 请求中,每个临时资源名称在所有资源类型中都必须使用唯一的负整数。例如,您不能在同一请求中将 -1 同时分配给广告系列和广告组。在同一请求或批量作业中重复使用临时 ID 会返回 NewResourceCreationError.DUPLICATE_TEMP_IDS 错误。

示例载荷

假设您想在单个 API 请求或批量作业中添加广告系列、广告组和广告。您可以在 GoogleAdsService.Mutate 或 BatchJobService.AddBatchJobOperations 请求载荷中构建 mutateOperations 数组,如以下 REST JSON 示例所示(为简洁起见,省略了其他必需的资源字段):

{
  "mutateOperations": [
    {
      "campaignOperation": {
        "create": {
          "resourceName": "customers/CUSTOMER_ID/campaigns/-1"
        }
      }
    },
    {
      "adGroupOperation": {
        "create": {
          "resourceName": "customers/CUSTOMER_ID/adGroups/-2",
          "campaign": "customers/CUSTOMER_ID/campaigns/-1"
        }
      }
    },
    {
      "adGroupAdOperation": {
        "create": {
          "adGroup": "customers/CUSTOMER_ID/adGroups/-2"
        }
      }
    }
  ]
}

此示例演示了以下关键细节:

  • 该广告组使用新的临时 ID (-2),因为 -1 已分配给广告系列。
  • 广告组引用 customers/CUSTOMER_ID/campaigns/-1,以将自身与在前面的操作中创建的广告系列相关联。
  • adGroupAdOperation 引用了 customers/CUSTOMER_ID/adGroups/-2,并省略了 resourceName,因为请求中的后续操作均未引用新广告。

批量作业中的错误处理

由于批量作业中的标准操作在执行时会启用部分失败(原子子批次除外),因此,如果具有临时 ID 的父级资源未通过验证,则引用该临时 ID 的任何依赖子级操作都会失败,并显示 NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS。 在同一批量作业中的多个 create 操作中重复使用相同的负 ID 会返回 NewResourceCreationError.DUPLICATE_TEMP_IDS。临时 ID 仅在创建资源 (create) 或引用新创建的父级资源时有效;例如,在调用 AddBatchJobOperations 时,在 AdGroupCriterionOperation.remove 中传递负临时 ID 会返回 RequestError.RESOURCE_NAME_MALFORMED。