Shared Chat•
Default (GPT-3.5)

Google Ads: Код объяснен

June 9, 2023
Hello! Act like Google ads script specialist. Explain me please how this code works. Do it in russian: function main() { var account = AdsApp.currentAccount().getName(); var timeZone = AdsApp.currentAccount().getTimeZone(); var format = 'yyyyMMdd'; var budgets = AdsApp.budgetOrders().withCondition('Status = ACTIVE').get(); if (budgets.totalNumEntities() > 1) { while (budgets.hasNext()) { var budget = budgets.next(); if (budget.getSpendingLimit() !== null ) { var startDate = timeFormat(budget.getStartDateTime()); Logger.log(budget.getStartDateTime()) var stats = AdsApp.currentAccount().getStatsFor(startDate, today()).getCost().toFixed(2); var lastMonth = AdsApp.currentAccount().getStatsFor('LAST_MONTH').getCost().toFixed(2); var thisMonth = AdsApp.currentAccount().getStatsFor('THIS_MONTH').getCost().toFixed(2); var yesterday = AdsApp.currentAccount().getStatsFor('YESTERDAY').getCost().toFixed(2); var limit = budget.getSpendingLimit(); var balance = budgetData(); var last7DayCost = (AdsApp.currentAccount().getStatsFor("LAST_7_DAYS").getCost() / 7).toFixed(2); var remainingDays = (balance/last7DayCost).toFixed(0); var row = [account, balance, last7DayCost, yesterday, remainingDays, lastMonth, thisMonth, today()]; } } } else { try { var budget = budgets.next(); var startDate = timeFormat(budget.getStartDateTime()); var stats = AdsApp.currentAccount().getStatsFor(startDate, today()).getCost(); var limit = budget.getSpendingLimit(); var last7DayCost = (AdsApp.currentAccount().getStatsFor("LAST_7_DAYS").getCost() / 7).toFixed(2); var lastMonth = AdsApp.currentAccount().getStatsFor('LAST_MONTH').getCost().toFixed(2); var thisMonth = AdsApp.currentAccount().getStatsFor('THIS_MONTH').getCost().toFixed(2); var yesterday = AdsApp.currentAccount().getStatsFor('YESTERDAY').getCost().toFixed(2); var balance = budgetData(); var last7DayCost = (AdsApp.currentAccount().getStatsFor("LAST_7_DAYS").getCost() / 7).toFixed(2); var remainingDays = (balance/last7DayCost).toFixed(); var row = [account, balance, last7DayCost, yesterday, remainingDays, lastMonth, thisMonth, today()]; } catch (e) { Logger.log(e); } } //console.log(row) var text = row[0] + "\nЗалишок складає: " + row[1] + "\n" + "Днів до 0: " + row[4] + "\n" + "Середні витрати за 7 днів: " + row[2] + "\n" + "Витрати за вчора: " + row[3] + "\n" + "Витрати за поточний місяць: " + row[6] + "\n" + "Витрати за минулий місяць: " + row[5]; var entities = [{"offset":0,"length":row[0].length,"type":"bold"}] for (var i in chatIds) { try{ sendTelegramMessage(text, chatIds[i], entities, TOKEN) } catch (e) { console.log(chatIds[i]) console.log(e.message) } } } function sendTelegramMessage(text, chatId, entities, token) { if(chatId && token !== "") { var telegramUrl = 'https://api.telegram.org/bot'+token+'/sendMessage'; var message = encodeURIComponent(text); var sendMessageUrl = telegramUrl; var payload = { text : text, chat_id : chatId, entities : entities } var options = { method: 'POST', contentType: 'application/json', payload : JSON.stringify(payload) }; UrlFetchApp.fetch(sendMessageUrl, options); } } function budgetData() { var q = "SELECT customer.descriptive_name, account_budget.adjusted_spending_limit_micros, account_budget.adjusted_spending_limit_type, account_budget.approved_spending_limit_micros, account_budget.approved_spending_limit_type, account_budget.pending_proposal.spending_limit_micros, account_budget.pending_proposal.spending_limit_type, account_budget.proposed_spending_limit_micros, account_budget.proposed_spending_limit_type, billing_setup.end_date_time, billing_setup.end_time_type, billing_setup.id, billing_setup.status, billing_setup.start_date_time, account_budget.amount_served_micros, account_budget.approved_end_date_time, account_budget.approved_end_time_type, account_budget.total_adjustments_micros, account_budget.name, account_budget.id, account_budget.status FROM account_budget"; var report = AdsApp.search(q); while(report.hasNext()) { var r = report.next(); Logger.log(r); var c = r.customer.descriptiveName; var amountServedMicros = r.accountBudget.amountServedMicros/1000000 var adjustedSpendingLimitMicros = r.accountBudget.adjustedSpendingLimitMicros/1000000; var approvedSpendingLimitMicros = r.accountBudget.approvedSpendingLimitMicros/1000000; var proposedSpendingLimitMicros = r.accountBudget.proposedSpendingLimitMicros/1000000; var balance = (adjustedSpendingLimitMicros - amountServedMicros) } return balance.toFixed(2); } function today() { var date = new Date(); var timeZone = AdsApp.currentAccount().getTimeZone(); var format = 'yyyyMMdd'; return Utilities.formatDate(date, timeZone, format); } function timeFormat (date) { var year = date.year.toString(); var month = date.month.toString(); var day = date.day.toString(); if (month.length == 1) { month = "0" + month; } if (day.length == 1) { day = "0" + day; } return [year, month, day].join(""); } function dayToPay(limit, fullCost, last7dayCost) { var remainingDays = ((limit - fullCost)/last7dayCost).toFixed(0); if (remainingDays < 1 || remainingDays == "Infinity" || remainingDays == "-Infinity" || remainingDays == -0 ) { remainingDays = 0; } return remainingDays; }
ChatGPT

Данный код представляет собой скрипт для Google Ads, который выполняет следующие действия:

  1. В функции main() происходит инициализация переменных и получение активных бюджетных заказов (budgetOrders) с помощью метода AdsApp.budgetOrders().withCondition('Status = ACTIVE').get(). Если количество бюджетных заказов больше 1, то выполняется цикл while, в котором для каждого бюджетного заказа из списка происходит следующее:

    • Проверяется наличие ограничения расходов (spendingLimit) для данного бюджетного заказа с помощью условия budget.getSpendingLimit() !== null.
    • Получается дата начала (startDate) бюджетного заказа с помощью функции timeFormat(budget.getStartDateTime()).
    • Получается статистика затрат для указанного периода времени с помощью метода AdsApp.currentAccount().getStatsFor(startDate, today()).getCost().toFixed(2).
    • Получаются значения статистики за последний месяц (LAST_MONTH), текущий месяц (THIS_MONTH), вчера (YESTERDAY) с помощью методов AdsApp.currentAccount().getStatsFor('LAST_MONTH').getCost().toFixed(2), AdsApp.currentAccount().getStatsFor('THIS_MONTH').getCost().toFixed(2), AdsApp.currentAccount().getStatsFor('YESTERDAY').getCost().toFixed(2).
    • Получаются значения ограничения расходов (spendingLimit) и баланса (balance) для бюджетного заказа.
    • Рассчитывается средний расход за последние 7 дней (last7DayCost) путем деления статистики затрат за последние 7 дней на 7 и округления результата до 2 десятичных знаков.
    • Рассчитывается оставшееся количество дней до исчерпания бюджета (remainingDays) путем деления баланса на средний расход за последние 7 дней и округления результата до целого числа.
    • Формируется массив row со значениями аккаунта (account), баланса (balance), среднего расхода за последние 7 дней (last7DayCost), затрат за вчера (yesterday), оставшихся дней (remainingDays), затрат за последний месяц (lastMonth), затрат за текущий месяц (thisMonth), текущей даты (today()).
  2. Если количество бюджетных заказов равно 1, то выполняется блок else, в котором для единственного бюджетного заказа из списка происходит следующее:

    • Получается дата начала (startDate) бюджетного заказа с помощью функции timeFormat(budget.getStartDateTime()).
    • Получается статистика затрат для указанного периода времени с помощью метода AdsApp.currentAccount().getStatsFor(startDate, today()).getCost().
    • Получаются значения ограничения расходов (spendingLimit), среднего расхода за последние 7 дней (last7DayCost), затрат за последний месяц (lastMonth), затрат за текущий месяц (thisMonth), затрат за вчера (yesterday), баланса (balance) для бюджетного заказа.
    • Рассчитывается оставшееся количество дней до исчерпания бюджета (remainingDays) путем деления баланса на средний расход за последние 7 дней и округления результата до целого числа.
    • Формируется массив row со значениями аккаунта (account), баланса (balance), среднего расхода за последние 7 дней (last7DayCost), затрат за вчера (yesterday), оставшихся дней (remainingDays), затрат за последний месяц (lastMonth), затрат за текущий месяц (thisMonth), текущей даты (today()).
  3. Формируется текстовое сообщение (text), которое содержит информацию о бюджете и статистике затрат.

  4. Инициализируется массив entities с информацией о форматировании текста (в данном случае делается аккаунт жирным).

  5. Выполняется цикл for, в котором для каждого chatId из списка chatIds выполняется вызов функции sendTelegramMessage(), передавая ей текст сообщения, chatId, entities и TOKEN (токен для доступа к Telegram API). Если происходит ошибка, она логируется в консоль.

  6. Функция sendTelegramMessage() отправляет сообщение в Telegram с использованием Telegram API и переданных параметров text, chatId, entities и token.

  7. Функция budgetData() выполняет запрос к базе данных Google Ads и получает информацию о бюджете, в том числе о текущем балансе (balance), и возвращает его.

  8. Функция today() возвращает текущую дату в формате "yyyyMMdd".

  9. Функция timeFormat(date) форматирует переданную дату в формат "yyyyMMdd" и возвращает строку с отформатированной датой.

  10. Функция dayToPay(limit, fullCost, last7dayCost) рассчитывает оставшееся количество дней до исчерпания бюджета (limit) на основе общих затрат (fullCost) и сред

А теперь можешь объяснить так, как бы объяснял человеку не понимающему в работе скриптов?
ChatGPT

Конечно! Данный скрипт предназначен для работы с рекламными кампаниями в Google Ads. Он помогает отслеживать и контролировать расходы на рекламу и отправлять информацию о них в Telegram.

Вот как работает этот скрипт шаг за шагом:

  1. Сначала мы инициализируем несколько переменных, таких как account (имя аккаунта), timeZone (часовой пояс аккаунта) и format (формат даты).

  2. Затем мы получаем список активных бюджетных заказов (budgetOrders).

  3. Если в списке более одного бюджетного заказа, мы выполняем цикл while, который проходит по каждому бюджетному заказу и собирает информацию о его статистике затрат и ограничении расходов.

  4. Если у бюджетного заказа есть ограничение расходов, мы получаем статистику затрат для определенного периода времени, такого как вчера, последний месяц и текущий месяц. Мы также рассчитываем средний расход за последние 7 дней и оставшееся количество дней до исчерпания бюджета.

  5. Если в списке только один бюджетный заказ, мы выполняем те же действия, что и в предыдущем пункте, но без цикла.

  6. Затем мы формируем текстовое сообщение, которое содержит информацию о бюджете и статистике затрат.

  7. Мы отправляем это сообщение в Telegram, используя функцию sendTelegramMessage().

  8. Функция sendTelegramMessage() отправляет сообщение в Telegram с помощью Telegram API, используя переданные ей параметры.

  9. Функция budgetData() выполняет запрос к базе данных Google Ads и получает информацию о бюджете и текущем балансе.

  10. Функция today() возвращает текущую дату в нужном формате.

  11. Функция timeFormat(date) форматирует переданную дату в нужный формат.

  12. Функция dayToPay(limit, fullCost, last7dayCost) рассчитывает оставшееся количество дней до исчерпания бюджета на основе общих затрат и среднего расхода за последние 7 дней.

В итоге, данный скрипт помогает контролировать бюджеты рекламных кампаний в Google Ads и отправляет информацию о статистике затрат в Telegram для удобного отслеживания и управления рекламными расходами.

Как в этом скрипте расчитывается остаток на аккаунте?
ChatGPT

Остаток на аккаунте рассчитывается в функции budgetData(). Давайте рассмотрим эту функцию подробнее.

javascript
function budgetData() { var q = "SELECT customer.descriptive_name, account_budget.adjusted_spending_limit_micros, account_budget.adjusted_spending_limit_type, account_budget.approved_spending_limit_micros, account_budget.approved_spending_limit_type, account_budget.pending_proposal.spending_limit_micros, account_budget.pending_proposal.spending_limit_type, account_budget.proposed_spending_limit_micros, account_budget.proposed_spending_limit_type, billing_setup.end_date_time, billing_setup.end_time_type, billing_setup.id, billing_setup.status, billing_setup.start_date_time, account_budget.amount_served_micros, account_budget.approved_end_date_time, account_budget.approved_end_time_type, account_budget.total_adjustments_micros, account_budget.name, account_budget.id, account_budget.status FROM account_budget"; var report = AdsApp.search(q); while(report.hasNext()) { var r = report.next(); var amountServedMicros = r.accountBudget.amountServedMicros / 1000000; var adjustedSpendingLimitMicros = r.accountBudget.adjustedSpendingLimitMicros / 1000000; var balance = (adjustedSpendingLimitMicros - amountServedMicros); } return balance.toFixed(2); }

В этой функции мы выполняем запрос к базе данных Google Ads с использованием языка запросов SQL. Запрос выбирает несколько полей, включая adjusted_spending_limit_micros (скорректированный лимит расходов) и amount_served_micros (сумма затрат).

Затем мы получаем результат запроса в переменной report.

Далее, с помощью цикла while, мы проходим по каждой записи в результате запроса и получаем значения amountServedMicros и adjustedSpendingLimitMicros. Затем мы рассчитываем остаток на аккаунте, вычитая сумму затрат (amountServedMicros) из скорректированного лимита расходов (adjustedSpendingLimitMicros). Результат сохраняется в переменной balance.

Наконец, мы возвращаем остаток на аккаунте, округленный до двух десятичных знаков, с помощью метода toFixed(2).

Таким образом, функция budgetData() выполняет запрос к базе данных Google Ads, получает информацию о скорректированном лимите расходов и сумме затрат, и рассчитывает остаток на аккаунте путем вычитания суммы затрат из лимита расходов. Этот остаток возвращается и используется в основной части скрипта для дальнейших расчетов и формирования сообщений.

Continue this conversation
|Terms of use|Privacy policy