טירגוט

הניהול של טירגוט לפי משאבים הוא תכונה מרכזית ב-Display & Video 360 API. אפשר להקצות טירגוט לסוגים שונים של משאבים ולהשתמש בכמה משאבים ומרחבי מזהה אחרים. בדף הזה מפורטות מגבלות שיש לשים לב אליהן ואילו שיטות מומלצות ליישום בשירותים של אפשרויות הטירגוט ב-Display & Video 360 API.

שימוש בירושה של טירגוט

הטירגוט שהוקצה למשאבים מסוימים יכול לעבור בירושה למשאבי הצאצא. ניתן לאחזר את אפשרויות הטירגוט שהועברו בירושה על ידי משאב צאצא, אבל הן לא ניתנות לעריכה ברמת משאב הצאצא. כך ניתן לאכוף הגדרות להגנה על המותג והגדרות טירגוט אחרות לכל השותף או המפרסם.

נתיב הורשה מוצג בתרשים הבא:

תרשים ירושה של טירגוט

כפי שמצוין בתרשים, חלק מרמות המיקוד תומכות רק בקבוצת משנה של סוגי מיקוד. המשמעות היא שחלק מאפשרויות המיקוד לא ניתנות להגדרה ברמות גבוהות יותר ולהעברה בירושה, ובמקום זאת יש להגדירן ברמה נמוכה יותר.

ירושה במשאבים של YouTube ושותפים

הירושה של הטירגוט לא משפיעה על המשאבים של YouTube ו-Partners ב-Display & Video 360 API. לא ניתן לאחזר ברמת AdGroup טירגוט שעבר בירושה לקבוצות של מודעות, וטירגוט ל-YouTube שהוקצה למשאבים ברמה העליונה לא יעבור בירושה למשאבי צאצא.

כדי לאחזר את כל הגדרות הטירגוט הפונקציונלי של קבוצת מודעות, צריך לאחזר את אפשרויות הטירגוט שהוקצו לקבוצת המודעות, לפריט ההורה ולמפרסם ההורה.

חשוב לשים לב לטירגוט שהוקצה בתהליך יצירת הפריט

מלבד אפשרויות הטירגוט שעברו בירושה, את רוב הטירגוט אפשר להקצות רק אחרי יצירת פריט. עם זאת, יש כמה סוגי טירגוט עם קבוצת משנה המוגדרת כברירת מחדל של ערכים. הערכים מוקצים לפריטים בתהליך היצירה של הפריטים. סוגי המיקוד האלה הם:

אם תנסו ליצור אפשרויות מיקוד קיימות או למחוק אפשרויות מיקוד שאינן קיימות, תקבלו שגיאה, לכן מומלץ להיות מודעים לחבילת המיקוד המלאה שמוקצית לפריטים שלכם מיד לאחר יצירתם. כדי לאחזר את הטירגוט שהוקצה לפריט בכל סוגי הטירגוט, צריך להשתמש בפונקציה advertisers.lineItems.bulkListAssignedTargetingOptions.

בנוסף, חלק מההגדרות נקבעות כברירת מחדל אם לא מוקצית למשאב אפשרות טירגוט מהסוג הזה. לדוגמה, אם למשאב לא מוגדרת אפשרות טירגוט של TARGETING_TYPE_AUTHORIZED_SELLER_STATUS, המשמעות היא שהוא משתמש בסטטוס 'Authorized Direct Sellers and Sellers'.

אל תצפו ל'טירגוט אוטומטי'

ב-Display & Video 360, הטירגוט שהוגדר ברמת הקמפיין או ברמת סדר ההכנסה לא מועבר באופן מיידי אל פריטי הצאצא. הטירגוט הזה נקרא default targeting (טירגוט כברירת מחדל). הוא משמש כתבנית טירגוט שמוחלת על פריטים שייווצרו בהמשך בממשק המשתמש.

ב-Display & Video 360 API, מיקוד ברירת המחדל לא מוחל באופן אוטומטי על פריטים חדשים שנוצרים. יצירת פריט בסיסי לא מועתקת לטירגוט ברמת הקמפיין או ברמת הזמנת הקמפיין. במקרה כזה, יש להחיל את המיקוד הרצוי על פריטים בנפרד באמצעות שיטות של יצירה או עריכה בכמות גדולה שהוקצו.

