इस गाइड में, Campaign Manager 360 API Conversions
सेवा का इस्तेमाल करके, ऑफ़लाइन कन्वर्ज़न अपलोड करने के बारे में पूरी जानकारी दी गई है. हमारा सुझाव है कि आगे बढ़ने से पहले, ऑफ़लाइन कन्वर्ज़न के बारे में जानने के लिए, खास जानकारी देखें. इससे आपको इस गाइड में बताए गए कॉन्सेप्ट के बारे में भी जानकारी मिलेगी.
कन्वर्ज़न रिसॉर्स कॉन्फ़िगर करना
कन्वर्ज़न अपलोड करने की प्रोसेस का पहला चरण, एक या उससे ज़्यादा
Conversion
रिसॉर्स ऑब्जेक्ट बनाना है. इनमें से हर ऑब्जेक्ट, एक कन्वर्ज़न इवेंट दिखाता है. साथ ही, इनमें कुछ ज़रूरी फ़ील्ड होते हैं:
फ़ील्ड | ब्यौरा |
---|---|
floodlightActivityId |
वह Floodlight गतिविधि जिससे यह कन्वर्ज़न जुड़ा होगा. |
floodlightConfigurationId |
बताई गई गतिविधि में इस्तेमाल किया जाने वाला Floodlight कॉन्फ़िगरेशन. |
ordinal |
इस वैल्यू का इस्तेमाल यह कंट्रोल करने के लिए किया जाता है कि एक ही दिन में एक ही डिवाइस या उपयोगकर्ता से मिले कन्वर्ज़न को डुप्लीकेट कैसे हटाया जाए. ज़्यादा जानकारी के लिए, अक्सर पूछे जाने वाले सवाल देखें. |
timestampMicros |
कन्वर्ज़न का टाइमस्टैंप, Unix epoch के बाद के माइक्रोसेकंड में. |
इसके अलावा, हर ऑब्जेक्ट में इनमें से कोई एक फ़ील्ड होना चाहिए:
फ़ील्ड | ब्यौरा |
---|---|
encryptedUserId |
%m मैच मैक्रो या डेटा ट्रांसफ़र से मिला, एन्क्रिप्ट (सुरक्षित) किया गया एक यूज़र आईडी. |
encryptedUserIdCandidates[] |
%m मैच मैक्रो या डेटा ट्रांसफ़र से मिले एन्क्रिप्ट (सुरक्षित) किए गए उपयोगकर्ता आईडी की सूची. इनमें से, timestampMicros से पहले रिकॉर्ड किए गए Floodlight एक्सपोज़र वाले पहले आईडी का इस्तेमाल किया जाएगा. अगर कोई भी आईडी, किसी मौजूदा एक्सपोज़र से मेल नहीं खाता है, तो गड़बड़ी का मैसेज दिखेगा. |
dclid |
Campaign Manager 360 या Display & Video 360 से जनरेट किया गया डिसप्ले क्लिक आइडेंटिफ़ायर. |
gclid |
Google Ads या Search Ads 360 से जनरेट किया गया Google क्लिक आइडेंटिफ़ायर. |
matchId |
विज्ञापन देने वाले का एक ऐसा यूनीक आइडेंटिफ़ायर जिसे Floodlight टैग के ज़रिए Campaign Manager 360 में भेजा जाता है. |
mobileDeviceId |
IDFA या AdID फ़ॉर्मैट में मौजूद कोई ऐसा मोबाइल आईडी जिसे एन्क्रिप्ट (सुरक्षित) नहीं किया गया है या विज्ञापन के लिए कनेक्टेड टीवी आइडेंटिफ़ायर (IFA). यह आइडेंटिफ़ायर, CTV डिवाइस प्लैटफ़ॉर्म (Roku, Fire TV, Android TV, Apple TV, Xbox, Samsung, Vizio) पर काम करता है. ध्यान दें कि Google, YouTube कनेक्टेड टीवी IFAs के साथ काम नहीं करता. |
ज़रूरी नहीं वाले फ़ील्ड के बारे में रेफ़रंस दस्तावेज़ में बताया गया है. ध्यान दें कि रिपोर्ट चलाते समय, कन्वर्ज़न को कुछ मैट्रिक (जैसे, कुल कन्वर्ज़न) में गिना जा सकता है. हालांकि, इसके लिए ज़रूरी नहीं है कि संख्या फ़ील्ड में कोई वैल्यू डाली जाए. हालांकि, अगर कोई वैल्यू डाली जाती है, तो वह कम से कम एक होनी चाहिए.
नीचे दिए गए उदाहरण में, एक सामान्य कन्वर्ज़न रिसॉर्स ऑब्जेक्ट बनाने का तरीका बताया गया है:
C#
// 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;
Java
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);
PHP
$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);
Python
# 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 }
Ruby
# 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 )
एन्क्रिप्शन (सुरक्षित करने का तरीका) की जानकारी दें
अगर आपको पिछले उदाहरण की तरह, एन्क्रिप्ट (सुरक्षित) किए गए यूज़र आईडी को ऑफ़लाइन कन्वर्ज़न के लिए एट्रिब्यूट करना है, तो आपको अपने इंसर्ट अनुरोध के हिस्से के तौर पर, यह जानकारी देनी होगी कि उन्हें कैसे एन्क्रिप्ट (सुरक्षित) किया गया है. खास तौर पर, आपको ये चीज़ें पता होनी चाहिए:
एन्क्रिप्शन सोर्स, जो बताता है कि एन्क्रिप्ट किए गए आईडी का बैच कहां से आया. %m match मैक्रो से मिले आईडी के लिए
AD_SERVING
या डेटा ट्रांसफ़र फ़ाइलों से मिले आईडी के लिएDATA_TRANSFER
वैल्यू डाली जा सकती हैं.एन्क्रिप्शन इकाई, जो उपयोगकर्ता आईडी को एन्क्रिप्ट करने के लिए इस्तेमाल की जाने वाली वैल्यू का यूनीक सेट है. आम तौर पर, ये वैल्यू Campaign Manager 360 खाते से जुड़ी होती हैं, जब सोर्स डेटा ट्रांसफ़र होता है. इसके अलावा, जब सोर्स %m मैक्रो होता है, तो ये वैल्यू Campaign Manager 360 में विज्ञापन देने वाले से जुड़ी होती हैं. हालांकि, ऐसा हमेशा नहीं होता. अगर आपको इस बारे में पक्के तौर पर नहीं पता है, तो ज़्यादा जानकारी के लिए अपने Campaign Manager 360 खाता प्रतिनिधि या Campaign Manager 360 सहायता टीम से संपर्क करें.
ज़रूरत पड़ने पर, कन्वर्ज़न अपलोड करने की प्रोसेस का दूसरा चरण, ऐसा EncryptionInfo
ऑब्जेक्ट बनाना है जिसमें इन वैल्यू के बारे में बताया गया हो:
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] )
ध्यान रखें कि हर इंसर्ट अनुरोध में सिर्फ़ एक EncryptionInfo
ऑब्जेक्ट हो सकता है. इसका मतलब है कि किसी अनुरोध में शामिल सभी कन्वर्ज़न, एक ही सोर्स से होने चाहिए और एन्क्रिप्शन की एक ही इकाई का इस्तेमाल करने चाहिए.
डेटा डालने का अनुरोध जनरेट करना
इस प्रोसेस का आखिरी चरण, batchinsert
को कॉल करके अपने कन्वर्ज़न अपलोड करना है. यह तरीका, ConversionsBatchInsertRequest
ऑब्जेक्ट को स्वीकार करता है. यह ऑब्जेक्ट, अपलोड किए जाने वाले कन्वर्ज़न के सेट को, एन्क्रिप्शन से जुड़ी जानकारी के साथ (ज़रूरत पड़ने पर) जोड़ता है:
C#
// Insert the conversion. ConversionsBatchInsertRequest request = new ConversionsBatchInsertRequest(); request.Conversions = new List<Conversion>() { conversion }; request.EncryptionInfo = encryptionInfo; ConversionsBatchInsertResponse response = service.Conversions.Batchinsert(request, profileId).Execute();
Java
ConversionsBatchInsertRequest request = new ConversionsBatchInsertRequest(); request.setConversions(ImmutableList.of(conversion)); request.setEncryptionInfo(encryptionInfo); ConversionsBatchInsertResponse response = reporting.conversions() .batchinsert(profileId, request).execute();
PHP
$batch = new Google_Service_Dfareporting_ConversionsBatchInsertRequest(); $batch->setConversions([$conversion]); $batch->setEncryptionInfo($encryptionInfo); $result = $this->service->conversions->batchinsert( $values['user_profile_id'], $batch );
Python
# Insert the conversion. request_body = { 'conversions': [conversion], 'encryptionInfo': encryption_info } request = service.conversions().batchinsert(profileId=profile_id, body=request_body) response = request.execute()
Ruby
# 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
की जांच करें:
C#
// 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); } }
Java
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()); } }
PHP
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()); } }
Python
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'])
Ruby
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 घंटे लगते हैं. इसके बाद, वे रिपोर्ट के लिए उपलब्ध हो जाते हैं. यह पुष्टि करने के लिए कि आपके अपलोड किए गए कन्वर्ज़न प्रोसेस किए गए हैं या नहीं, हमारा सुझाव है कि आप Floodlight इंप्रेशन रिपोर्ट चलाएं. अन्य एट्रिब्यूशन रिपोर्ट के मुकाबले, ये डिफ़ॉल्ट रूप से एट्रिब्यूट किए गए (विज्ञापन से जुड़े) और एट्रिब्यूट नहीं किए गए कन्वर्ज़न, दोनों दिखाती हैं. इसकी मदद से, यह तुरंत पता लगाया जा सकता है कि आपके भेजे गए कन्वर्ज़न, Campaign Manager 360 में पहुंच गए हैं या नहीं.