跟踪和导入转化数据

在 AdWords 中,转化是指用户在点击广告或看到展示广告网络广告后执行了某项指定的操作,如购买产品、安装移动应用或注册电子邮件收件人列表。

转化跟踪功能可以提供重要的洞察信息,供您了解用户在浏览或点击广告后所执行的操作。您可以跟踪执行了各种不同操作的用户,例如致电、购买产品和安装移动应用,等等。针对客户不同的转化方式,AdWords 提供了不同的转化跟踪工具。

本指南介绍了不同类型的转化跟踪工具及其应用方式,另外还介绍了如何使用 API 将离线转化数据导入 AdWords。

转化跟踪工具的类型

要衡量转化次数,请为希望跟踪的转化操作类型设置 ConversionTracker。举例来说,在线购买和致电需要不同的转化跟踪工具。

对于大多数转化类型,您还需要执行一些额外的操作才能进行跟踪。例如,要跟踪您网站上的转化操作,您需要创建 AdWordsConversionTracker 以及要添加到网站转化页上的代码段(我们称之为代码)。

以下几节介绍了不同类型的转化跟踪工具。

致电转化

跟踪来自附加电话信息的致电需要 AdCallMetricsConversion 跟踪工具。这些转化需要使用 Google 转接电话号码,并在附加电话信息的 FeedItem 中指定转化跟踪工具。在 AdWords 界面中,这种类型的转化称为广告带来的致电

要跟踪这种类型的转化,请使用 CONVERSION TYPE ID占位符类型,在附加电话信息的 FeedItem 中指定跟踪工具。

如果致电的时长超过指定的持续时间,则将致电报告为转化。默认值是 60 秒。

网站上的转化

AdWordsConversionTracker 包括几种类型的网站转化,在 API 中用 trackingCodeType 字段加以区分。

下表显示了与 AdWords 界面中的每个来源等效的 API 参数:

trackingCodeType AdWords 界面中的“来源”
WEBPAGE 网站
WEBPAGE_ONCLICK 点击
CLICK_TO_CALL 电话号码点击
-- Analytics(分析)

网站电话号码点击转化要求 ConversionTrackerService 获取代码段,并将其放置在表明完成转化操作的网页上,如结算确认页或潜在客户提交页。

CLICK_TO_CALL 类型与 AdCallMetricsConversion 的区别之处在于,前者不跟踪实际致电,而是只跟踪移动设备上对电话号码的点击。如果无法使用 Google 转接电话号码跟踪实际致电,这将非常有用。

应用转化

AppConversion 同时涵盖移动应用安装和应用内操作两种转化(Android 和 iOS)。下表显示了与 AdWords 界面中的每个来源等效的 API 参数:

appPlatform appConversionType AdWords 界面中的“来源”
ITUNES FIRST_OPEN iOS 应用安装(首次打开)
ITUNES IN_APP_PURCHASE iOS 应用内操作
ANDROID_MARKET DOWNLOAD Android 应用安装(Google Play 中)
ANDROID_MARKET FIRST_OPEN Android 应用安装(首次打开)
ANDROID_MARKET IN_APP_PURCHASE Android 应用内操作

如果将 appConversionType 指定为 FIRST_OPEN,则可以提供 appPostbackUrl,以便在用户第一次打开您的应用时立即得到确认。有关详情,请参阅 Android 移动应用转化跟踪指南

上传点击转化数据

UploadConversion 对应于 AdWords 界面中导入转化来源下面的点击转化。在网页界面中创建此转化跟踪工具时,系统会自动为帐号启用自动标记,但在通过 API 创建时则无法实现这一点。如果使用 API 创建转化跟踪工具,应使用 CustomerService 启用自动标记。如果没有自动标记,您无法得到上传点击对应转化数据所需的 GCLID 参数。

创建 UploadConversion 之后,您可以使用 OfflineConversionFeedService 上传点击的转化数据。有关详情,请参阅下文的导入点击转化数据

上传致电转化数据

UploadCallConversion 对应于 AdWords 界面中导入转化来源下面的用户致电带来的转化

