No hace mucho , un lector del blog ( Bruno ) nos propuso un proyecto interesante. Que hiciéramos un script de google apps que leyera ciertos correos y los grabara como pdfs dentro de drive, organizados por fecha.
Aquí tenéis todo el código que hace lo que se pide.
function onOpen() { var ui = SpreadsheetApp.getUi(); var rrhh = ui.createMenu('Organizador de emails') .addItem('Work', 'EmailOrganizer') .addToUi(); } function NextRow(sheet,id) { var cont = 1; while(true) { var range = sheet.getRange(cont,2); if(range.isBlank()) return cont; if( range.getValue() == id ) return 0; cont++; } } function CreateLog(project,email) { var spread = SpreadsheetApp.create("temp"); var sheet = spread.getActiveSheet(); var messages = email.getMessages(); for( var m = 0 ; m < messages.length ; m++ ) { var message = messages[m]; sheet.getRange(m+1, 1).setValue(message.getBody()); var attachments = message.getAttachments(); for( var a = 0 ; a < attachments.length ; a++ ) { var attachment = attachments[a]; sheet.getRange(m+1, a+2).setValue(attachment.getDataAsString()); } } sheet.autoResizeColumn(1); var other = spread.copy("other"); //Hacemos una copia del fichero solo para que forzar a que se asiente la información. Sino ,no le da a tiempo a actualizar la info antes de crear el pdf var newFile = DriveApp.createFile( spread.getAs('application/pdf')); newFile.setName(email.getLastMessageDate()); DriveApp.getFileById(spread.getId()).setTrashed(true); DriveApp.getFileById(other.getId()).setTrashed(true); newFile.makeCopy(project); newFile.setTrashed(true); } function EmailOrganizer () { var emails = GmailApp.getInboxThreads(); var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); var folders = DriveApp.getFoldersByName("ProjectOrganizer"); var folder = null; var project = null; if ( folders.hasNext() ) { folder = folders.next(); } else { folder = DriveApp.createFolder("ProjectOrganizer"); } for (var s = 0 ; s < sheets.length ; ++s) { var sheet = sheets[s]; var projects = folder.getFoldersByName(sheet.getName()); if ( projects.hasNext() ) { project = projects.next(); } else { project = folder.createFolder(sheet.getName()); } for(var e = 0 ; e < emails.length ; ++e ) { var email = emails[e]; var labels = email.getLabels(); for(var l = 0 ; l < labels.length; ++l) { if ( labels[l].getName() == sheet.getName() ) { var row = NextRow(sheet,email.getId()); if(row) { CreateLog(project,email); sheet.getRange(row,1).setValue(email.getFirstMessageSubject()); sheet.getRange(row,2).setValue(email.getId()); } } } } } }
Si quereis que se ejecute automáticamente podeis hacerlo con lo que explicamos en el tutorial de automatización de tareas
Se os ocurren maneras de mejorarlo? Queréis hacer propuestas?
Os espero
Hola:
ResponderEliminarAgradecería me ayudasen a hacer un código a través del Editor de secuencias de comando para que cada vez que se rellene un formulario de google en función de las respuestas elegidas se envíe un tipo un otro de mensaje a la dirección de correo de la persona que lo rellene c/c a otras direcciones o lo que se estime conveniente.
Ej:
Ej: si el formulario sólo tiene 3 preguntas
Pregunta0_email: -.....@gmail.com
Pregunta1_¿cuántos años tienes?:
elegir entre 0-17 o 18-25 o más de 25
Pregunta2_lugar de nacimiento:
elegir entre: España, Francia y Alemania
Arbol decisión para respuesta automática:
si responde entre 18 - 25 y España
mensaje adicional automático: "Debe enviarlo a Dpto.1"
si responde entre 18 - 25 y diferente a España
mensaje adicional automático: "Debe enviarlo a Dpto.2"
si responde diferente a 18 -25 y España
mensaje adicional automático: "Debe enviarlo a Dpto.3"
en otro caso que se envíe un mensaje similar, si bien con el texto: "En breve atenderemos su solicitud"
Ej: si responde de 18-25 y España
Respuesta_automática:
Hola:
Datos recibidos de su solicitud:
Pregunta0_email: -.....@gmail.com
Pregunta1_¿cuántos años tienes?: 18-25
Pregunta2_lugar de nacimiento: España
Le comunicamos que:
Debe enviarlo a Dpto.1
Gracias.
Saludos.
*********************************************
Ej: si responde de más de 25 y Alemania sería En breve atenderemos su solicitud"
Respuesta_automática:
Hola:
Datos recibidos de su solicitud:
Pregunta0_email: -.....@gmail.com
Pregunta1_¿cuántos años tienes?: más de 25
Pregunta2_lugar de nacimiento: Alemania
Le comunicamos que:
En breve atenderemos su solicitud"
Gracias.
Saludos.
*********************
Y en la hoja de respuestas que en la columna D se incluya automáticamente el texto de la Respuesta automática que hemos definido en el árbol de decisión
[0]Columna A: Pregunta0_email |
[1]Columna B: Pregunta1_¿cuántos años tienes? |
[2]Columna C: Pregunta2_lugar de nacimiento |
[3]Columna D: RESPUESTA_AUTOMÁTICA
Quisiera que cada vez que se quiera incluir una nueva pregunta al formulario o añadir nuevas opciones de respuesta a preguntas ya existentes y se tuviese que decidir sobre qué respuestas automáticas enviar en su caso según la respuesta elegida el código fuese tal que no tuviese que apenas modificarse y, en su caso, contar con una hoja adicional donde pudiesen grabarse los casos de pregunta y respuesta a los que asignar un modelo u otro de respuesta (texto) a incluir dentro del cuerpo del correo.
Hola,
EliminarTardaré un tiempo a tener el suficiente tiempo para hacer un post que resuelva tu duda ( aunque es muy interesante).
Si te corre prisa tal vez puedo hacertelo como un proyecto en Fiverr: http://www.fiverr.com/s2/bbb67c5713
Si te interesa, ponte en contacto ahí y busco la manera más economica de resolvertelo.
Nos vemos!