"حملات الأداء الأفضل" التي تستخدِم AdsApp

أفضل طريقة لإدارة حملات الأداء الأفضل باستخدام نصوص "إعلانات Google" البرمجية هي استخدام استراتيجية التعديل لتوفير إدارة مباشرة لحملات الأداء الأفضل. لا يمكن إنشاء "حملات الأداء الأفضل" إلا باستخدام الدالة mutate. ومع ذلك، يمكنك أيضًا استخدام كائنات AdsApp أخرى لاسترداد "حملات الأداء الأفضل" وإدارة مجموعات مواد العرض وعرض التقارير إذا كنت تفضّل ذلك.

استرداد "حملات الأداء الأفضل"

تتوفّر "حملات الأداء الأفضل" من خلال مجموعة performanceMaxCampaigns التابعة لكائن AdsApp. يمكنك استردادها كالمعتاد:

const campaignName = "My Performance Max campaign";

const campaignIterator = AdsApp.performanceMaxCampaigns()
    .withCondition(`campaign.name = "${campaignName}"`)
    .get();

for (const campaign of campaignIterator) {
  ...
}

على عكس بعض أنواع الحملات الأخرى، لا تتضمّن "حملات الأداء الأفضل" مجموعات إعلانية أو كائنات إعلانية يمكنك الاطّلاع عليها. يتم تلقائيًا التعامل مع كل ما يتعلّق بهذه المفاهيم للحملات الأخرى استنادًا إلى مجموعات مواد العرض التي تحدّدها.

مواد العرض ومجموعات مواد العرض

تستند الإعلانات من "حملات الأداء الأفضل" إلى مواد عرض مثل الفيديوهات، الصور والعناوين والأوصاف، سواء كانت من تصميمك أو تم إنشاؤها تلقائيًا. للحصول على نظرة عامة كاملة على أنواع مواد العرض المطلوبة، اطّلِع على دليل مواد العرض في "حملات الأداء الأفضل" على Google Ads API.

يتم تجميع مواد عرض "حملات الأداء الأفضل" في مجموعة مواد عرض، ويجب أن تتضمّن كل "حملة أداء أفضل" مجموعة مواد عرض واحدة على الأقل. لا يمكنك إنشاء مجموعات مواد العرض هذه مباشرةً في النصوص البرمجية، ولكن يمكنك إضافة مواد عرض وإزالتها من مجموعة مواد عرض حالية.

إضافة مادة عرض إلى مجموعة مواد عرض

أولاً، أنشئ مادة العرض:

const imageUrl = "http://www.example.com/example.png";
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
const assetOperation = AdsApp.adAssets().newImageAssetBuilder()
   .withName("new asset name")
   .withData(imageBlob)
   .build();
const imageAsset = assetOperation.getResult();

بعد ذلك، استخدِم مادة العرض التي أنشأتها للتو وأضِفها إلى مجموعة مواد عرض حالية:

// First, fetch the Performance Max campaign we want to operate on.
const campaignIterator = AdsApp.performanceMaxCampaigns()
   .withCondition(`campaign.name = '${campaignName}'`)
   .get();
let campaign;
if (campaignIterator.hasNext()) {
   campaign = campaignIterator.next();
} else {
   throw `No campaign found with name ${campaignName}.`
}

// Then, get that campaign's asset groups.
const assetGroupIterator = campaign.assetGroups().get();

// The campaign must have at least one asset group, so we can just assume so here.
const assetGroup = assetGroupIterator.next();

// Add the asset from the previous step.
assetGroup.addAsset(imageAsset, 'MARKETING_IMAGE');

يُرجى العِلم أنّه عليك تحديد نوع مادة العرض في الخطوة الأخيرة. يمكنك الاطّلاع على قائمة كاملة بأنواع مواد العرض في مستندات Google Ads API

لاستخدام مادة عرض حالية، أنشئ أولاً أداة اختيار مواد العرض:

const assetSelector = AdsApp.adAssets().assets();

بعد ذلك، استخدِم فلتر withCondition للوصول إلى مواد العرض التي تريد تنفيذ إجراء عليها. اطّلِع على AssetSelector للحصول على قائمة كاملة بخيارات الفلتر.

أخيرًا، استردِد أداة التكرار وكرِّرها كما تفعل مع الكيانات الأخرى:

const assetIterator = assetSelector.get();

for (const asset of assetIterator) {
   ...
}

مواد العرض النصية

تختلف مواد العرض النصية قليلاً، إذ لا تحتاج إلى إنشاء مادة العرض مسبقًا. ما عليك سوى تحديد النص بدلاً من مادة العرض، وسينشئ النظام مادة العرض تلقائيًا. إذا كان النص نسخة طبق الأصل من مادة عرض نصية حالية، سيتم إعادة استخدام مادة العرض الحالية بدلاً من ذلك.

على سبيل المثال، إليك كيفية إنشاء مادة عرض عنوان:

assetGroup.addAsset('asset text here', 'HEADLINE');

إزالة مادة عرض من مجموعة مواد عرض

يمكنك أيضًا إزالة مادة عرض من مجموعة مواد عرض، ولكن ضَع في اعتبارك أنّه يجب أن تتضمّن كل مجموعة مواد عرض عددًا أدنى من أنواع معيّنة من مواد العرض لكي تكون الحملة صالحة.

إليك كيفية إزالة مادة العرض التي تمت إضافتها في المثال السابق:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

يمكنك أيضًا الحصول على قائمة بمواد العرض في مجموعة مواد عرض معيّنة باستخدام الدالة search:

// The resource name is a unique identifier for this asset group.
const assetGroupName = assetGroup.getResourceName();
results = AdsApp.search(
   `SELECT asset.resource_name, asset_group_asset.field_type
    FROM asset_group_asset
    WHERE asset_group.resource_name = '${assetGroupName}'`
);

يؤدي هذا الإجراء إلى اختيار اسم مورد مادة العرض كمعرّف فريد لها. يمكنك اختيار حقول أخرى أيضًا، مثل asset.type أو asset.text_asset.text، لزيادة تحسين النتائج. استخدِم أداة إنشاء طلبات البحث لهذا النوع من التقارير لإنشاء طلب البحث الخاص بك.

بعد الحصول على مادة العرض المستهدَفة، استخدِم الدالة remove في مجموعة مواد العرض لإزالة مادة العرض من مجموعة مواد العرض:

// This example assumes at least one asset is returned. We'll remove the first
// asset, whatever it is. In your code, customize this to choose the right
// asset to be removed.
const row_info = results.next().asset;
assetGroup.remove(row_info.asset.resource_name, row_info.asset_group_asset.field_type);