Targeting

리소스 타겟팅 관리는 Display & Video 360 API의 핵심 기능입니다. 타겟팅은 여러 리소스 유형에 할당할 수 있으며 여러 다른 리소스와 ID 스페이스를 활용합니다. 이 페이지에서는 Display & Video 360 API 할당 타겟팅 옵션 서비스를 도입할 때 유의해야 할 제한사항과 구현해야 할 권장사항을 자세히 설명합니다.

타겟팅 상속 활용

일부 리소스에 할당된 타겟팅은 하위 리소스에 상속될 수 있습니다. 하위 리소스에 상속된 타겟팅 옵션은 검색할 수 있지만 하위 리소스 수준에서는 수정할 수 없습니다. 이렇게 하면 파트너 또는 광고주 전체에 브랜드 안전성 설정 및 기타 타겟팅이 적용될 수 있습니다.

상속 경로는 아래 다이어그램에서 확인할 수 있습니다.

타겟팅 상속 다이어그램

다이어그램에 지정된 대로 일부 타겟팅 수준은 일부 타겟팅 유형만 지원합니다. 즉, 일부 타겟팅 옵션은 상위 수준에서 설정하고 상속할 수 없으며 대신 하위 수준에서 설정해야 합니다.

YouTube 및 파트너 리소스의 상속

Display & Video 360 API의 YouTube 및 파트너 리소스에 타겟팅 상속이 반영되지 않습니다. 광고 그룹에서 상속된 타겟팅은 AdGroup 수준에서 검색할 수 없으며 상위 리소스에 할당된 YouTube 타겟팅은 하위 리소스에 상속되지 않습니다.

광고 그룹의 모든 기능 타겟팅 설정을 검색하려면 광고 그룹, 상위 광고 항목, 상위 광고주에 할당된 타겟팅 옵션을 검색해야 합니다.

광고 항목 생성 시 할당된 타겟팅 확인

상속된 타겟팅 옵션을 제외한 대부분의 타겟팅은 광고 항목이 생성된 후에만 할당할 수 있습니다. 하지만 광고 항목 생성 시 광고 항목에 할당되는 기본 값 하위 집합이 있는 타겟팅 유형도 몇 가지 있습니다. 이러한 타겟팅 유형은 다음과 같습니다.

기존 타겟팅 옵션을 만들거나 할당되지 않은 타겟팅 옵션을 삭제하려고 하면 오류가 반환되므로 광고 항목을 만들 때 광고 항목에 할당된 전체 타겟팅 모음을 숙지하는 것이 좋습니다. 타겟팅 유형 간에 광고 항목에 할당된 타겟팅을 검색해야 하는 경우 advertisers.lineItems.bulkListAssignedTargetingOptions를 사용하세요.

또한 이러한 유형의 타겟팅 옵션이 리소스에 할당되지 않은 경우 일부 설정은 기본적으로 설정됩니다. 예를 들어 리소스에 TARGETING_TYPE_AUTHORIZED_SELLER_STATUS 타겟팅 옵션이 정의되어 있지 않으면 '공인 직접 판매자 및 리셀러' 상태를 사용하고 있는 것입니다.

자동 '기본 타겟팅'을 기대하지 마세요.

Display & Video 360에서 캠페인 또는 게재 신청서 수준에서 설정된 타겟팅은 하위 광고 항목에 즉시 전달되지 않습니다. 이 타겟팅을 '기본 타겟팅'이라고 하며, 이후 UI에서 생성된 광고 항목에 적용되는 타겟팅 템플릿으로 사용됩니다.

Display & Video 360 API에서는 새로 만든 광고 항목에 기본 타겟팅이 자동으로 적용되지 않습니다. 기본 광고 항목을 만들 때는 캠페인 또는 게재 신청서 수준 타겟팅이 복사되지 않습니다. 이 경우 할당된 타겟팅 옵션 만들기 또는 일괄 수정 메서드를 통해 광고 항목에 타겟팅을 별도로 적용해야 합니다.

