Mostrando entradas con la etiqueta trigger scripts. Mostrar todas las entradas
Mostrando entradas con la etiqueta trigger scripts. Mostrar todas las entradas

Como enviar un email diario con Google Apps Script


 Seguro que en algún momento has necesitado que un correo se enviara cada día a cierta hora: un recordatorio, una lista de tareas, etc... Con Google Apps Script esto es terriblemente fácil.

Todo lo que os explicaré hoy no es más que un recordatorio de otros artículos que ya he ido publicando.  Básicamente usaremos como enviar una plantilla HTML por email y como crear triggers con Google Apps Script.

Que es lo que haremos? Algo sencillo, cada día, a las 8 de la mañana enviaremos un correo con la información que tendremos  en un spreadsheet. Fácil no?

En este ejemplo , la tabla de donde sacaremos la información a mostrar en el correo tendrá esta forma: 

Como enviar un correo cada dia con Google Apps Script


Aquí tenéis el código:

Code.gs

function CrearTriggerDiario()
{
    ScriptApp.newTrigger("SendEmail")
      .timeBased()
      .atHour(8)
      .everyDays(1)
      .create();
}

function SendEmail()
{
    var values = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues();
    
    var output = HtmlService.createTemplateFromFile('index');
    output.Tarea  = values[1][0];
    output.Horas   = values[1][1] ;       
    output.Who     = values[1][2] ;
    var html = output.evaluate().getContent();
    
    MailApp.sendEmail({
      to: 'balbalbalblab@tucorrreo.com',
      subject: "Recordatorio de tareas",
      htmlBody: html
    });
}


index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1>
        Tareas
    </h1>
     <p> <?= Tarea ?> </p>
     <p> <?= Horas ?> horas </p>
     <p> <?= Who ?> </p>
  </body>
</html>


Para instalar el trigger solo tenéis que ejecutar la función CrearTriggerDiario ( cuidado que cada vez que lo ejecutéis se instalará otro trigger ). 


Como crear triggers con Google Apps Script


A medida que avanzamos en nuestros proyectos con Google Apps Script acabamos siempre con la necesidad de instalar triggers. Generalmente si son para uno mismo se setean los triggers a mano, pero, si estas vendiendo tu código lo mejor es que hagas una función para instalar triggers con Google Apps Script.

Triggers instalados con Google Apps Script


De esta manera, tu cliente sabe que solo debe ejecutar una función y tendrá todo el sistema seteado ( y tu te quitaras muchos dolores de cabeza explicandole como se hace para poner un trigger :) )

Hacer un instalador de triggers, aunque sea poco código ya es materia avanzada, así que ante cualquier duda, no vaciléis en preguntar.

No os pongo todos los triggers por que hay bastantes, pero si lo más usuales. No hace falta mucha explicación por que el nombre de las funciones lo dice todo.

1.Basados en tiempo
function CrearTriggerCiclico()
{
    ScriptApp.newTrigger('FuncionAEjecutar')
      .timeBased()
      .everyMinutes(5)
      .create();
}

function CrearTriggerDiario()
{
    ScriptApp.newTrigger("FuncionAEjecutar")
      .timeBased()
      .atHour(5)
      .everyDays(1)
      .create();
}
 
function CrearTriggerSemanal()
{
    ScriptApp.newTrigger('FuncionAEjecutar')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.SUNDAY)
      .atHour(12)
      .create();
}

function CrearTriggerMensual()
{
   ScriptApp.newTrigger("FuncionAEjecutar")
     .timeBased()
     .onMonthDay(1)
     .create();
}


2. Basados en formulario
function CrearTriggerFormulario()
{
    var form = FormApp.openById('id_del_formulario');
    ScriptApp.newTrigger('FuncionAEjecutar')
      .forForm(form)
      .onFormSubmit()
      .create();
}

Si os va mal tener el identificador del formulario y preferís usar los triggers con el identificador del spreadsheet se puede hacer exactamente lo mismo pero por otro camino.
function CrearTriggerFormulario()
{
   var sheet = SpreadsheetApp.getActive();
   ScriptApp.newTrigger("FuncionAEjecutar")
     .forSpreadsheet(sheet)
     .onFormSubmit()
     .create();
}

function CrearTriggerFormularioAlEditar()
{
    var form = FormApp.openById('id_del_formulario');
    ScriptApp.newTrigger('FuncionAEjecutar')
      .forForm(form)
      .onOpen()
      .create();
}

3. Basados en calendario
function CrearTriggerCalendario()
{
  ScriptApp.newTrigger('FuncionAEjecutar')
    .forUserCalendar(Session.getActiveUser().getEmail())
    .onEventUpdated()
    .create();
}

4. Basdados en cambios externos al spreadsheet ( APIs )
function CrearTriggerOnChange()
{
    var sheet = SpreadsheetApp.getActive();
    ScriptApp.newTrigger("FuncionAEjecutar")
      .forSpreadsheet(sheet)
      .onChange()
      .create();
}

5. Como eliminar los triggers
function EliminarTriggers()
{
  var allTriggers = ScriptApp.getProjectTriggers();
 
  for (var i = 0; i < allTriggers.length; i++)
  {
     ScriptApp.deleteTrigger(allTriggers[i]);
  }
}

Espero que os sirva, realmente el tema de instalar triggers aunque no es para nada fácil le da una potencia brutal a nuestros Google Apps Scripts.

Espero vuestras dudas y sugerencias

Nos vemos

Tal vez te interese