创建 UploadCallConversion 之后,您可以使用 OfflineCallConversionFeedService 上传致电转化数据。有关详情,请参阅下文的导入致电转化数据

来自网站的致电

WebsiteCallMetricsConversion 对应于 AdWords 界面中的来自网站的致电

AdCallMetricsConversion 不同,此跟踪工具需要将一段代码添加到您的网站,以获取对您网站上列出的号码进行致电跟踪所需的动态 Google 转接电话号码。此外,您必须设置附加电话信息,并将其附加到要跟踪其网站致电的广告系列或广告组。

系统范围内的默认转化跟踪工具

AdWords 提供了一些不需要代码的系统范围内的默认转化跟踪工具。这些跟踪工具对名称、值等不同字段提供了默认设置。

如果您希望修改这些默认转化跟踪工具的设置,请创建新的同一子类型的 ConversionTracker,并在该 ConversionTracker 对象的 originalConversionTypeId 字段中提供系统定义的跟踪工具的 conversionTypeId。这相当于修改帐号自身的系统范围转化跟踪工具的副本。包括报告中的转化统计信息在内,您帐号中所有用到系统范围转化跟踪工具的地方都将自动替换为您刚刚创建的转化跟踪工具(将系统范围转化跟踪工具的 ID 用作 originalConversionTypeId)。

在任何帐号中,对于系统定义的每个转化类型,都只能创建一个 ConversionTracker。如果您尝试在 originalConversionTypeId 字段中使用同一个系统定义的转化跟踪工具创建第二个 ConversionTracker,操作将失败。换句话说,如果您修改了自己帐号的系统范围转化跟踪工具,您拥有的将是修改后的副本,而不是原始版本。

例如,在使用附加电话信息的情况下,帐号中所有使用系统范围 AdCallMetricsConversion 的附加电话信息将被映射到您创建的新版本。任何以前显示该系统范围转化类型的转化统计信息现在将显示新的版本。

下表显示了所有的系统范围默认转化跟踪工具及其 ID。

ConversionTracker 名称 conversionTypeId
AdCallMetricsConversion 广告带来的致电 179
AppConversion Android 下载 214

默认 AppConversion 是唯一的,您不能指定应用 ID。它跟踪 Google Play 应用所有没有更具体的 AppConversion 的转化。

跨帐号转化跟踪

如果您使用的是跨帐号转化跟踪ConversionTrackerService 将返回以下转化类型:

  1. 由经理帐号定义的、为跨帐号转化跟踪帐号所用的所有转化类型。
  2. 客户已累计统计信息的所有转化类型,包括系统定义的类型以及经理所拥有的类型(即使该经理随后取消了关联)。
  3. 客户已经在自己的帐号中定义的所有类型,包括在关联的 Google Analytics(分析)配置文件中创建的 Google Analytics(分析)目标和交易。这包括未导入到 AdWords 的类型,这些类型的状态为 HIDDEN,只能使用 AdWords 网页界面导入。

您可以通过 API 设置和查询跨帐号转化跟踪工具,但必须将您的帐号设置为接受经理帐号的跨帐号转化跟踪。有关详情,请参阅帮助中心文章

过去,转化次数列只包含那些在同一设备上发生的转化。现在,您可以使用客户的转化跟踪设置optimizeOnEstimatedConversions 属性,选择在转化次数列中加入跨设备转化。然后,这些转化数据将会用于针对转化进行优化的不同自动出价策略,例如目标每次转化费用、目标广告支出回报率或智能点击付费。

报告中提供的转化字段

您可以使用报告中提供的转化字段,获取您的帐号、广告系列或广告组的转化统计信息。

下面的表格列出了一些与转化相关的常用报告字段。

Conversions 及其衍生字段

字段名称 说明
Conversions 转化报告的主要字段,反映您希望对其出价的转化操作。只包括将 excludeFromBidding 字段设置为 false 的转化操作 (ConversionTracker) 的转化次数。
ConversionRate Conversions 除以可进行转化跟踪的总点击次数所得的值,即广告互动带来将 excludeFromBidding 字段设置为 false 的转化操作的平均频率。
ConversionValue excludeFromBidding 字段设置为 false 的所有转化操作 (ConversionTracker) 的总价值。
CostPerConversion 总费用除以 Conversions 所得的值。
ValuePerConversion ConversionValue 除以 Conversions 所得的值。

