Qué necesita
- Una cuenta de Make.com con conexiones a Typeform y Google Sheets
- Un formulario de Typeform con al menos una respuesta de prueba ya enviada
- Una hoja de Google con fila de encabezados, por ejemplo: Response ID, Submitted at, Name, Email, Service, Budget, Message
- Cinco minutos para enviar otra respuesta de prueba dejando vacías las preguntas opcionales
Construcción paso a paso
1. Añada el disparador: Typeform – Watch Responses
Cree un escenario nuevo y añada Typeform – Watch Responses. Make ofrece dos versiones: una instantánea, marcada con un icono de rayo, en la que hace clic en Create a webhook y Typeform avisa a Make en cuanto se envía una respuesta, y otra programada, que consulta Typeform según la programación del escenario. Para esta construcción conviene la instantánea. Conecte su cuenta de Typeform y seleccione el formulario. Con la versión programada, elija para la primera prueba una respuesta concreta ya existente como punto de inicio; con la instantánea, haga clic en Run once y envíe después una respuesta de prueba nueva.
2. Ejecute Run once y lea la salida
Pulse Run once y abra la burbuja. Debería ver el ID de la respuesta, la hora de envío y las respuestas. Según la versión, Make muestra cada pregunta con su título como un campo separado, o un único array de respuestas, cada una con una referencia de campo y un valor tipado (texto, correo, opción, número, booleano). Si los campos no aparecen, envíe primero una respuesta de prueba nueva, porque Make aprende la estructura del formulario a partir de datos reales.
3. Compruebe primero si ya existe una fila
Añada Google Sheets – Search Rows. Elija la hoja de cálculo y la pestaña, y filtre la columna Response ID igual al ID de respuesta del disparador. Ponga el límite en 1.
4. Haga utilizable el resultado: Tools – Numeric aggregator
Una búsqueda sin resultados detiene el escenario en ese punto, y lo haría también con cada respuesta nueva. Un Numeric aggregator después de la búsqueda produce igualmente un bundle, de modo que el escenario continúa. Indique la búsqueda como módulo de origen y use la función Count. Por defecto, un agregador devuelve un resultado aunque no le llegue ningún bundle, así que una respuesta nueva da 0 y la ejecución continúa. Deje desactivada la opción avanzada Stop processing after an empty aggregation.
5. Filtro: continuar solo si el recuento es 0
Haga clic en el enlace posterior al agregador y añada un filtro: el resultado del agregador igual a 0. Si ya existe una fila con ese ID de respuesta, la ejecución termina aquí sin ruido.
6. Añada la fila: Google Sheets – Add a Row
Mapee cada columna:
- Response ID: el ID de respuesta del disparador (el campo puede llamarse token)
- Submitted at:
{{formatDate(1.submitted_at; "YYYY-MM-DD HH:mm")}} - Name, Email, Service, Budget, Message: las respuestas correspondientes
Si su versión del módulo muestra un campo por pregunta, arrástrelos directamente. Si muestra un array de respuestas, extraiga cada valor con map() y get(), filtrando el array por la referencia de campo de la pregunta, por ejemplo:
{{get(map(1.answers; "text"; "field.ref"; "email_question"); 1)}}
Pruebe esta fórmula exacta con Run once antes de fiarse de ella, ya que los nombres de las propiedades pueden variar entre versiones. Fijar referencias en sus preguntas dentro de Typeform lo hace mucho menos frágil que depender de los títulos.
7. Trate las preguntas opcionales
Una pregunta opcional omitida normalmente no aparece en absoluto en las respuestas, así que el valor mapeado llega vacío. Con texto simple no pasa nada. Para cualquier valor con una función alrededor, protéjalo:
{{ifempty(1.budget; "not given")}}
Para fechas, use if() de modo que nunca intente formatear un valor vacío:
{{if(1.preferred_date; formatDate(1.preferred_date; "YYYY-MM-DD"); "")}}
En las preguntas donde se pueden elegir varias opciones, la respuesta es un array, así que conviértalo en texto con join():
{{join(1.services; ", ")}}
8. Pruebe dos veces
Envíe una respuesta de prueba con todas las preguntas contestadas y revise la fila. Envíe otra con las opcionales omitidas. Después, en Make, vuelva a ejecutar la misma respuesta y confirme que no aparece una segunda fila. Esa última prueba es para lo que sirve la comprobación de los pasos 3 a 5.
9. Actívelo
Active el escenario. Con el disparador instantáneo se ejecuta con cada envío; con el programado, fije un intervalo acorde con la rapidez con que necesita las filas. Mire la pestaña History cuando llegue la primera respuesta real.
Errores frecuentes y soluciones
La pregunta nueva no aparece en el panel de mapeo. Make aprendió la estructura del formulario de una respuesta anterior. Envíe una respuesta nueva que incluya la pregunta y vuelva a ejecutar el escenario una vez para que se actualice la estructura. En algunos casos hay que reabrir el módulo o volver a mapearlo.
Las respuestas acaban en columnas equivocadas tras editar el formulario. Si mapea por posición o por una referencia generada automáticamente, insertar una pregunta puede desplazarlo todo. Asigne una referencia fija a cada pregunta en Typeform, mapee por referencia y mantenga estables los encabezados de la hoja.
La celda muestra algo como [object Object] o un corchete suelto. La respuesta es un array o un objeto estructurado, normalmente en una pregunta de opción múltiple. Use join() para arrays y elija la propiedad de la etiqueta en las respuestas de tipo opción.
Filas duplicadas. Typeform puede reenviar una notificación si no recibe una respuesta de éxito rápida, y un escenario que se apaga y se vuelve a encender puede recoger respuestas dos veces. Comprobar el ID de respuesta antes de añadir la fila, como en los pasos 3 a 5, elimina el problema de raíz. Typeform también puede desactivar un webhook tras fallos repetidos, así que si dejan de llegar respuestas, revise el estado del webhook en la interfaz actual de Typeform y de Make.
Una fórmula falla solo con algunas respuestas. Casi siempre es una pregunta opcional que quedó en blanco. Envuelva el valor con ifempty() o if() como en el paso 7 y vuelva a ejecutar con una respuesta que omitió la pregunta.