В этом руководстве представлены подробные инструкции по редактированию конверсий с помощью службы Conversions
API Менеджера кампаний 360. Прежде чем продолжить, рекомендуется просмотреть обзор , чтобы получить представление об офлайн-конверсиях, а также ознакомиться с концепциями, обсуждаемыми в этом руководстве.
Прежде чем начать
Этот рабочий процесс редактирования позволяет вам изменять quantity
и value
существующих онлайн- и офлайн-конверсий. Для этого вам необходимо указать значения, которые однозначно идентифицируют конверсии, которые необходимо изменить. В зависимости от типа редактируемых конверсий вы можете получить эти значения разными способами:
Значения, необходимые для идентификации онлайн-конверсий, можно получить с помощью Data Transfer .
Значения, необходимые для идентификации офлайн-конверсий, возвращаются в
ConversionsBatchInsertResponse
успешных запросовbatchinsert
.
После успешного редактирования преобразования любого типа ConversionsBatchUpdateResponse
будет содержать значения, необходимые для выполнения последующих изменений.
Настройка ресурсов конверсии
Первый шаг рабочего процесса редактирования включает создание одного или нескольких объектов ресурсов Conversion
.
Следующие поля используются для идентификации преобразования, которое необходимо изменить. Эти поля являются обязательными и должны точно соответствовать существующей конверсии.
Поле | Описание |
---|---|
| Зашифрованный идентификатор пользователя, идентификатор клика Google, идентификатор клика в контекстно-медийной сети, идентификатор соответствия или идентификатор мобильного устройства, с помощью которого произошла конверсия. |
floodlightActivityId | Действие Floodlight, с которым связана конверсия. |
floodlightConfigurationId | Конфигурация Floodlight, используемая указанным действием. |
ordinal | Идентификатор дедупликации , связанный с преобразованием. |
timestampMicros | Временная метка преобразования в микросекундах с эпохи Unix. |
Поля, которые можно редактировать, перечислены ниже.
Эти поля являются обязательными, и введенные вами значения перезапишут любые ранее существовавшие значения в редактируемой конверсии.
Поле | Описание |
---|---|
quantity | Количество элементов, связанных с конверсией. |
value | Сумма дохода, полученная в результате конверсии. |
Эти поля являются необязательными. Значение не изменится, если оно не установлено.
Поле | Описание |
---|---|
customVariables | Пользовательские переменные прожектора преобразования. Обновит или вставит значение, если переменная установлена. Значение переменной не меняется, если она не установлена. |
Все остальные поля, упомянутые в справочной документации, не поддерживаются и не могут быть изменены. Включение неподдерживаемых полей в ваш запрос на редактирование приведет к ошибке. Если редактируемое преобразование содержит уже существующие значения для каких-либо неподдерживаемых полей, эти значения будут автоматически сохранены.
В приведенном ниже примере показано создание простого объекта ресурса преобразования для редактирования:
С#
// 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)
Имейте в виду, что Менеджер кампании 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
можно использовать для быстрого определения того, не удалось ли какое-либо преобразование в предоставленном пакете.