Agregar un Formulario de Contacto
Un formulario de contacto en Chinaski empieza con un elemento de formulario y un bloque. Esta guía cubre la creación del formulario, su colocación en una página y qué pasa después de que un visitante envía.
1. Crear el formulario
En Forms en el sidebar del admin crea un nuevo formulario: un nombre legible para humanos más un slug que usan las referencias de embed y API. Agrega campos al formulario; cualquier combinación de:
- text, email, tel, textarea
- select, radio, checkboxes, checkbox
- address (un campo compuesto con sub-entradas de street, city, state, postal/country)
- file upload
Cada campo tiene un label (mostrado a los visitantes), un ancho de visualización editable (full o half de la fila), y visualización condicional opcional; visible solo cuando el valor de otro campo coincide. Los nombres de campos se sanea automáticamente a minúsculas/dígitos/underscores. Los campos requeridos, los placeholders y las opciones de un dropdown separadas por saltos de línea son settings por campo.
2. Colocarlo en una página
Suelta un form block en el cuerpo de cualquier página o post y apúntalo al slug de tu formulario. El bloque renderiza el formulario real; los posts entregan datos al endpoint de envío /forms/<slug> del CMS, automáticamente proxy en la config estándar del server (el único pathway dinámico, como se describe en la discusión de la arquitectura de static-site).
3. Configurar las notificaciones
- notify_email; direcciones de email separadas por comas que reciben cada envío. El email de notificación al admin lista el valor de cada campo, con la dirección IP incluida a menos que la opción de privacidad la desactive.
- reply_to_field; nombra el campo de email cuyo valor se convierte en el Reply-To de la notificación, así quienes responden contestan al visitante directamente.
- thank_you_url; redirect externo seguro opcional después del envío; hasta honrar el contenido del formulario provisto cuando no se define. El texto de respuesta por defecto es "Thank you. Your submission has been received."
Activa y desactiva el submit button label, el gate anti-spam Turnstile por formulario, los países bloqueados separados por comas, y/o el switch de privacidad store_ip (que no almacena ninguna dirección IP si está deshabilitado).
4. Anti-spam y límites
- Rate limiting por IP; máximo cinco envíos por formulario por IP por hora promedio; 30 por IP combinando todos los formularios. Violarlo produce "Too many submissions; please try again later" tras una pequeña demora, con un 429 del server.
- Verificación con Cloudflare Turnstile cuando hay una key de Turnstile en el site y el formulario está activado (el default); encendido por defecto, así que omite
turnstile_enabled=0en pruebas rastreadas sin captcha. - Bloqueo de países; con los códigos que entres, enviar desde regiones bloqueadas devuelve "Submissions from your region are not accepted".
- Señales de privacidad; los visitantes que envían headers DNT o "Do Not Sell" no reciben almacenamiento de IP ni atribución de clicks de anuncios, según los settings de DNT y GPC respetados automáticamente.
5. Qué llega después de que alguien envía
- los valores almacenados de cada campo (incluyendo los vacíos, tipados por tipo)
- un webhook; si la propia configuración de webhook del formulario está montada; con el id del formulario, el slug del formulario, el id del envío, los datos enviados y el timestamp
- el email de notificación a los recipients que configuraste, más un email de confirmación opcional para quien envió (entregado de forma asíncrona; requiere SMTP configurado en los settings, y nunca se envía en modo air-gap)
- opcionalmente un redirect del navegador al thank_you_url del formulario
Cada envío se registra una sola vez; un reenvío con la misma identidad responde la respuesta de agradecimiento y no registra los datos por duplicado.
6. Dónde viven los envíos
Ve o exporta los envíos por formulario desde Forms →