Benutzerdefinierte Gebotseinstellung implementieren

Mit der Display & Video 360 API können Sie Implementierungen für benutzerdefinierte Gebote vollständig verwalten. Sie können benutzerdefinierte Gebotsalgorithmen erstellen, einzelne Skripts hochladen und prüfen und einer Ressource einen bestimmten Algorithmus als Gebotsstrategie zuweisen.

Auf dieser Seite wird beschrieben, wie Sie Algorithmen für die benutzerdefinierte Gebotseinstellung mit der Display & Video 360 API erstellen, aktualisieren und zuweisen. Jeder Abschnitt enthält ein Codebeispiel.

Benutzerdefinierten Gebotsalgorithmus erstellen

Ein CustomBiddingAlgorithm-Objekt steht für einen einzelnen Algorithmus, den Sie einer Werbebuchung zur Verwendung in ihrer Gebotsstrategie zuweisen können. Dieses Objekt enthält Details zum Algorithmus, z. B. customBiddingAlgorithmType und entityStatus sowie readinessState und suspensionState für das generierte Modell jedes relevanten Werbetreibenden. Sie können CustomBiddingScript- und CustomBiddingAlgorithmRules-Objekte als untergeordnete Ressourcen für den zu verwendenden Algorithmus erstellen.

Hier sehen Sie ein Beispiel für einen skriptbasierten Algorithmus für die benutzerdefinierte Gebotseinstellung:

Java

// Create the custom bidding algorithm structure.
CustomBiddingAlgorithm customBiddingAlgorithm =
    new CustomBiddingAlgorithm()
        .setAdvertiserId(advertiser-id)
        .setDisplayName(display-name)
        .setEntityStatus("ENTITY_STATUS_ACTIVE")
        .setCustomBiddingAlgorithmType("SCRIPT_BASED");

// Configure the create request.
CustomBiddingAlgorithms.Create request =
    service.customBiddingAlgorithms().create(customBiddingAlgorithm);

// Create the custom bidding algorithm.
CustomBiddingAlgorithm response = request.execute();

// Display the new custom bidding algorithm name.
System.out.printf(
    "Custom bidding algorithm %s was created.%n",
    response.getName()
);

Python

# Create a custom bidding algorithm object.
custom_bidding_algorithm_obj = {
    'advertiserId': advertiser-id,
    'displayName': display-name,
    'entityStatus': 'ENTITY_STATUS_ACTIVE',
    'customBiddingAlgorithmType': 'SCRIPT_BASED'
}

# Create the custom bidding algorithm.
response = service.customBiddingAlgorithms().create(
    body=custom_bidding_algorithm_obj
).execute()

# Display the new custom bidding algorithm.
print(f'The following Custom Bidding Algorithm was created: {response}')

PHP

// Create a custom bidding algorithm object.
$customBiddingAlgorithm =
    new Google_Service_DisplayVideo_CustomBiddingAlgorithm();
$customBiddingAlgorithm->setAdvertiserId(advertiser-id);
$customBiddingAlgorithm->setDisplayName(display-name);
$customBiddingAlgorithm->setEntityStatus('ENTITY_STATUS_ACTIVE');
$customBiddingAlgorithm->setCustomBiddingAlgorithmType('SCRIPT_BASED');

// Create the custom bidding algorithm.
$result =
    $this->service->customBiddingAlgorithms->create($customBiddingAlgorithm);

// Display the new custom bidding algorithm name.
printf('Custom Bidding Algorithm %s was created.\n', $result['name']);

Zugriff auf Algorithmus verwalten

Algorithmen für die benutzerdefinierte Gebotseinstellung können einem Partner oder Werbetreibenden gehören. Algorithmen, die einem Partner gehören, können von diesem Partner und allen untergeordneten Werbetreibenden, die im Feld sharedAdvertiserIds aufgeführt sind, aufgerufen und geändert werden. Algorithmen, die einem Werbetreibenden gehören, können vom Werbetreibenden und seinem übergeordneten Partner aufgerufen und geändert, aber nicht für andere Werbetreibende freigegeben werden.

