调用 Conversion.update()
方法可对一个或多个现有转化进行以下类型的更改:
- 修改收入、货币代码或数量。
- 修改广告客户提供的订单 ID 和所有自定义 Floodlight 变量。
- 将
conversion.state
从ACTIVE
更改为REMOVED
,以移除转化。
Search Ads 360 不支持更改以下内容:
- 转化日期。
- 转化类型。
- 转化所归因到的关键字或访问。
- Floodlight 活动或活动名称。
不过,您可以随时将现有转化标记为“已移除”,并上传包含更新日期、类型、归因 ID 或 Floodlight 活动的新转化(同时务必指定新的 conversionId
)。
与 Conversion.insert()
一样,如果您的更新请求指定了多个转化,Search Ads 360 会试着尽力更新每个转化,而不是将相应的批次作为一个整体进行更新。如果批量更新中有些更新失败,其他更新可能仍能成功。我们建议您读取每个更新的转化数据的响应,以确保更新成功。
(更新时间:2025 年)dsConversionId
已废弃
目前,您可以使用 dsConversionId
或 conversionId
来识别和修改转化。dsConversionId
字段将于 2025 年第 3 季度弃用。今后,您必须使用 conversionId
在 Search Ads 360 Conversion API 中修改转化。
主要变化:
-
dsConversionId
弃用:Search Ads 360 Reporting API(以下简称“conversion.id
”)或报告界面(以下简称“转化 ID”)将不再支持dsConversionID
。 -
conversionId
要求:conversionId
将成为通过 Search Ads 360 Conversion API 修改转化数据的必填字段。
如何获取 conversionId
:
-
Search Ads 360 Reporting API:您可以使用 Search Ads 360 Reporting API 检索
advertiser_conversion_id
。 此值对应于修改所需的conversionId
。 -
Search Ads 360 界面:您可以在 Search Ads 360 界面中的转化报告页面中找到“广告客户转化 ID”。
发送更新请求
您在 Conversion.update()
中指定的大多数字段都用于标识要更新的转化。您可以使用以下任一方法来识别现有转化:
- 指定转化的
clickId
- 您只能修改点击 ID 生成后的 60 天内发生的转化。
- 指定转化的
criterionId
(关键字 ID)
这两种方法都要求您指定转化的 conversionId
、conversionTimestamp
和交易 type
。
此外,如果原始转化指定了 revenueMicros
和 currencyCode
或 quantityMillis
,则更新请求需要指定这些数据,即使您不更改这些数据也是如此。
按点击 ID 识别转化
如果转化最初指定了点击 ID,您可以发送 Conversion.update()
请求,并在其中指定以下字段:
clickId
conversionId
conversionTimestamp
type
state
(仅当您要将状态更改为“已移除”或“有效”时才必需)quantityMillis
(仅当在原始转化中指定时)revenueMicros
(仅当在原始转化中指定时)currencyCode
(仅当在原始转化中指定时)
示例
以下是两个现有转化的示例:
{ "kind": "doubleclicksearch#conversionList", "conversion" : [{ "clickId" : "COiYmPDTv7kCFcP0KgodOzQAAA", "conversionId" : "test_20130906_10", "conversionTimestamp" : "1378710000000", "segmentationType" : "FLOODLIGHT", "segmentationName" : "Test", "type": "TRANSACTION", "revenueMicros": "100000000", // 100 million revenueMicros is equivalent to $100 of revenue "currencyCode": "USD" }, { "clickId": "COiYmPDTv7kCFcP0KgodOzQAAA", "conversionId": "test_1383337059137", "conversionTimestamp": "1378710000000", "segmentationType" : "FLOODLIGHT", "segmentationName" : "Test", "type": "ACTION", "quantityMillis": "1000" }] }
以下请求会更新上例中的其中一个转化,并移除另一个转化:
JSON
请注意,Conversion.update()
请求使用 PUT HTTP 方法。
PUT https://www.googleapis.com/doubleclicksearch/v2/conversion Authorization: Bearer your OAuth 2.0 access token Content-type: application/json { "kind": "doubleclicksearch#conversionList", "conversion": [ { "clickId": "COiYmPDTv7kCFcP0KgodOzQAAA", // Replace with data from your site "conversionId": "test_20130906_10", "conversionTimestamp": "1378710000000", "type": "TRANSACTION", "revenueMicros": "90000000", // 90 million revenueMicros is equivalent to $90 of revenue "currencyCode": "USD" }, { "clickId": "COiYmPDTv7kCFcP0KgodOzQAAA", // Replace with data from your site "conversionId": "test_1383337059137", "conversionTimestamp": "1378710000000", "type": "ACTION", "quantityMillis": "1000", "state": "REMOVED" } ] }
Java
/** * Instantiate the Doubleclicksearch service, create a conversion that updates an existing conversion, * and upload the conversions. */ public static void main(String[] args) throws Exception { Doubleclicksearch service = getService(); // See Set Up Your Application. // Set up a List to keep track of each conversion you create. List<Conversion> conversions = new Vector<Conversion>(); // Create a conversion and add it to the conversion list. // Just to get a little fancy, the updateConversionFromVisit() method can be used for all // visit conversions, including conversions that don't specify quantity, revenue, or currency. // If quantityMillis wasn't specified in the original conversion, specify -1L for the // quantityMillis parameter. Likewise, if revenueMicros wasn't specified originally, // specify -1L for the revenueMicros parameter and an empty string for currency. conversionList = updateConversionFromVisit( conversionList, "COiYmPDTv7kCFcP0KgodOzQAAA", // clickId. Replace with data from your site "test_20130906_10", // conversionId 1378710000000L, // timeStamp "TRANSACTION", // type "", // state -1L, // quantityMillis 90000000L, // revenueMicros. Equivalent to $90 of revenue "USD"); // currencyCode // Here's a conversion that needs to be removed. Just set the state parameter to "REMOVED". conversionList = updateConversionFromVisit( conversionList, "COiYmPDTv7kCFcP0KgodOzQAAA", // clickId. Replace with data from your site "test_1383337059137", // conversionId 1378710000000L, // timeStamp "ACTION", // type "REMOVED", // state 1000L, // quantityMillis -1L, // revenueMicros ""); // currencyCode // Upload the List and handle the response. uploadConversions(conversions, service); // See an example in Add New Conversions. } /** * Create a conversion and add it to a List<Conversion>. */ private static List<Conversion> updateConversionFromVisit(List<Conversion> conversions, String clickId, String conversionId, Long timeStamp, String type, String state, Long quantity, Long revenue, String currency) { // Identifies the existing conversion. Conversion conversion = new Conversion() .setClickId(clickId) .setConversionId(conversionId) .setConversionTimestamp(BigInteger.valueOf(timeStamp)) .setType(type); // Only add these fields if the value is not empty greater than -1. if(!state.isEmpty()) conversion.setState(state); if (quantity > -1L) { conversion.setQuantityMillis(quantity); } if (revenue > -1L) { conversion.setRevenueMicros(revenue); if (!currency.isEmpty()) { conversion.setCurrencyCode(currency); } else { System.err.println(String.format( "Can't add conversion %s. It specifies revenue but no currency.", conversion.getConversionId())); return conversions; } } conversions.add(conversion); return conversions; }
Python
def update_conversion(service): """Change the revenue for one existing conversion and remove another. Args: service: An authorized Doubleclicksearch service. See Set Up Your Application. """ request = service.conversion().update( body= { 'conversion' : [{ 'clickId' : 'COiYmPDTv7kCFcP0KgodOzQAAA', // Replace with data from your site 'conversionId' : 'test_20130906_13', 'conversionTimestamp' : '1378710000000', 'segmentationType' : 'FLOODLIGHT', 'segmentationName' : 'Test', 'type': 'TRANSACTION', 'revenueMicros': '90000000', // 90 million revenueMicros is equivalent to $90 of revenue 'currencyCode': 'USD' }, { 'clickId': 'COiYmPDTv7kCFcP0KgodOzQAAA', // Replace with data from your site 'conversionId': 'test_1383337059137_01', 'conversionTimestamp': '1378710000000', 'segmentationType' : 'FLOODLIGHT', 'segmentationName' : 'Test', 'type': 'ACTION', 'quantityMillis': '1000', 'state': 'REMOVED' }] } ) pprint.pprint(request.execute())
按关键字 ID 识别转化
如果您无权访问点击 ID,或者转化最初归因于关键字或关键字/广告,则可以发送 Conversion.update()
请求,并在其中指定以下字段:
criterionId
(关键字 ID)conversionId
conversionTimestamp
type
state
(仅当您要将状态更改为“已移除”或“有效”时才必需)quantityMillis
(仅当在原始转化中指定时)revenueMicros
(仅当在原始转化中指定时)currencyCode
(仅当在原始转化中指定时)
您可以选择指定其他 ID,例如转化的广告 ID、广告系列 ID 等,但这并非必需。Search Ads 360 只需上述列表中的 ID 即可识别现有转化。
示例
以下是现有转化的示例:
{ "kind": "doubleclicksearch#conversionList", "conversion" : [{ "agencyId": "12300000000000456", "advertiserId": "45600000000010291", "engineAccountId": "700000000042441", "campaignId": "71700000002044839", "adGroupId": "58700000032026064", "criterionId": "43700004289911004", "adId": "44700000155906860", "conversionId": "test_1383157519886", "conversionTimestamp": "1378710000000", "type": "ACTION", "quantityMillis": "1000", "segmentationType": "FLOODLIGHT", "segmentationName": "Test" }] }
以下请求会更新转化的时间戳:
JSON
请注意,Conversion.update()
请求使用 PUT HTTP 方法。
PUT https://www.googleapis.com/doubleclicksearch/v2/conversion Authorization: Bearer your OAuth 2.0 access token Content-type: application/json { "kind": "doubleclicksearch#conversionList", "conversion": [ { "criterionId": "43700004289911004", // Replace with your ID "conversionId": "test_1383157519886", "conversionTimestamp": "1378710000000", "type": "ACTION", "quantityMillis": "3000" } ] }
Java
// Send conversion data to updateConversion, which creates a conversion and adds it // to the conversion list. conversionList = updateConversionFromKeyword(conversionList, 43700004289911004L, // criterionId. Replace with your ID "test_1383157519886", // conversionId 1378710000000L, // timeStamp "ACTION", // type "", // state 3000L, // quantityMillis -1L, // revenueMicros ""); // currencyCode private static List<Conversion> updateConversionFromKeyword(List<Conversion> conversions, Long criterionId, String conversionId, Long timeStamp, String type, String state, Long quantity, Long revenue, String currency ) { Conversion conversion = new Conversion() .setCriterionId(criterionId) .setConversionId(conversionId) .setConversionTimestamp(BigInteger.valueOf(timeStamp)) .setType(type); // Only add these fields if the value is not empty greater than -1. if(!state.isEmpty()) conversion.setState(state); if (quantity > -1L) { conversion.setQuantityMillis(quantity); } if (revenue > -1L) { conversion.setRevenueMicros(revenue); if (!currency.isEmpty()) { conversion.setCurrencyCode(currency); } else { System.err.println(String.format( "Can't add conversion %s. It specifies revenue but no currency.", conversion.getConversionId())); return conversions; } } conversions.add(conversion); return conversions; }
Python
def update_conversion(service): """Change the timestamp of a conversion. Use only the keyword id (criterionId) to identify the conversion. Args: service: An authorized Doubleclicksearch service. See Set Up Your Application. """ request = service.conversion().update( body= { 'conversion': [{ 'criterionId': '43700004289911004', // Replace with your ID 'conversionId': 'test_1383157519886', 'conversionTimestamp': '1378760000000', 'type': 'ACTION', 'quantityMillis': '1000' }] } ) pprint.pprint(request.execute())
处理 Search Ads 360 回复
更新请求的响应与插入请求的响应相同:只有在请求中的所有转化都成功更新后,Search Ads 360 才会指示成功。
如果请求成功,响应将包含每个更新后的转化的完整 Search Ads 360 内部表示法,例如广告系列 ID、广告组 ID 和关键字(条件)ID。
如果有 1 项或多项更新未能通过验证或上传,响应中会包含每项失败更新的失败消息。响应不包含有关成功更新的转化的邮件。 如需详细了解这些失败消息,请参阅针对插入请求处理 Search Ads 360 响应。