تبدیل ها را ویرایش کنید

این راهنما دستورالعمل‌های دقیقی را برای ویرایش تبدیل‌ها با استفاده از سرویس Campaign Manager 360 API Conversions ارائه می‌کند. قبل از ادامه، توصیه می شود برای آشنایی با تبدیل های آفلاین و آشنایی با مفاهیم مطرح شده در این راهنما ، مرور کلی را مرور کنید.

قبل از اینکه شروع کنی

این گردش کار ویرایش به شما امکان می دهد quantity و value تبدیل های آنلاین و آفلاین موجود را تغییر دهید. برای انجام این کار، باید مقادیری را ارائه دهید که تبدیل‌های مورد ویرایش را به‌طور منحصربه‌فرد شناسایی کنند. بسته به نوع تبدیل هایی که ویرایش می کنید، این مقادیر را به روش های مختلف به دست خواهید آورد:

  • مقادیر لازم برای شناسایی تبدیل های آنلاین را می توان از انتقال داده به دست آورد.

  • مقادیر لازم برای شناسایی تبدیل‌های آفلاین در ConversionsBatchInsertResponse درخواست‌های موفقیت آمیز batchinsert برگردانده می‌شوند.

هنگامی که یک تبدیل از هر نوع را با موفقیت ویرایش کردید، ConversionsBatchUpdateResponse حاوی مقادیر لازم برای انجام ویرایش های بعدی خواهد بود.

پیکربندی منابع تبدیل

اولین مرحله در گردش کار ویرایش شامل ایجاد یک یا چند شی منبع Conversion است.

از فیلدهای زیر برای شناسایی تبدیل به ویرایش استفاده می شود. این فیلدها الزامی هستند و باید دقیقاً با تبدیل موجود مطابقت داشته باشند.

رشته شرح

encryptedUserId یا gclid یا dclicd یا matchid یا mobileDeviceId

شناسه کاربر رمزگذاری شده، شناسه کلیک Google، شناسه کلیک روی نمایش، شناسه مطابقت یا شناسه دستگاه تلفن همراه که تبدیل را ایجاد کرده است.
floodlightActivityId فعالیت Floodlight که تبدیل به آن نسبت داده می شود.
floodlightConfigurationId پیکربندی Floodlight که توسط فعالیت مشخص شده استفاده می شود.
ordinal شناسه deduplication مرتبط با تبدیل.
timestampMicros مهر زمانی تبدیل، در میکروثانیه از دوران یونیکس.

فیلدهای قابل ویرایش در زیر لیست شده است. این فیلدها الزامی هستند و مقادیری که ارائه می‌کنید، مقادیر از قبل موجود در تبدیل در حال ویرایش را بازنویسی می‌کنند.

رشته شرح
quantity تعداد موارد مرتبط با تبدیل.
value مقدار درآمد حاصل از تبدیل.

تمام فیلدهای دیگر ذکر شده در مستندات مرجع پشتیبانی نمی شوند و قابل تغییر نیستند. گنجاندن فیلدهای پشتیبانی نشده در درخواست ویرایش شما منجر به خطا می شود. اگر تبدیل در حال ویرایش حاوی مقادیر از قبل موجود برای فیلدهای پشتیبانی نشده باشد، آن مقادیر به طور خودکار حفظ خواهند شد.

مثال زیر ایجاد یک شی منبع تبدیل ساده برای ویرایش را نشان می دهد:

سی شارپ

// 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;

جاوا

// 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']);

پایتون

# 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

روبی

# 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

اطلاعات رمزگذاری را مشخص کنید

اگر تبدیل‌های در حال ویرایش با شناسه‌های کاربر رمزگذاری‌شده مرتبط باشد، باید جزئیاتی درباره نحوه رمزگذاری آنها به عنوان بخشی از درخواست ویرایش ارائه کنید. برای جزئیات بیشتر به راهنمای تبدیل آپلود مراجعه کنید.

در صورت لزوم، ایجاد یک شی EncryptionInfo که این مقادیر را مشخص می کند، دومین مرحله در گردش کار ویرایش است:

سی شارپ

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

جاوا

// 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']);

پایتون

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

روبی

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

یک درخواست به روز رسانی ایجاد کنید

آخرین مرحله در این فرآیند ویرایش تبدیل ها با فراخوانی به batchupdate است. این روش یک شی ConversionsBatchUpdateRequest را می‌پذیرد که مجموعه تبدیل‌هایی را که باید ویرایش شوند با اطلاعات رمزگذاری مرتبط با آنها ترکیب می‌کند (در صورت لزوم):

سی شارپ

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

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

جاوا

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

پایتون

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

روبی

# 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 سعی می کند هر تبدیل در درخواست شما را بر اساس بهترین تلاش ویرایش کند، نه اینکه کل دسته را به عنوان یک تراکنش همه یا هیچ به روز کند. اگر برخی از تبدیل‌ها در یک دسته به‌روزرسانی نشوند، برخی دیگر ممکن است همچنان با موفقیت به‌روزرسانی شوند. بنابراین، توصیه می شود برای تعیین وضعیت هر تبدیل، ConversionsBatchUpdateResponse برگشتی را بررسی کنید:

سی شارپ

// 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);
  }
}

جاوا

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

پایتون

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

روبی

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

فیلد status پاسخ، همانطور که در بالا مشاهده شد، حاوی یک شیء ConversionStatus برای هر تبدیل موجود در درخواست اصلی است. اگر فقط به تبدیل‌هایی علاقه دارید که به‌روزرسانی نشدند، از فیلد hasFailures می‌توان برای تعیین سریع اینکه آیا هر تبدیل در دسته ارائه‌شده ناموفق بود یا خیر، استفاده کرد.