#5 Gestión de errores y buenas prácticas – Google ADS Scripts

Accede a la lección en vídeo de la membresía. Cada martes, jueves y sábado aprende con una clase nueva. Puedes identificarte en este enlace o suscribirte a los cursos.

SUSCRIBIRME POR 15€ / MES

Contenido de la clase

(Recordar que este contenido es la escaleta del vídeo)

Manejo de errores con try/catch:

try {

  // Código que puede fallar

} catch (e) {

  Logger.log(«Error detectado: » + e);

}

  • Uso de Logger.log():
    Fundamental para revisar qué está haciendo el script paso a paso.
  • try { … }:

El bloque try contiene el código que puede generar un error. En este caso, se pone el código que se espera pueda fallar, para que no se detenga el programa si ocurre un problema.

  • catch (e) { … }:
    • Si se produce un error dentro del bloque try, el control se transfiere al bloque catch.
  • El catch recibe un parámetro e, que representa el error que ocurrió. e puede ser cualquier objeto de error que se genera cuando algo va mal en el bloque try.

Logger.log(«Error detectado: » + e);:

  • Dentro del bloque catch, se usa la función Logger.log() para registrar el error que ocurrió.
  • e contiene el error que ocurrió, y el mensaje de error se muestra en el log con el texto «Error detectado: [mensaje del error]».

Límites y recomendaciones:

  • Google Ads Scripts, hay límites automáticos definidos por Google (como el tiempo máximo de ejecución o el número de operaciones permitidas), pero tú no puedes cambiarlos directamente. Sin embargo, sí puedes manejar esos límites para evitar errores o caídas a mitad del proceso, con buenas prácticas.
LímiteValor
Tiempo máximo de ejecución30 minutos
Máximo de operaciones50.000 llamadas

1. ⏰ Controlar el tiempo de ejecución

Puedes registrar el tiempo al inicio y parar el script antes de llegar al límite:

var startTime = new Date();

Ejemplo:

var startTime = new Date();

function main() {

  var campaignIterator = AdsApp.campaigns().get();

  while (campaignIterator.hasNext()) {

    var now = new Date();

    var elapsedSeconds = (now – startTime) / 1000;

    if (elapsedSeconds > 1700) { // Cortamos antes de los 1800 segundos

      Logger.log(«⏱ Tiempo límite alcanzado. Saliendo del script.»);

      break;

    }

    var campaign = campaignIterator.next();

    // Tu lógica aquí…

  }

}

2. 📊 Controlar el número de operaciones

Puedes usar un contador:

var operationCount = 0;

var MAX_OPERATIONS = 49000; // Un poco menos del límite

function main() {

  var campaignIterator = AdsApp.campaigns().get();

  while (campaignIterator.hasNext()) {

    if (operationCount >= MAX_OPERATIONS) {

      Logger.log(«⚠️ Límite de operaciones alcanzado.»);

      break;

    }

    var campaign = campaignIterator.next();

    campaign.pause(); // Esta es una operación

    operationCount++;

  }

}

  • Recomendaciones de seguridad:
    • Testea siempre en una cuenta de prueba.
    • Usa etiquetas para filtrar solo las campañas que quieres afectar.

🟠 Script de Test: Manejo de Errores y Buenas Prácticas en Google Ads 

