In dieser Anleitung finden Sie eine detaillierte Beschreibung zum Bearbeiten von Conversions mit dem Conversions-Dienst der Campaign Manager 360 API. Bevor Sie fortfahren, sollten Sie sich die Übersicht ansehen, um eine Einführung in Offline-Conversions zu erhalten und sich mit den in dieser Anleitung behandelten Konzepten vertraut zu machen.
Hinweis
Mit diesem Bearbeitungs-Workflow können Sie die quantity und den value vorhandener Online- und Offline-Conversions ändern. Dazu müssen Sie Werte angeben, mit denen die zu bearbeitenden Conversions eindeutig identifiziert werden. Je nach Art der Conversions, die Sie bearbeiten, erhalten Sie diese Werte auf unterschiedliche Weise:
Die Werte, die zum Identifizieren von Online-Conversions erforderlich sind, können aus der Datenübertragung abgerufen werden.
Die Werte, die zum Identifizieren von Offline-Conversions erforderlich sind, werden in der
ConversionsBatchInsertResponseerfolgreicherbatchinsert-Anfragen zurückgegeben.
Nachdem Sie eine Conversion eines der beiden Typen erfolgreich bearbeitet haben, enthält die ConversionsBatchUpdateResponse die Werte, die für nachfolgende Bearbeitungen erforderlich sind.
Conversion-Ressourcen konfigurieren
Der erste Schritt im Bearbeitungs-Workflow besteht darin, ein oder mehrere Conversion-Ressourcenobjekte zu erstellen.
Die folgenden Felder werden verwendet, um eine zu bearbeitende Conversion zu identifizieren. Diese Felder sind erforderlich und müssen genau mit einer vorhandenen Conversion übereinstimmen.
| Feld | Beschreibung |
|---|---|
|
Die verschlüsselte Nutzer-ID, Google-Klick-ID, Display-Klick-ID, Match-ID oder Mobilgeräte-ID, die die Conversion generiert hat. |
floodlightActivityId |
Die Floodlight-Aktivität, der die Conversion zugeordnet ist. |
floodlightConfigurationId |
Die Floodlight-Konfiguration, die von der angegebenen Aktivität verwendet wird. |
ordinal |
Die Deduplizierungs-ID, die mit der Conversion verknüpft ist. |
timestampMicros |
Der Zeitstempel der Conversion in Mikrosekunden seit der Unixzeit. |
Die Felder, die bearbeitet werden können, sind unten aufgeführt.
Diese Felder sind erforderlich und die von Ihnen angegebenen Werte überschreiben alle vorhandenen Werte für die zu bearbeitende Conversion.
| Feld | Beschreibung |
|---|---|
quantity |
Die Anzahl der Artikel, die mit der Conversion verknüpft sind. |
value |
Der durch die Conversion generierte Umsatz. |
Diese Felder sind optional. Wenn sie nicht festgelegt sind, bleibt der Wert unverändert.
| Feld | Beschreibung |
|---|---|
customVariables |
Die benutzerdefinierten Floodlight-Variablen der Conversion. Aktualisiert oder fügt den Wert ein, wenn die Variable festgelegt ist. Wenn die Variable nicht festgelegt ist, bleibt ihr Wert unverändert. |
Alle anderen in der Referenzdokumentation erwähnten Felder werden nicht unterstützt und können nicht geändert werden. Wenn Sie nicht unterstützte Felder in Ihre Bearbeitungsanfrage einbeziehen, führt dies zu einem Fehler. Wenn die zu bearbeitende Conversion bereits Werte für nicht unterstützte Felder enthält, bleiben diese Werte automatisch erhalten.
Das folgende Beispiel zeigt die Erstellung eines einfachen Conversion-Ressourcenobjekts zur Bearbeitung:
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
Verschlüsselungsinformationen angeben
Wenn die zu bearbeitenden Conversions mit verschlüsselten Nutzer-IDs verknüpft sind, müssen Sie im Rahmen der Bearbeitungsanfrage Details zur Verschlüsselung angeben. Weitere Informationen finden Sie in der Anleitung zum Hochladen von Conversions.
Erstellen Sie bei Bedarf ein EncryptionInfo-Objekt, in dem diese Werte angegeben sind. Dies ist der zweite Schritt im Bearbeitungs-Workflow:
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] )
Aktualisierungsanfrage generieren
Der letzte Schritt in diesem Prozess besteht darin, die Conversions mit einem Aufruf von batchupdate zu bearbeiten. Diese Methode akzeptiert ein ConversionsBatchUpdateRequest-Objekt, das die zu bearbeitenden Conversions mit den zugehörigen Verschlüsselungsinformationen kombiniert (falls erforderlich):
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 versucht, jede Conversion in Ihrer Anfrage nach bestem Wissen und Gewissen zu bearbeiten, anstatt den gesamten Batch als Alles-oder-Nichts-Transaktion zu aktualisieren. Wenn einige Conversions in einem Batch nicht aktualisiert werden können, werden andere möglicherweise trotzdem erfolgreich aktualisiert. Daher sollten Sie die zurückgegebene ConversionsBatchUpdateResponse prüfen, um den Status jeder Conversion zu ermitteln:
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
Das Feld status der Antwort enthält, wie oben zu sehen, ein ConversionStatus-Objekt für jede Conversion, die in der ursprünglichen Anfrage enthalten war. Wenn Sie nur an Conversions interessiert sind, die nicht aktualisiert werden konnten, können Sie mit dem Feld hasFailures schnell feststellen, ob irgendeine Conversion im angegebenen Batch fehlgeschlagen ist.