Scripts de Google Apps Script que leen las respuestas de correo de las participantes desde Gmail y actualizan automáticamente la hoja de cálculo de inscripciones. Evitan tener que revisar la bandeja de entrada una por una y marcar a mano quién confirmó su cupo o quién sigue interesada desde la lista de espera.
| Script | Qué detecta | Qué escribe en la hoja |
|---|---|---|
marcarConfirmaciones.gs |
Respuestas cuyo cuerpo contiene la palabra confirm (así cubre "confirmo", "confirmado", "confirm my spot") |
Confirmó |
marcarInteresListaDeEspera.gs |
Cualquier respuesta no vacía, sin importar el contenido: responder ya es señal de interés | Mostró Interés |
Ambos, además, hacen lo mismo con el hilo de correo:
- Le agregan una etiqueta de Gmail (la crean si no existe).
- Lo archivan, para que salga de la bandeja de entrada.
- Escriben
Actualizado desde scripten una columna de control, para que sepas qué filas tocó el script y cuáles marcaste a mano.
El emparejamiento entre correo y fila se hace buscando la primera celda de la
fila que contenga @ y comparándola con el remitente del mensaje.
-
Crea el Google Form con el que las participantes se inscriben.
-
Vincula el formulario a una hoja de cálculo: en el formulario, pestaña Respuestas → Vincular a Hojas de cálculo. Se creará una pestaña llamada
Respuestas de formulario 1con una fila por inscripción. -
Agrega dos columnas al final de esa hoja, a la derecha de las respuestas del formulario:
- una para el estado (
Confirmó/Mostró Interés), - otra para la marca de control (
Actualizado desde script).
Anota en qué letra de columna quedó cada una: las vas a necesitar en el paso de configuración.
- una para el estado (
-
Envía el correo a las participantes (aceptación o lista de espera) desde la misma cuenta de Gmail que va a ejecutar el script. El asunto de ese correo es lo que el script usará para encontrar las respuestas, así que guárdalo tal cual lo enviaste.
- Abre la hoja de cálculo de respuestas.
- Ve a Extensiones → Apps Script.
- En el panel Archivos, haz clic en + → Secuencia de comandos y crea un
archivo nuevo usando como base
marcarConfirmaciones.gsomarcarInteresListaDeEspera.gs, según el caso de uso. - Pega el contenido y ajusta la configuración (siguiente sección).
- Guarda y ejecuta la función una vez desde el editor:
marcarConfirmaciones(archivomarcarConfirmaciones.gs),marcarInteresListaDeEspera(archivomarcarInteresListaDeEspera.gs).
- La primera ejecución te pedirá autorizar el script para acceder a Gmail y a la hoja de cálculo. Es normal: el script necesita leer tus correos para encontrar las respuestas.
El script debe ejecutarse con la misma cuenta de Google que envió los correos y que recibe las respuestas. Si el correo salió desde otra cuenta, no encontrará ningún hilo.
Estos son los valores que debes actualizar en cada script antes de usarlo:
| Qué ajustar | Dónde | Valor de ejemplo |
|---|---|---|
| Nombre de la pestaña de respuestas | getSheetByName(...) |
"Respuestas de formulario 1" |
| Asunto del correo que enviaste a las participantes | subjectFiltro |
"Django Girls Colombia - ¡Has sido aceptada!" |
| Etiqueta de Gmail para los hilos procesados | etiquetaNombre |
"DG Virtual Colombia 2026" |
| Ventana de búsqueda de correos | newer_than:2d en GmailApp.search(...) |
últimos 2 días |
| Columna de estado (lectura + escritura) | índice 32 y getRange(i + 1, 33) |
columna AG |
| Columna de la marca de control | getRange(i + 1, 36) |
columna AJ |
Apps Script usa dos numeraciones distintas en el mismo script, y es la fuente más común de errores al adaptarlo:
datos[i][32]→ índice desde 0. El32es la columna número 33.getRange(fila, 33)→ índice desde 1. El33es esa misma columna.
Es decir: el índice de lectura siempre es el número de escritura menos 1, y en los scripts apuntan a la misma columna a propósito — el script lee esa celda para saber si ya la procesó antes y no volver a escribirla.
Equivalencias útiles:
| Letra | Número (getRange) |
Índice (datos[i][…]) |
|---|---|---|
AF |
32 | 31 |
AG |
33 | 32 |
AH |
34 | 33 |
AI |
35 | 34 |
AJ |
36 | 35 |
Si tu formulario tiene más o menos preguntas que el nuestro, tus columnas estarán en otra posición: cuenta las columnas de tu hoja y ajusta los tres números (el índice de lectura, y los dos de escritura).
Cosas que conviene saber antes de confiar ciegamente en el resultado:
- La detección de correo es por
@. El script toma la primera celda de la fila que contenga una arroba. Si tu formulario pregunta por el usuario de Instagram o X antes que por el correo, tomará el valor equivocado. Ubica la pregunta del correo antes que cualquier otra que pueda contener@. - Solo se revisan los mensajes recibidos. Ambos scripts filtran con
msg.isInInbox(), así que descartan los correos que enviaste tú. Sin ese filtro, un correo original que diga "responde para confirmar tu cupo" haría que el script se marcara a sí mismo como confirmación. Si adaptas los scripts, no quites esa línea. - No sobrescribe lo que ya está marcado. Si la celda de estado tiene cualquier valor, el script salta esa fila. Para reprocesar a alguien, borra primero el contenido de su celda de estado.
- Los datos se leen una sola vez al inicio (
getDataRange().getValues()). Dentro de una misma ejecución, el script no "ve" lo que acaba de escribir; en la práctica no importa, porque cada persona tiene una sola fila. - Solo escribe, nunca borra. Si algo sale mal, lo peor que puede pasar es que marque filas de más — revisa la columna de control y limpia a mano.
Hasta aquí el script solo corre cuando le das Ejecutar a mano. Para que el proceso sea realmente automático hay que crear un activador (trigger), que es lo que le dice a Apps Script cada cuánto ejecutar la función por su cuenta.
La idea no es que la validación esté corriendo todo el tiempo, sino cada cierto intervalo. Para nuestros eventos lo dejamos cada 3 horas: es suficiente para que la hoja esté al día durante la semana de confirmaciones, y no gasta cuota revisando una bandeja de entrada donde no ha llegado nada nuevo.
-
Abre la hoja de cálculo y ve a Extensiones → Apps Script.
-
En la barra lateral izquierda, haz clic en el ícono de reloj (Activadores).
-
Abajo a la derecha, haz clic en + Añadir activador.
-
Llena el formulario así:
Campo Valor Elige la función que se ejecutará marcarConfirmacionesomarcarInteresListaDeEsperaElige qué implementación se debe ejecutar HeadSelecciona el origen del evento Basado en tiempo Selecciona el tipo de activador basado en tiempo Temporizador por horas Selecciona el intervalo de horas Cada 3 horas Configuración de notificación de errores Notificarme inmediatamente -
Haz clic en Guardar. Si es la primera vez, Google te pedirá autorizar el script otra vez; acepta con la misma cuenta que envía y recibe los correos.
Desde ese momento el script corre solo cada 3 horas, sin que la hoja de cálculo tenga que estar abierta.
- Un activador por función. Si vas a usar los dos scripts, crea dos activadores, uno para cada función.
- El activador queda atado a tu cuenta, no a la hoja de cálculo. Si quien lo creó deja de tener acceso al correo, deja de funcionar. Créalo con la cuenta organizadora del evento, no con una cuenta personal.
- La ventana de búsqueda debe ser mayor que el intervalo. Con
newer_than:2dy ejecuciones cada 3 horas hay bastante margen: cada corrida revisa correos que ya vio antes, pero el script no reescribe filas que ya tienen valor, así que no pasa nada. - Revisa el historial cuando algo no cuadre. En la barra lateral, la sección Ejecuciones muestra cada corrida con su estado (Completado / Con errores) y los mensajes de error.
- Apágalo cuando termine el evento. En la lista de activadores, menú de tres puntos → Borrar activador. Si no, el script sigue revisando tu correo indefinidamente.