تبدیل ها را آپلود کنید

این راهنما دستورالعمل‌های دقیقی برای آپلود تبدیل‌های آفلاین با استفاده از سرویس Conversions API کمپین منیجر ۳۶۰ ارائه می‌دهد. قبل از ادامه، توصیه می‌شود برای آشنایی با تبدیل‌های آفلاین و آشنایی با مفاهیم مورد بحث در این راهنما، بخش «مرور کلی» را مطالعه کنید.

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

اولین قدم در فرآیند آپلود تبدیل، ایجاد یک یا چند شیء منبع Conversion است. هر یک از این اشیاء نشان‌دهنده یک رویداد تبدیل واحد هستند و شامل چند فیلد ضروری می‌باشند:

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

علاوه بر این، هر شیء باید شامل یکی از فیلدهای زیر باشد:

میدان توضیحات
encryptedUserId یک شناسه کاربری رمزگذاری شده که از ماکروی تطابق %m یا Data Transfer بدست آمده است.
encryptedUserIdCandidates[] فهرستی از شناسه‌های کاربری رمزگذاری‌شده که از ماکروی تطابق %m یا انتقال داده به‌دست آمده‌اند. اولین شناسه از این شناسه‌ها که نوردهی Floodlight آن قبل از timestampMicros مشخص‌شده‌ی Micros ثبت شده باشد، استفاده خواهد شد. اگر هیچ‌کدام از شناسه‌ها با نوردهی موجود مطابقت نداشته باشند، خطایی رخ خواهد داد.
dclid شناسه کلیک نمایشی که توسط Campaign Manager 360 یا Display & Video 360 تولید شده است.
gclid شناسه کلیک گوگل که توسط گوگل ادز یا سرچ ادز ۳۶۰ ایجاد شده است.
matchId یک شناسه منحصر به فرد ایجاد شده توسط تبلیغ کننده که از طریق برچسب Floodlight به Campaign Manager 360 ارسال شده است.
mobileDeviceId یک شناسه موبایل رمزگذاری نشده در قالب IDFA یا AdID یا یک شناسه تلویزیون متصل برای تبلیغات (IFA) از یک پلتفرم دستگاه CTV پشتیبانی شده (Roku، Fire TV، Android TV، Apple TV، Xbox، Samsung، Vizio). توجه داشته باشید که گوگل از شناسه‌های تلویزیون متصل YouTube برای تبلیغات پشتیبانی نمی‌کند.

در نهایت، هر تبدیل دو معیار دارد:

میدان توضیحات
quantity الزامی. تعداد موارد مرتبط با تبدیل. برای اینکه تبدیل در معیارهای خاص (مانند کل تبدیل‌ها) محاسبه شود، باید حداقل ۱ باشد.
value مبلغ دلاری مرتبط با تبدیل. در پیکربندی floodlight که دارای ارز تبلیغ‌کننده است، تفسیر می‌شود.

فیلدهای اختیاری در مستندات مرجع مستند شده‌اند.

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

سی شارپ

// Generate a timestamp in milliseconds since Unix epoch.
TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1);
long currentTimeInMilliseconds = (long) timeSpan.TotalMilliseconds;

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

// Create the conversion.
Conversion conversion = new Conversion();
conversion.EncryptedUserId = conversionUserId;
conversion.FloodlightActivityId = floodlightActivityId;
conversion.FloodlightConfigurationId = floodlightConfigurationId;
conversion.Ordinal = currentTimeInMilliseconds.ToString();
conversion.TimestampMicros = currentTimeInMilliseconds * 1000;

جاوا

long currentTimeInMilliseconds = System.currentTimeMillis();

// Find Floodlight configuration ID based on the provided activity ID.
FloodlightActivity floodlightActivity = reporting.floodlightActivities()
    .get(profileId, floodlightActivityId).execute();
long floodlightConfigurationId = floodlightActivity.getFloodlightConfigurationId();

Conversion conversion = new Conversion();
conversion.setEncryptedUserId(encryptedUserId);
conversion.setFloodlightActivityId(floodlightActivityId);
conversion.setFloodlightConfigurationId(floodlightConfigurationId);
conversion.setOrdinal(String.valueOf(currentTimeInMilliseconds));
conversion.setTimestampMicros(currentTimeInMilliseconds * 1000);

پی اچ پی

$currentTimeInMicros = time() * 1000 * 1000;

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

$conversion = new Google_Service_Dfareporting_Conversion();
$conversion->setEncryptedUserId($values['encrypted_user_id']);
$conversion->setFloodlightActivityId($values['floodlight_activity_id']);
$conversion->setFloodlightConfigurationId($floodlightConfigId);
$conversion->setOrdinal($currentTimeInMicros);
$conversion->setTimestampMicros($currentTimeInMicros);

پایتون

# Look up the Floodlight configuration ID based on activity ID.
floodlight_activity = (
    service.floodlightActivities()
    .get(profileId=str(profile_id), id=str(floodlight_activity_id))
    .execute()
)
floodlight_config_id = floodlight_activity['floodlightConfigurationId']

current_time_in_micros = int(time.time() * 1000000)