AllConversions 及其衍生字段

字段名称 说明
AllConversions 包括来自 AdWords 的所有转化,而不考虑 excludeFromBidding 的值。将统计所有转化来源(网站、跨设备、致电等)。
AllConversionRate AllConversions 除以可进行转化跟踪的总点击次数所得的值,即广告互动带来转化的平均频率。
AllConversionValue 所有转化次数的总价值。不考虑 excludeFromBidding 的值,包括网站转化、跨设备转化、致电转化和转化操作 (ConversionTracker)。
CostPerAllConversion 总费用除以 AllConversions 所得的值。
ValuePerAllConversion AllConversionValue 除以 AllConversions 所得的值。

CrossDeviceConversions

字段名称 说明
CrossDeviceConversions 客户在一台设备上与广告进行了互动(例如,点击文字广告或观看视频广告),然后在其他设备或浏览器中完成了转化。CrossDeviceConversions 已经包含在 AllConversions 字段中。

与转化次数相关联的当前模型列

如果您在 AdWords 中修改了某个转化操作的 attributionModelType 字段,那么这只会改变“转化次数”和“所有转化次数”列在今后统计转化次数的方式。如果您想查看历史转化数据若使用您刚刚选择的归因模型会如何,则可以使用下面列出的当前模型列。您可以将这些列与常规转化跟踪列进行比较,以便了解目前所选的归因模型可能会让数据出现哪些变化。

字段名称 说明
CostPerCurrentModelAttributedConversion 基于当前归因模型的历史 CostPerConversion 数据。
CurrentModelAttributedConversionValue 基于当前归因模型的历史 ConversionValue 数据。
CurrentModelAttributedConversions 基于当前归因模型的历史 Conversions 数据。
ValuePerCurrentModelAttributedConversion 基于当前归因模型的历史 ValuePerConversion 数据。

导入点击转化数据

您可以使用 AdWords API 将离线转化数据上传到 AdWords,在关联点击与转化方面获得更大的灵活性。您可以跟踪通过电话或销售代表等方式促成线下销售的广告。

本节介绍了如何使用 AdWords API 构建 Feed,以便导入离线转化数据。

设置

第一步是创建导入转化类型。您需要为每个唯一转化“分类”创建导入转化类型。您可以使用 AdWords 界面或通过以下代码来完成此操作:

UploadConversion uploadConversion = new UploadConversion();
// Set an appropriate category. This field is optional, and will be set to
// DEFAULT if not mentioned.
uploadConversion.setCategory(ConversionTrackerCategory.LEAD);
uploadConversion.setName(conversionName);
uploadConversion.setViewthroughLookbackWindow(30);
uploadConversion.setCtcLookbackWindow(90);

// Optional: Set the default currency code to use for conversions
// that do not specify a conversion currency. This must be an ISO 4217
// 3-character currency code such as "EUR" or "USD".
// If this field is not set on this UploadConversion, AdWords will use
// the account's currency.
uploadConversion.setDefaultRevenueCurrencyCode("EUR");

// Optional: Set the default revenue value to use for conversions
// that do not specify a conversion value. Note that this value
// should NOT be in micros.
uploadConversion.setDefaultRevenueValue(2.50);

ConversionTrackerOperation uploadConversionOperation = new
    ConversionTrackerOperation();
uploadConversionOperation.setOperator(Operator.ADD);
uploadConversionOperation.setOperand(uploadConversion);

ConversionTrackerReturnValue conversionTrackerReturnValue =
    conversionTrackerService.mutate(
        new ConversionTrackerOperation[] {uploadConversionOperation});

此代码段会使用 ConversionTrackerService 创建 UploadConversion 对象。指定的 conversionName 将被用来识别该转化事件,因此必须是唯一的。

