No mezcles aceptación con entrega
El agradecimiento de la página puede ser solo un estado visual. El registro guardado y el correo recibido son otros dos resultados. Usa un mensaje identificable en la web publicada y síguelo. Los códigos de esta guía son de Formgong; otros servicios tienen respuestas propias.
Abre la pestaña Network
Envía el formulario y busca el POST a https://formgong.com/submit. Revisa clave, campos y respuesta. Si no existe la petición, revisa el evento del formulario o el botón. En HTML importan action y method; en JavaScript, la URL de fetch.
Lee la respuesta antes de dar las gracias
Solicita JSON con Accept: application/json. Verifica el estado HTTP y success: fetch puede terminar con una respuesta de error. El HTML clásico recibe una redirección. Llama al ejemplo dentro de try/catch y conserva los datos si falla.
// Call from your form's submit handler inside try/catch.
// Keep the entered fields when the request fails.
async function sendContactForm(form) {
const response = await fetch("https://formgong.com/submit", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
...Object.fromEntries(new FormData(form)),
access_key: "fk_your_access_key",
}),
});
const result = await response.json();
if (!response.ok || result.success !== true) {
throw new Error(result.message || "Submission failed");
}
// Accepted by Formgong; this is not email-delivery confirmation.
return result.id;
}Utiliza el código para elegir la revisión
unknown_access_key apunta a la clave; origin_not_allowed, al dominio. turnstile_missing y turnstile_failed indican problemas con el token. rate_limited y limit_exceeded son límites distintos: no se resuelven pulsando repetidamente.
Desactiva el botón mientras esperas y actívalo al terminar. No borres la consulta tras un error.
Busca también entre los registros de spam
Elige el formulario que corresponde a la clave de la web. Un botcheck rellenado puede producir una respuesta aparentemente correcta y guardar spam sin avisos. Si está activa la evaluación por IA con retención de spam, revisa también esa clasificación.
Si el registro existe, revisa los avisos
Confirma el correo del propietario, activa los avisos del formulario y verifica el destinatario. Después revisa spam, filtros y reenvíos de su buzón.
Un mensaje recibido en Telegram acota el problema al correo, pero no prueba su entrega. La respuesta automática al visitante es otra comunicación con sus propios ajustes.
Tras activar Turnstile
Actualiza la integración con el site key vigente y cf-turnstile-response. Los tokens caducan y solo se utilizan una vez; quizá debas reiniciar el widget para el siguiente intento. El secret key no va en el navegador.
Guarda una prueba útil para continuar
Anota URL, hora, estado HTTP, código y el ID del envío si aparece. No publiques datos de clientes ni secretos. Tras corregirlo, prueba todo el recorrido.
Puedes partir del ejemplo HTML o añadir avisos con la guía de Telegram.
Preguntas frecuentes
¿success: true confirma el correo?
No. Confirma que Formgong aceptó la petición. El aviso se entrega por separado.
¿Por qué llega Telegram pero no el correo?
Son canales independientes. Revisa avisos, destinatarios verificados y spam.
¿Por qué botcheck no muestra error?
Es una trampa para bots: la petición puede parecer exitosa y quedar como spam sin avisos.
¿Qué hago tras un error de Turnstile?
Obtén un token nuevo y comprueba que se envía en cf-turnstile-response. No reutilices uno ya consumido.
Fuentes y documentación
Referencias oficiales para esta guía: MDN: Fetch API, Cloudflare: Turnstile token validation. Documentación de Formgong, Dónde se guardan los datos.
Leer en Markdown