Wenn Sie den Algorithmus nur für einen einzelnen Werbetreibenden verwenden, weisen Sie ihn über das Feld advertiserId als Inhaber zu. Weisen Sie andernfalls den übergeordneten Partner des Werbetreibenden über das Feld partnerId als Inhaber zu und gewähren Sie den Werbetreibenden über das Feld sharedAdvertiserIds Zugriff.

Logik des Upload-Algorithmus

Je nach Typ Ihres Algorithmus für die benutzerdefinierte Gebotseinstellung müssen Sie als Nächstes entweder ein Skript oder ein Regelobjekt erstellen und darin die Logik für den zu verwendenden Algorithmus angeben.

Skript hochladen

Bei skriptbasierten benutzerdefinierten Gebotsalgorithmen werden vom Nutzer bereitgestellte Skripts verwendet, um den Wert einer Impression zu bewerten. Beispiele für einfache Skripts und eine Liste mit erweiterten Feldern finden Sie in der Display & Video 360-Hilfe.

In den folgenden Abschnitten erfahren Sie, wie Sie einem benutzerdefinierten Gebotsalgorithmus ein neues oder aktualisiertes Skript hinzufügen.

Speicherort einer Skriptressource abrufen

Rufen Sie zuerst mit der Methode customBiddingAlgorithms.uploadScript einen verfügbaren Ressourcenstandort unter der Ressource für den Algorithmus für die benutzerdefinierte Gebotseinstellung ab. Diese Anfrage gibt ein CustomBiddingScriptRef-Objekt mit einem Ressourcennamen zurück. Sie können die Skriptdatei an den Speicherort hochladen, der durch den Ressourcennamen vorgegeben wird. Verwenden Sie dann das Referenzobjekt des Skripts für die benutzerdefinierte Gebotseinstellung, um die Skriptressource zu erstellen.

Hier ist ein Beispiel dafür, wie ein verfügbarer Ressourcenstandort abgerufen wird:

Java

// Retrieve a usable custom bidding script
// reference.
CustomBiddingScriptRef scriptRef =
    service
        .customBiddingAlgorithms()
        .uploadScript(custom-bidding-algorithm-id)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the custom bidding script reference resource path.
System.out.printf(
    "The script can be uploaded to the following resource path: %s%n",
    scriptRef.getResourceName()
);

Python

# Retrieve a usable custom bidding script reference
# object.
custom_bidding_script_ref = service.customBiddingAlgorithms().uploadScript(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id
).execute()

# Display the new custom bidding script reference object.
print('The following custom bidding script reference object was retrieved:'
      f'{custom_bidding_script_ref}')

PHP

// Set parent advertiser ID of custom bidding
// algorithm in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);

// Retrieve a usable custom bidding script reference.
$scriptRefResponse = $this->service->customBiddingAlgorithms->uploadScript(
    custom-bidding-algorithm-id,
    $optParams
);

// Display the new custom bidding script reference object.
printf(
    'The script can be uploaded to the following resource path: %s\n',
    $scriptRefResponse->getResourceName()
);

Skriptdatei hochladen

Nachdem Sie einen verfügbaren Ressourcenstandort abgerufen haben, laden Sie Ihre Skriptdatei mit der Methode media.upload an diesen Speicherort im Display & Video 360-System hoch. Diese Methode unterstützt einen einfachen Upload, für den der Abfrageparameter uploadType=media erforderlich ist.

Hier sehen Sie ein Beispiel dafür, wie Sie eine Skriptdatei mit einem abgerufenen Referenzobjekt für ein benutzerdefiniertes Gebotsskript hochladen:

Java

// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);

// Create input stream for the script file.
InputStreamContent scriptFileStream =
    new InputStreamContent(
        null, new FileInputStream(script-path));