创建导入转化类型后,需要让您的网站和潜在客户跟踪系统能够捕获和存储 GCLID,即 AdWords 为 AdWords 广告给您网站带来的每次点击所提供的唯一 ID。您还需要启用自动标记,以便您的网站开始接收 GCLID 以用作网址参数。有关这些步骤的详情,请访问跟踪离线转化

上传离线转化数据

在创建 UploadConversion 对象后,您需要将 GCLID、转化时间(包括时区 ID)、转化名称以及转化价值和转化币种(后两者可选)传递到 OfflineConversionFeedService,使您的离线转化与该对象相关联:

List<OfflineConversionFeed> conversions = Lists.newArrayList();

// Offline conversion #1
OfflineConversionFeed conversion1 = new OfflineConversionFeed();
conversion1.setConversionName(conversionName1);
conversion1.setConversionTime(conversionTime1); // string format: "yyyyMMdd HHmmss tz"
conversion1.setGoogleClickId(gclId1);

// Optional: Set the conversion value.
conversion1.setConversionValue(conversionValue1);

// Optional: Set the conversion currency to an ISO 4217 3-character currency code
// such as "EUR" or "USD". If this field is not set, then AdWords will assume
// the conversion's value is in the default currency of the tracker.
conversion1.setConversionCurrencyCode(conversionCurrency1);

conversions.add(conversion1);

// Offline conversion #2
OfflineConversionFeed conversion2 = new OfflineConversionFeed();
conversion2.setConversionName(conversionName2);
conversion2.setConversionTime(conversionTime2);
conversion2.setGoogleClickId(gclId2);
conversion2.setConversionValue(conversionValue2);
conversion2.setConversionCurrencyCode(conversionCurrency2);

conversions.add(conversion2);

// Add additional conversions to the conversions list...

List<OfflineConversionFeedOperation> conversionOperations = Lists.newArrayList();
for (OfflineConversionFeed conversion : conversions) {
  OfflineConversionFeedOperation offlineConversionOperation = new OfflineConversionFeedOperation();
  offlineConversionOperation.setOperator(Operator.ADD);
  offlineConversionOperation.setOperand(conversion);

  conversionOperations.add(offlineConversionOperation);
}

OfflineConversionFeedReturnValue offlineConversionReturnValue = offlineConversionFeedService
    .mutate(conversionOperations.toArray(
        new OfflineConversionFeedOperation[conversionOperations.size()]));

验证规则

上传 OfflineConversionFeed 有几项要求。

为避免 OfflineConversionError.INVALID_CONVERSION_TYPE 错误,conversionName 必须引用 UploadConversion,其中:

  • 点击时,UploadConversionstatusENABLED

  • 点击时,UploadConversion 存在于获得点击的 AdWords 帐号的有效转化帐号中。如果在点击时帐号未使用跨帐号转化跟踪,AdWords 会在用于上传转化数据的帐号中查找 UploadConversion。您可以在 AdWords 界面的工具 > 转化次数下查找帐号的有效转化跟踪帐号,但请注意,这显示的是您当前的有效转化跟踪帐号,可能不同于点击时的有效转化跟踪帐号。

此外,必须满足下列条件:

  • conversionTime 必须晚于点击发生的时间,以避免 OfflineConversionError.CONVERSION_PRECEDES_CLICK 错误。

  • 此外,conversionTime 还必须在您为 UploadConversion 对象指定的点击型转化回溯期之前,以避免 OfflineConversionError.EXPIRED_CLICK 错误。

  • conversionValue 必须大于或等于零。

  • conversionTime 必须有时区 ID。该时区 ID 可以是任何有效的时区,不一定与帐号的时区一致。

提示

在创建 OfflineConversionFeed 时,您需要注意以下几点:

  • 上传操作是原子操作 - 如果转化的 GCLID 不正确或太陈旧,则不会上传附带的转化。可使用部分失败来避免发生这种情况。

  • 虽然允许重复上传转化数据(相同的 GCLID、名称和时间),但只有第一次上传操作会被记录下来。

  • 记录转化的日期是最初点击的日期,而不是您发送上传请求的日期。

  • 我们建议您在创建 UploadConversion 后先等待 6 个小时,然后再上传。

  • 要使导入的转化统计信息显示在 AdWords 帐号中,最多需要 3 小时。

