+7 (8442) 50-01-34 mail@mellodesign.ru
Начните работать с нами
Оставьте заявку

Скрипт Ads для назначения ставок в торговых кампаниях

Данная статья продолжает блок статей об управлении ставками в модельных кампаниях Google Ads (когда объявление рекламирует конкретный товар) в зависимости от цен этих товаров. Предыдущая статья находится здесь.

19 марта 2019

Ни для кого не секрет, что по мере работы торговой кампании группы продуктов накапливают статистику, и мы принимаем решения об эффективности отдельных групп или товаров. Кто-то обновляет ставки руками, кто-то использует автоматизацию. Но что делать, когда вы только запускаетесь, и у вас нет данных по эффективности product groups. Первое, что приходит в голову — назначить всем группам единую ставку, а далее начать корректировать значения бидов. Однако стоит учитывать, если вы рекламируете товары с большим разбросом цены, например наушники за $5 и наушники за $150, то единая ставка тут не подойдет. Более дешевый товар может выиграть больше акционов, и вы на этом не заработаете. Для такой ситуации есть второй вариант назначения первых ставок — ставки в зависимости от цены товара. В этой статье рассмотрим вариант скрипта Ads для торговой кампании, когда товарный фид оформлен в виде гугл таблицы.

 

Логика работы мудреная, возможно в таком виде это вам и не пригодится, но интересные вещи почерпнете: Скрипт Ads забирает из гугл таблицы (фида) данные по ценам и id товаров, сохраняет их в списке, далее он же с помощью итератора и селектора групп продуктов получает активные группы товаров из активных групп объявлений нужных кампаний. Если в вашем аккаунте группы товаров выделяют товары по id, то самым глубоко вложенным элементом группы товаров будет как раз объект эквивалентный одному товару и его значение будет равно id товара.

Для нужного id находим цену товара в списке с id и ценами. Далее назначаем ставку группе продуктов, исходя из коэффициента конверсии сайта и среднего дохода с товара; в примере цена товара просто делится на 80. Скрипт работает только с объектами торговых кампаний, если хотите работать с другими типами, то почитайте в справке о селекторах для нужного формата объявлений. Ну и группировка групп продуктов должна быть оформлена примерно как на скриншоте, чтобы самым вложенным объектом был отдельный товар, выбранный по id, а не по какому-нибудь другому параметру. Если вы группируете товары по брендам или ярлыкам, то скрипт придется подправить.

 

Ниже сам код скрипта с комментариями.

 

function main() {

var ss = SpreadsheetApp.openById(‘1CXFJXShdIpZUhkP0’); // Указываем id таблицы с фидом
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow();
//Logger.log(lastRow);

var range = sheet.getRange(«A1:C»+lastRow).getValues(); // В примере берется диапазон A:C, так как id товаров у нас хранятся в A, а цены в C
//Logger.log(range);

range.sort();
for (var i = range.length — 1; i > 0; i—) {
if (range[i][0] == range[i — 1][0]) range.splice( i, 1);
}

Logger.log(range);
Logger.log(range.length);

function finder(arr,val){
for (var i=0;i<arr.length;i++)
{
var elem = arr[i];
if (elem[0].toString().toLowerCase()==val.toString().toLowerCase()) {
return parseFloat(elem[2])} // В квадратных скобках цифра 2, так как работаем с третьим элементом — с ценой
//else {return undefined}
}
}

var productGroups = AdsApp.productGroups()
.withCondition(«CampaignName = ‘Имя торговой кампании'»)
.withCondition(«AdGroupStatus = ENABLED»)
.get();
while (productGroups.hasNext()) {
var productGroup = productGroups.next();
var children = productGroup.children().get(); // Идем до самого вложенного объекта группы продуктов
while (children.hasNext()) {
var child = children.next();
var cid = child.getValue(); // Получаем значение объекта, в нашем случае оно равно id товара
Logger.log(cid);
var price = finder(range,cid); // Используем функцию, объявленную в начале скрипта, чтобы найти в полученном из таблицы массиве цену для нужного id товара.

if (price != undefined) {
var bid = price/80;
if (bid>=10) {bid = 10;}
Logger.log(‘price — ‘ + price);
Logger.log(‘bid — ‘ + bid);

child.setMaxCpc(bid);} // Задаем ставку товару — самый вложенный элемент в группе товаров

Logger.log(‘———‘);
price = undefined;
}

}

}

 

Можете поставить однократное дневное выполнение скрипта. В отличии от развернутых текстовых объявлений. мы не можем получить url товара и узнать цену, просканировав ссылку прям из скрипта ads. Поэтому приходится обращаться к фиду в гугл таблице. Если вы используете фиды xml, то можно использовать, в целом, такую же логику, но придется написать дополнительную функцию прохода по фиду для забора цен у всех товаров. Функционал торговых кампаний в скриптах ads не так богат, как для других объектов, но все же можно найти полезные вещи.