Ciblage

La gestion du ciblage des ressources est une fonctionnalité centrale de l'API Display & Video 360. Le ciblage peut être attribué à plusieurs types de ressources et utilise un certain nombre d'autres ressources et espaces d'ID. Cette page détaille les limites à prendre en compte et les bonnes pratiques à mettre en œuvre lors de l'adoption des services d'options de ciblage attribuées de l'API Display & Video 360.

Utiliser l'héritage du ciblage

Le ciblage attribué à certaines ressources peut être hérité par leurs ressources enfants. Les options de ciblage héritées d'une ressource enfant sont récupérables, mais pas modifiables au niveau de la ressource enfant. Cela permet d'appliquer les paramètres de brand safety et d'autres types de ciblage à l'ensemble d'un partenaire ou d'un annonceur.

Le chemin d'héritage est illustré dans le schéma ci-dessous:

Diagramme de l'héritage du ciblage

Comme indiqué dans le diagramme, certains niveaux de ciblage ne sont compatibles qu'avec un sous-ensemble de types de ciblage. Cela signifie que certaines options de ciblage ne peuvent pas être définies à des niveaux supérieurs et héritées, mais doivent être définies à un niveau inférieur.

Héritage dans les ressources YouTube et partenaires

L'héritage du ciblage n'est pas pris en compte pour les ressources YouTube et partenaires dans l'API Display & Video 360. Le ciblage hérité par les groupes d'annonces ne sera pas récupérable au niveau AdGroup, et le ciblage YouTube attribué aux ressources parentes ne sera pas hérité par les ressources enfants.

Pour récupérer tous les paramètres de ciblage fonctionnel d'un groupe d'annonces, vous devez récupérer les options de ciblage attribuées au groupe d'annonces, à l'élément de campagne parent et à l'annonceur parent.

Tenir compte du ciblage attribué lors de la création de l'élément de campagne

À l'exception des options de ciblage héritées, la plupart des ciblages ne peuvent être attribués qu'après la création d'un élément de campagne. Toutefois, certains types de ciblage comportent un sous-ensemble de valeurs par défaut attribué aux éléments de campagne lors de leur création. Ces types de ciblage sont les suivants:

Si vous essayez de créer des options de ciblage existantes ou de supprimer des options de ciblage non attribuées, une erreur s'affiche. Nous vous recommandons donc de connaître l'ensemble des options de ciblage attribuées à vos éléments de campagne lors de leur création. Si vous devez récupérer le ciblage attribué à un élément de campagne pour différents types de ciblage, utilisez advertisers.lineItems.bulkListAssignedTargetingOptions.

De plus, certains paramètres sont définis par défaut lorsqu'aucune option de ciblage de ce type n'est attribuée à la ressource. Par exemple, si aucune option de ciblage TARGETING_TYPE_AUTHORIZED_SELLER_STATUS n'est définie pour une ressource, cela signifie qu'elle utilise l'état "Revendeurs et vendeurs directs autorisés".

Ne vous attendez pas à un "ciblage par défaut" automatique.

Dans Display & Video 360, le ciblage défini au niveau de la campagne ou de l'ordre d'insertion n'est pas immédiatement transmis à leurs éléments de campagne enfants. Ce ciblage est appelé "ciblage par défaut" et est utilisé comme modèle de ciblage appliqué aux éléments de campagne créés ultérieurement dans l'interface utilisateur.

Dans l'API Display & Video 360, le ciblage par défaut n'est pas appliqué automatiquement aux nouveaux éléments de campagne. La création d'un élément de campagne de base ne copie aucun ciblage au niveau de la campagne ou de l'ordre d'insertion. Dans ce cas, le ciblage doit être appliqué aux éléments de campagne séparément via les méthodes Créer ou Modifier de manière groupée de l'option de ciblage attribuée.

