تُعدّ إدارة استهداف الموارد ميزة أساسية في Display & Video 360 API. يمكن تعيين الاستهداف لأنواع موارد متعددة، كما يمكن الاستفادة من عدد من الموارد الأخرى ومساحات المعرّفات. توضّح هذه الصفحة القيود التي يجب الانتباه إليها وأفضل الممارسات التي يجب اتّباعها عند استخدام خدمات "خيارات الاستهداف المحدّدة" في واجهة برمجة التطبيقات الخاصة بـ "مساحة العرض والفيديو 360".
استخدام ميزة "اكتساب الاستهداف"
يمكن أن ترث الموارد الفرعية الاستهداف المحدّد لبعض الموارد الرئيسية. يمكن استرداد خيارات الاستهداف التي تكتسبها إحدى مواد العرض الفرعية، ولكن لا يمكن تعديلها على مستوى مادة العرض الفرعية. يتيح ذلك فرض إعدادات أمان العلامة التجارية والاستهدافات الأخرى على مستوى الشريك أو المعلِن بالكامل.
يمكن الاطّلاع على مسار الوراثة في المخطّط البياني أدناه:

كما هو موضّح في الرسم البياني، لا تتيح بعض مستويات الاستهداف سوى مجموعة فرعية من أنواع الاستهداف. وهذا يعني أنّه لا يمكن ضبط بعض خيارات الاستهداف على مستويات أعلى وتوريثها، بل يجب ضبطها على مستوى أدنى.
المراجع المتعلقة بميزة "الميراث" في YouTube & Partners
لا يظهر خيار "اكتساب الاستهداف" لموارد YouTube والشركاء في واجهة برمجة التطبيقات الخاصة بـ "مساحة العرض والفيديو 360". لن يكون الاستهداف المكتسَب من خلال المجموعات الإعلانية قابلاً للاسترداد على مستوى AdGroup، ولن تكتسب المراجع الفرعية استهداف YouTube المخصّص للمراجع الرئيسية.
لاسترداد جميع إعدادات الاستهداف الوظيفي لمجموعة إعلانية، عليك استرداد خيارات الاستهداف المعيّنة للمجموعة الإعلانية والسلعة الرئيسية والمعلن الرئيسي.
الانتباه إلى الاستهداف الذي تمّ تحديده عند إنشاء البند
باستثناء خيارات الاستهداف الموروثة، لا يمكن تعيين معظم خيارات الاستهداف إلا بعد إنشاء عنصر حملة. ومع ذلك، هناك بعض أنواع الاستهداف التي تتضمّن مجموعة فرعية تلقائية من القيم يتمّ تعيينها لتفاصيل الإعلانات عند إنشائها. أنواع الاستهداف هذه هي:
سيؤدي محاولة إنشاء خيارات استهداف حالية أو حذف خيارات استهداف غير حالية إلى ظهور خطأ، لذا ننصحك بالاطّلاع على مجموعة الاستهداف الكاملة التي تم تعيينها لبنود حملاتك عند إنشائها. إذا كنت بحاجة إلى استرداد الاستهداف الذي تم تعيينه لأحد عناصر الحملة على مستوى أنواع الاستهداف، استخدِم advertisers.lineItems.bulkListAssignedTargetingOptions.
بالإضافة إلى ذلك، يتم ضبط بعض الإعدادات تلقائيًا عندما لا يتم تعيين أي خيار استهداف من هذا النوع للمرجع. على سبيل المثال، إذا لم يتضمّن أحد المراجع خيار استهداف محدّدًا، يعني ذلك أنّه يستخدم الحالة "المورّدون المباشرون والمورّدون المفوَّضون".TARGETING_TYPE_AUTHORIZED_SELLER_STATUS
لا يمكن تعديل استهداف "YouTube والشركاء"
لا يمكن تعديل الاستهداف الخاص بحملات YouTube و"الشركاء" باستخدام واجهة برمجة التطبيقات الخاصة بـ "مساحة العرض والفيديو 360".
يتألف استهداف "YouTube والشركاء" من جميع خيارات الاستهداف التي يتم تعيينها مباشرةً إلى "بنود YouTube والشركاء" والمجموعات الإعلانية، بالإضافة إلى أي استهداف من أنواع الاستهداف التالية:
TARGETING_TYPE_SESSION_POSITIONTARGETING_TYPE_YOUTUBE_CHANNELTARGETING_TYPE_YOUTUBE_VIDEO
يمكن تعديل هذا الاستهداف باستخدام واجهة مستخدم "مساحة العرض والفيديو 360" مباشرةً أو من خلال تحميل ملف بيانات منظَّمة.
تعيين استهداف الجمهور باستخدام خيار واحد
يتمّ تحديد خيارات الاستهداف لمعظم أنواع الاستهداف بشكلٍ فردي. لا يتّبع استهداف مجموعات الجمهور هذا الاصطلاح النمطي، بل يتم تعيينه في عنصر واحد قابل للإعداد لتفاصيل استهداف مجموعات الجمهور يدرج معرّفات الجمهور التي يجب تضمينها واستبعادها عند عرض الإعلانات. تكون قيمة
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 );
الاستعداد لإيقاف خيارات الاستهداف نهائيًا
خيارات الاستهداف ليست ثابتة، وقد يتم إيقاف عدد صغير منها نهائيًا من وقت لآخر. بعد إيقاف خيارات الاستهداف نهائيًا، لن تؤثّر في عرض إعلانات عنصر العرض. بعد إيقاف هذه الخيارات نهائيًا، سيتم إلغاء ربطها ببنود الإعلانات الحالية، وستؤدي الطلبات التي تحاول استرداد هذه الخيارات أو تعيينها إلى حدوث أخطاء.
لتجنُّب هذه الأخطاء، ننصحك بالتحقّق بانتظام من أرقام تعريف خيارات الاستهداف المخزّنة. للحفاظ على الحصة، ننصحك بتخزين المعرّفات المستخدَمة بشكل منتظم مؤقتًا. ومع ذلك، يعني تخزين أرقام التعريف أنّه قد لا تدرك أنّه تم إيقاف خيار استهداف نهائيًا. لهذا السبب، عليك استخدام targetingOptions.targetingTypes.get بانتظام
لاسترداد جميع أرقام تعريف خيارات الاستهداف المخزّنة للتأكّد من أنّها لا تزال
متوافقة مع "مساحة العرض والفيديو 360".
يمكنك الاطّلاع على صفحة عمليات الإيقاف النهائي التي تم الإعلان عنها للحصول على تفاصيل حول عمليات الإيقاف النهائي السابقة والمقبلة المهمة.
عدم إرسال طلبات متزامنة لتعديل عنصر السطر نفسه
ستؤدي محاولة تعديل الإعدادات أو الاستهداف المحدّد لواحد من بنود الحملة باستخدام طلبات متزامنة متعدّدة إلى عرض خطأ. تشمل الطلبات السارية ما يلي:
advertisers.lineItems.bulkEditAssignedTargetingOptionsadvertisers.lineItems.bulkUpdateadvertisers.lineItems.patchadvertisers.lineItems.targetingTypes.assignedTargetingOptions.createadvertisers.lineItems.targetingTypes.assignedTargetingOptions.delete
إذا كنت بحاجة إلى إضافة خيارات استهداف متعدّدة تم تعيينها أو إزالتها لمرة واحدة في عنصر سطر واحد، عليك استخدام طلب advertisers.lineItems.bulkEditAssignedTargetingOptions واحد. إذا أردت تعديل إعدادات عنصر حملة واستهدافه، ضَع طلب patch أو bulkUpdate وطلب الاستهداف ذي الصلة في قائمة الانتظار لضمان عدم إرسال الطلب الثاني إلى أن يعرض الطلب الأول ردًا.