คู่มือนี้มีวิธีการโดยละเอียดในการแก้ไข Conversion โดยใช้บริการ Conversions ของ Campaign Manager 360 API ก่อนดำเนินการต่อ เราขอแนะนำให้คุณอ่านภาพรวมเพื่อทำความรู้จักกับ Conversion ออฟไลน์และทำความคุ้นเคยกับแนวคิดที่กล่าวถึงในคู่มือนี้
ก่อนเริ่มต้น
เวิร์กโฟลว์การแก้ไขนี้ช่วยให้คุณแก้ไข quantity และ value ของ Conversion ออนไลน์และออฟไลน์ที่มีอยู่ได้ โดยคุณจะต้องระบุมูลค่าที่ระบุ Conversion ที่จะแก้ไขได้อย่างไม่ซ้ำกัน คุณจะได้รับค่าเหล่านี้ในลักษณะต่างๆ ขึ้นอยู่กับประเภทของ Conversion ที่คุณแก้ไข
คุณสามารถรับค่าที่จำเป็นต่อการระบุ Conversion ออนไลน์ได้จากการโอนข้อมูล
ระบบจะแสดงค่าที่จำเป็นต่อการระบุ Conversion ออฟไลน์ใน
ConversionsBatchInsertResponseของคำขอbatchinsertที่สำเร็จ
เมื่อแก้ไข Conversion ประเภทใดประเภทหนึ่งเรียบร้อยแล้ว ConversionsBatchUpdateResponse จะมีค่าที่จำเป็นต่อการแก้ไขในภายหลัง
กำหนดค่าแหล่งข้อมูล Conversion
ขั้นตอนแรกในเวิร์กโฟลว์การแก้ไขเกี่ยวข้องกับการสร้างConversionออบเจ็กต์ทรัพยากรอย่างน้อย 1 รายการ
ระบบจะใช้ช่องต่อไปนี้เพื่อระบุ Conversion ที่จะแก้ไข คุณต้องกรอกข้อมูลในฟิลด์เหล่านี้และต้องตรงกับ Conversion ที่มีอยู่ทุกประการ
| ช่อง | คำอธิบาย |
|---|---|
|
รหัสผู้ใช้ที่เข้ารหัส, Google Click ID, รหัสคลิก Display, รหัสการจับคู่ หรือรหัสอุปกรณ์เคลื่อนที่ที่สร้าง Conversion |
floodlightActivityId |
กิจกรรม Floodlight ที่มีการระบุแหล่งที่มาของ Conversion |
floodlightConfigurationId |
การกำหนดค่า Floodlight ที่กิจกรรมที่ระบุใช้ |
ordinal |
ตัวระบุการขจัดข้อมูลที่ซ้ำกันที่เชื่อมโยงกับ Conversion |
timestampMicros |
การประทับเวลาของการแปลงในหน่วยไมโครวินาทีตั้งแต่ Epoch ของ Unix |
ช่องที่แก้ไขได้มีดังนี้
คุณต้องระบุข้อมูลในช่องเหล่านี้ และค่าที่คุณระบุจะเขียนทับค่าที่มีอยู่ก่อนแล้วใน Conversion ที่กำลังแก้ไข
| ช่อง | คำอธิบาย |
|---|---|
quantity |
จำนวนสินค้าที่เชื่อมโยงกับ Conversion |
value |
จํานวนรายได้ที่เกิดจาก Conversion |
คุณจะกรอกข้อมูลในช่องเหล่านี้หรือไม่ก็ได้ ค่าจะไม่เปลี่ยนแปลงหากไม่ได้ตั้งค่า
| ช่อง | คำอธิบาย |
|---|---|
customVariables |
ตัวแปร Floodlight ที่กำหนดเองของ Conversion จะอัปเดตหรือแทรกค่าหากมีการตั้งค่าตัวแปร ค่าของตัวแปรจะไม่เปลี่ยนแปลงหากไม่ได้ตั้งค่า |
ฟิลด์อื่นๆ ทั้งหมดที่กล่าวถึงในเอกสารอ้างอิงไม่รองรับและแก้ไขไม่ได้ การรวมช่องที่ไม่รองรับไว้ในคำขอแก้ไขจะทำให้เกิดข้อผิดพลาด หาก Conversion ที่กำลังแก้ไขมีค่าที่มีอยู่ก่อนแล้วสำหรับช่องที่ไม่รองรับ ระบบจะเก็บค่าเหล่านั้นไว้โดยอัตโนมัติ
ตัวอย่างด้านล่างแสดงการสร้างออบเจ็กต์ทรัพยากร Conversion อย่างง่ายเพื่อแก้ไข
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
ระบุข้อมูลการเข้ารหัส
หาก Conversion ที่แก้ไขเชื่อมโยงกับรหัสผู้ใช้ที่เข้ารหัส คุณจะต้องระบุรายละเอียดเกี่ยวกับวิธีการเข้ารหัสเป็นส่วนหนึ่งของคำขอแก้ไข ดูรายละเอียดได้ในคู่มือการอัปโหลด Conversion
เมื่อจำเป็น การสร้างออบเจ็กต์ EncryptionInfo ที่ระบุค่าเหล่านี้เป็นขั้นตอนที่ 2 ในเวิร์กโฟลว์การแก้ไข
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] )
สร้างคำขออัปเดต
ขั้นตอนสุดท้ายในกระบวนการนี้คือการแก้ไข Conversion ด้วยการเรียกใช้ batchupdate วิธีนี้ยอมรับออบเจ็กต์ ConversionsBatchUpdateRequest ซึ่งรวมชุด Conversion ที่จะแก้ไขเข้ากับข้อมูลการเข้ารหัสที่เกี่ยวข้อง (เมื่อจำเป็น) ดังนี้
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)
โปรดทราบว่า Campaign Manager 360 จะพยายามแก้ไข Conversion แต่ละรายการในคำขอของคุณอย่างเต็มความสามารถ แทนที่จะอัปเดตทั้งกลุ่มเป็นธุรกรรมแบบทั้งหมดหรือไม่มีเลย หาก Conversion บางรายการในกลุ่มอัปเดตไม่สำเร็จ Conversion อื่นๆ อาจยังอัปเดตได้สำเร็จ ดังนั้น เราขอแนะนำให้คุณตรวจสอบ ConversionsBatchUpdateResponse ที่ส่งคืนเพื่อพิจารณาสถานะของ Conversion แต่ละรายการ
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
ฟิลด์ status ของการตอบกลับดังที่เห็นด้านบนจะมีออบเจ็กต์ ConversionStatus สำหรับ Conversion ทุกรายการที่รวมอยู่ในคำขอเดิม หากคุณสนใจเฉพาะ Conversion ที่อัปเดตไม่สำเร็จ คุณสามารถใช้ฟิลด์ hasFailures เพื่อพิจารณาได้อย่างรวดเร็วว่า Conversion ใดในกลุ่มที่ระบุอัปเดตไม่สำเร็จ