// Create media.upload request.
Media.Upload uploadRequest =
        service
            .media()
            .upload(
                resource-name,
                media,
                scriptFileStream);

// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);

// Execute the upload using an Upload URL with the destination resource
// name.
uploader
    .upload(
        new GenericUrl(
            "https://displayvideo.googleapis.com/upload/media/"
                + resource-name));

Python

# Create a media upload object.
media = MediaFileUpload(script-path)

# Create upload request.
upload_request = service.media().upload(
    resourceName=resource-name, media_body=media)

# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc

# Upload script to resource location given in retrieved custom bidding
# script reference object.
upload_request.execute()

PHP

// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);

// Set parameters for upload request.
$optParams = array(
    'data' => file_get_contents(script-path),
    'uploadType' => 'media',
    'resourceName' => resource-name
);

// Upload script file to given resource location.
$this->service->media->upload(
    resource-name,
    $mediaBody,
    $optParams
);

cURL

curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media' 
  -H 'authorization: Bearer access-token'
  -H 'Content-Type: text/plain'
  --data-binary @script-path

Skriptobjekt erstellen

Nachdem die Skriptdatei hochgeladen wurde, erstellen Sie mit der Methode customBiddingAlgorithms.scripts.create eine Scriptressource für die benutzerdefinierte Gebotseinstellung. Das in der Anfrage übergebene Objekt CustomBiddingScript darf nur das Objekt CustomBiddingScriptRef als zugewiesenen Wert des Felds script enthalten. Dadurch wird die hochgeladene Skriptdatei der neuen Skriptressource zugeordnet.

Hier ein Beispiel für das Erstellen einer Skriptressource:

Java

// Create the custom bidding script structure.
CustomBiddingScript customBiddingScript =
    new CustomBiddingScript()
        .setScript(custom-bidding-script-ref);

// Create the custom bidding script.
CustomBiddingScript response =
    service
        .customBiddingAlgorithms()
        .scripts()
        .create(custom-bidding-algorithm-id, customBiddingScript)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the new script resource name
System.out.printf(
    "The following script was created: %s%n",
    response.getName());

Python

# Create a custom bidding script object.
script_obj = {
    'script': custom-bidding-script-ref
}

# Create the custom bidding script.
response = service.customBiddingAlgorithms().scripts().create(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id,
    body=script_obj).execute()

# Display the new custom bidding script object.
print(f'The following custom bidding script was created: {response}')

PHP

// Create the custom bidding script object.
$customBiddingScript =
    new Google_Service_DisplayVideo_CustomBiddingScript();
$customBiddingScript->setScript(custom-bidding-script-ref);

// Set parameters for create script request.
$optParams = array(
    'advertiserId' => advertiser-id
);

// Create the custom bidding script.
$result = $this->service->customBiddingAlgorithms_scripts->create(
    custom-bidding-algorithm-id,
    $customBiddingScript,
    $optParams
);

// Display the new script resource name.
printf('The following script was created: %s.\n', $result->getName());

Nachdem Sie eine Skriptressource für die benutzerdefinierte Gebotseinstellung erstellt haben, wird das Skript in Display & Video 360 verarbeitet, damit es erfolgreich zum Bewerten von Impressionen verwendet werden kann. Rufen Sie den Status dieser Verarbeitung über das Feld state des Skriptobjekts ab. Sobald das neue Skript akzeptiert wurde, verwendet der Algorithmus für die benutzerdefinierte Gebotseinstellung das Skript, um Impressionswerte zu bewerten. Da dies sofort geschieht, sollten Sie den Algorithmus unbedingt aktualisieren, bevor Sie eine neue Skriptressource erstellen.

Regeln für Uploads

Regelbasierte Algorithmen für die benutzerdefinierte Gebotseinstellung verwenden die in einem AlgorithmRules-Objekt bereitgestellte Logik, um den Wert einer Impression zu bewerten.

