রূপান্তর আপলোড করুন

ক্যাম্পেইন ম্যানেজার 360 API Conversions পরিষেবা ব্যবহার করে অফলাইন রূপান্তরগুলি আপলোড করার জন্য এই নির্দেশিকাটি বিস্তারিত নির্দেশাবলী প্রদান করে৷ চালিয়ে যাওয়ার আগে, অফলাইন রূপান্তরগুলির একটি ভূমিকার জন্য এবং এই নির্দেশিকায় আলোচিত ধারণাগুলির সাথে নিজেকে পরিচিত করার জন্য আপনাকে ওভারভিউটি পর্যালোচনা করার পরামর্শ দেওয়া হচ্ছে৷

রূপান্তর সংস্থান কনফিগার করুন

রূপান্তর আপলোড প্রক্রিয়ার প্রথম ধাপ হল এক বা একাধিক Conversion সংস্থান বস্তু তৈরি করা। এই বস্তুগুলির প্রতিটি একটি একক রূপান্তর ইভেন্টের প্রতিনিধিত্ব করে এবং কয়েকটি প্রয়োজনীয় ক্ষেত্র রয়েছে:

মাঠ বর্ণনা
floodlightActivityId ফ্লাডলাইট কার্যকলাপ যার সাথে এই রূপান্তরটি যুক্ত করা হবে৷
floodlightConfigurationId নির্দিষ্ট কার্যকলাপ দ্বারা ব্যবহৃত ফ্লাডলাইট কনফিগারেশন।
ordinal একই ডিভাইস বা ব্যবহারকারীর থেকে একই দিনে কনভার্সনগুলি কীভাবে ডিডুপ্লিকেট করা হয় তা নিয়ন্ত্রণ করতে ব্যবহৃত একটি মান। আরও তথ্যের জন্য FAQ দেখুন।
timestampMicros ইউনিক্স যুগ থেকে মাইক্রোসেকেন্ডে রূপান্তরের টাইমস্ট্যাম্প।

উপরন্তু, প্রতিটি বস্তুতে নিম্নলিখিত ক্ষেত্রগুলির মধ্যে একটি থাকতে হবে:

মাঠ বর্ণনা
encryptedUserId %m ম্যাচ ম্যাক্রো বা ডেটা ট্রান্সফার থেকে প্রাপ্ত একটি একক এনক্রিপ্ট করা ব্যবহারকারী আইডি।
encryptedUserIdCandidates[] %m ম্যাচ ম্যাক্রো বা ডেটা স্থানান্তর থেকে প্রাপ্ত এনক্রিপ্ট করা ব্যবহারকারী আইডিগুলির একটি তালিকা৷ নির্দিষ্ট timestampMicros আগে রেকর্ড করা ফ্লাডলাইট এক্সপোজার সহ এই আইডিগুলির মধ্যে প্রথমটি মাইক্রোস ব্যবহার করা হবে৷ যদি কোনো আইডি বিদ্যমান এক্সপোজারের সাথে মেলে না, তাহলে একটি ত্রুটি নিক্ষেপ করা হবে।
dclid ক্যাম্পেইন ম্যানেজার 360 বা Display & Video 360 দ্বারা তৈরি করা একটি ডিসপ্লে ক্লিক আইডেন্টিফায়ার
gclid Google Ads বা Search Ads 360 দ্বারা তৈরি একটি Google ক্লিক শনাক্তকারী
matchId ফ্লাডলাইট ট্যাগের মাধ্যমে ক্যাম্পেইন ম্যানেজার 360-এ একটি অনন্য বিজ্ঞাপনদাতা তৈরি শনাক্তকারী পাঠানো হয়েছে।
mobileDeviceId IDFA বা AdID ফর্ম্যাটে একটি এনক্রিপ্ট করা মোবাইল আইডি বা একটি সমর্থিত CTV ডিভাইস প্ল্যাটফর্ম (Roku, Fire TV, Android TV, Apple TV, Xbox, Samsung, Vizio) থেকে বিজ্ঞাপনের জন্য একটি সংযুক্ত টিভি শনাক্তকারী (IFA)। মনে রাখবেন যে Google YouTube Connected TV IFAs সমর্থন করে না।

ঐচ্ছিক ক্ষেত্রগুলি রেফারেন্স ডকুমেন্টেশনে নথিভুক্ত করা হয়। নোট করুন যে পরিমাণ ক্ষেত্র, যদিও ঐচ্ছিক, রিপোর্ট চালানোর সময় নির্দিষ্ট মেট্রিক্সের (যেমন মোট রূপান্তর) গণনা করার জন্য রূপান্তরটি কমপক্ষে 1 হতে হবে।

নীচের উদাহরণটি একটি সাধারণ রূপান্তর সংস্থান বস্তু তৈরির চিত্র তুলে ধরে:

সি#

// 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=profile_id, id=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 বা ডেটা স্থানান্তর ফাইলগুলি থেকে প্রাপ্ত IDগুলির জন্য DATA_TRANSFER

  2. এনক্রিপশন সত্তা , যা ব্যবহারকারী আইডি এনক্রিপ্ট করতে ব্যবহৃত মানগুলির একটি অনন্য সেট। এই মানগুলি সাধারণত একটি ক্যাম্পেইন ম্যানেজার 360 অ্যাকাউন্টের সাথে সম্পর্কিত যখন উত্সটি ডেটা স্থানান্তর হয়, বা উত্সটি %m ম্যাক্রো হলে একটি ক্যাম্পেইন ম্যানেজার 360 বিজ্ঞাপনদাতা হয়, তবে এটি সর্বদা হয় না৷ আপনি যদি নিশ্চিত না হন তবে আরও তথ্যের জন্য আপনার ক্যাম্পেইন ম্যানেজার 360 অ্যাকাউন্ট প্রতিনিধি বা ক্যাম্পেইন ম্যানেজার 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=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)

সচেতন থাকুন যে ক্যাম্পেইন ম্যানেজার 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 ক্ষেত্রটি প্রদত্ত ব্যাচে কোনো রূপান্তর ব্যর্থ হয়েছে কিনা তা দ্রুত নির্ধারণ করতে ব্যবহার করা যেতে পারে।

যাচাই করুন রূপান্তর প্রক্রিয়া করা হয়েছে

আপলোড করা রূপান্তরগুলি সাধারণত প্রক্রিয়া করা হবে এবং 24 ঘন্টার মধ্যে রিপোর্ট করার জন্য উপলব্ধ হবে৷ আপনার আপলোড করা রূপান্তরগুলি প্রক্রিয়া করা হয়েছে কিনা তা যাচাই করতে, এটি একটি ফ্লাডলাইট ইমপ্রেশন রিপোর্ট চালানোর সুপারিশ করা হয়। অন্যান্য অ্যাট্রিবিউশন রিপোর্টের বিপরীতে, এগুলি ডিফল্টরূপে অ্যাট্রিবিউটেড (একটি বিজ্ঞাপনের সাথে যুক্ত) এবং আনএট্রিবিউটেড রূপান্তর উভয়ই ফিরিয়ে দেবে। এটি আপনার পাঠানো রূপান্তরগুলি ক্যাম্পেইন ম্যানেজার 360-এ পৌঁছেছে কিনা তা দ্রুত পরীক্ষা করার জন্য এটি আদর্শ করে তোলে।