Las secuencias de comandos de AdWords aumentan con las cargas de archivos masivas

Las secuencias de comandos de AdWords ahora admiten cargas masivas a sus cuentas, y el columnista Russell Savage muestra cómo puede usar esta nueva funcionalidad para crear campañas, modificar cuentas y más.

press de banca-1200x675

Administradores de grandes cuentas de AdWords, ¡regocíjense! Google agregó recientemente la capacidad de realizar cargas masivas mediante secuencias de comandos de AdWords. Esto significa que puede aplicar cambios masivos a su MCC sin tener que escribir la lógica usted mismo o iniciar sesión en cada cuenta que administra. Para obtener más información, consulte AdWords sección de ayuda sobre cargas masivas.

Esto no solo le ahorra tiempo, sino que también resuelve un problema de larga data con los scripts: la creación de campañas. Con la función de carga masiva y una hoja de cálculo simple, puede crear tantas campañas como desee.

Un ejemplo de una hoja de carga masiva para crear campañas

Un ejemplo de una hoja de carga masiva utilizada para crear campañas

Al combinar los scripts de Google Drive y AdWords, podemos crear un sistema sencillo que nos permite aplicar cambios automáticamente a nuestras cuentas mediante archivos CSV.

Si no está utilizando Google Drive en su computadora, ahora sería un buen momento para descargarlo e instalarlo. Los scripts que se muestran aquí seguirán funcionando si no lo hace, pero facilita mucho la apertura y actualización de los archivos CSV en su computadora.

Lo primero que vamos a necesitar es una estructura de carpetas simple que nos ayude a mantener todo en orden. Encuentro que una carpeta raíz específicamente para administrar cargas masivas que contiene subcarpetas para cada cuenta que está administrando funciona bastante bien.

Una estructura de carpetas de ejemplo

Este script creará la siguiente estructura de carpetas en su cuenta de Google Drive

Cuando desee realizar cambios en su cuenta, simplemente coloque la hoja de cálculo en la carpeta «Para procesar» de esa cuenta y la secuencia de comandos la recogerá en la siguiente ejecución, la procesará y la moverá a la carpeta «Procesado».

Podemos escribir un script de nivel de MCC para lograr esto. Comencemos con una función simple que nos ayude a crear carpetas.

// name: The name of the folder to find or create
// folder: The parent folder. Pass null to look in the root folder
function findOrCreateFolder(name,folder) {
  if(!folder) { folder = DriveApp.getRootFolder(); }
  var fileIter = folder.getFoldersByName(name);
  if(fileIter.hasNext()) {
    return fileIter.next();
  } else {
    return folder.createFolder(name);
  }
}

Esta función buscará la carpeta que necesitamos y si no puede encontrarla, la función la creará por nosotros.

Ahora podemos escribir nuestra función principal para crear y monitorear las carpetas en busca de archivos nuevos. Si el script encuentra alguno, cargará los archivos en la cuenta usando la nueva función de carga masiva.

// This is the name of the folder to hold the account data
var ROOT_FOLDER_NAME = 'AdWords Management';
// This folder will hold the bulk uploads we have already processed
var PROCESSED_FOLDER_NAME = 'Processed';
// This folder will hold the bulk uploads we need to process
var TO_PROCESS_FOLDER_NAME = 'To Process';

function main() {
  var accountIter = MccApp.accounts().get();
  var successfulUploads = [];
  while(accountIter.hasNext()) {
    var account = accountIter.next();
    MccApp.select(account);
    
    var rootFolder = findOrCreateFolder(ROOT_FOLDER_NAME,null);
    // The folder name for each account will be in the format  
    var accountFolderName = AdWordsApp.currentAccount().getCustomerId() + 
                      ' ' + AdWordsApp.currentAccount().getName();
    
    // This will create the folder structure we need
    var accountFolder = findOrCreateFolder(accountFolderName,rootFolder);
    var toProcessFolder = findOrCreateFolder(TO_PROCESS_FOLDER_NAME,accountFolder);
    var processedFolder = findOrCreateFolder(PROCESSED_FOLDER_NAME,accountFolder);
    
    // Now we look in the "To Process" folder for any new CSV files
    var filesToProcessIter = toProcessFolder.getFilesByType(MimeType.CSV);
    while(filesToProcessIter.hasNext()) {
      var file = filesToProcessIter.next();
      // Change the following line to use .apply() instead of .preview()
      // once you are satisfied things are working correctly. When using .preview(),
      // you will need to log into your account to apply the change.
      AdWordsApp.bulkUploads().newFileUpload(file).preview();
      // To move a file, we add it to the new folder and remove it from the old one
      processedFolder.addFile(file);
      toProcessFolder.removeFile(file);
      // We record some information here to help us with a notification email.
      successfulUploads.push({customerId:AdWordsApp.currentAccount().getCustomerId(),
                              accountName:AdWordsApp.currentAccount().getName(),
                              filename:file.getName()});
    }
  }
  // Send the notification email
  notifySuccessfulUploads(successfulUploads);
}

