Dönüşümleri düzenle

Bu kılavuzda, Campaign Manager 360 API Conversions hizmetini kullanarak dönüşümleri düzenlemeyle ilgili ayrıntılı talimatlar verilmektedir. Devam etmeden önce, çevrimdışı dönüşümlere giriş niteliğindeki Genel Bakış bölümünü incelemeniz ve bu kılavuzda ele alınan kavramları öğrenmeniz önerilir.

Başlamadan önce

Bu düzenleme iş akışı, mevcut online ve çevrimdışı dönüşümlerin quantity ve value değerlerini değiştirmenize olanak tanır. Bunun için, düzenlenecek dönüşümleri benzersiz şekilde tanımlayan değerler sağlamanız gerekir. Düzenlediğiniz dönüşümlerin türüne bağlı olarak, bu değerleri farklı şekillerde elde edersiniz:

Her iki türden bir dönüşümü başarıyla düzenledikten sonra ConversionsBatchUpdateResponse, sonraki düzenlemeleri gerçekleştirmek için gerekli değerleri içerir.

Dönüşüm kaynaklarını yapılandırma

Düzenleme iş akışının ilk adımında bir veya daha fazla Conversion kaynak nesnesi oluşturulur.

Aşağıdaki alanlar, düzenlenecek dönüşümü tanımlamak için kullanılır. Bu alanlar zorunludur ve mevcut bir dönüşümle tam olarak eşleşmelidir.

Alan Açıklama

encryptedUserId, gclid, dclid, matchid veya mobileDeviceId

