기존 전환 수정

하나 이상의 기존 전환에 다음과 같은 유형의 변경사항을 적용하려면 Conversion.update() 메서드를 호출합니다.

Search Ads 360에서는 다음 항목의 변경을 지원하지 않습니다.

  • 전환 날짜입니다.
  • 전환 유형
  • 전환에 기여한 키워드, 광고 또는 방문
  • 플러드라이트 활동 또는 활동 이름입니다.

그러나 언제든지 기존 전환을 삭제됨으로 표시하고 업데이트된 날짜, 유형, 기여 분석 ID 또는 플러드라이트 활동이 포함된 새 전환을 업로드할 수 있습니다 (새 conversionId도 지정해야 함).

Conversion.insert()와 마찬가지로 업데이트 요청에서 여러 개의 전환을 지정하면 Search Ads 360에서는 전체 배치를 '전부 아니면 전무' 트랜잭션으로 업데이트하는 대신 최선을 다해 각 전환을 업데이트하려고 합니다. 일괄 작업의 일부 업데이트가 실패해도 다른 업데이트는 계속 성공할 수 있습니다. 업데이트된 모든 전환에 대한 응답을 읽고 업데이트가 완료되었는지 확인하는 것이 좋습니다.

업데이트 요청 보내기

Conversion.update()에서 지정하는 대부분의 필드는 업데이트할 전환을 식별하는 데 사용됩니다. 다음 기법 중 하나를 사용하여 기존 전환을 식별할 수 있습니다.

  • 전환의 clickId를 지정합니다.
    • 수정된 모든 전환은 클릭 ID가 생성된 후 60일 이내여야 합니다.
  • 전환의 criterionId (키워드 ID) 지정

두 가지 방법 모두 전환의 conversionId, conversionTimestamp, 거래 type를 지정해야 합니다.

또한 원래 변환에서 revenueMicroscurrencyCode 또는 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은 요청의 모든 전환이 성공적으로 업데이트된 경우에만 성공으로 표시합니다.

요청이 성공하면 응답에 캠페인 ID, 광고그룹 ID, 키워드(기준) ID 등 업데이트된 각 전환의 전체 Search Ads 360 내부 표현이 포함됩니다.

하나 이상의 업데이트가 유효성 검사 또는 업로드에 실패하면 응답에 실패한 각 업데이트에 대한 실패 메시지가 포함됩니다. 성공적으로 업데이트된 전환에 대한 메시지는 응답에 포함되지 않습니다. 이러한 실패 메시지에 관한 자세한 내용은 삽입 요청에 관한 Search Ads 360 응답 처리를 참고하세요.