代码示例

每个客户端库Remarketing 文件夹中都有一个代码示例,展示如何上传离线转化数据:

导入致电转化数据

可以使用 AdWords API 将离线致电转化数据上传到 AdWords,在关联点击与转化方面获得更大的灵活性。

本节介绍了如何使用 AdWords API 构建 Feed,以便导入离线致电转化数据。

设置

第一步是为离线致电转化创建转化跟踪工具,此操作可使用 AdWords 界面或通过代码来完成。如果使用代码,将需要创建 UploadCallConversion。这个过程类似于导入点击转化数据设置中的示例,但需要将该示例中的 UploadConversion 替换为 UploadCallConversion

上传离线致电转化数据

在创建 UploadCallConversion 对象后,您需要将来电显示、转化时间(包括时区 ID)、转化名称以及转化价值和转化币种(后两者可选)传递到 OfflineCallConversionFeedService,使您的离线致电转化数据与该对象相关联:

Java

public static void runExample(
    AdWordsServicesInterface adWordsServices,
    AdWordsSession session,
    String callerId,
    String callStartTime,
    String conversionName,
    String conversionTime,
    double conversionValue)
    throws Exception {

  // Get the OfflineCallConversionFeedService.
  OfflineCallConversionFeedServiceInterface offlineCallConversionFeedService =
      adWordsServices.get(session, OfflineCallConversionFeedServiceInterface.class);

  // Associate offline call conversions with the existing named conversion tracker. If this
  // tracker was newly created, it may be a few hours before it can accept conversions.
  OfflineCallConversionFeed feed = new OfflineCallConversionFeed();
  feed.setCallerId(callerId);
  feed.setCallStartTime(callStartTime);
  feed.setConversionName(conversionName);
  feed.setConversionTime(conversionTime);
  feed.setConversionValue(conversionValue);

  OfflineCallConversionFeedOperation offlineCallConversionOperation =
      new OfflineCallConversionFeedOperation();
  offlineCallConversionOperation.setOperator(Operator.ADD);
  offlineCallConversionOperation.setOperand(feed);

  // This example uploads only one call conversion, but you can upload multiple call conversions
  // by passing additional operations.
  OfflineCallConversionFeedReturnValue offlineCallConversionReturnValue =
      offlineCallConversionFeedService.mutate(
          new OfflineCallConversionFeedOperation[] {offlineCallConversionOperation});

  // Display results.
  for (OfflineCallConversionFeed feedResult : offlineCallConversionReturnValue.getValue()) {
    System.out.printf(
        "Uploaded offline conversion value of %.4f for caller ID '%s'.%n",
        feedResult.getConversionValue(), feedResult.getCallerId());
  }
}

C#

public void Run(AdWordsUser user, String conversionName, String callStartTime, String callerId,
    String conversionTime, double conversionValue) {
  // Get the OfflineConversionFeedService.
  OfflineCallConversionFeedService offlineCallConversionFeedService =
      (OfflineCallConversionFeedService) user.GetService(
          AdWordsService.v201702.OfflineCallConversionFeedService);

  // Associate offline call conversions with the existing named conversion tracker. If this
  // tracker was newly created, it may be a few hours before it can accept conversions.
  OfflineCallConversionFeed feed = new OfflineCallConversionFeed();
  feed.callerId = callerId;
  feed.callStartTime = callStartTime;
  feed.conversionName = conversionName;
  feed.conversionTime = conversionTime;
  feed.conversionValue = conversionValue;

  OfflineCallConversionFeedOperation offlineCallConversionOperation =
      new OfflineCallConversionFeedOperation();
  offlineCallConversionOperation.@operator = Operator.ADD;
  offlineCallConversionOperation.operand = feed;

  try {
    // This example uploads only one call conversion, but you can upload
    // multiple call conversions by passing additional operations.
    OfflineCallConversionFeedReturnValue offlineCallConversionReturnValue =
        offlineCallConversionFeedService.mutate(
            new OfflineCallConversionFeedOperation[] { offlineCallConversionOperation });

    // Display results.
    foreach (OfflineCallConversionFeed feedResult in offlineCallConversionReturnValue.value) {
      Console.WriteLine("Uploaded offline call conversion value of {0} for caller ID '{1}'.",
          feedResult.conversionValue, feedResult.callerId);
    }
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to upload offline call conversions.", e);
  }
}