Les méthodes spéciales peuvent faire exception. Par exemple, les éléments de campagne créés via advertisers.lineItems.generateDefault copient les paramètres de leur ordre d'insertion parent, y compris le ciblage attribué. De même, les éléments de campagne créés par duplication se verront attribuer le même ciblage que l'élément de campagne d'origine.

Impossible de modifier le ciblage YouTube et partenaires

Vous ne pouvez pas modifier le ciblage spécifiquement pour les campagnes YouTube et partenaires à l'aide de l'API Display & Video 360.

Le ciblage YouTube et partenaires comprend tous les ciblages attribués directement aux éléments de campagne YouTube et partenaires et aux groupes d'annonces, ainsi que tout ciblage des types suivants:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

Vous pouvez modifier ce ciblage directement dans l'interface utilisateur de Display & Video 360 ou en important un fichier de données structurées.

Attribuer un ciblage d'audience avec une seule option

Les options de ciblage de la plupart des types de ciblage sont attribuées individuellement. Le ciblage par type d'audience ne suit pas cette convention modulaire, mais est attribué dans un seul objet Détails du ciblage par type d'audience configurable qui liste les ID des audiences à inclure et à exclure lors de la diffusion d'annonces. Une fois attribué, le assignedTargetingOptionId de cette option de groupe d'audience est toujours "audienceGroup".

Cette conception signifie que toute modification du ciblage du groupe d'audience doit être effectuée en supprimant l'option de ciblage attribuée au groupe d'audience existant, puis en créant une nouvelle option de ciblage du groupe d'audience avec les modifications souhaitées. Vous pouvez effectuer cette opération en une seule requête à l'aide de advertisers.lineItems.bulkEditAssignedTargetingOptions.

Voici un exemple de mise à jour du ciblage par type d'audience afin de cibler positivement d'autres audiences Google:

Java

long advertiserId = advertiser-id;
long lineItemId = line-item-id
List<Long> addedGoogleAudienceIds =
    Arrays.asList(google-audience-id-to-add,...);

// Build Google audience targeting settings objects to add to audience
// targeting.
ArrayList<GoogleAudienceTargetingSetting> newGoogleAudienceSettings =
    new ArrayList<GoogleAudienceTargetingSetting>();

// Convert list of Google Audience IDs into list of settings.
for (Long googleAudienceId : addedGoogleAudienceIds) {
  newGoogleAudienceSettings.add(new GoogleAudienceTargetingSetting()
      .setGoogleAudienceId(googleAudienceId));
}

// Create relevant bulk edit request objects.
BulkEditLineItemAssignedTargetingOptionsRequest requestContent =
    new BulkEditLineItemAssignedTargetingOptionsRequest();
AudienceGroupAssignedTargetingOptionDetails updatedAudienceGroupDetails;
ArrayList<DeleteAssignedTargetingOptionsRequest> audienceGroupDeleteRequests =
    new ArrayList<DeleteAssignedTargetingOptionsRequest>();

try {
  // Retrieve existing audience group targeting.
  AssignedTargetingOption existingAudienceGroupTargetingOption =
      service
          .advertisers()
          .lineItems()
          .targetingTypes()
          .assignedTargetingOptions()
          .get(
              advertiserId,
              lineItemId,
              "TARGETING_TYPE_AUDIENCE_GROUP",
              "audienceGroup"
          ).execute();

  // Extract existing audience group targeting details.
  updatedAudienceGroupDetails =
      existingAudienceGroupTargetingOption.getAudienceGroupDetails();

  // Build and add delete request for existing audience group targeting.
  ArrayList<String> deleteAudienceGroupAssignedTargetingIds =
      new ArrayList<String>();
  deleteAudienceGroupAssignedTargetingIds.add("audienceGroup");

  audienceGroupDeleteRequests
      .add(new DeleteAssignedTargetingOptionsRequest()
          .setTargetingType("TARGETING_TYPE_AUDIENCE_GROUP")
          .setAssignedTargetingOptionIds(
              deleteAudienceGroupAssignedTargetingIds
          )
      );
}
catch (GoogleJsonResponseException e) {
  updatedAudienceGroupDetails =
      new AudienceGroupAssignedTargetingOptionDetails();
}