특수 메서드는 예외가 될 수 있습니다. 예를 들어 advertisers.lineItems.generateDefault를 통해 생성된 광고 항목은 할당된 타겟팅을 비롯하여 상위 게재 신청서의 설정을 복사합니다. 마찬가지로 복제를 통해 생성된 광고 항목에는 원본 광고 항목과 동일한 타겟팅이 할당됩니다.

YouTube + 파트너 타겟팅을 수정할 수 없음

Display & Video 360 API를 사용하여 YouTube 및 파트너 캠페인용 타겟팅을 업데이트할 수는 없습니다.

YouTube + 파트너 타겟팅은 YouTube + 파트너 광고 항목 및 광고 그룹에 직접 할당된 모든 타겟팅과 다음 타겟팅 유형의 모든 타겟팅으로 구성됩니다.

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

이 타겟팅은 Display & Video 360 UI를 직접 사용하거나 구조화된 데이터 파일을 업로드하여 업데이트할 수 있습니다.

단일 옵션으로 잠재고객 타겟팅 할당

대부분의 타겟팅 유형에 대한 타겟팅 옵션은 개별적으로 할당됩니다. 잠재고객 그룹 타겟팅은 이 모듈식 규칙을 따르지 않고 대신 광고를 게재할 때 포함하거나 제외할 잠재고객의 ID를 나열하는 구성 가능한 단일 잠재고객 그룹 타겟팅 세부정보 객체에 할당됩니다. 이 잠재고객 그룹 옵션의 assignedTargetingOptionId는 일단 할당되면 항상 'audienceGroup'입니다.

즉, 잠재고객 그룹 타겟팅을 변경하려면 먼저 타겟팅 옵션이 할당된 기존 잠재고객 그룹을 삭제한 다음 원하는 변경사항을 적용하여 새 잠재고객 그룹 타겟팅 옵션을 만들기해야 합니다. 이는 advertisers.lineItems.bulkEditAssignedTargetingOptions를 사용하여 단일 요청으로 실행할 수 있습니다.

다음은 추가 Google 잠재고객을 적극적으로 타겟팅하기 위해 잠재고객 타겟팅을 업데이트하는 방법의 예입니다.

자바

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
    );

타겟팅 옵션 지원 중단에 대비

타겟팅 옵션은 정적이지 않으며 때때로 소수의 옵션이 지원 중단될 수 있습니다. 지원 중단된 타겟팅 옵션은 광고 항목의 광고 게재에 영향을 미치지 않습니다. 지원 중단 후에는 이러한 옵션이 기존 행 항목에서 할당 해제되며 이러한 옵션을 검색하거나 할당하려는 요청은 오류가 발생합니다.

이러한 오류를 방지하려면 저장된 타겟팅 옵션 ID를 정기적으로 확인하는 것이 좋습니다. 할당량을 보존하려면 정기적으로 사용되는 ID를 캐시하는 것이 좋습니다. 하지만 ID를 저장하면 타겟팅 옵션이 지원 중단되었음을 인식하지 못할 수 있습니다. 따라서 저장된 모든 타겟팅 옵션 ID를 targetingOptions.targetingTypes.get를 사용하여 정기적으로 검색하여 Display & Video 360에서 계속 지원되는지 확인해야 합니다.

이전 및 예정된 주요 지원 중단에 관한 자세한 내용은 발표된 지원 중단 페이지를 참고하세요.

동일한 광고 항목을 업데이트하는 동시 요청을 하지 않음

여러 동시 요청을 사용하여 단일 광고 항목의 설정 또는 할당된 타겟팅을 업데이트하려고 하면 오류가 반환됩니다. 적용 가능한 요청은 다음과 같습니다.

단일 광고 항목에 할당된 여러 타겟팅 옵션을 동시에 추가하거나 삭제해야 하는 경우 단일 advertisers.lineItems.bulkEditAssignedTargetingOptions 요청을 사용해야 합니다. 광고 항목의 설정 및 타겟팅을 업데이트하려면 patch 또는 bulkUpdate 요청과 관련 타겟팅 요청을 대기열에 추가하여 첫 번째 요청이 응답을 반환할 때까지 두 번째 요청이 전송되지 않도록 합니다.