Visual Basic

' Get the OfflineConversionFeedService.
Dim offlineCallConversionFeedService As OfflineCallConversionFeedService = _
    CType(user.GetService(AdWordsService.v201702.OfflineCallConversionFeedService),  _
        OfflineCallConversionFeedService)

' Associate offline call conversions with the existing named conversion tracker. If this
' tracker was newly created, it may be a few hours before it can accept conversions.
Dim feed As New OfflineCallConversionFeed()
feed.callerId = callerId
feed.callStartTime = callStartTime
feed.conversionName = conversionName
feed.conversionTime = conversionTime
feed.conversionValue = conversionValue

Dim offlineCallConversionOperation As New OfflineCallConversionFeedOperation()
offlineCallConversionOperation.operator = [Operator].ADD
offlineCallConversionOperation.operand = feed

Try
  ' This example uploads only one call conversion, but you can upload
  ' multiple call conversions by passing additional operations.
  Dim offlineCallConversionReturnValue As OfflineCallConversionFeedReturnValue = _
      offlineCallConversionFeedService.mutate(
          New OfflineCallConversionFeedOperation() {offlineCallConversionOperation})

  ' Display results.
  For Each feedResult As OfflineCallConversionFeed In offlineCallConversionReturnValue.value
    Console.WriteLine("Uploaded offline call conversion value of {0} for caller ID '{1}'.",
        feedResult.conversionValue, feedResult.callerId)
  Next
Catch e As Exception
  Throw New System.ApplicationException("Failed to upload offline call conversions.", e)
End Try

Python

def main(client, caller_id, call_start_time, conversion_name, conversion_time,
         conversion_value):
  # Initialize appropriate services.
  occ_feed_service = client.GetService(
      'OfflineCallConversionFeedService', version='v201702')

  # Associate offline call conversions with the existing named conversion
  # tracker. If this tracker was newly created, it may be a few hours before it
  # can accept conversions.
  feed = {
      'callerId': caller_id,
      'callStartTime': call_start_time,
      'conversionName': conversion_name,
      'conversionTime': conversion_time,
      'conversionValue': conversion_value,
  }

  occ_operations = [{'operator': 'ADD', 'operand': feed}]

  occ_response = occ_feed_service.mutate(occ_operations)
  values = occ_response['value']

  if values:
    for occ_feed in values:
      print ('Uploaded offline call conversion value of "%s" for caller ID '
             '"%s".\n' % (occ_feed['conversionName'], occ_feed['callerId']))
  else:
    print 'No offline call conversions were added.'

PHP

public static function runExample(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    $callerId,
    $callStartTime,
    $conversionName,
    $conversionTime,
    $conversionValue
) {
  $offlineCallConversionService = $adWordsServices->get(
      $session, OfflineCallConversionFeedService::class);

  // Associate offline call conversions with the existing named conversion
  // tracker. If this tracker was newly created, it may be a few hours before
  // it can accept conversions.
  $feed = new OfflineCallConversionFeed();
  $feed->setCallerId($callerId);
  $feed->setCallStartTime($callStartTime);
  $feed->setConversionName($conversionName);
  $feed->setConversionTime($conversionTime);
  $feed->setConversionValue($conversionValue);

  $offlineCallConversionOperations = [];
  $offlineCallConversionOperation = new OfflineCallConversionFeedOperation();
  $offlineCallConversionOperation->setOperator(Operator::ADD);
  $offlineCallConversionOperation->setOperand($feed);
  $offlineCallConversionOperations[] = $offlineCallConversionOperation;

  // This example uploads only one call conversion, but you can upload
  // multiple call conversions by passing additional operations.
  $result =
      $offlineCallConversionService->mutate($offlineCallConversionOperations);

  $feed = $result->getValue()[0];
  printf(
      "Uploaded offline call conversion value of '%s' for caller ID '%s'.\n",
      $feed->getConversionValue(),
      $feed->getCallerId()
  );
}