// Set delete requests in edit request.
requestContent.setDeleteRequests(audienceGroupDeleteRequests);

// Construct new group of Google Audiences to include in targeting.
GoogleAudienceGroup updatedIncludedGoogleAudienceGroup =
    updatedAudienceGroupDetails.getIncludedGoogleAudienceGroup();
if (updatedIncludedGoogleAudienceGroup != null) {
  List<GoogleAudienceTargetingSetting> updatedGoogleAudienceSettings =
      updatedIncludedGoogleAudienceGroup.getSettings();
  updatedGoogleAudienceSettings.addAll(newGoogleAudienceSettings);
  updatedIncludedGoogleAudienceGroup
      .setSettings(updatedGoogleAudienceSettings);
} else {
  updatedIncludedGoogleAudienceGroup = new GoogleAudienceGroup();
  updatedIncludedGoogleAudienceGroup.setSettings(newGoogleAudienceSettings);
}

// Add new Google Audience group to audience group targeting details.
updatedAudienceGroupDetails
    .setIncludedGoogleAudienceGroup(updatedIncludedGoogleAudienceGroup);

// Create new targeting option to assign.
AssignedTargetingOption newAudienceGroupTargeting =
    new AssignedTargetingOption();
newAudienceGroupTargeting
    .setAudienceGroupDetails(updatedAudienceGroupDetails);

// Build audience group targeting create request and add to list of create
// requests.
ArrayList<AssignedTargetingOption> createAudienceGroupAssignedTargetingOptions =
    new ArrayList<AssignedTargetingOption>();
createAudienceGroupAssignedTargetingOptions.add(newAudienceGroupTargeting);
ArrayList<CreateAssignedTargetingOptionsRequest> targetingCreateRequests =
    new ArrayList<CreateAssignedTargetingOptionsRequest>();
targetingCreateRequests.add(new CreateAssignedTargetingOptionsRequest()
    .setTargetingType("TARGETING_TYPE_AUDIENCE_GROUP")
    .setAssignedTargetingOptions(
        createAudienceGroupAssignedTargetingOptions
    )
);

// Set create requests in edit request.
requestContent.setCreateRequests(targetingCreateRequests);

// Configure and execute the bulk list request.
BulkEditLineItemAssignedTargetingOptionsResponse response =
    service.advertisers().lineItems()
        .bulkEditLineItemAssignedTargetingOptions(
            advertiserId,
            lineItemId,
            requestContent).execute();

Python

advertiser_id = advertiser-id
line_item_id = line-item-id
added_google_audiences = [google-audience-id-to-add,...]

# Build Google audience targeting settings objects to create.
new_google_audience_targeting_settings = []
for google_audience_id in added_google_audiences:
 new_google_audience_targeting_settings.append(
     {'googleAudienceId': google_audience_id}
 )

# Retrieve any existing line item audience targeting.
retrieved_audience_targeting = service.advertisers().lineItems(
).targetingTypes().assignedTargetingOptions().get(
   advertiserId=advertiser_id,
   lineItemId=line_item_id,
   targetingType="TARGETING_TYPE_AUDIENCE_GROUP",
   assignedTargetingOptionId="audienceGroup"
).execute()

updated_audience_group_details = {}

# Copy over any existing audience targeting.
if 'audienceGroupDetails' in retrieved_audience_targeting:
 updated_audience_group_details = retrieved_audience_targeting[
     'audienceGroupDetails']

# Append the new Google audience IDs to any existing positive Google
# audience targeting.
if 'includedGoogleAudienceGroup' in updated_audience_group_details:
 updated_audience_group_details[
     'includedGoogleAudienceGroup']['settings'].extend(
         new_google_audience_targeting_settings)
