کمپین های حداکثر عملکرد با استفاده از AdsApp

بهترین راه برای مدیریت کمپین‌های Performance Max با اسکریپت‌های گوگل ادز، استفاده از استراتژی mutate برای مدیریت مستقیم کمپین‌های Performance Max است. کمپین‌های Performance Max فقط با تابع mutate قابل ایجاد هستند. با این حال، در صورت تمایل می‌توانید از سایر اشیاء AdsApp نیز برای بازیابی کمپین‌های Performance Max، مدیریت گروه‌های دارایی و اجرای گزارش‌ها استفاده کنید.

بازیابی کمپین‌های Performance Max

کمپین‌های Performance Max از طریق مجموعه performanceMaxCampaigns از یک شیء AdsApp در دسترس هستند. می‌توانید آنها را طبق معمول بازیابی کنید:

const campaignName = "My Performance Max campaign";

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

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

برخلاف برخی دیگر از انواع کمپین‌ها، کمپین‌های Performance Max گروه‌های تبلیغاتی یا اشیاء تبلیغاتی ندارند که بتوانید آنها را ببینید؛ هر چیزی که مربوط به این مفاهیم برای سایر کمپین‌ها باشد، بر اساس گروه‌های دارایی که تنظیم می‌کنید، به طور خودکار برای شما مدیریت می‌شود.

دارایی‌ها و گروه‌های دارایی

تبلیغات کمپین‌های Performance Max از دارایی‌هایی مانند ویدیوها، تصاویر، تیترها و توضیحات - که یا توسط شما ارائه شده‌اند یا به صورت خودکار ایجاد شده‌اند - استفاده می‌کنند. برای مرور کامل انواع دارایی‌های مورد نیاز، به راهنمای دارایی‌های Performance Max API گوگل ادز مراجعه کنید.

دارایی‌های کمپین‌های Performance Max در یک گروه دارایی دسته‌بندی می‌شوند و هر کمپین Performance Max باید حداقل یک گروه دارایی داشته باشد. شما نمی‌توانید این گروه‌های دارایی را مستقیماً در اسکریپت‌ها ایجاد کنید، اما می‌توانید دارایی‌ها را به یک گروه دارایی موجود اضافه و حذف کنید.

افزودن دارایی به گروه دارایی‌ها

ابتدا، دارایی را ایجاد کنید:

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

توجه داشته باشید که چگونه باید نوع دارایی را در مرحله آخر مشخص کنید. می‌توانید لیست کاملی از انواع دارایی‌ها را در مستندات 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);