AlgorithmRules-Objekte werden in eine JSON-Datei hochgeladen und dann über ein CustomBiddingAlgorithmRules-Objekt mit einem Algorithmus für die benutzerdefinierte Gebotseinstellung verknüpft.

Standort einer Regelressource abrufen

Rufen Sie zuerst mit der Methode customBiddingAlgorithms.uploadRules einen verfügbaren Ressourcenstandort unter der Ressource für den Algorithmus für die benutzerdefinierte Gebotseinstellung ab. Diese Anfrage gibt ein CustomBiddingAlgorithmsRulesRef-Objekt mit einem Ressourcennamen zurück. Sie können Ihre Regeldatei an den vom Ressourcennamen vorgegebenen Speicherort hochladen. Verwenden Sie dann das Referenzobjekt für die Regeln des benutzerdefinierten Gebotsalgorithmus, um Ihre Regelressource zu erstellen.

Hier ist ein Beispiel dafür, wie ein verfügbarer Ressourcenstandort abgerufen wird:

Java

// Create the custom bidding algorithm structure.
CustomBiddingAlgorithmRulesRef rulesRef =
    service
        .customBiddingAlgorithms()
        .uploadRules(custom-bidding-algorithm-id)
        .setAdvertiserId(advertiser-id)
        .execute();

System.out.printf(
    "The rules can be uploaded to the following resource path: %s%n",
    rulesRef.getResourceName()
);

Python

# Retrieve a usable custom bidding algorithm rules reference
# object.
custom_bidding_algorithm_rules_ref = service.customBiddingAlgorithms().uploadRules(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id
).execute()

# Display the new custom bidding algorithm rules reference object.
print('The following custom bidding algorithm rules reference object was retrieved:'
      f' {custom_bidding_algorithm_rules_ref}')

PHP

// Set parent advertiser ID of custom bidding algorithm
// in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);

// Retrieve a usable custom bidding algorithm rules reference.
$rulesRefResponse = $this->service->customBiddingAlgorithms->uploadRules(
    custom-bidding-algorithm-id,
    $optParams
);

// Display the new custom bidding algorithm rules reference object resource path.
printf(
    'The rules can be uploaded to the following resource path: %s\n',
    $rulesRefResponse->getResourceName()
);

AlgorithmRules-Datei hochladen

Nachdem Sie einen verfügbaren Ressourcenstandort abgerufen haben, laden Sie Ihre Regeldatei mit der Methode media.upload an diesen Speicherort im Display & Video 360-System hoch. Diese Methode unterstützt einen einfachen Upload, für den der Abfrageparameter uploadType=media erforderlich ist.

Hier sehen Sie ein Beispiel dafür, wie Sie die Datei AlgorithmRules mit einem Referenzobjekt für die Regeln des benutzerdefinierten Gebotsalgorithmus hochladen:

Java

// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);

// Create input stream for the rules file.
InputStreamContent rulesFileStream =
    new InputStreamContent(
        null, new FileInputStream(rules-file-path));

// Create media.upload request.
 Media.Upload uploadRequest =
    service
        .media()
        .upload(
            resource-name,
            media,
            rulesFileStream);

// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);

// Execute the upload using an Upload URL with the destination resource
// name.
uploader
    .upload(
        new GenericUrl(
            "https://displayvideo.googleapis.com/upload/media/"
                + resource-name));

Python

# Create a media upload object.
media = MediaFileUpload(rules-file-path)

# Create upload request.
upload_request = service.media().upload(
    resourceName=resource-name, media_body=media)

# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc

# Upload rules file to resource location given in retrieved custom bidding
# algorithm rules reference object.
upload_request.execute()

PHP

// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);

// Set parameters for upload request.
$optParams = array(
    'data' => file_get_contents(rules-file-path),
    'uploadType' => 'media',
    'resourceName' => resource-name
);