else:
 updated_audience_group_details['includedGoogleAudienceGroup'] = {
     'settings': new_google_audience_targeting_settings
 }

# Build bulk edit request.
bulk_edit_request = {
   'deleteRequests': [
       {
         'targetingType': "TARGETING_TYPE_AUDIENCE_GROUP",
         'assignedTargetingOptionIds': [
           "audienceGroup"
         ]
       }
   ],
   'createRequests': [
       {
           'targetingType': "TARGETING_TYPE_AUDIENCE_GROUP",
           'assignedTargetingOptions': [
               {'audienceGroupDetails': updated_audience_group_details}
           ]
       }
   ]
}

# Update the audience targeting
updated_audience_targeting = service.advertisers().lineItems(
).bulkEditLineItemAssignedTargetingOptions(
   advertiserId=advertiser_id,
   lineItemId=line_item_id,
   body=bulk_edit_request
).execute()

PHP

$advertiserId = advertiser-id;
$lineItemId = line-item-id;
$addedGoogleAudienceIds = array(google-audience-id-to-add,...);

// Convert list of Google Audience IDs into list of Google audience
// settings.
$newGoogleAudienceSettings = array();
foreach ($addedGoogleAudienceIds as $googleAudienceId) {
    $newSetting =
        new Google_Service_DisplayVideo_GoogleAudienceTargetingSetting();
    $newSetting->setGoogleAudienceId($googleAudienceId);
    $newGoogleAudienceSettings[] = $newSetting;
}

// Create a bulk edit request.
$requestBody =
    new Google_Service_DisplayVideo_BulkEditLineItemAssignedTargetingOptionsRequest();

$audienceGroupDeleteRequests = array();

try {
    // Retrieve existing audience group targeting.
    $existingAudienceGroupTargetingOption = $this
        ->service
        ->advertisers_lineItems_targetingTypes_assignedTargetingOptions
        ->get(
            $advertiserId,
            $lineItemId,
            'TARGETING_TYPE_AUDIENCE_GROUP',
            'audienceGroup'
        );

    // Extract existing audience group targeting details.
    $updatedAudienceGroupDetails =
        $existingAudienceGroupTargetingOption
            ->getAudienceGroupDetails();

    // Build and add delete request for existing audience group
    // targeting.
    $deleteAudienceGroupAssignedTargetingIds = array();
    $deleteAudienceGroupAssignedTargetingIds[] = "audienceGroup";

    $audienceGroupDeleteRequest =
        new Google_Service_DisplayVideo_DeleteAssignedTargetingOptionsRequest();
    $audienceGroupDeleteRequest
        ->setTargetingType('TARGETING_TYPE_AUDIENCE_GROUP');
    $audienceGroupDeleteRequest
        ->setAssignedTargetingOptionIds(
            $deleteAudienceGroupAssignedTargetingIds
        );
    $audienceGroupDeleteRequests[] = $audienceGroupDeleteRequest;
} catch (\Exception $e) {
    $updatedAudienceGroupDetails =
        new Google_Service_DisplayVideo_AudienceGroupAssignedTargetingOptionDetails();
}

// Set delete requests in edit request.
$requestBody->setDeleteRequests($audienceGroupDeleteRequests);

// Construct new group of Google audiences to include in targeting.
$updatedIncludedGoogleAudienceGroup = $updatedAudienceGroupDetails
    ->getIncludedGoogleAudienceGroup();