function main() {

  Logger.log(«🚀 Inicio del script de prueba de errores»);

  try {

    Logger.log(«🔎 Buscando campañas activas…»);  

    // Simulamos obtener las campañas activas

    var campaigns = AdsApp.campaigns()

      .withCondition(«Status = ‘ENABLED'»)

      .get();

    if (!campaigns.hasNext()) {

      Logger.log(«⚠️ No hay campañas activas.»);

      return; // Sale del script si no hay campañas

    }

    Logger.log(«✅ Campañas activas encontradas, comenzando revisión…»);

    // Recorremos las campañas activas

    while (campaigns.hasNext()) {

      var campaign = campaigns.next();

      var campaignName = campaign.getName();

  Logger.log(«🔧 Revisando campaña: » + campaignName);

      // 🟥 Simulamos un posible error:

      // Si la campaña se llama «Error Test», forzamos un fallo para probar el catch:

      if (campaignName === «Error Test») {

        throw «Simulando error en la campaña: » + campaignName;

      }

      // Aquí podrías poner más lógica si quisieras (pausar, cambiar presupuesto, etc.)

    }

    Logger.log(«✅ Revisión de campañas completada sin errores.»);

  } catch (e) {

    Logger.log(«❌ Error detectado: » + e);

  }

  Logger.log(«🏁 Fin del script de prueba.»);

}

📌 ¿Cómo funciona este script?

  1. Empieza mostrando mensajes con Logger.log() para seguir el flujo del script.
  2. Usa try { … } catch (e) { … } para atrapar cualquier error que ocurra.
  3. Simula un error si encuentra una campaña con el nombre «Error Test» para probar que el manejo de errores funciona.
  4. Si ocurre un error, lo escribe claramente en el log: ❌ Error detectado: ….
  5. Si no hay campañas activas, también lo informa y sale del script de forma segura.

🟢 ¿Cómo probarlo sin riesgos?

  • Crea una campaña en tu cuenta de prueba que se llame «Error Test».
  • Lanza el script con la opción de «Vista previa» (sin ejecutarlo de verdad).
  • Observa cómo el error es capturado y reportado en el log.

🔒 Buenas prácticas incluidas en este script:

Práctica¿Por qué es importante?
try/catchEvita que el script se bloquee por errores
Logger.log() paso a pasoTe ayuda a entender en qué punto falla
Salida anticipada (return)No ejecuta acciones si no hay campañas
Simulación controlada de errorPermite probar el manejo de errores sin riesgos

Objetivo de la clase

Evitar errores graves y aprender a depurar los scripts.

📌 Ejercicio:

🟢 Dividir dos números y manejar el error de división por cero

  1. Objetivo: Vamos a crear un script que intente dividir dos números. Si ocurre un error (por ejemplo, si tratamos de dividir entre cero), se manejará el error usando try/catch y se registrará el error con Logger.log().
  2. Deberás usar la function dividirNumeros () { 
  3. Te pego el inicio de código y desarrolla el try { solo tienes que cambiar las xxxxxxxxxxx

function dividirNumeros() {

  var numerador = 10;  // Número a dividir

  var divisor = 0;     // Intentamos dividir por cero

try {

    // Intentamos realizar la división

    var resultado = xxxxxxxxxxx / xxxxxxxxxxx;

    // Si el divisor es 0, lanzamos un error

    if (divisor === xxxxxxxxxxx) {

      throw new Error(«No se puede dividir entre cero.»);

    }

    Logger.log(«Resultado de la división: » + resultado);

  } catch (e) {

    // Si ocurre un error, mostramos el mensaje de error

    Logger.log(«Error detectado: » + e.message);

  }

}

✅SOLUCIÓN

function dividirNumeros() {

  var numerador = 10;  // Número a dividir

  var divisor = 0;     // Intentamos dividir por cero

  try {

    // Intentamos realizar la división

    var resultado = numerador / divisor;

    // Si el divisor es 0, lanzamos un error

    if (divisor === 0) {

      throw new Error(«No se puede dividir entre cero.»);

    }

    Logger.log(«Resultado de la división: » + resultado);

  } catch (e) {

    // Si ocurre un error, mostramos el mensaje de error

    Logger.log(«Error detectado: » + e.message);

  }

}

Explicación:

  1. Bloque try:
    • Se intenta realizar la división de numerador entre divisor.
    • Si el divisor es 0, lanzamos un error con throw new Error().
  2. Bloque catch:
    • Si ocurre un error (en este caso, la división por cero), el mensaje de error se captura y se muestra en los registros con Logger.log().

¿Qué verás en los registros?

Como estamos dividiendo entre cero, el mensaje que aparecerá será:

Error detectado: No se puede dividir entre cero.

Siguientes cursos

¿Dudas? Te leemos

Si necesitas mas ayuda escríbenos en el apartado de soporte. Y te ayudaremos encantados :)

¿Quieres comentar este post?

Regístrate gratis o inicia sesión para poder comentar

Iniciar Sesión

¿Has olvidado tu contraseña?

Registrarse

Restablecer Contraseña

Volver al login