کلاس AdsManagerApp در اسکریپتهای Google Ads به شما امکان میدهد حسابهای پیوند شده تحت حساب مدیر خود را مدیریت کنید. می توانید به جای ایجاد یک اسکریپت جداگانه برای هر حساب، همه حساب های تبلیغ کننده خود را از طریق یک اسکریپت مدیریت کنید.
بازیابی لیست حساب ها
میتوانید با استفاده از روش accounts حسابها را تحت یک حساب مدیر بازیابی کنید، به عنوان مثال:
const accountSelector = AdsManagerApp.accounts()
.withCondition('customer_client.descriptive_name = "My Account"');
const accountIterator = accountSelector.get();
برخی از محدودیتها برای حسابهای قابل بازیابی وجود دارد:
- اگر یک سلسله مراتب چند سطحی داشته باشید، حساب های مدیر قابل بازیابی نیستند. فقط حساب های مشتری را می توان انتخاب کرد.
- به طور پیشفرض، حسابهای بسته، لغو شده و معلق بازگردانده نمیشوند. میتوانید با فراخوانی
withConditionکه فیلتر دیگری برایcustomer_client.statusتعیین میکند، این رفتار را لغو کنید.
فراخوانی accounts بهطور پیشفرض فهرستی از تمام حسابهای مشتری تحت سلسله مراتب حساب مدیر را بازیابی میکند. می توانید از متد withLimit کلاس ManagedAccountSelector برای محدود کردن تعداد حساب هایی که اسکریپت شما بازیابی می کند استفاده کنید. گزینه دیگر این است که حساب ها را با شناسه مشتری با استفاده از روش withIds انتخاب کنید:
// Hyphens in the account ID are optional.
const accountSelector = AdsManagerApp.accounts()
.withIds(['123-456-7890', '234-567-8901', '345-678-9012']);
روی حساب های مشتری کار کنید
هنگامی که حساب های مشتری را بازیابی کردید، می توانید با استفاده از روش hasNext و next تکرار کننده، از طریق آنها تکرار کنید. برای تغییر زمینه اجرا به حساب مشتری، باید از روش select استفاده کنید. پس از انتخاب یک حساب مشتری، هر تماس API دیگری برای حساب مشتری اعمال می شود تا زمانی که به صراحت حساب دیگری را انتخاب کنید:
// Keep track of the manager account for future reference.
const managerAccount = AdsApp.currentAccount();
// Select your accounts
const accountIterator = AdsManagerApp.accounts()
// ... Write some logic here to select the accounts you want using
// withCondition or withIds
// Iterate through the list of accounts
for (const account of accountIterator) {
// Select the client account.
AdsManagerApp.select(account);
// Select Search and Display campaigns under the client account
const campaignIterator = AdsApp.campaigns().get();
// Operate on client account
...
}
به صورت موازی روی حساب ها کار کنید
اسکریپتهای Google Ads به شما امکان میدهند با استفاده از روش executeInParallel از کلاس ManagedAccountSelector ، روی چندین حساب مشتری به صورت موازی کار کنید. متد executeInParallel دارای امضای زیر است:
function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);
متد executeInParallel تابعی را که توسط functionName در هر ManagedAccount مشخص شده است اجرا می کند که ManagedAccountSelector با آن مطابقت دارد. هنگامی که همه حساب ها پردازش شدند، تابع callback، اگر توسط optionalCallbackFunctionName مشخص شده باشد، یک بار اجرا می شود و فهرستی از اشیاء ExecutionResult را به عنوان آرگومان خود برای پردازش بیشتر ارسال می کند. استفاده معمولی در اینجا نشان داده شده است:
function main() {
const accountSelector = AdsManagerApp.accounts()
.withLimit(50)
.withCondition('customer_client.currency_code = "USD"');
accountSelector.executeInParallel("processClientAccount", "afterProcessAllClientAccounts");
}
function processClientAccount() {
const clientAccount = AdsApp.currentAccount();
// Process your client account here.
...
// optionally, return a result, as text.
return "";
}
function afterProcessAllClientAccounts(results) {
for (const result of results) {
// Process the result further
...
}
}
تابع مشخص شده توسط functionName می تواند به صورت اختیاری یک آرگومان رشته ای ( optionalInput ) را بپذیرد. از این پارامتر می توان برای ارسال یک پارامتر اضافی به تمام متدهای موازی که توسط executeInParallel نامیده می شوند استفاده کرد:
function main() {
const accountSelector = AdsManagerApp.accounts().withIds([1234567890, 3456787890]);
const sharedParameter = "INSERT_SHARED_PARAMETER_HERE";
accountSelector.executeInParallel("processClientAccount", null, sharedParameter);
}
function processClientAccount(sharedParameter) {
// Process your client account here.
...
}
اگر میخواهید یک شی پیکربندی جاوا اسکریپت را ارسال کنید که حاوی تنظیمات خاص حساب است، میتوانید ابتدا آن را با استفاده از روش JSON.stringify به رشته تبدیل کنید:
function main() {
...
const accountFlags = {
'1234567890': {
'label': 'Brand 1 campaigns',
},
'3456787890': {
'label': 'Brand 2 campaigns',
}
};
accountSelector.executeInParallel("processClientAccount", null,
JSON.stringify(accountFlags));
...
}
function processClientAccount(sharedParameter) {
const accountFlags = JSON.parse(sharedParameter);
// Process your client account here.
...
}
تابع مشخص شده توسط functionName همچنین می تواند یک رشته به جای یک شی از طریق JSON.stringify برگرداند:
function processClientAccount() {
...
const jsonObj = {value: 10, list: [1,2,3,4,5,6], name: "Joe Smith"};
return JSON.stringify(jsonObj);
}
مقادیر برگشتی در لیستی از اشیاء ExecutionResult به تابع callback ارسال می شوند. اگر یک رشته JSON را از تابع برگردانید، می توانید آن را با استفاده از روش JSON.parse به یک شی جاوا اسکریپت تبدیل کنید:
function callbackFunctionName(results) {
for (var i = 0; i < results.length; i++) {
var resultObj = JSON.parse(results[i].getReturnValue());
}
}
متد executeInParallel روی حداکثر 50 accounts کار میکند، بنابراین شما باید محدودیتهای خود را برای محدود کردن تعداد حسابهایی که اسکریپت شما بازیابی میکند، اعمال کنید. می توانید از روش withLimit یا withIds کلاس ManagedAccountSelector برای محدود کردن تعداد حساب هایی که اسکریپت شما بازیابی می کند استفاده کنید.
محدودیت های زمانی اجرا
برای جزئیات در مورد محدودیتهای زمانی اجرای اسکریپتهای Ads Manager به اسناد محدودیتها مراجعه کنید.