שיטות מיוחדות יכולות להיות חריגות. לדוגמה, פריטים שנוצרו באמצעות advertisers.lineItems.generateDefault מעתיקים הגדרות מסדר ההכנסה הראשי שלהם, כולל הגדרות טירגוט שהוקצו. באופן דומה, לפריטים שנוצרו באמצעות שכפול יוקצו אותו טירגוט כמו לפריט המקורי.

לא ניתן לשנות את הטירגוט של YouTube ושל שותפים

לא ניתן להשתמש ב-Display & Video 360 API כדי לעדכן טירגוט ספציפי לקמפיינים של YouTube ושל Partners.

המיקוד של YouTube ו-Partners כולל את כל סוגי המיקודים שהוקצו ישירות לפריטי YouTube ולקבוצות מודעות של YouTube ו-Partners, וכן מכל מיקוד מהסוגים הבאים:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

אפשר לעדכן את הטירגוט ישירות דרך ממשק המשתמש של Display & Video 360, או על ידי העלאת קובץ נתונים מובְנים.

הקצאת טירגוט לפי קהל עם אפשרות אחת

אפשרויות המיקוד לרוב סוגי המיקוד מוקצות בנפרד. טירגוט לפי קבוצת קהלים לא פועל בהתאם למוסכמה המודולרית הזו, אלא מוקצה לאובייקט פרטי טירגוט לפי קבוצת קהלים אחד שאפשר להגדיר, שבו מופיעים המזהים של הקהלים שצריך לכלול ולהחריג בזמן הצגת המודעות. הערך בשדה assignedTargetingOptionId של קבוצת היעד הזו, לאחר ההקצאה, הוא תמיד "audienceGroup".

המשמעות של העיצוב הזה היא ש כל שינוי במיקוד של קבוצת קהל חייב להתבצע על ידי מחיקה של אפשרות המיקוד שהוקצתה לקבוצת הקהלים הקיימת, ולאחר מכן יצירת אפשרות מיקוד חדשה לקבוצת קהל עם השינויים הרצויים. אפשר לעשות זאת בבקשה אחת באמצעות advertisers.lineItems.bulkEditAssignedTargetingOptions.

הנה דוגמה לעדכון של הטירגוט לפי קהל כדי לטרגט באופן חיובי לקהלים נוספים של 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
    );

להתכונן להוצאה משימוש של אפשרויות הטירגוט

אפשרויות הטירגוט אינן סטטיות, ויכול להיות שמדי פעם נוציא משימוש מעט מאוד אפשרויות. לאחר ההוצאה משימוש של אפשרויות המיקוד, הן לא משפיעות על הצגת המודעות של פריט מסוים. אחרי ההוצאה משימוש, תבוטל ההקצאה של האפשרויות האלה מפריטים קיימים, ובקשות שמנסות לאחזר או להקצות את האפשרויות האלה יגרמו לשגיאות.

כדי להימנע מהשגיאות האלה, מומלץ לבדוק באופן קבוע את המזהים של אפשרויות הטירגוט השמורות. כדי לצמצם את המכסות, מומלץ לשמור מזהים שנמצאים בשימוש קבוע. עם זאת, המשמעות של שמירת מזהים היא שייתכן שלא הבנתם שאפשרות מיקוד מסוימת הוצאה משימוש. לכן חשוב להשתמש באופן קבוע ב-targetingOptions.targetingTypes.get כדי לאחזר את כל המזהים שנשמרו של אפשרויות המיקוד, כדי לוודא שהם עדיין נתמכים ב-Display & Video 360.

אפשר לעיין בדף הודעות על הוצאה משימוש לקבלת פרטים על הוצאה משימוש משמעותית ועתידית.

לא לשלוח בקשות בו-זמניות לעדכון של אותו פריט

אם תנסו לעדכן את ההגדרות או את הטירגוט של פריט בודד באמצעות מספר בקשות בו-זמנית, תוצג הודעת שגיאה. הבקשות הרלוונטיות כוללות:

אם אתם צריכים להוסיף או להסיר בו-זמנית מספר אפשרויות מיקוד שהוקצו לפריט בודד, יש להשתמש בבקשת advertisers.lineItems.bulkEditAssignedTargetingOptions אחת. אם רוצים לעדכן את ההגדרות והטירגוט של פריט מסוים, מוסיפים לתור את הבקשה patch או bulkUpdate ואת בקשת הטירגוט הרלוונטית, כדי לוודא שהבקשה השנייה לא תישלח עד שהבקשה הראשונה תחזיר.