Cómo enviar automáticamente un PDF personalizado desde Google Forms

En este tutorial vamos a aprender cómo enviar automáticamente un PDF personalizado por correo electrónico a partir de las respuestas de un formulario de Google Forms. Esto es ideal para automatizar recibos, confirmaciones de pedido o cualquier documento que necesites enviar a tus usuarios sin intervención manual.

Si prefieres ver el tutorial en video, te lo dejo a continuación:

Requisitos

  • Cuenta de Google
  • Acceso a Google Forms, Google Sheets y Google Apps Script

Pasos detallados para enviar un PDF desde Google Forms

1. Crear el formulario en Google Forms vinculado a Google Sheets

Abre Google Sheets y crea una nueva hoja de cálculo. Luego, ve al menú Herramientas > Crear un formulario. Esto generará un formulario vinculado automáticamente a esa hoja.

Por ejemplo, si quieres calcular el total de la compra multiplicando precio por cantidad, sigue estos pasos:

  • Agrega una pregunta en el formulario llamada Precio.
  • En el script, captura esta variable:
const precioTexto = respuestas['Precio'] ? respuestas['Precio'][0] : '0';
const precio = parseFloat(precioTexto) || 0;
const total = precio * cantidad;

Luego, añade el marcador {{Total}} en tu plantilla de Google Docs y reemplázalo en el script así:

cuerpo.replaceText('{{Total}}', total.toFixed(2));

Personalizar el nombre del archivo PDF

Para que el archivo PDF tenga un nombre identificable, como «Juan – ProductoX – 3.pdf», usamos:

const pdf = copiaArchivo.getAs('application/pdf').setName(`${nombre} - ${producto} - ${cantidad}.pdf`);

Consejos y advertencias para evitar errores comunes

  • Ejecutar el script solo con el envío del formulario: No ejecutes la función enviarPDF directamente desde el editor, ya que el parámetro e no estará definido y causará errores.
  • Validar nombres exactos de las columnas: Asegúrate que los nombres que usas en respuestas['NombreCampo'] coincidan exactamente con los títulos de las preguntas en el formulario y en la hoja (incluyendo mayúsculas y espacios).
  • Uso correcto de Logger: La función es Logger.log() con mayúscula inicial, y los mensajes se pueden ver en Ver > Registros o en el menú de ejecuciones.
  • Permisos: La primera vez que ejecutes el script, te pedirá permisos para acceder a Drive, Documentos y enviar correos. Asegúrate de aceptarlos.

Preguntas frecuentes

¿Puedo añadir más campos al formulario? Claro que sí, solo debes agregar los marcadores en la plantilla de Google Docs y capturar esas variables en el script para reemplazarlas.

¿Se puede enviar el PDF a varios correos? Sí, en la función MailApp.sendEmail puedes colocar varios destinatarios separados por comas en el parámetro to.

¿Puedo personalizar el diseño del PDF? Sí, diseña tu plantilla en Google Docs con el formato, colores y estilos que quieras antes de usarla para generar el PDF.

¿Cómo manejar perfiles o respuestas condicionales? Es posible usar lógica en el script para evaluar respuestas y enviar PDFs diferentes o anexar archivos según condiciones. Para profundizar en esto, te dejo este video que explica cómo hacerlo: Automatización avanzada con Apps Script.

Conclusión

En resumen, con unos pocos pasos puedes automatizar el envío de PDFs personalizados a partir de las respuestas de Google Forms, usando Google Docs como plantilla y Google Apps Script para generar y enviar el archivo. Recuerda configurar bien el activador y validar los nombres de campos para evitar errores. Esta automatización te ahorrará tiempo y mejorará la experiencia de tus usuarios.

Si quieres profundizar más en Google Apps Script y automatizaciones con Google Sheets y Forms, te invito a inscribirte en mi academia online donde encontrarás cursos completos y soporte personalizado.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Personaliza el formulario con las siguientes preguntas:

  • Correo Electrónico: Activa la opción para recopilar automáticamente las direcciones de correo electrónico del usuario.
  • Nombre: Pregunta de tipo «Respuesta breve».
  • Producto: Pregunta de opción múltiple con las opciones de productos.
  • Cantidad: Pregunta de «Respuesta breve» con validación numérica.

2. Crear la plantilla en Google Docs para el PDF

Crea un nuevo documento en Google Docs que servirá como plantilla para el PDF. Usa marcadores de posición entre llaves dobles para las variables que quieres reemplazar, por ejemplo:

Estimado {{nombre}},  
Gracias por su compra.  
Aquí están los detalles de su pedido:  
Producto: {{producto}}  
Cantidad: {{cantidad}}