// Upload rules file to given resource location.
$this->service->media->upload(
    resource-name,
    $mediaBody,
    $optParams
);

cURL

curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media' 
  -H 'authorization: Bearer access-token'
  -H 'Content-Type: text/plain'
  --data-binary @rules-file-path

Regelobjekt erstellen

Nachdem die JSON-Datei AlgorithmRules hochgeladen wurde, erstellen Sie mit der Methode customBiddingAlgorithms.rules.create eine Ressource für benutzerdefinierte Gebotsalgorithmen. Das in der Anfrage übergebene Objekt CustomBiddingAlgorithmRules sollte nur das Objekt CustomBiddingAlgorithmRulesRef als zugewiesenen Wert des Felds rules enthalten. Dadurch wird die hochgeladene JSON-Datei AlgorithmRules der neuen Regelressource zugeordnet.

Hier ein Beispiel für das Erstellen einer Regelressource:

Java

// Create the custom bidding algorithm rules structure.
CustomBiddingAlgorithmRules customBiddingAlgorithmRules =
    new CustomBiddingAlgorithmRules()
        .setRules(custom-bidding-algorithm-rules-ref);

// Create the rules resource.
CustomBiddingAlgorithmRules response =
    service
        .customBiddingAlgorithms()
        .rules()
        .create(custom-bidding-algorithm-id, customBiddingAlgorithmRules)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the new rules resource name.
System.out.printf(
    "The following custom bidding algorithm rules object was created: %s%n",
    response.getName());

Python

# Create the custom bidding algorithm rules object.
rules_obj = {
    'rules': custom-bidding-algorithm-rules-ref
}

# Create the rules resource.
response = service.customBiddingAlgorithms().rules().create(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id,
    body=rules_obj).execute()

# Display the new custom bidding algorithm rules object.
print(f'The following custom bidding algorithm rules resource was created: {response}')

PHP

// Create the custom bidding algorithm rules object.
$customBiddingAlgorithmRules =
    new Google_Service_DisplayVideo_CustomBiddingAlgorithmRules();
$customBiddingAlgorithmRules->setRules(custom-bidding-algorithm-rules-ref);

// Set parameters for create rules request.
$optParams = array(
    'advertiserId' => advertiser-id
);

// Create the custom bidding algorithm rules resource.
$result = $this->service->customBiddingAlgorithms_rules->create(
    custom-bidding-algorithm-id,
    $customBiddingAlgorithmRules,
    $optParams
);

// Display the new custom bidding algorithm rules resource name.
printf('The following rules resource was created: %s.\n', $result->getName());

Nachdem Sie eine Regelressource erstellt haben, wird der Regelsatz in Display & Video 360 verarbeitet, damit er erfolgreich zum Bewerten von Impressionen verwendet werden kann. Rufen Sie den Status dieser Verarbeitung über das Feld state des Regelobjekts ab. Sobald die neuen Regeln akzeptiert wurden, verwendet der Algorithmus für die benutzerdefinierte Gebotseinstellung die Regeln, um Impressionswerte sofort zu bewerten.

Wenn die Regeln abgelehnt werden, rufen Sie den Grund für die Ablehnung aus dem error des Regelobjekts ab. Im Fall einer Ablehnung aktualisieren Sie das Objekt AlgorithmRules, um den Fehler zu beheben, und wiederholen Sie den Uploadprozess, beginnend mit dem Abrufen des Regelreferenzobjekts.

Benutzerdefinierten Gebotsalgorithmus zuweisen

Nachdem Sie einen Algorithmus für die benutzerdefinierte Gebotseinstellung erstellt, die akzeptierte Logik hochgeladen und die erforderlichen Anforderungen erfüllt haben, können Sie den benutzerdefinierten Gebotsalgorithmus der Gebotsstrategie einer Werbebuchung oder eines Anzeigenauftrags zuweisen.

