Envíe el formulario por correo electrónico y realice un seguimiento de las respuestas en una hoja de cálculo

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?

Solutions Collecting From Web of "Envíe el formulario por correo electrónico y realice un seguimiento de las respuestas en una hoja de cálculo"

Los componentes involucrados en este flujo de trabajo son:

  • Un script para generar y enviar un correo electrónico con un formulario HTML.
  • Una plantilla HTML para ese correo electrónico, que nos permite personalizar el correo electrónico para cada destinatario.
  • Una función doPost() para manejar las respuestas. El script debe implementarse como una aplicación web .
  • Una hoja de cálculo para recostackr respuestas. El script se incluirá en la hoja de cálculo y extenderá la interfaz de usuario de la hoja de cálculo con un menú para enviar una copia de la encuesta. (Podría adaptarse para uso independiente, sin el componente UI).

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:

Email

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.

Hoja de cálculo

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 )

emailTemplate.html

 
I have a bike
I have a car

Code.gs

 // 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); }); } 

Despliegue

Para usar este sistema de encuestas tal como está:

  1. Crea una nueva hoja de cálculo en tu cuenta de Drive. Agregue encabezados para “Marca de tiempo”, “Número de serie”, “¿Viajero?” Y “Vehículo” en la fila 1.
  2. Herramientas – Editor de secuencias de comandos. Copie el contenido de Code.gs Copie el ID de su hoja de cálculo y actualice la variable _spreadsheetId en la parte superior del archivo. Salvar.
  3. Archivo – Nuevo archivo HTML, nombre el archivo emailTemplate. Copie el contenido de emailTemplate.html . Salvar.
  4. Publicar: implementar como aplicación web … hacer que sea accesible para cualquier persona, incluso anónima. (En un dominio de Google Apps, puede restringirlo a los usuarios en el dominio).
  5. Autorice la secuencia de comandos recargando su hoja de cálculo o ejecutando la función 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.