Guarda este documento en una carpeta específica en Google Drive para mantener todo organizado.

3. Escribir el código en Google Apps Script para generar y enviar el PDF

Desde la hoja de cálculo vinculada al formulario, ve a Extensiones > Apps Script y crea un nuevo proyecto. Aquí pegarás y adaptarás el siguiente código:

const ID_PLANTILLA = 'ID_DE_TU_PLANTILLA_DE_GOOGLE_DOCS';
const ID_CARPETA = 'ID_DE_TU_CARPETA_DE_GOOGLE_DRIVE';

function enviarPDF(e) {
  try {
    const respuestas = e.namedValues;
    const email = respuestas['Correo electrónico'] ? respuestas['Correo electrónico'][0] : '';
    const nombre = respuestas['Nombre'] ? respuestas['Nombre'][0] : '';
    const producto = respuestas['Producto'] ? respuestas['Producto'][0] : '';
    const cantidadTexto = respuestas['Cantidad'] ? respuestas['Cantidad'][0] : '0';
    const cantidad = parseInt(cantidadTexto, 10) || 0;

    if (!email) {
      Logger.log('No se encontró correo electrónico.');
      return;
    }

    // Obtener la plantilla y hacer copia
    const archivoPlantilla = DriveApp.getFileById(ID_PLANTILLA);
    const carpetaDestino = DriveApp.getFolderById(ID_CARPETA);
    const copiaArchivo = archivoPlantilla.makeCopy(`Pedido - ${nombre} - ${producto}`, carpetaDestino);
    const documento = DocumentApp.openById(copiaArchivo.getId());
    const cuerpo = documento.getBody();

    // Reemplazar variables en el documento
    cuerpo.replaceText('{{nombre}}', nombre);
    cuerpo.replaceText('{{producto}}', producto);
    cuerpo.replaceText('{{cantidad}}', cantidad.toString());

    documento.saveAndClose();

    // Obtener PDF y renombrarlo
    const pdf = copiaArchivo.getAs('application/pdf').setName(`Pedido_${nombre}_${producto}_${cantidad}.pdf`);

    // Enviar correo con PDF adjunto
    MailApp.sendEmail(email, 'Gracias por tu compra', 'Adjunto encontrarás el detalle de tu pedido en PDF.', {
      attachments: [pdf]
    });

    // Mover copia a la papelera para no saturar Drive
    copiaArchivo.setTrashed(true);

    Logger.log(`Correo enviado a: ${email}`);
  } catch (error) {
    Logger.log('Error en enviarPDF: ' + error.message);
  }
}

function obtenerPermisos() {
  // Función para que el script solicite permisos necesarios
  DriveApp.getFiles();
  DocumentApp.openById(ID_PLANTILLA);
  GmailApp.getDrafts();
}

Nota importante: El parámetro del evento debe llamarse e y el código debe ejecutarse al enviar el formulario, no directamente desde el editor, para que e.namedValues esté definido y no dé error.

4. Configurar el activador para ejecutar el script automáticamente

En el editor de Apps Script, ve a Activadores > Añadir un activador. Configura para que la función enviarPDF se ejecute al enviar el formulario (evento «Al enviar el formulario»).

5. Probar el formulario y el envío

Abre el formulario, completa los campos y envíalo. Luego revisa tu bandeja de entrada para verificar que recibiste el correo con el PDF adjunto. Si no llega, revisa el menú Ejecutar > Historial de ejecuciones en Apps Script para detectar errores.

Variaciones y Mejoras

Agregar cálculos dentro del script

Por ejemplo, si quieres calcular el total de la compra multiplicando precio por cantidad, sigue estos pasos:

  • Agrega una pregunta en el formulario llamada Precio.
  • En el script, captura esta variable:
const precioTexto = respuestas['Precio'] ? respuestas['Precio'][0] : '0';
const precio = parseFloat(precioTexto) || 0;
const total = precio * cantidad;

Luego, añade el marcador {{Total}} en tu plantilla de Google Docs y reemplázalo en el script así:

cuerpo.replaceText('{{Total}}', total.toFixed(2));

Personalizar el nombre del archivo PDF

Para que el archivo PDF tenga un nombre identificable, como «Juan – ProductoX – 3.pdf», usamos:

const pdf = copiaArchivo.getAs('application/pdf').setName(`${nombre} - ${producto} - ${cantidad}.pdf`);

