6. Formularios

Aviso importante: en el despliegue actual no hay componentes de tipo form en la base de datos, por lo que la pantalla /cta muestra el mensaje "No hay formularios de tipo CTA creados". Esta sección documenta la funcionalidad a partir del código fuente y de cómo se ven las pantallas cuando sí hay datos: la captura incluida (01-listado.png) refleja precisamente ese estado vacío.

Introducción

Los formularios recogen datos del público: contacto, inscripciones, peticiones de información, sugerencias, etc. En este panel, los formularios se crean como componentes de tipo form (ver sección 4) y se gestionan desde la pantalla /cta.

Una vez creado el componente y añadido a una página, las respuestas enviadas por los visitantes se almacenan en el panel y se pueden consultar, filtrar y exportar.

Acceso rápido

Detalle del despliegue: la URL /forms devuelve 404 en este panel. La URL canónica para ver los envíos es /cta. Si tu bookmark apunta a /forms, actualízalo.

Pantalla principal (listado)

Pantalla /cta en estado vacío
Pantalla /cta en estado vacío. El panel muestra el mensaje "No hay formularios de tipo CTA creados" porque en este despliegue no hay componentes de tipo form en la base de datos.

Cuando sí hay formularios definidos, esta misma pantalla muestra una tabla con, para cada componente form:

Tareas habituales

6.1 Crear un componente tipo form desde /components/create

  1. Ve a /components/create (ver sección 4.1).
  2. Define el nombre interno, la etiqueta y, en el selector de tipo, elige form (recordatorio: el selector es un <select> HTML nativo, ver sección 4.2).
  3. Añade los campos editables que tendrá el formulario: nombre, email, mensaje, teléfono, etc. (ver sección 4.3). Los field_type habituales para formularios son text, textarea, email, number y boolean (casilla de aceptación).
  4. Escribe el template HTML con el marcado del formulario: <form>, <label>, <input> con marcadores [FIELD_NOMBRE] y un botón de enviar.
  5. Guarda el componente.
  6. Ve a la página donde quieras mostrarlo y, en el Builder, añade el nuevo componente (ver sección 3.2).
Importante: la creación del componente no hace que aparezca automáticamente en /cta. Solo después de que la primera persona envíe el formulario desde el sitio público, el componente aparecerá en el listado con su contador de envíos a 1.

6.2 Consultar los envíos

Una vez creado el componente y recibida la primera respuesta, los envíos se consultan en:

  1. Entra en /cta.
  2. Pulsa sobre el formulario del que quieres ver los envíos.
  3. Se abrirá la tabla de envíos. Usa los filtros superiores (rango de fechas, idioma) para acotar la búsqueda.

6.3 Exportar respuestas a CSV

Para trabajar con los datos fuera del panel (Excel, Google Sheets, CRM, etc.) puedes exportarlos a CSV:

  1. Ve a /components/{id}/submissions (vista detallada del formulario).
  2. Aplica los filtros que quieras mantener en la exportación (fechas, idioma).
  3. Pulsa el botón Exportar CSV (esquina superior derecha de la tabla). El navegador descargará un archivo con extensión .csv que se puede abrir directamente en cualquier hoja de cálculo.
Consejo: si el botón Exportar CSV no aparece en tu versión del panel, la exportación solo está disponible desde la vista detallada (/components/{id}/submissions), no desde la general (/cta).

Referencia técnica (webmasters)

Dónde se guardan las respuestas

Los envíos se almacenan en la tabla form_submissions (o nombre equivalente según la versión del CMS). Cada fila contiene:

Endpoint público de envío

El formulario del frontend envía los datos a un endpoint dedicado. La forma típica es:

POST /api/forms/{component_slug}/submit
Content-Type: application/json

{
  "FIELD_NOMBRE": "valor",
  "FIELD_EMAIL": "user@example.com",
  "lang": "es"
}

El endpoint valida los campos según la definición del componente y, si todo es correcto, inserta la fila en form_submissions y (opcionalmente) envía un email de notificación a las direcciones configuradas en /variables.

Validación de campos

La validación se hace en dos capas:

  1. Cliente (navegador): validación HTML5 nativa (type="email", required, minlength, pattern).
  2. Servidor (endpoint): validación de tipos y obligatoriedad según el field_type del componente. Si un campo obligatorio llega vacío, el endpoint devuelve 400 con el detalle.

Si un envío falla con 400, el registro no se guarda en form_submissions.

Rutas internas relevantes

Errores frecuentes