Perl

sub upload_offline_call_conversions {
  my $client                             = shift;
  my $caller_id                          = shift;
  my $call_start_time                    = shift;
  my $conversion_name                    = shift;
  my $conversion_time                    = shift;
  my $conversion_value                   = shift;
  my @offline_call_conversion_operations = ();

  # Associate offline call conversions with the existing named
  # conversion tracker. If this tracker was newly created, it may be a
  # few hours before it can accept conversions.
  my $feed = Google::Ads::AdWords::v201702::OfflineCallConversionFeed->new({
    callerId        => $caller_id,
    callStartTime   => $call_start_time,
    conversionName  => $conversion_name,
    conversionTime  => $conversion_time,
    conversionValue => $conversion_value
  });

  my $offline_call_conversion_operation =
    Google::Ads::AdWords::v201702::OfflineCallConversionFeedOperation->new({
      operator => "ADD",
      operand  => $feed
    });

  push @offline_call_conversion_operations, $offline_call_conversion_operation;

  # This example uploads only one call conversion, but you can upload multiple
  # call conversions by passing additional operations.
  my $result =
    $client->OfflineCallConversionFeedService()
    ->mutate({operations => \@offline_call_conversion_operations});

  # Display results.
  if ($result->get_value()) {
    foreach my $feed_result (@{$result->get_value()}) {
      printf "Uploaded offline call conversion value of \"%s\" for caller ID " .
        "\"%s\".\n",
        $feed_result->get_conversionValue(),
        $feed_result->get_callerId();
    }
  } else {
    print "No offline call conversions were added.\n";
    return;
  }

  return 1;
}

Ruby

occ_feed_srv =
    adwords.service(:OfflineCallConversionFeedService, API_VERSION)

# Associate offline conversions with the existing named conversion tracker. If
# this tracker was newly created, it may be a few hours before it can accept
# conversions.
feed = {
  :caller_id => caller_id,
  :call_start_time => call_start_time,
  :conversion_name => conversion_name,
  :conversion_time => conversion_time,
  :conversion_value => conversion_value
}

occ_operations = [{
  :operator => 'ADD',
  :operand => feed
}]

occ_response = occ_feed_srv.mutate(occ_operations)

if occ_response[:value]
  occ_response[:value].each do |occ_feed|
    puts 'Uploaded offline call conversion value "%s" for caller ID "%s"' %
        [occ_feed[:conversion_name], occ_feed[:caller_id]]
  end
end

验证规则

上传 OfflineCallConversionFeed 有几项要求。

为避免 OfflineCallConversionError.INVALID_CONVERSION_TYPE 错误,conversionName 必须引用 UploadCallConversion,其中:

  • 致电时,UploadCallConversionstatusENABLED

  • 致电时,UploadCallConversion 存在于获得致电的 AdWords 帐号的有效转化帐号中。如果在致电时帐号未使用跨帐号转化跟踪,AdWords 会在用于上传转化数据的帐号中查找 UploadCallConversion。您可以在 AdWords 界面的工具 > 转化次数下查找帐号的有效转化跟踪帐号,但请注意,这显示的是您当前的有效转化跟踪帐号,可能不同于致电时的有效转化跟踪帐号。

此外,必须满足下列条件:

  • conversionValue 必须大于或等于零。

  • conversionTime 必须有时区 ID。该时区 ID 可以是任何有效的时区,不一定与帐号的时区一致。

提示

在创建 OfflineCallConversionFeed 时,您需要注意以下几点:

  • 我们建议您在创建 UploadCallConversion 后先等待 6 个小时,然后再上传。

  • 要使导入的转化统计信息显示在 AdWords 帐号中,最多需要 3 小时。

  • 虽然允许重复上传转化数据(相同的来电号码、名称和时间),但只有第一次上传操作会被记录下来。

代码示例

每个客户端库 Remarketing 文件夹中都有一个代码示例,展示如何上传离线致电转化数据:

发送以下问题的反馈:

此网页
AdWords API
AdWords API
需要帮助?请访问我们的支持页面