Dönüşümü oluşturan şifrelenmiş kullanıcı kimliği, Google tıklama kimliği, Görüntülü Reklam Ağı tıklama kimliği, eşleşme kimliği veya mobil cihaz kimliği.
floodlightActivityId Dönüşümün ilişkilendirildiği Floodlight etkinliği.
floodlightConfigurationId Belirtilen etkinlik tarafından kullanılan Floodlight yapılandırması.
ordinal Dönüşümle ilişkili tekilleştirme tanımlayıcısı.
timestampMicros Dönüşümün zaman damgası (Unix epoch'tan itibaren mikrosaniye cinsinden).

Düzenlenebilecek alanlar aşağıda listelenmiştir.

Bu alanlar zorunludur ve sağladığınız değerler, düzenlenen dönüşümdeki mevcut değerlerin üzerine yazılır.

Alan Açıklama
quantity Dönüşümle ilişkili öğe sayısı.
value Dönüşüm tarafından oluşturulan gelir miktarı.

Bu alanlar isteğe bağlıdır. Ayarlanmazsa değer değişmez.

Alan Açıklama
customVariables Dönüşümün özel Floodlight değişkenleri. Değişken ayarlanmışsa değeri günceller veya ekler. Değişkenin değeri ayarlanmamışsa değişmez.

Referans dokümanlarında belirtilen diğer tüm alanlar desteklenmez ve değiştirilemez. Düzenleme isteğinize desteklenmeyen alanlar eklemek hataya neden olur. Düzenlenen dönüşüm, desteklenmeyen alanlar için önceden mevcut değerler içeriyorsa bu değerler otomatik olarak korunur.

Aşağıdaki örnekte, düzenlenecek basit bir dönüşüm kaynağı nesnesinin oluşturulması gösterilmektedir:

C#

// Find the Floodlight configuration ID based on the provided activity ID.
FloodlightActivity floodlightActivity =
    service.FloodlightActivities.Get(profileId, floodlightActivityId).Execute();
long floodlightConfigurationId = (long) floodlightActivity.FloodlightConfigurationId;

// Construct the conversion object with values that identify the conversion to update.
Conversion conversion = new Conversion();
conversion.EncryptedUserId = conversionUserId;
conversion.FloodlightActivityId = floodlightActivityId;
conversion.FloodlightConfigurationId = floodlightConfigurationId;
conversion.Ordinal = conversionOrdinal;
conversion.TimestampMicros = conversionTimestamp;

// Set the fields to be updated. These fields are required; to preserve a value from the
// existing conversion, it must be copied over manually.
conversion.Quantity = newQuantity;
conversion.Value = newValue;

Java

// Create a conversion object populated with values that identify the conversion to update.
Conversion conversion = new Conversion();
conversion.setEncryptedUserId(encryptedUserId);
conversion.setFloodlightActivityId(floodlightActivityId);
conversion.setFloodlightConfigurationId(floodlightConfigurationId);
conversion.setOrdinal(ordinal);
conversion.setTimestampMicros(timestampMicros);

// Set the fields to be updated. These fields are required; to preserve a value from the
// existing conversion, it must be copied over manually.
conversion.setQuantity(newQuantity);
conversion.setValue(newValue);

PHP

// Find Floodlight configuration ID based on provided activity ID.
$activity = $this->service->floodlightActivities->get(
    $values['user_profile_id'],
    $values['floodlight_activity_id']
);
$floodlightConfigId = $activity->getFloodlightConfigurationId();

// Create a conversion object with values that identify the conversion to
// update.
$conversion = new Google_Service_Dfareporting_Conversion();
$conversion->setEncryptedUserId($values['encrypted_user_id']);
$conversion->setFloodlightActivityId($values['floodlight_activity_id']);
$conversion->setFloodlightConfigurationId($floodlightConfigId);
$conversion->setOrdinal($values['ordinal']);
$conversion->setTimestampMicros($values['timestamp']);

// Set the fields to be updated. These fields are required; to preserve a
// value from the existing conversion, it must be copied over manually.
$conversion->setQuantity($values['new_quantity']);
$conversion->setValue($values['new_value']);

Python

# Construct the conversion object with values that identify the conversion
# to update.
conversion = {
    'encryptedUserId': encrypted_user_id,
    'floodlightActivityId': floodlight_activity_id,
    'floodlightConfigurationId': floodlight_config_id,
    'ordinal': ordinal,
    'timestampMicros': timestamp
}

# Set the fields to be updated. These fields are required; to preserve a
# value from the existing conversion, it must be copied over manually.
conversion['quantity'] = new_quantity
conversion['value'] = new_value

Ruby

# Look up the Floodlight configuration ID based on activity ID.
floodlight_activity = service.get_floodlight_activity(profile_id,
  existing_conversion[:floodlight_activity_id])
floodlight_config_id = floodlight_activity.floodlight_configuration_id

# Construct the conversion with values that identify the conversion to
# update.
conversion = DfareportingUtils::API_NAMESPACE::Conversion.new(
  encrypted_user_id: existing_conversion[:encrypted_user_id],
  floodlight_activity_id: existing_conversion[:floodlight_activity_id],
  floodlight_configuration_id: floodlight_config_id,
  ordinal: existing_conversion[:ordinal],
  timestamp_micros: existing_conversion[:timestamp]
)

# Set the fields to be updated. These fields are required; to preserve a
# value from the existing conversion, it must be copied over manually.
conversion.quantity = new_quantity
conversion.value = new_value

Şifreleme bilgilerini belirtme

Düzenlenen dönüşümler şifrelenmiş kullanıcı kimlikleriyle ilişkiliyse düzenleme isteği kapsamında bu kimliklerin nasıl şifrelendiğiyle ilgili ayrıntıları sağlamanız gerekir. Ayrıntılar için Dönüşümleri Yükleme kılavuzuna bakın.

Gerektiğinde, bu değerleri belirten bir EncryptionInfo nesnesi oluşturmak, düzenleme iş akışındaki ikinci adımdır:

C#

// Create the encryption info.
EncryptionInfo encryptionInfo = new EncryptionInfo();
encryptionInfo.EncryptionEntityId = encryptionEntityId;
encryptionInfo.EncryptionEntityType = encryptionEntityType;
encryptionInfo.EncryptionSource = encryptionSource;

Java

// Create the encryption info.
EncryptionInfo encryptionInfo = new EncryptionInfo();
encryptionInfo.setEncryptionEntityId(encryptionEntityId);
encryptionInfo.setEncryptionEntityType(encryptionEntityType);
encryptionInfo.setEncryptionSource(encryptionSource);

PHP

$encryptionInfo = new Google_Service_Dfareporting_EncryptionInfo();
$encryptionInfo->setEncryptionEntityId($values['encryption_entity_id']);
$encryptionInfo->setEncryptionEntityType($values['encryption_entity_type']);
$encryptionInfo->setEncryptionSource($values['encryption_source']);

Python

# Construct the encryption info.
encryption_info = {
    'encryptionEntityId': encryption_entity_id,
    'encryptionEntityType': encryption_entity_type,
    'encryptionSource': encryption_source
}

Ruby

# Construct the encryption info.
encryption_info = DfareportingUtils::API_NAMESPACE::EncryptionInfo.new(
  encryption_entity_id: encryption[:entity_id],
  encryption_entity_type: encryption[:entity_type],
  encryption_source: encryption[:source]
)

Güncelleme isteği oluşturma

Bu süreçteki son adım, batchupdate yöntemini çağırarak dönüşümleri düzenlemektir. Bu yöntem, düzenlenecek dönüşüm grubunu ilişkili şifreleme bilgileriyle (gerektiğinde) birleştiren bir ConversionsBatchUpdateRequest nesnesini kabul eder:

C#

// Insert the conversion.
ConversionsBatchUpdateRequest request = new ConversionsBatchUpdateRequest();
request.Conversions = new List<Conversion>() { conversion };
request.EncryptionInfo = encryptionInfo;

ConversionsBatchUpdateResponse response =
    service.Conversions.Batchupdate(request, profileId).Execute();

Java

ConversionsBatchUpdateRequest request = new ConversionsBatchUpdateRequest();
request.setConversions(ImmutableList.of(conversion));
request.setEncryptionInfo(encryptionInfo);

ConversionsBatchUpdateResponse response = reporting.conversions()
    .batchupdate(profileId, request).execute();

PHP

$batch = new Google_Service_Dfareporting_ConversionsBatchUpdateRequest();
$batch->setConversions([$conversion]);
$batch->setEncryptionInfo($encryptionInfo);

$result = $this->service->conversions->batchupdate(
    $values['user_profile_id'],
    $batch
);

Python

# Update the conversion.
request_body = {
    'conversions': [conversion],
    'encryptionInfo': encryption_info
}
request = service.conversions().batchupdate(
    profileId=profile_id, body=request_body)
response = request.execute()

Ruby

# Construct the batch update request.
batch_update_request =
  DfareportingUtils::API_NAMESPACE::ConversionsBatchUpdateRequest.new(
    conversions: [conversion],
    encryption_info: encryption_info
  )

# Update the conversion.
result = service.batchupdate_conversion(profile_id, batch_update_request)

Campaign Manager 360'ın, tüm grubu bir bütün olarak güncellemek yerine isteğinizdeki her dönüşümü en iyi şekilde düzenlemeye çalıştığını unutmayın. Bir gruptaki bazı dönüşümler güncellenemese bile diğerleri başarıyla güncellenebilir. Bu nedenle, her dönüşümün durumunu belirlemek için döndürülen ConversionsBatchUpdateResponse öğesini incelemeniz önerilir:

C#

// Handle the batchinsert response.
if (!response.HasFailures.Value) {
  Console.WriteLine("Successfully updated conversion for encrypted user ID {0}.",
      conversionUserId);
} else {
  Console.WriteLine("Error(s) updating conversion for encrypted user ID {0}:",
      conversionUserId);

  ConversionStatus status = response.Status[0];
  foreach(ConversionError error in status.Errors) {
    Console.WriteLine("\t[{0}]: {1}", error.Code, error.Message);
  }
}

Java

if (!response.getHasFailures()) {
  System.out.printf("Successfully updated conversion for encrypted user ID %s.%n",
      encryptedUserId);
} else {
  System.out.printf("Error(s) updating conversion for encrypted user ID %s:%n",
      encryptedUserId);

  // Retrieve the conversion status and report any errors found. If multiple conversions
  // were included in the original request, the response would contain a status for each.
  ConversionStatus status = response.getStatus().get(0);
  for (ConversionError error : status.getErrors()) {
    System.out.printf("\t[%s]: %s.%n", error.getCode(), error.getMessage());
  }
}

PHP

if (!$result->getHasFailures()) {
    printf(
        'Successfully updated conversion for encrypted user ID %s.',
        $values['encrypted_user_id']
    );
} else {
    printf(
        'Error(s) updating conversion for encrypted user ID %s:<br><br>',
        $values['encrypted_user_id']
    );

    $status = $result->getStatus()[0];
    foreach ($status->getErrors() as $error) {
        printf('[%s] %s<br>', $error->getCode(), $error->getMessage());
    }
}

Python

if not response['hasFailures']:
  print('Successfully updated conversion for encrypted user ID %s.' %
        encrypted_user_id)
else:
  print('Error(s) updating conversion for encrypted user ID %s.' %
        encrypted_user_id)

  status = response['status'][0]
  for error in status['errors']:
    print('\t[%s]: %s' % (error['code'], error['message']))

Ruby

if result.has_failures
  puts format('Error(s) updating conversion for encrypted user ID %s.',
    existing_conversion[:encrypted_user_id])

  status = result.status[0]
  status.errors.each do |error|
    puts format("\t[%s]: %s", error.code, error.message)
  end
else
  puts format('Successfully updated conversion for encrypted user ID %s.',
    existing_conversion[:encrypted_user_id])
end

Yanıtın status alanı, daha önce de görüldüğü gibi orijinal istekte yer alan her dönüşüm için bir ConversionStatus nesnesi içerir. Yalnızca güncellenemeyen dönüşümlerle ilgileniyorsanız sağlanan gruptaki herhangi bir dönüşümün başarısız olup olmadığını hızlıca belirlemek için hasFailures alanı kullanılabilir. Her bir hata kodunun nasıl ele alınacağı ve hangi başarısız dönüşümlerin yeniden deneneceği (INTERNAL ve NOT_FOUND) ile ilgili talimatlar için SSS bölümüne bakın.