Вызовите метод Conversion.update()
, чтобы внести следующие типы изменений в одно или несколько существующих преобразований:
- Измените доход, код валюты или количество.
- Измените предоставленный рекламодателем идентификатор заказа и любые пользовательские переменные Floodlight .
- Удалите преобразование, изменив
conversion.state
сACTIVE
наREMOVED
.
Search Ads 360 не поддерживает изменение следующих параметров:
- Дата конвертации.
- Тип преобразования.
- Ключевое слово или посещение, приписываемое конверсии.
- Действие Floodlight или название действия.
Однако вы всегда можете отметить существующую конверсию как УДАЛЕННУЮ и загрузить новую конверсию с обновленной датой, типом, идентификаторами атрибуции или действием Floodlight (не забудьте также указать новый conversionId
).
Как и в случае с Conversion.insert()
, если ваш запрос на обновление указывает несколько конверсий, Search Ads 360 пытается обновить каждую конверсию по принципу «лучшее из возможного», а не обновлять весь пакет как транзакцию «все или ничего». Если некоторые обновления в пакете не удались, другие все равно могут быть успешными. Мы рекомендуем вам прочитать ответ для каждой обновленной конверсии, чтобы убедиться, что обновление прошло успешно.
(Обновлено в 2025 г.) Устаревание dsConversionId
В настоящее время вы можете использовать dsConversionId
или conversionId
для идентификации и редактирования конверсий. Поле dsConversionId
будет устарело в четвертом квартале 2025 года. В дальнейшем вы должны будете использовать conversionId
для редактирования конверсий в Search Ads 360 Conversion API.
Ключевые изменения:
- Устаревание
dsConversionId
:dsConversionID
больше не будет поддерживаться в API отчетов Search Ads 360 (называемымconversion.id
) или пользовательском интерфейсе отчетов (называемым «Идентификатор конверсии»). - Требование
conversionId
:conversionId
станет обязательным полем для редактирования конверсий через Search Ads 360 Conversion API.
Как получить conversionId
:
- API отчетов Search Ads 360 : Вы можете получить
advertiser_conversion_id
с помощью API отчетов Search Ads 360. Это значение соответствуетconversionId
необходимому для редактирования. - Пользовательский интерфейс Search Ads 360 : «Идентификатор конверсии рекламодателя» можно найти на странице отчетов о конверсиях в пользовательском интерфейсе Search Ads 360.
Отправить запрос на обновление
Большинство полей, которые вы указываете в Conversion.update()
используются для идентификации конверсий, которые вы хотите обновить. Вы можете использовать любой из следующих методов для идентификации существующей конверсии:
- Укажите
clickId
конверсии- Все отредактированные конверсии должны быть сделаны в течение 60 дней с момента создания идентификатора клика.
- Укажите
criterionId
конверсии (идентификатор ключевого слова)
Оба метода требуют указания conversionId
, conversionTimestamp
и transaction type
конверсии.
Кроме того, если в исходной конверсии указаны revenueMicros
и currencyCode
или quantityMillis
, в запросе на обновление необходимо указать эти данные, даже если вы их не изменяете.
Определить конверсию по идентификатору клика
Если изначально для конверсии был указан идентификатор клика, вы можете отправить запрос 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()
использует HTTP-метод PUT .
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" } ] }
Ява
/** * 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; }
Питон
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())
Определить конверсию по идентификатору ключевого слова
Если у вас нет доступа к идентификатору клика или если конверсия изначально была приписана ключевому слову или ключевому слову/объявлению, вы можете отправить запрос Conversion.update()
, в котором указаны следующие поля:
-
criterionId
(идентификатор ключевого слова) -
conversionId
-
conversionTimestamp
-
type
-
state
(требуется только если вы хотите изменить состояние на УДАЛЕН или АКТИВЕН) -
quantityMillis
(только если указано в исходном преобразовании) -
revenueMicros
(только если указано в исходной конверсии) -
currencyCode
(только если указано в исходном преобразовании)
При желании вы можете указать другие идентификаторы, например идентификатор объявления конверсии, идентификатор кампании и т. д., но это не обязательно. Search Ads 360 нужны только идентификаторы из списка выше для идентификации существующей конверсии.
Пример
Вот пример существующего преобразования:
{ "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()
использует HTTP-метод PUT .
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" } ] }
Ява
// 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; }
Питон
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 для каждой обновленной конверсии, например идентификатор кампании, идентификатор группы объявлений и идентификатор ключевого слова (критерия).
Если одно или несколько обновлений не прошли проверку или загрузку, ответ включает сообщения об ошибках для каждого неудачного обновления. Ответ не содержит сообщений о конверсиях, которые успешно обновлены. Для получения дополнительной информации об этих сообщениях об ошибках см. раздел Обработка ответов Search Ads 360 для запросов на вставку.