Como puede ver, comenzamos iterando a través de todas las cuentas en el MCC, construyendo la estructura de la carpeta (si es una cuenta nueva o si esta es la primera ejecución) y luego llamando a la carga masiva para cargar el archivo en la cuenta. .

Una cosa a tener en cuenta es que en el código anterior, simplemente estoy usando el .avance() para cargar el archivo y generar una vista previa de los cambios en la interfaz de usuario de AdWords. En realidad, esto no hace ningún cambio en la cuenta. Una vez que esté satisfecho de que todo funciona correctamente, puede cambiar a utilizar el .aplicar() función que aplicará automáticamente los cambios a la cuenta.

Otra cosa buena de las cargas masivas es que los cambios se aplican a su cuenta en segundo plano mientras la secuencia de comandos sigue ejecutándose. De acuerdo a esta publicación en los foros, la carga masiva expirará después de dos horas de procesamiento.

Siempre es bueno recibir una notificación cuando se realizan cambios en su cuenta, así que agregué una función para enviar un correo electrónico para notificarme cuando se cargan archivos. El código simplemente se modificó a partir de la notificación de error en la publicación de mi blog sobre la ejecución executeInParallel en más de 50 cuentas.

// These can go at the top of the script with the other global variables
var SCRIPT_NAME = 'Bulk Uploader';
var TIMEZONE = 'PST';
var TODAY_STR = Utilities.formatDate(new Date(), TIMEZONE, 'yyyy-MM-dd');
var NOTIFY = ['your_email@example.com'];

// successfulUploads should be an array of objects containing
// [{customerId:'',accountName:'',filename:''},...]
function notifySuccessfulUploads(successfulUploads) {
  if(!successfulUploads || successfulUploads.length == 0) { return; }
  if(typeof NOTIFY == 'undefined') { throw 'NOTIFY is not defined.'; }
  var subject = SCRIPT_NAME+' - Successful Uploads - '+TODAY_STR;
   
  var htmlBody = 'The following files were uploaded to your accounts.<br / >';
  htmlBody += 'Log in to AdWords: http://goo.gl/7mS6A';
  var body = htmlBody;
  htmlBody += '<br / ><br / >';
  htmlBody += '<table border="1" width="95%" style="border-collapse:collapse;">' +
              '<tr><td>Account Id</td><td>Account Name</td><td>Filename</td></tr>';
  for(var i in successfulUploads) {
    htmlBody += '<tr><td>'+ successfulUploads[i].customerId +
      '</td><td>' + successfulUploads[i].accountName +
      '</td><td>' + successfulUploads[i].filename + '</td></tr>';
  }
  htmlBody += '</table>';
  var options = { htmlBody : htmlBody };
  for(var i in NOTIFY) {
    Logger.log('Sending email to: '+NOTIFY[i]+' with subject: '+subject);
    MailApp.sendEmail(NOTIFY[i], subject, body, options);
  }
}

Y eso lo hace. Cuando reunimos todo y programamos el script para que se ejecute cada hora, deberíamos tener la capacidad de colocar hojas de cálculo de carga masiva en la carpeta «Para procesar» y hacer que los cambios se apliquen automáticamente a nuestra cuenta.

Esto simplemente raspa la superficie de lo que puede hacer con esta nueva función. Una de las otras características interesantes es la capacidad de cargar datos de conversión sin conexión. También puede duplicar fácilmente una cuenta completa y orientar sus anuncios a una ubicación diferente.

Las cargas masivas de archivos también lo ayudarán a evitar errores de tiempo de espera en muchos de sus scripts porque se procesan en segundo plano y tienen diferentes tiempos de espera. ¿Qué otras automatizaciones se le ocurren con la nueva función de carga masiva?

Una última nota: Cualquiera que asista SMX Múnich el 17 de marzo y si está interesado en una capacitación práctica con scripts, debe saber que estaré ejecutando un taller además de hablar en la conferencia, y me encantaría que me acompañaras. En el taller, aprenderemos cómo crear scripts de AdWords desde cero, escribiendo todo el código usted mismo. También tendremos tiempo para depurar cualquier problema que tenga en sus scripts existentes. Te animo a que te registres si estás interesado.


Las opiniones expresadas en este artículo pertenecen al autor invitado y no necesariamente a El Blog informatico. Los autores del personal se enumeran aquí.


Deja un comentario