Sie können Algorithmen für die benutzerdefinierte Gebotseinstellung in Gebotsstrategien Ausgaben maximieren und Leistungsziel verwenden. Weisen Sie dazu BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO und die Algorithmus-ID für die benutzerdefinierte Gebotseinstellung den Feldern performanceGoalType und customBiddingAlgorithmId zu. Je nach Gebotsstrategie sind möglicherweise weitere Gebotsparameter verfügbar oder erforderlich.

Hier sehen Sie ein Beispiel dafür, wie Sie eine Werbebuchung so aktualisieren, dass sie die Gebotsstrategie „Ausgaben maximieren“ mit einem bestimmten Algorithmus für die benutzerdefinierte Gebotseinstellung verwendet:

Java

// Create the line item structure.
LineItem lineItem = new LineItem();

// Create and set the bidding strategy structure.
BiddingStrategy biddingStrategy = new BiddingStrategy();
MaximizeSpendBidStrategy maxSpendBidStrategy =
    new MaximizeSpendBidStrategy()
        .setPerformanceGoalType(
            "BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO")
        .setCustomBiddingAlgorithmId(custom-bidding-algorithm-id);
biddingStrategy.setMaximizeSpendAutoBid(maxSpendBidStrategy);
lineItem.setBidStrategy(biddingStrategy);

// Configure the patch request and set update mask to only update
// the bid strategy.
LineItems.Patch request =
    service
        .advertisers()
        .lineItems()
        .patch(advertiser-id, line-item-id, lineItem)
        .setUpdateMask("bidStrategy");

// Update the line item.
LineItem response = request.execute();

// Display the custom bidding algorithm ID used in the new
// bid strategy.
System.out.printf(
    "LineItem %s now has a bid strategy utilizing custom "
        + "bidding algorithm %s%n",
    response.getName(),
    response
        .getBidStrategy()
        .getMaximizeSpendAutoBid()
        .getCustomBiddingAlgorithmId());

Python

# Create the new bid strategy object.
bidding_strategy = {
    'maximizeSpendAutoBid': {
        'performanceGoalType':
            'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO',
        'customBiddingAlgorithmId': custom-bidding-algorithm-id
    }
}

# Create a line item object assigning the new bid strategy.
line_item_obj = {'bidStrategy': bidding_strategy}

# Update the line item with a new bid strategy.
response = service.advertisers().lineItems().patch(
    advertiserId=advertiser-id,
    lineItemId=line-item-id,
    updateMask='bidStrategy',
    body=line_item_obj).execute()

# Display the line item's new bid strategy
print(f'Line Item {response["name"]} is now using the following bid'
     f' strategy: {response["bidStrategy"]}.')

PHP

// Create the line item structure.
$lineItem = new Google_Service_DisplayVideo_LineItem();

// Create and set the bidding strategy structure.
$biddingStrategy =  new Google_Service_DisplayVideo_BiddingStrategy();
$maximizeSpendBidStrategy =
    new Google_Service_DisplayVideo_MaximizeSpendBidStrategy();
$maximizeSpendBidStrategy->setPerformanceGoalType(
    'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO'
);
$maximizeSpendBidStrategy->setCustomBiddingAlgorithmId(
    custom-bidding-algorithm-id
);
$biddingStrategy->setMaximizeSpendAutoBid($maximizeSpendBidStrategy);
$lineItem->setBidStrategy($biddingStrategy);

// Set update mask.
$optParams = array('updateMask' => 'bidStrategy');

// Update the line item.
$result = $this->service->advertisers_lineItems->patch(
    advertiser-id,
    line-item-id,
    $lineItem,
    $optParams
);

// Display the custom bidding algorithm ID used in the new bid strategy.
printf(
    'Line Item %s now has a bid strategy utilizing custom bidding algorithm %s.\n',
    $result['name'],
    $result['bidStrategy']['maximizeSpendBidStrategy']['customBiddingAlgorithmId']
);