Zmień istniejące konwersje

Wywołaj metodę Conversion.update(), by wprowadzić następujące typy zmian w co najmniej 1 dotychczasowej konwersji:

Search Ads 360 nie umożliwia zmiany tych danych:

  • datę konwersji;
  • Typ konwersji.
  • Słowo kluczowe, reklama lub wizyta, które zostały przypisane do konwersji.
  • Aktywność Floodlight lub nazwa aktywności.

Zawsze możesz jednak oznaczyć wcześniejszą konwersję jako USUNIĘTO i przesłać nową z inną datą, typem, identyfikatorami atrybucji lub aktywnością Floodlight (pamiętaj, by podać też nową wartość conversionId).

Tak jak w przypadku Conversion.insert(), jeśli żądanie aktualizacji dotyczy wielu konwersji, Search Ads 360 stara się aktualizować każdą z nich w miarę możliwości, zamiast aktualizować całą grupę jako transakcję „wszystko albo nic”. Jeśli niektóre aktualizacje w grupie zakończą się niepowodzeniem, inne nadal mogą się udać. Zalecamy przeczytanie odpowiedzi w przypadku każdej zaktualizowanej konwersji. Dzięki temu będziesz mieć pewność, że aktualizacja się powiodła.

Wyślij prośbę o aktualizację

Większość pól określonych w Conversion.update() służy do identyfikowania konwersji, które chcesz zaktualizować. Aby zidentyfikować istniejące konwersje, możesz użyć jednej z tych metod:

  • Określ clickId konwersji.
    • Wszystkie edytowane konwersje muszą przypadać w ciągu 60 dni od wygenerowania identyfikatora kliknięcia.
  • Określ criterionId (identyfikator słowa kluczowego) konwersji

Obie metody wymagają określenia: conversionId, conversionTimestamp i type transakcji.

Poza tym jeśli pierwotna konwersja określała wartości revenueMicros i currencyCode lub quantityMillis, w żądaniu aktualizacji musisz określić te dane, nawet jeśli ich nie zmieniasz.

Identyfikowanie konwersji według identyfikatora kliknięcia

Jeśli w konwersji pierwotnie określono identyfikator kliknięcia, możesz wysłać żądanie Conversion.update(), które określa te pola:

  • clickId
  • conversionId
  • conversionTimestamp
  • type
  • state (wymagane tylko wtedy, gdy chcesz zmienić stan na USUNIĘTO lub AKTYWNE)
  • quantityMillis (tylko jeśli określono w pierwotnej konwersji)
  • revenueMicros (tylko jeśli określono w pierwotnej konwersji)
  • currencyCode (tylko jeśli określono w pierwotnej konwersji)

Przykład

Oto przykład 2 dotychczasowych konwersji:

{
 "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"
  }]
}     

To żądanie aktualizuje jedną z konwersji z poprzedniego przykładu i usuwa drugą:

JSON

Pamiętaj, że żądanie Conversion.update() używa metody 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"
  }
 ]
}        

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())

Identyfikowanie konwersji według identyfikatora słowa kluczowego

Jeśli nie masz dostępu do identyfikatora kliknięcia lub konwersja została pierwotnie przypisana do słowa kluczowego, słowa kluczowego bądź reklamy, możesz wysłać żądanie Conversion.update(), które określa te pola:

  • criterionId (identyfikator słowa kluczowego)
  • conversionId
  • conversionTimestamp
  • type
  • state (wymagane tylko wtedy, gdy chcesz zmienić stan na USUNIĘTO lub AKTYWNE)
  • quantityMillis (tylko jeśli określono w pierwotnej konwersji)
  • revenueMicros (tylko jeśli określono w pierwotnej konwersji)
  • currencyCode (tylko jeśli określono w pierwotnej konwersji)

Opcjonalnie możesz podać inne identyfikatory, np. identyfikator reklamy czy identyfikator kampanii konwersji, ale nie jest to konieczne. Search Ads 360 potrzebuje tylko identyfikatorów z listy powyżej do identyfikacji istniejącej konwersji.

Przykład

Oto przykład istniejącej konwersji:

{
 "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"
  }]
}     

To żądanie aktualizuje sygnaturę czasową konwersji:

JSON

Pamiętaj, że żądanie Conversion.update() używa metody 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"
  }
 ]
}        

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())

Obsługa odpowiedzi Search Ads 360

Odpowiedź na żądanie aktualizacji jest taka sama jak na żądanie wstawiania: Search Ads 360 wskazuje na powodzenie tylko wtedy, gdy wszystkie konwersje w żądaniu zostały zaktualizowane.

Jeśli żądanie zostanie zrealizowane, odpowiedź będzie zawierać pełną reprezentację wewnętrzną Search Ads 360 dla każdej zaktualizowanej konwersji, np. identyfikator kampanii, identyfikator grupy reklam i identyfikator słowa kluczowego (kryterium).

Jeśli nie uda się zweryfikować lub przesłać co najmniej 1 aktualizacji, odpowiedź będzie zawierać komunikaty o błędach dotyczące każdej nieudanej aktualizacji. Odpowiedź nie zawiera komunikatów o konwersjach, które zostały zaktualizowane. Więcej informacji o tych komunikatach o błędach znajdziesz w artykule Obsługa odpowiedzi Search Ads 360 na temat żądań wstawienia.