Consejos y advertencias para evitar errores comunes

  • Ejecutar el script solo con el envío del formulario: No ejecutes la función enviarPDF directamente desde el editor, ya que el parámetro e no estará definido y causará errores.
  • Validar nombres exactos de las columnas: Asegúrate que los nombres que usas en respuestas['NombreCampo'] coincidan exactamente con los títulos de las preguntas en el formulario y en la hoja (incluyendo mayúsculas y espacios).
  • Uso correcto de Logger: La función es Logger.log() con mayúscula inicial, y los mensajes se pueden ver en Ver > Registros o en el menú de ejecuciones.
  • Permisos: La primera vez que ejecutes el script, te pedirá permisos para acceder a Drive, Documentos y enviar correos. Asegúrate de aceptarlos.

Preguntas frecuentes

¿Puedo añadir más campos al formulario? Claro que sí, solo debes agregar los marcadores en la plantilla de Google Docs y capturar esas variables en el script para reemplazarlas.

¿Se puede enviar el PDF a varios correos? Sí, en la función MailApp.sendEmail puedes colocar varios destinatarios separados por comas en el parámetro to.

¿Puedo personalizar el diseño del PDF? Sí, diseña tu plantilla en Google Docs con el formato, colores y estilos que quieras antes de usarla para generar el PDF.

¿Cómo manejar perfiles o respuestas condicionales? Es posible usar lógica en el script para evaluar respuestas y enviar PDFs diferentes o anexar archivos según condiciones. Para profundizar en esto, te dejo este video que explica cómo hacerlo: Automatización avanzada con Apps Script.

Conclusión

En resumen, con unos pocos pasos puedes automatizar el envío de PDFs personalizados a partir de las respuestas de Google Forms, usando Google Docs como plantilla y Google Apps Script para generar y enviar el archivo. Recuerda configurar bien el activador y validar los nombres de campos para evitar errores. Esta automatización te ahorrará tiempo y mejorará la experiencia de tus usuarios.

Si quieres profundizar más en Google Apps Script y automatizaciones con Google Sheets y Forms, te invito a inscribirte en mi academia online donde encontrarás cursos completos y soporte personalizado.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

16 comentarios en “Cómo enviar automáticamente un PDF personalizado desde Google Forms”

  1. Carlos Alberto Yopasa Bernal

    ayuda, porfa me sale todo bien pero a la hora de enviar el correo, a la persona no le llega el adjunto sino [object Object] , que puedo hacer?

  2. Hola profesor tengo una duda con un error

    Error TypeError: Cannot read properties of undefined (reading ‘0’)
    at enviarPdf(Código:6:68)

    Hice un formulario con mas incisos y secciones solo que a la hora de mandar respuesta me aparece este error.

    Existe alguna manera para quitarlo y darle solucion.

    Gracias de antemano.

    1. Fíjate que en la lína 6 el campo sea ‘Dirección de correo electrónico’ y no ‘Correo electrónico’.
      Es así como realmente se llama la columna en el sheet.
      Tuve el mismo error y era por eso. Espero que te ayude.

  3. Hola Juan! Tengo algunas dudas, creo que es complejizar un poco el AppScript. Antes que nada agradecerte por tu contenido que es de mucha ayuda.

    Tengo propuesto un formulario y dependiendo de as repsuestas quiero que me arroje cierto tipo de respuestas, creando un perfil por lo que veo en el video esto se puede hacer mi pregunta se relaciona mas si con base en una pregunta puedo generar pesos dentro del AppScript para que dependiendo de ciertas condiciones salga cierto tipo de perfil. Es posible?

    Adicional preguntarte si dentro de esta misma automatización de las respuestas a una pregunta anexar otro PDF segun cada una de las respuestas?

    Si esto es posible como se vería el codigo?

    Un saludo!

  4. HOLA JUAN
    ¡EXCELENTES TODOS TUS APORTES¡
    ¡MIL GRACIAS POR ELLO¡

    ¡¡¡ URGENTE SOLUCION POR FAVOR ¡¡¡ TENGO UN PROBLEMA AL EJECUTAR … » ypeError: Cannot read properties of undefined (reading ‘namedValues’)
    enviarPDF @ Código.gs:2 » Y ESTOY ATORADO

    ASÍ MISMO, LAS LÍNEAS logger.log NO me funcionan y NO ponen nada en el editor : (

    ¿ DEBO DE CONFIGURAR ALGO MAS EN GAS ?
    ¿ PUEDES AYUDARME ENCARECIDAMENTE POR FAVOR PARA DESTRABAR EL ENVIO DE MI CODIGO JUNTO CON EL PDF QUE LE VINCULE SIGUIENDO TUS VIDEOS PARTE1 A PARTE 3 ?

    QUEDO ATENTO

    1. Hola Jaime

      Acuerdate que este código no t va a funcionar ejecutandolo desde el editor. Te toca enviar la respuesta del formulario y despues ver los errores y los loggers en el menu de ejecuciones

      Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.