Script con notifica Telegram se l'account è offline
Un account Google Ads che smette di girare è un problema silenzioso. Ho adattato uno script che manda una notifica Telegram gratuita appena le impression si azzerano.
Come faccio a sapere se le campagne si sono fermate?
Uno degli scenari peggiori nella gestione di account Google Ads è scoprire — magari dopo giorni — che le campagne si erano fermate per un problema di pagamento o un annuncio rifiutato.
Per anni ho usato uno script di Frederick Vallaeys che invia un'email se l'account non genera impression nelle ultime 12 ore. Funziona, ma l'email è facile da perdere.
Poi ho scoperto uno script di Nils Roijmans che mandava notifiche su WhatsApp — molto più immediato. Problema: le API di WhatsApp sono a pagamento.
Perché Telegram e non una email o WhatsApp
Ho chiesto aiuto a GPT per adattare lo script su Telegram, che è completamente gratuito. Il bot manda un messaggio diretto non appena l'account smette di generare impression.
Lo script è configurabile:
- Controlla le impression delle ultime X ore (default: 12)
- Puoi estenderlo per monitorare anche le conversioni, non solo le impression
- Funziona con qualsiasi account Google Ads tramite Google Apps Script
Come si configura, in dieci minuti
Ci vogliono circa 10 minuti. Non servono competenze di programmazione.
1. Crea un bot Telegram
Apri Telegram, cerca @BotFather e invia /newbot. Segui le istruzioni e prendi nota del BOT_TOKEN che ti verrà fornito.
2. Recupera il tuo CHAT_ID
Invia un messaggio al bot, poi apri questa URL nel browser (sostituendo {BOT_TOKEN} con il tuo token):
https://api.telegram.org/bot{BOT_TOKEN}/getUpdates
Il CHAT_ID è nel campo "id" all'interno di "chat".
3. Configura lo script
Incolla il BOT_TOKEN e il CHAT_ID nelle variabili dello script, poi caricalo in Google Ads tramite Strumenti → Script.
4. Imposta la pianificazione
Configura lo script per girare ogni ora. Con 12 ore come finestra di controllo, l'avviso arriva entro un'ora da quando l'account si ferma.
Il codice dello script
var TELEGRAM_BOT_TOKEN = "INSERT_YOUR_BOT_TOKEN"; // Insert your Telegram bot token
var TELEGRAM_CHAT_ID = "INSERT_YOUR_CHAT_ID"; // Insert your chat ID to receive notifications
var NUM_HOURS_TO_CHECK = 12;
var METRIC_TO_CHECK = "Impressions";
var DEBUG = 1; // Set to 1 to enable debug logs
Date.prototype.yyyymmdd = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString();
var dd = this.getDate().toString();
return yyyy + (mm[1] ? mm : "0" + mm[0]) + (dd[1] ? dd : "0" + dd[0]);
};
function getDateRangeYesterdayToToday() {
var currentDate = new Date();
var tempDate = new Date();
tempDate.setDate(tempDate.getDate() - 1);
var yesterdayDate = tempDate;
return yesterdayDate.yyyymmdd() + "," + currentDate.yyyymmdd();
}
function sendTelegramMessage(chatId, message) {
var url = "https://api.telegram.org/bot" + TELEGRAM_BOT_TOKEN + "/sendMessage";
var payload = {
chat_id: chatId,
text: message,
parse_mode: "HTML"
};
var options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, options);
if (DEBUG) Logger.log("Telegram Response: " + response.getContentText());
}
function main() {
var dateRange = getDateRangeYesterdayToToday();
var currentDate = new Date();
Logger.log("Date Range: " + dateRange);
// Generate the query to fetch performance data
var queryText =
"SELECT " +
METRIC_TO_CHECK +
", DayOfWeek, HourOfDay FROM ACCOUNT_PERFORMANCE_REPORT DURING " +
dateRange;
Logger.log("Query Text: " + queryText);
var result = AdWordsApp.report(queryText);
var rows = result.rows();
var daysMapping = [];
daysMapping["Sunday"] = 0;
daysMapping["Monday"] = 1;
daysMapping["Tuesday"] = 2;
daysMapping["Wednesday"] = 3;
daysMapping["Thursday"] = 4;
daysMapping["Friday"] = 5;
daysMapping["Saturday"] = 6;
var impressionsByHour = {};
// Read data from the report
while (rows.hasNext()) {
var currentRow = rows.next();
var dayFactor = daysMapping[currentRow["DayOfWeek"]];
var hourFactor = parseInt(currentRow["HourOfDay"], 10);
var actualHour = dayFactor * 24 + hourFactor;
impressionsByHour[actualHour] = parseInt(currentRow[METRIC_TO_CHECK], 10) || 0;
if (DEBUG) {
Logger.log(
"Day: " +
currentRow["DayOfWeek"] +
", Hour: " +
currentRow["HourOfDay"] +
", " +
METRIC_TO_CHECK +
": " +
currentRow[METRIC_TO_CHECK]
);
}
}
Logger.log("ImpressionsByHour: " + JSON.stringify(impressionsByHour));
// Check activity in the last NUM_HOURS_TO_CHECK hours
var foundEntry = false;
var numHoursToCheck = NUM_HOURS_TO_CHECK + 1;
for (var i = 1; i < numHoursToCheck; i++) {
var tempDate = new Date(currentDate.getTime());
tempDate.setHours(tempDate.getHours() - i);
var hourIndexToCheck = tempDate.getDay() * 24 + tempDate.getHours();
var impressions = impressionsByHour[hourIndexToCheck] || 0;
if (DEBUG) {
Logger.log(
"Checking HourIndex: " +
hourIndexToCheck +
", Impressions: " +
impressions
);
}
if (impressions > 0) {
foundEntry = true;
break;
}
}
if (foundEntry) {
Logger.log(
"All good! The account seems to be active in the last " +
NUM_HOURS_TO_CHECK +
" hours."
);
} else {
var message =
"⚠️ <b>Warning</b>: The Google Ads account <b>" +
AdWordsApp.currentAccount().getName() +
"</b> (ID: " +
AdWordsApp.currentAccount().getCustomerId() +
") has not received any impressions in the last " +
NUM_HOURS_TO_CHECK +
" hours. Please check the payment methods!";
sendTelegramMessage(TELEGRAM_CHAT_ID, message);
Logger.log(
"WARNING: The account has been inactive for the last " +
NUM_HOURS_TO_CHECK +
" hours."
);
}
}
Scrivimi se hai bisogno di aiuto nella configurazione. Nel frattempo puoi vedere tutti i miei script per Google Ads.
Domande frequenti
Come faccio a sapere se le campagne Google Ads si sono fermate?
Con uno script che controlla le impression delle ultime ore e ti manda un messaggio su Telegram appena l'account smette di generarne. Lo scenario peggiore è scoprire dopo giorni che le campagne erano ferme per un problema di pagamento o un annuncio rifiutato.
Perché Telegram e non una email?
Perché l'email si perde. Per anni ho usato lo script di Frederick Vallaeys che manda un alert via mail: funziona, ma finisce nel mucchio. Telegram arriva come messaggio diretto.
E perché non WhatsApp?
Esiste uno script di Nils Rooijmans che lo fa, ma le API di WhatsApp sono a pagamento. Telegram è completamente gratuito.
Serve saper programmare per configurarlo?
No, e servono circa dieci minuti: creare il bot con BotFather, recuperare il chat ID e incollare le due variabili nello script.
Ogni quanto controlla l'account?
Di default guarda le impression delle ultime 12 ore, ma la finestra è configurabile. Si può estendere il controllo anche alle conversioni, non solo alle impression.