DOCS

Guía de configuración

Formchan funciona como el destino al que envía tu formulario. Aquí tienes todo lo necesario para conectarlo.

BUILD WITH AI

¿Desarrollas con IA? Dale la URL y la especificación.

Entrega a tu IA de desarrollo la URL del panel y esta especificación Markdown en inglés. Puede conectar tu formulario o crear uno nuevo.

Ver instrucciones para la IA
Conecta el formulario de contacto de este sitio a Formchan.

URL de envío: [pega la URL del panel]
Especificación: https://formchan.app/lp/integration-en.md

Lee la especificación e implementa la integración manteniendo el diseño actual. Crea un formulario si no existe. Incluye validación, estados de envío, éxito y error, prevención de envíos duplicados e instrucciones para una prueba.

Primeros pasos

Al registrarte, se crea tu primer formulario. Copia la URL que aparece en tu panel y ponla en el action de tu formulario. Usa POST como method.

Los ajustes del formulario en tu panel. Aquí aparecen la URL para el action y el código que pegas en tu sitio.
Los ajustes del formulario en tu panel. Aquí aparecen la URL para el action y el código que pegas en tu sitio.
<form action="https://formchan.app/f/YOUR_FORM_KEY" method="POST">
  <input name="name">
  <input name="email" type="email">
  <textarea name="message"></textarea>
  <button>Enviar</button>
</form>

Después de enviar el formulario, la persona ve una página de confirmación. El mensaje llega a tu bandeja y la IA añade ★ y etiquetas.

Nombres de campo

Puedes nombrar los campos como quieras. Cada campo enviado aparece tal cual en la bandeja y en los correos de notificación.

La dirección de correo para responder se lee de un campo llamado email. También sirven mail y _replyto. El nombre del remitente se lee de name o fullname.

Cada envío puede ocupar hasta 64 KB, con hasta 50 campos y 5000 caracteres por campo.

Después del envío

Si no configuras nada, Formchan muestra su propia página de confirmación con un enlace para volver a la página anterior.

La página de confirmación que se muestra si no configuras nada.
La página de confirmación que se muestra si no configuras nada.

Para llevar a las personas a una página tuya, pon su URL en un campo oculto llamado _next.

<input type="hidden" name="_next" value="https://example.com/thanks">

Envío desde JavaScript

Envía con la cabecera Accept: application/json y Formchan responde en JSON en lugar de mostrar una página. El visitante se queda en tu página.

const res = await fetch('https://formchan.app/f/YOUR_FORM_KEY', {
  method: 'POST',
  headers: { Accept: 'application/json' },
  body: new FormData(form),
});
const data = await res.json(); // { ok: true }

Si todo va bien, recibes ok: true. Si falla, recibes ok: false y uno de estos códigos de error.

CódigoHTTPSignificado
not_found404El formulario no existe
origin403Enviado desde un sitio que el formulario no acepta
rate429Demasiados mensajes en poco tiempo
body400No se pudo leer el contenido
empty400Todos los campos estaban vacíos

Protección contra spam

Añade a tu formulario un campo oculto llamado _gotcha. Las personas no lo ven, pero los bots lo rellenan. Esos envíos parecen aceptados, pero se descartan.

<input name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">

Se rechazan los mensajes enviados muchas veces desde el mismo lugar en poco tiempo.

En los ajustes del formulario puedes indicar qué sitios pueden enviarle mensajes. Los envíos desde otros sitios se rechazan.

WordPress, Webflow y más

HTML
Usa el código del formulario de arriba tal cual.
WordPress
Pega el código del formulario en un bloque HTML personalizado.
Webflow
En los ajustes del formulario, pon la URL en Action y elige POST en Method.
React / Next.js
Envía con fetch, como se explica en “Envío desde JavaScript”.

Notificaciones

Los mensajes ★3 se envían a tus direcciones de notificación en cuanto llegan. Cuando añades una dirección, le enviamos un correo de confirmación; las notificaciones empiezan cuando se hace clic en el enlace que contiene.

Direcciones de notificación. Solo las direcciones confirmadas reciben correos.
Direcciones de notificación. Solo las direcciones confirmadas reciben correos.

Los ★1 y ★2 llegan juntos en un correo al día. Puedes cambiar la hora, y los días sin nada nuevo no se envía ningún correo.

Ajustes de notificaciones. Activa o desactiva los correos de ★3 y el resumen diario, y elige la hora.
Ajustes de notificaciones. Activa o desactiva los correos de ★3 y el resumen diario, y elige la hora.
El correo de un mensaje ★3.
El correo de un mensaje ★3.
El correo de resumen diario.
El correo de resumen diario.

Desde el plan Pro, también puedes enviar los mensajes a Slack, Chatwork, Microsoft Teams, Google Chat y Discord.

Notificaciones por chat (desde el plan Pro).
Notificaciones por chat (desde el plan Pro).

Webhooks

En el plan Business, Formchan envía un POST con JSON a tu URL cada vez que llega un mensaje y la IA lo ha leído.

Ajustes de webhooks (plan Business).
Ajustes de webhooks (plan Business).

La cabecera X-Formchan-Signature contiene un HMAC-SHA256 del cuerpo de la petición, firmado con el secreto de tu webhook, con el formato sha256=…. Calcula el mismo valor por tu parte para comprobar que la petición viene de verdad de Formchan.

Ejemplo de cuerpo

{
  "event": "submission.created",
  "at": "2026-10-12T09:29:41.000Z",
  "workspace": { "id": "w_…", "name": "Harbor Design Studio" },
  "submission": {
    "id": "sb_…",
    "number": 1,
    "form": { "id": "fm_…", "name": "Contact" },
    "received_at": "2026-10-12T09:29:38.000Z",
    "name": "Emily Parker",
    "email": "emily@example.com",
    "fields": { "name": "Emily Parker", "email": "emily@example.com", "message": "…" },
    "stars": 3,
    "tags": [{ "id": "tg_…", "name": "Inquiry", "by": "ai" }],
    "summary": "Wants a consultation on adding a second floor.",
    "reason": "Concrete request with budget and timeline.",
    "done": false
  }
}

Comprobar la firma (Node.js)

import crypto from 'node:crypto';

// rawBody: the request body as a string, before JSON.parse
function isFromFormchan(rawBody, signature, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(signature || '');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Si no llegan los mensajes, revisa la URL del action y la opción “Aceptar envíos solo desde estos sitios” en los ajustes del formulario.

Dedica tu atención a las consultas importantes.

Gratis hasta 100 mensajes al mes. Solo necesitas una dirección de correo. Sin tarjeta de crédito.

Empieza gratis