Estoy usando Google Apps Script para enviar un correo electrónico, sé cómo hacerlo. Deseo insertar un enlace de respuesta “Sí o No” o una pregunta de opción múltiple, y las respuestas de los destinatarios se registrarán en una hoja de cálculo de Google.
¿Cómo puedo hacer eso?
Los componentes involucrados en este flujo de trabajo son:
doPost()
para manejar las respuestas. El script debe implementarse como una aplicación web . Aquí hay un ejemplo de dicho flujo de trabajo, realizando una encuesta de trayecto. Los destinatarios recibirán un correo electrónico de la encuesta como este:
Los destinatarios completan el formulario directamente en su cliente de correo electrónico, si es compatible con esa capacidad. Las respuestas se recostackrán en una hoja de cálculo, como esta:
Cree los encabezados de la hoja de cálculo usted mismo, antes de ejecutar el script.
La columna “Número de serie” se ha agregado para ilustrar una forma de correlacionar las respuestas con los encuestados en particular; tenga en cuenta que algunas entradas se repiten. Cuando se genera un correo electrónico de encuesta, se le asigna un número de serie único, que luego se devuelve como un valor oculto con las respuestas. Podríamos extender este sistema para reconocer las actualizaciones de los encuestados, por ejemplo.
Ahora, el código. (Que también está disponible como esencia )
// doPost needs the spreadsheet ID, it has no concept of "active spreadsheet". var _spreadsheetId = '--- Spreadsheet ID ---'; // Add custom menu with option to send survey function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "Send Survey", functionName : "sendSurvey" }]; sheet.addMenu("Custom Menu", entries); }; /** * Build & Send Survey, an HTML form in email. */ function sendSurvey() { var recipient = Browser.inputBox("Send Survey", "Enter Recipient Email", Browser.Buttons.OK_CANCEL); if (recipient === 'cancel') return; var subject = 'Commuting Survey'; // Get the URL of the published Web App, to include in email for POST of response var scriptUrl = ScriptApp.getService().getUrl(); if (!scriptUrl) throw new Error( 'You must Deploy as Web App first.' ); // Build email body var template = HtmlService.createTemplateFromFile('emailTemplate'); template.scriptUrl = scriptUrl; template.serialNumber = getGUID(); // Generate serial number for this response var html = template.evaluate().getContent(); // During debugging, send emails to self. Remove this line for real operation. recipient = Session.getActiveUser().getEmail(); // Send email form GmailApp.sendEmail(recipient, subject, 'Requires HTML', {htmlBody:html} ); Browser.msgBox("Survey Sent"); } /** * POST handler for responses; */ function doPost(e) { Logger.log(e); var ss = SpreadsheetApp.openById(_spreadsheetId); var sheet = ss.getSheets()[0]; // Assume first sheet collects responses // Build a row of data with timestamp + posted response var row = [ new Date(), // Timestamp e.parameters.serial[0], // Serial Number e.parameters.commute[0], // Commuter? Yes / No e.parameters.vehicle.join(',') // Vehicle ]; // Make sure we are the only people adding rows to the spreadsheet var lock = LockService.getPublicLock(); // Wait for up to 30 seconds for other processes to finish. var locked = lock.tryLock(30000); if (locked) { // Save response to spreadsheet var rowNum = sheet.getLastRow()+1; sheet.getRange(rowNum, 1, 1, row.length).setValues([row]); // Release the lock so that other processes can continue. lock.releaseLock(); var result = "Response Recorded: \n "+row.join('\n '); } else { // Failed to get lock result = "System busy, please try again."; } // Report result of POST, in plain text return ContentService.createTextOutput(result) .setMimeType(ContentService.MimeType.TEXT); } /** * Returns an rfc4122 version 4 compliant GUID / UUID string * Thanks to @broofa! * http://stackoverflow.com/a/2117523/1677912 */ function getGUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); }
Para usar este sistema de encuestas tal como está:
Code.gs
Copie el ID de su hoja de cálculo y actualice la variable _spreadsheetId
en la parte superior del archivo. Salvar. emailTemplate.html
. Salvar. onOpen
en el editor. ¡Listo para ir! Encontrará un “Menú personalizado” en su hoja de cálculo, con un comando “Enviar encuesta”.
Una forma sencilla de hacer esto con poco trabajo en relación con el desarrollo de una interfaz de usuario y la administración de las respuestas, es crear a partir del uso de la infraestructura de Google Apps, enviándose el formulario por correo electrónico y haciendo clic en Mostrar original.
Luego puede tomar el código incrustado y usarlo en su scrip para enviar sus correos, la respuesta se registrará automáticamente en la hoja de cálculo asociada con el formulario.
A continuación, puede anular el evento onFormSubmit y hacer el procesamiento que necesita.
Hágame saber si necesita más información.