# Construct the conversion.
conversion = {
    'encryptedUserId': encrypted_user_id,
    'floodlightActivityId': floodlight_activity_id,
    'floodlightConfigurationId': floodlight_config_id,
    'ordinal': current_time_in_micros,
    'timestampMicros': current_time_in_micros
}

روبی

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

current_time_in_micros = DateTime.now.strftime('%Q').to_i * 1000

# Construct the conversion.
conversion = DfareportingUtils::API_NAMESPACE::Conversion.new(
  encrypted_user_id: encrypted_user_id,
  floodlight_activity_id: floodlight_activity_id,
  floodlight_configuration_id: floodlight_config_id,
  ordinal: current_time_in_micros,
  timestamp_micros: current_time_in_micros
)

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

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

  1. منبع رمزگذاری ، که توضیح می‌دهد دسته‌ای از شناسه‌های رمزگذاری شده از کجا آمده‌اند. مقادیر قابل قبول برای شناسه‌های منبع یافته از ماکروی تطبیق %m، AD_SERVING یا برای شناسه‌های منبع یافته از فایل‌های انتقال داده، DATA_TRANSFER هستند.

  2. موجودیت رمزگذاری ، که مجموعه‌ای منحصر به فرد از مقادیر است که برای رمزگذاری شناسه‌های کاربر استفاده می‌شود. این مقادیر معمولاً زمانی که منبع انتقال داده است به یک حساب کاربری Campaign Manager 360 یا زمانی که منبع ماکروی %m است به یک تبلیغ‌کننده Campaign Manager 360 مربوط می‌شوند، اما همیشه اینطور نیست. اگر مطمئن نیستید، برای اطلاعات بیشتر با نماینده حساب کاربری Campaign Manager 360 خود یا پشتیبانی Campaign Manager 360 تماس بگیرید.

در صورت لزوم، ایجاد یک شیء 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);

پی اچ پی

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

توجه داشته باشید که هر درخواست درج ممکن است فقط شامل یک شیء EncryptionInfo باشد. این بدان معناست که تمام تبدیل‌های موجود در یک درخواست مشخص باید از یک منبع سرچشمه گرفته و از یک موجودیت رمزگذاری استفاده کنند.

ایجاد یک درخواست درج

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

سی شارپ

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

ConversionsBatchInsertResponse response =
    service.Conversions.Batchinsert(request, profileId).Execute();

جاوا

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

ConversionsBatchInsertResponse response = reporting.conversions()
    .batchinsert(profileId, request).execute();

پی اچ پی

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

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

پایتون

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

روبی

# Construct the batch insert request.
batch_insert_request =
  DfareportingUtils::API_NAMESPACE::ConversionsBatchInsertRequest.new(
    conversions: [conversion],
    encryption_info: encryption_info
  )

# Insert the conversion.
result = service.batchinsert_conversion(profile_id, batch_insert_request)

توجه داشته باشید که Campaign Manager 360 تلاش می‌کند هر تبدیل را بر اساس بهترین تلاش در درخواست شما وارد کند، نه اینکه کل دسته را به عنوان یک تراکنش همه یا هیچ وارد کند. اگر برخی از تبدیل‌ها در یک دسته نتوانند وارد شوند، ممکن است برخی دیگر با موفقیت وارد شوند. بنابراین، توصیه می‌شود ConversionsBatchInsertResponse برگشتی را بررسی کنید تا وضعیت هر تبدیل را تعیین کنید:

سی شارپ

// Handle the batchinsert response.
if (!response.HasFailures.Value) {
  Console.WriteLine("Successfully inserted conversion for encrypted user ID {0}.",
      conversionUserId);
} else {
  Console.WriteLine("Error(s) inserting 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 inserted conversion for encrypted user ID %s.%n",
      encryptedUserId);
} else {
  System.out.printf("Error(s) inserting 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());
  }
}

پی اچ پی

if (!$result->getHasFailures()) {
    printf(
        'Successfully inserted conversion for encrypted user ID %s.',
        $values['encrypted_user_id']
    );
} else {
    printf(
        'Error(s) inserting 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 inserted conversion for encrypted user ID %s.'
      % encrypted_user_id
  )
else:
  print(
      'Error(s) inserting 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) inserting conversion for encrypted user ID %s.',
    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 inserted conversion for encrypted user ID %s.',
    encrypted_user_id)
end

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

تأیید کنید که تبدیل‌ها پردازش شده‌اند

تبدیل‌های آپلود شده معمولاً ظرف ۲۴ ساعت پردازش و برای گزارش در دسترس قرار می‌گیرند. برای تأیید اینکه آیا تبدیل‌هایی که آپلود کرده‌اید پردازش شده‌اند یا خیر، توصیه می‌شود گزارش Floodlight Impressions را اجرا کنید. برخلاف سایر گزارش‌های انتساب، این گزارش‌ها به طور پیش‌فرض هم تبدیل‌های انتسابی (مرتبط با یک تبلیغ) و هم تبدیل‌های غیرانتسابی را برمی‌گردانند. این امر، بررسی سریع اینکه آیا تبدیل‌هایی که ارسال کرده‌اید به Campaign Manager 360 رسیده‌اند یا خیر را ایده‌آل می‌کند.