Edit konversi

Panduan ini memberikan petunjuk mendetail untuk mengedit konversi menggunakan layanan Conversions Campaign Manager 360 API. Sebelum melanjutkan, sebaiknya tinjau Ringkasan untuk mendapatkan pengantar tentang konversi offline dan memahami konsep yang dibahas dalam panduan ini.

Sebelum memulai

Alur kerja pengeditan ini memungkinkan Anda mengubah quantity dan value konversi online dan offline yang ada. Untuk melakukannya, Anda harus memberikan nilai yang mengidentifikasi konversi yang akan diedit secara unik. Bergantung pada jenis konversi yang Anda edit, Anda akan mendapatkan nilai ini dengan cara yang berbeda:

Setelah Anda berhasil mengedit konversi dari salah satu jenis tersebut, ConversionsBatchUpdateResponse akan berisi nilai yang diperlukan untuk melakukan pengeditan berikutnya.

Mengonfigurasi resource konversi

Langkah pertama dalam alur kerja edit melibatkan pembuatan satu atau beberapa objek resource Conversion.

Kolom berikut digunakan untuk mengidentifikasi konversi yang akan diedit. Kolom ini wajib diisi dan harus sama persis dengan konversi yang ada.

Kolom Deskripsi

encryptedUserId atau gclid atau dclid atau matchid atau mobileDeviceId

ID pengguna terenkripsi, ID Klik Google, ID Klik Display, ID kecocokan, atau ID perangkat seluler yang menghasilkan konversi.
floodlightActivityId Aktivitas Floodlight yang diatribusikan ke konversi.
floodlightConfigurationId Konfigurasi Floodlight yang digunakan oleh aktivitas yang ditentukan.
ordinal ID penghapusan duplikat yang terkait dengan konversi.
timestampMicros Stempel waktu konversi, dalam mikrodetik sejak epoch Unix.

Kolom yang dapat diedit tercantum di bawah.

Kolom ini wajib diisi dan nilai yang Anda berikan akan menimpa nilai yang sudah ada sebelumnya pada konversi yang sedang diedit.

Kolom Deskripsi
quantity Jumlah item yang terkait dengan konversi.
value Jumlah pendapatan yang dihasilkan oleh konversi.

Kolom ini bersifat opsional. Nilai tidak akan berubah jika tidak ditetapkan.

Kolom Deskripsi
customVariables Variabel Floodlight kustom konversi. Akan memperbarui atau menyisipkan nilai jika variabel ditetapkan. Nilai variabel tidak berubah jika tidak ditetapkan.

Semua kolom lain yang disebutkan dalam dokumentasi referensi tidak didukung dan tidak dapat diubah. Menyertakan kolom yang tidak didukung dalam permintaan edit akan menyebabkan error. Jika konversi yang sedang diedit berisi nilai yang sudah ada untuk kolom yang tidak didukung, nilai tersebut akan otomatis dipertahankan.

Contoh di bawah ini menggambarkan pembuatan objek resource konversi sederhana yang akan diedit:

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

Menentukan info enkripsi

Jika konversi yang diedit dikaitkan dengan ID pengguna terenkripsi, Anda harus memberikan detail tentang cara enkripsinya sebagai bagian dari permintaan pengeditan. Lihat panduan Mengupload Konversi untuk mengetahui detailnya.

Jika perlu, membuat objek EncryptionInfo yang menentukan nilai ini adalah langkah kedua dalam alur kerja pengeditan:

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

Membuat permintaan pembaruan

Langkah terakhir dalam proses ini adalah mengedit konversi dengan panggilan ke batchupdate. Metode ini menerima objek ConversionsBatchUpdateRequest, yang menggabungkan kumpulan konversi yang akan diedit dengan info enkripsi terkait (jika diperlukan):

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)

Perhatikan bahwa Campaign Manager 360 akan mencoba mengedit setiap konversi dalam permintaan Anda berdasarkan upaya terbaik, bukan memperbarui seluruh batch sebagai transaksi semua atau tidak sama sekali. Jika beberapa konversi dalam batch gagal diperbarui, konversi lainnya mungkin masih berhasil diperbarui. Oleh karena itu, sebaiknya periksa ConversionsBatchUpdateResponse yang ditampilkan, untuk menentukan status setiap konversi:

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

Kolom status respons, seperti yang terlihat di atas, akan berisi objek ConversionStatus untuk setiap konversi yang disertakan dalam permintaan asli. Jika Anda hanya tertarik dengan konversi yang gagal diperbarui, kolom hasFailures dapat digunakan untuk menentukan dengan cepat apakah ada konversi dalam batch yang diberikan yang gagal.