Volver al Blog
AutomatizaciónSoftwareDesarrollo

Sistema de Cotizaciones Automáticas con Generación de PDF en Google Sheets y Gmail

Brayan Developer
4 min de lectura
Sistema de Cotizaciones Automáticas con Generación de PDF en Google Sheets y Gmail
Aprende a transformar una hoja de Google Sheets en un potente sistema de cotizaciones que genera presupuestos en PDF profesionales y los envía automáticamente por correo a tus clientes.

Para muchas micro, pequeñas y medianas empresas, adquirir un software ERP o CRM complejo y costoso no siempre es viable de inmediato. Sin embargo, con el poder de Google Workspace y Google Apps Script, es posible crear un sistema ágil y 100% automatizado para generar y despachar cotizaciones en formato PDF profesional en segundos.

Portada

El Problema de las Cotizaciones Manuales#

En la gestión comercial diaria de servicios o productos B2B, el proceso de elaboración de presupuestos suele presentar cuellos de botella:

  • El vendedor copia y pega datos de una plantilla antigua de Word o Excel, cometiendo errores tipográficos o de precios.
  • Se exporta el archivo manualmente a PDF y se redacta un correo electrónico repetitivo en Gmail.
  • No existe un registro centralizado ni métricas de seguimiento para saber qué cotizaciones fueron enviadas, aprobadas o expiradas.

Automatizar este flujo utilizando herramientas que tu equipo ya domina (como Google Sheets, Google Docs y Gmail) ahorra horas de trabajo repetitivo y asegura que cada propuesta tenga un diseño corporativo impecable.


Arquitectura de la Solución con Google Workspace#

La solución se compone de tres elementos interconectados:

  1. Hoja de Cálculo Central (Google Sheets):

    • Pestaña Clientes: Directorio de contactos y empresas.
    • Pestaña Catálogo: Lista de precios unitarios, códigos de producto y descripciones.
    • Pestaña Generador: Interfaz donde el asesor selecciona el cliente, los ítems y las cantidades mediante menús desplegables.
    • Pestaña Historial: Base de datos donde se registran todas las cotizaciones emitidas, números de serie, totales y enlaces a los PDFs en Google Drive.
  2. Plantilla de Diseño (Google Docs): Un documento prediseñado con el membrete, logo, términos comerciales y marcadores de posición dinámicos ({{NUMERO}}, {{CLIENTE}}, {{RUC}}, {{FECHA}}, {{TOTAL}}, {{TABLA_ITEMS}}).

  3. Script de Automatización (Google Apps Script): Código JavaScript que se ejecuta directamente en la nube de Google al presionar un botón en Sheets o al completar un formulario web.


Código Completo en Google Apps Script#

A continuación, se muestra el script modular para clonar la plantilla de Google Docs, reemplazar las etiquetas, convertir el archivo a PDF y enviarlo por Gmail:

/**
 * Genera una cotización en PDF y la envía por correo electrónico
 */
function generarYEnviarCotizacion() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Generador");
  
  // 1. Obtener datos del cliente y de la cotización
  const clienteNombre = sheet.getRange("C4").getValue();
  const clienteEmail = sheet.getRange("C5").getValue();
  const numeroCotizacion = sheet.getRange("C6").getValue();
  const validezDias = sheet.getRange("C7").getValue();
  const total = sheet.getRange("H15").getValue();

  if (!clienteEmail || !numeroCotizacion) {
    SpreadsheetApp.getUi().alert("Por favor complete los datos obligatorios del cliente.");
    return;
  }

  // 2. IDs de carpetas y plantilla en Google Drive
  const TEMPLATE_DOC_ID = "1aBcD_EJEMPLO_ID_PLANTILLA_DOCS";
  const FOLDER_PDF_ID = "1xYz_EJEMPLO_ID_CARPETA_DRIVE";
  
  const templateFile = DriveApp.getFileById(TEMPLATE_DOC_ID);
  const targetFolder = DriveApp.getFolderById(FOLDER_PDF_ID);
  
  // 3. Crear una copia temporal de la plantilla
  const copyDoc = templateFile.makeCopy(`Cotización #${numeroCotizacion} - ${clienteNombre}`, targetFolder);
  const doc = DocumentApp.openById(copyDoc.getId());
  const body = doc.getBody();

  // 4. Reemplazar variables dinámicas
  const fechaHoy = Utilities.formatDate(new Date(), "America/Lima", "dd/MM/yyyy");
  body.replaceText("{{NUMERO}}", numeroCotizacion);
  body.replaceText("{{CLIENTE}}", clienteNombre);
  body.replaceText("{{FECHA}}", fechaHoy);
  body.replaceText("{{VALIDEZ}}", `${validezDias} días`);
  body.replaceText("{{TOTAL}}", `S/ ${Number(total).toFixed(2)}`);

  doc.saveAndClose();

  // 5. Convertir a PDF y eliminar el doc temporal
  const pdfBlob = copyDoc.getAs("application/pdf").setName(`Cotizacion_${numeroCotizacion}.pdf`);
  const pdfFile = targetFolder.createFile(pdfBlob);
  copyDoc.setTrashed(true);

  // 6. Enviar correo vía GmailApp
  const asunto = `Propuesta Comercial #${numeroCotizacion} - Brayan Developer`;
  const cuerpoMensaje = `
    Hola ${clienteNombre},\n\n
    Adjunto encontrarás la cotización formal #${numeroCotizacion} solicitada.\n
    El presupuesto tiene una validez de ${validezDias} días.\n\n
    Quedamos a tu entera disposición para resolver cualquier duda.\n\n
    Saludos cordiales,\n
    Equipo Comercial
  `;

  GmailApp.sendEmail(clienteEmail, asunto, cuerpoMensaje, {
    attachments: [pdfBlob],
    name: "Brayan Developer Soluciones",
  });

  // 7. Guardar en el Historial de Cotizaciones
  const historialSheet = ss.getSheetByName("Historial");
  historialSheet.appendRow([
    new Date(),
    numeroCotizacion,
    clienteNombre,
    clienteEmail,
    total,
    pdfFile.getUrl(),
    "ENVIADO"
  ]);

  SpreadsheetApp.getUi().alert(`Cotización #${numeroCotizacion} enviada con éxito a ${clienteEmail}`);
}

Escalabilidad: Integración con N8N y WhatsApp#

Una vez consolidado el sistema en Google Sheets, es muy sencillo dar el siguiente paso de madurez tecnológica:

  • Disparador Webhook: Conectar formularios de la página web con N8N para crear la fila en Google Sheets en tiempo real.
  • Notificación por WhatsApp: Enviar un mensaje de aviso con el enlace al PDF al número del cliente a través de Evolution API.
  • Alertas de Seguimiento: Programar recordatorios automáticos 48 horas después del envío si el cliente no ha respondido.

¿Deseas Automatizar la Gestión Comercial de tu Negocio?#

Implementar flujos automatizados con Google Workspace y N8N elimina tareas manuales y proyecta una imagen de máxima seriedad y rapidez frente a tus prospectos.

Si quieres diseñar un sistema de cotizaciones o CRM a la medida de tu empresa, ponte en contacto con nosotros para recibir asesoría personalizada.

Etiquetas
Google SheetsGoogle Apps ScriptCotizaciones AutomáticasCRM GoogleAutomatización
Compartir:XLinkedInWhatsApp

¿Te gustaría profundizar en estos temas?

Aprende sobre desarrollo de software, apps a medida, automatizaciones con N8N, Next.js y Cloud con casos reales.

Hablemos