if (!empty($updatedIncludedGoogleAudienceGroup)) {
    // Get existing settings.
    $updatedGoogleAudienceSettings =
    $updatedIncludedGoogleAudienceGroup->getSettings();

    // Add new Google audiences to existing list.
    $updatedGoogleAudienceSettings = array_merge(
        $updatedGoogleAudienceSettings,
        $newGoogleAudienceSettings
    );

    // Set updated Google audience list.
    $updatedIncludedGoogleAudienceGroup
        ->setSettings($updatedGoogleAudienceSettings);
} else {
    // Create new Google audience group.
    $updatedIncludedGoogleAudienceGroup =
        new Google_Service_DisplayVideo_GoogleAudienceGroup();

    // Set list of new Google audiences for targeting.
    $updatedIncludedGoogleAudienceGroup
        ->setSettings($newGoogleAudienceSettings);
}

// Add new Google Audience group to audience group targeting details.
$updatedAudienceGroupDetails
    ->setIncludedGoogleAudienceGroup(
        $updatedIncludedGoogleAudienceGroup
    );

// Create new targeting option to assign.
$newAudienceGroupTargeting =
    new Google_Service_DisplayVideo_AssignedTargetingOption();
$newAudienceGroupTargeting
    ->setAudienceGroupDetails($updatedAudienceGroupDetails);

// Build audience group targeting create request and add to list of
// create requests.
$createAudienceGroupAssignedTargetingOptions = array();
$createAudienceGroupAssignedTargetingOptions[] =
    $newAudienceGroupTargeting;
$createAudienceGroupTargetingRequest =
    new Google_Service_DisplayVideo_CreateAssignedTargetingOptionsRequest();
$createAudienceGroupTargetingRequest->setTargetingType(
    "TARGETING_TYPE_AUDIENCE_GROUP"
);
$createAudienceGroupTargetingRequest->setAssignedTargetingOptions(
    $createAudienceGroupAssignedTargetingOptions
);
$createRequests[] = $createAudienceGroupTargetingRequest;

// Set create requests in edit request.
$requestBody->setCreateRequests($createRequests);

// Call the API, editing the assigned targeting options for the
// identified line item.
$response = $this
    ->service
    ->advertisers_lineItems
    ->bulkEditLineItemAssignedTargetingOptions(
        $advertiserId,
        $lineItemId,
        $requestBody
    );

Préparez-vous à l'abandon des options de ciblage

Les options de ciblage ne sont pas statiques, et un petit nombre d'entre elles peuvent être abandonnées de temps en temps. Une fois obsolètes, les options de ciblage n'ont aucune incidence sur la diffusion des annonces d'un élément de campagne. Après l'abandon, ces options ne seront plus attribuées aux éléments de ligne existants, et les requêtes qui tentent de les récupérer ou de les attribuer généreront des erreurs.

Pour éviter ces erreurs, nous vous recommandons de vérifier régulièrement les ID des options de ciblage stockées. Pour économiser du quota, nous vous recommandons de mettre en cache les ID utilisés régulièrement. Toutefois, le stockage d'ID peut vous empêcher de vous rendre compte qu'une option de ciblage a été abandonnée. Pour cette raison, vous devez utiliser régulièrement targetingOptions.targetingTypes.get pour récupérer tous les ID d'options de ciblage stockés afin de vérifier qu'ils sont toujours compatibles avec Display & Video 360.

Pour en savoir plus sur les abandons importants précédents et à venir, consultez la page Abandons annoncés.

Ne pas envoyer de requêtes simultanées pour mettre à jour le même article

Si vous tentez de mettre à jour les paramètres ou le ciblage attribué à un seul élément de campagne à l'aide de plusieurs requêtes simultanées, une erreur sera renvoyée. Les demandes applicables incluent les suivantes:

Si vous devez ajouter ou supprimer plusieurs options de ciblage attribuées à un même article de ligne en même temps, vous devez utiliser une seule requête advertisers.lineItems.bulkEditAssignedTargetingOptions. Si vous souhaitez modifier les paramètres et le ciblage d'un élément de campagne, mettez en file d'attente la requête patch ou bulkUpdate et la requête de ciblage appropriée pour vous assurer que la deuxième requête n'est pas envoyée tant que la première n'a pas renvoyé de réponse.