Le formulaire généré n'envoie rien
Lovable, Bolt, v0 et Cursor produisent de très bonnes interfaces : champs, validation, bouton, message de remerciement. Mais par défaut, ce bouton ne fait souvent rien d'utile — le gestionnaire affiche le succès immédiatement, sans aucune requête réseau. Les données ne sont enregistrées nulle part.
Autre cas fréquent : l'IA câble elle-même Supabase ou Lovable Cloud. Cela fonctionne, mais pour un simple formulaire de contact, cela entraîne une base de données, des accès à configurer et souvent un service d'email séparé comme Resend. Le test prend une minute : ouvrez les outils du navigateur, onglet Network, et envoyez le formulaire. Sans POST, le formulaire est décoratif — le cas de la majorité des sites générés.
Trois routes réellement utilisables
1. Le backend du générateur. Lovable Cloud ou Supabase avec un connecteur d'email. Pertinent si votre application utilise déjà authentification, tables ou traitements serveur ; superflu pour un formulaire de contact isolé.
2. Un backend hébergé de formulaires. La page envoie un POST à un point d'entrée unique avec une clé publique ; le service conserve les demandes et notifie par email et Telegram. La voie la plus rapide pour une landing ou un site vitrine : ni schéma, ni fonction edge, ni serveur.
3. Votre propre fonction serverless. Contrôle total, responsabilité totale : code, secrets, filtrage du spam et nouvelles tentatives de livraison vous incombent. Justifié quand le formulaire s'inscrit dans une logique plus large. Cet article suit la deuxième route : elle fonctionne à l'identique dans Lovable, Bolt, v0, Cursor et tout générateur produisant du HTML ou du React.
Les critères de choix d'un backend de formulaire
La preuve de réception. Le « merci » affiché ne prouve rien : il faut un stockage des demandes avec leurs états — accepté, livré, spam. Dans Formgong, c'est la boîte de réception avec le détail de livraison par canal.
La protection anti-spam. Un honeypot au minimum ; mieux avec Turnstile ou captcha en option et une évaluation du spam qui ne consomme pas votre quota mensuel. Les canaux. L'email comme base, Telegram pour réagir vite, des webhooks signés pour les intégrations.
La localisation des données. Avec des clients européens, vérifiez où les demandes sont physiquement stockées : Formgong garde tout sur Cloudflare en juridiction UE — D1, file d'attente et fichiers. Les changements sans reconstruction. Destinataires, redirections et réponse automatique doivent se régler dans un tableau de bord, pas dans un code que l'IA devrait régénérer.
Une seule consigne, quel que soit le générateur
Ouvrez le chat de votre projet et demandez de connecter le formulaire existant en conservant son design. La consigne ci-dessous convient à Lovable, Bolt, v0 et Cursor ; remplacez fk_your_access_key par la clé affichée dans la connexion du site du formulaire concerné, sur le tableau de bord Formgong.
Elle se limite au texte : pas de téléversement de fichiers, pas de secret de fournisseur d'email ni de token de bot dans le frontend. La clé d'envoi, elle, est publique et peut rester dans le code.
Connect this form to Formgong. Keep its design and field names. 1. Send a POST request to https://formgong.com/submit (FormData or JSON with access_key). 2. access_key: fk_your_access_key (a public key; it can stay in the code). 3. Show success only after a response with success: true. 4. On error, keep the entered field values and show an error message. 5. Add a hidden botcheck field (honeypot) with no visible UI change. 6. Do not add tokens, secrets, or file inputs.
Exemple de requête API
Remplacez la clé et gérez l'attente, la réussite et l'erreur. Conservez les champs lorsqu'un envoi échoue.
async function onSubmit(event) {
event.preventDefault();
const fields = Object.fromEntries(new FormData(event.currentTarget));
const response = await fetch("https://formgong.com/submit", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
// _lang: language of Formgong messages and the autoreply (multilingual site: document.documentElement.lang).
body: JSON.stringify({ _lang: "en", ...fields, access_key: "fk_your_access_key" }),
});
const result = await response.json();
if (!result.success) throw new Error(result.message || "Could not send. Please try again.");
return result.message; // localized "Sent. Thank you!"
}Testez la livraison, pas le message de succès
Une fois les changements appliqués, envoyez une demande de test identifiable et suivez tout le chemin :
- La requête. L'onglet Network affiche un POST vers
https://formgong.com/submitavecsuccess: truedans la réponse. - L'enregistrement. La demande apparaît dans la boîte de ce formulaire sur Formgong, avec tous ses champs.
- L'email. Avec Free, l'e-mail arrive dans le résumé du lendemain matin à 08:00, dans le fuseau du titulaire du compte, pour un destinataire. Avec Pro et Business, chaque demande est envoyée par e-mail. Vérifiez les indésirables.
- Telegram. Telegram est immédiat sur tous les plans, y compris Free. Si un chat est connecté, le message arrive dans ce chat.
Après publication, recommencez sur le domaine réel : l'aperçu de l'éditeur peut se comporter autrement. Le guide de diagnostic détaille chaque étape.
Après le lancement, changez les réglages sans régénérer
Une fois le formulaire opérationnel, la plupart des changements ne ramènent pas au générateur : destinataires des emails, chats Telegram, redirections après envoi, réponse automatique au visiteur et protections se règlent dans le tableau de bord Formgong.
Si les demandes cessent d'arriver après une refonte, ne devinez pas : le diagnostic de formulaire de Formgong charge votre page et vérifie le snippet installé — adresse, méthode, clé et champs requis. L'analytique du formulaire montre en plus où les visiteurs abandonnent le remplissage : moins coûteux qu'un test A/B et sans code à régénérer.
Les erreurs typiques des formulaires générés
- Le succès s'affiche, aucune requête ne part
- Le générateur a produit un gestionnaire décoratif. Demandez-lui d'envoyer les données avec fetch et de n'afficher le succès qu'après une réponse
success: true. - Le code contient encore fk_your_access_key
- C'est un exemple à remplacer par la vraie clé, dans la section de connexion du site de votre formulaire.
- Les champs se vident après une erreur
- Le visiteur perd son texte. Le gestionnaire doit conserver les valeurs et afficher l'erreur ; précisez-le dans la consigne suivante.
- Turnstile activé, formulaire cassé
- Le widget doit être ajouté au code et transmettre
cf-turnstile-response. Reprenez l'exemple de connexion du tableau de bord après tout changement de protection. - La demande est enregistrée mais aucun email n'arrive
- Vérifiez la confirmation de l'email du propriétaire et des destinataires : une adresse non confirmée ne reçoit rien. Le diagnostic de livraison détaille les étapes.
Questions fréquentes
Faut-il Supabase pour un formulaire généré ?
Pas pour un formulaire de contact isolé. Un backend hébergé accepte le POST avec une clé publique et livre les notifications. Supabase ou Lovable Cloud se justifient quand l'application les exploite déjà pour d'autres usages.
access_key peut-il rester dans le code généré ?
Oui, c'est une clé publique de réception : elle ne donne accès ni à la boîte ni aux réglages. Secrets, tokens de bot et clés de fournisseur d'email n'ont jamais leur place dans le frontend.
La consigne fonctionne-t-elle dans tous les générateurs ?
Oui pour ceux qui produisent HTML ou React et savent exécuter fetch : Lovable, Bolt, v0, Cursor. Ils diffèrent seulement dans la façon d'appliquer les changements ; ce qu'on vérifie reste le POST et success: true.
Où les demandes des clients sont-elles stockées ?
Les demandes et les fichiers sont stockés dans l'UE, dans Cloudflare D1 et le stockage de fichiers sous juridiction UE. Les notifications vers Telegram, Slack ou Discord sont traitées par ces services, en dehors de ce stockage. Le site doit quand même afficher une politique de confidentialité.
Sources et documentation
Références officielles de ce guide : Lovable Cloud, MDN: Fetch API. Documentation Formgong, Stockage des données.
Lire au format MarkdownÀ lire également
- Faire arriver les demandes d'un formulaire Lovable dans votre boîte
- Un formulaire de contact sur un site HTML, sans serveur à maintenir
- Recevoir les demandes du site dans un chat ou groupe Telegram
- Le formulaire annonce un succès, mais l'email n'arrive pas
- Suivre les demandes du site dans Telegram, sans passer par une CRM