Créez tous les formulaires dont votre site a besoin en faisant glisser des champs sur un canevas, sans code ni modification de template. Affichez ou masquez des champs selon les réponses du visiteur, recueillez des fichiers, et consultez chaque réponse dans une boîte de réception consultable que vous pouvez exporter en CSV.

Constructeur par glisser-déposer

Dix-neuf types de champs, réorganisation par glisser-déposer, configuration de chaque champ dans un panneau latéral, et aperçu du vrai formulaire avant publication.

Logique conditionnelle

Affichez ou masquez n’importe quel champ selon les réponses données aux autres. Les champs masqués ne sont jamais validés ni enregistrés.

Boîte de réception des soumissions

Recherchez, filtrez et marquez d’une étoile les réponses, marquez-les comme lues ou comme spam, parcourez-les comme une boîte de réception, et exportez la sélection courante en CSV.

Livraison partout

Envoyez un e-mail à votre équipe, répondez automatiquement au visiteur, et envoyez (POST) des données JSON signées vers n’importe quel point de terminaison, avec nouvelles tentatives et journal de livraison.

Cas d’utilisation

Formulaires de contact et de demande

Le cas classique, avec déjà intégrées les parties qui demandent habituellement un développeur.

  • Posez une question complémentaire différente selon le type de demande.
  • Répondez automatiquement au visiteur tout en notifiant en interne la bonne boîte de réception.
  • Bloquez le spam grâce à un CAPTCHA, un champ piège caché et une limite de fréquence par visiteur.

Demandes de devis et briefs de projet

Des formulaires plus longs, où les questions dépendent de ce que le visiteur achète.

  • Faites apparaître les questions sur le budget et le délai uniquement une fois un type de projet choisi.
  • Acceptez un cahier des charges sous forme de fichier téléversé.
  • Envoyez chaque brief directement dans votre CRM via un webhook.

Enquêtes et avis

Notes par étoiles, curseurs et choix multiples, avec une question complémentaire facultative.

  • Demandez une adresse e-mail uniquement lorsque le répondant souhaite être recontacté.
  • Regroupez les questions avec des titres, des blocs de texte et des séparateurs.
  • Exportez les résultats en CSV et analysez-les dans un tableur.

Inscriptions, candidatures et adhésions

Tout formulaire qui recueille des données structurées et un document.

  • Limitez un formulaire à une seule soumission par adresse e-mail.
  • Fermez-le automatiquement à une date donnée, ou une fois un certain nombre de réponses atteint.
  • Exigez que les visiteurs se connectent avant de pouvoir soumettre.

Prérequis

  • Larapen CMS v1.0.0 ou ultérieur
  • PHP 8.3+
  • MySQL 8.0+
Remarque : Form Builder est entièrement autonome : il ne dépend d’aucun autre add-on. Le CAPTCHA est facultatif et utilise le fournisseur déjà configuré dans les paramètres principaux. Les webhooks et les réponses automatiques sont envoyés via votre file d’attente ; si aucun worker ne tourne, ils sont envoyés lors du prochain passage de la file plutôt qu’instantanément.

Installation

Étape 1 : Téléverser l’add-on

Dans le panneau d’administration, allez dans Admin → Extensions → Add-ons et cliquez sur le bouton Téléverser un add-on. Sélectionnez le fichier ZIP de l’add-on : le système l’extrait automatiquement et l’add-on apparaît dans la liste des add-ons installés.

Étape 2 : Activer l’add-on

Trouvez Form Builder dans la liste et cliquez sur Activer. Ses migrations et ses permissions sont mises en place automatiquement, et un formulaire Contactez-nous prêt à l’emploi est créé pour que vous ayez tout de suite quelque chose à examiner.

Étape 3 : Ouvrir le constructeur

Allez dans Admin → Formulaires → Tous les formulaires et cliquez sur un formulaire pour ouvrir le constructeur. Voir Démarrage rapide.

Code d’achat (clé de licence)

Form Builder est vendu comme un produit séparé, il possède donc son propre code d’achat (clé de licence), distinct du code d’achat de l’application principale et de celui de chaque autre add-on. Il vous est demandé lorsque vous activez Form Builder dans Panneau d’administration → Add-ons.

Nos produits sont vendus sur trois plateformes. La façon dont vous recevez un code d’achat dépend de l’endroit où vous avez acheté le produit.

Plateforme / Marketplace Comment obtenir le code d’achat Où le retrouver
Boutique bedigit.com
Achat sur le site (Shop)
Généré automatiquement lorsque la commande est payée, puis envoyé par e-mail, soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. Mon compte → Mes licences sur bedigit.com
Gumroad Créé dès que Gumroad nous notifie la vente, puis envoyé dans un e-mail séparé, en plus du reçu Gumroad. L’e-mail de licence, votre Bibliothèque Gumroad et Mon compte → Mes licences sur bedigit.com
Envato Market
CodeCanyon
Délivré par Envato, pas par nous, et jamais envoyé par e-mail : vous le téléchargez vous-même depuis votre compte Envato. Compte Envato → Downloads → License certificate & purchase code
Vérifiez votre dossier de spam. Pour les achats effectués sur la Boutique bedigit.com et sur Gumroad, le code d’achat est envoyé par e-mail. Les e-mails de licence automatiques sont très souvent filtrés : si le message ne se trouve pas dans votre boîte de réception, regardez dans votre dossier spam / courrier indésirable avant de contacter le support, et ajoutez notre adresse d’expédition à vos contacts ou à votre liste d’autorisation.

1. Boutique bedigit.com (achat sur le site)

  • Dès que le statut de paiement de la commande devient Payée, une clé de licence est générée automatiquement pour chaque article sous licence de la commande (une clé par unité achetée : acheter 3 unités donne 3 clés distinctes).
  • Elle est envoyée par e-mail à l’adresse utilisée pour la commande, soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. Vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • La clé reste disponible dans votre compte sous Mon compte → Mes licences. Les clés sont masquées dans la liste ; ouvrez la page de détail de la licence pour afficher et copier la clé complète, voir les domaines sur lesquels elle est activée, et désactiver un domaine pour libérer un emplacement d’activation.
  • La facture correspondante se trouve sous Mon compte → Mes commandes.

2. Gumroad

  • Un achat sur Gumroad produit deux e-mails distincts : le reçu Gumroad (envoyé par Gumroad, donnant accès aux fichiers) et un e-mail de clé de licence (envoyé par bedigit.com) qui contient votre code d’achat.
  • L’e-mail de clé de licence est généré dès que Gumroad nous notifie la vente, il arrive donc normalement quelques secondes après le paiement. Ici aussi, vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • Lorsque le produit Gumroad utilise la fonctionnalité de clés de licence propre à Gumroad, la même clé apparaît aussi dans votre reçu Gumroad et sous Bibliothèque dans votre compte Gumroad.
  • La clé est également enregistrée sur votre compte bedigit.com, sous Mon compte → Mes licences.

3. Envato Market (CodeCanyon)

  • Envato délivre lui-même le code d’achat. Nous ne l’envoyons jamais par e-mail, car nous ne le recevons pas.
  • Récupérez-le depuis votre compte Envato : Downloads → trouvez l’article → License certificate & purchase code (la version texte comme la version PDF le contiennent).
  • Il ressemble à xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Toujours introuvable ? Ouvrez un ticket depuis notre Centre d’aide avec l’adresse e-mail utilisée pour l’achat et, le cas échéant, le numéro de commande ou le reçu Gumroad. Nous pouvons retrouver la clé pour vous.

Démarrage rapide

Créer et publier un formulaire fonctionnel prend environ deux minutes.

  1. Allez dans Admin → Formulaires → Tous les formulaires et cliquez sur Nouveau formulaire.
  2. Donnez-lui un nom interne, visible de vous seul, et enregistrez. Vous arrivez directement dans le constructeur.
  3. Cliquez sur des types de champs dans la palette de gauche pour les ajouter, ou faites-les glisser sur le canevas.
  4. Cliquez sur un champ du canevas pour ouvrir ses paramètres à droite : libellé, obligatoire, largeur, validation, logique.
  5. Cliquez sur Enregistrer les modifications (ou appuyez sur Ctrl/Cmd + S).
  6. Cliquez sur Aperçu pour essayer le vrai formulaire, puis ouvrez Paramètres du formulaire pour choisir qui est notifié.

Votre formulaire est maintenant en ligne à l’adresse /forms/<slug>. Pour l’insérer plutôt dans une page existante, voir Intégrer un formulaire.

Rien à configurer au préalable. L’activation de l’add-on crée un formulaire Contactez-nous fonctionnel avec un champ conditionnel, un téléversement de fichier et une case de consentement. Ouvrez-le dans le constructeur pour voir comment chaque élément est configuré.

Le constructeur

Le constructeur comporte trois volets : la palette de champs à gauche, le canevas au centre, et les paramètres du champ sélectionné à droite.

Ajouter et organiser les champs

  • Ajouter un champ : cliquez dessus dans la palette pour l’ajouter à la fin, ou faites-le glisser à un emplacement précis du canevas.
  • Réorganiser : faites glisser un champ par la poignée située sur son bord gauche.
  • Dupliquer ou supprimer : utilisez les boutons qui apparaissent sur le champ lorsque vous le survolez ou le sélectionnez. Supprimer un champ supprime aussi toute règle de logique qui y faisait référence.
  • Sélectionner : cliquez n’importe où sur un champ pour le charger dans le volet des paramètres.

Chaque champ du canevas affiche son type, son nom machine, sa largeur, ainsi que des badges pour Obligatoire, Logique et les champs masqués : vous lisez ainsi tout le formulaire d’un coup d’œil.

Pensez à enregistrer. Le constructeur conserve vos modifications dans le navigateur jusqu’à ce que vous cliquiez sur Enregistrer les modifications. Un indicateur Modifications non enregistrées apparaît dès qu’un élément est modifié, et quitter la page vous avertit d’abord.

Paramètres du champ

Le volet des paramètres comporte trois onglets.

Onglet Contenu
Champ Libellé, nom machine, texte indicatif, texte d’aide, valeur par défaut, choix, largeur, obligatoire, et si le champ est affiché ou non.
Règles La validation propre à ce type de champ : longueur minimale et maximale, bornes numériques, plage de dates, lignes, types et tailles de fichiers acceptés, ou une expression régulière.
Logique Affiche ou masque le champ selon d’autres réponses. Voir Logique conditionnelle.

Le nom machine est la clé sous laquelle la réponse est enregistrée. Il apparaît comme en-tête de colonne dans l’export CSV, comme clé dans les données du webhook, et comme champ ciblé par les règles de logique. Il est généré à partir du libellé, et vous pouvez le modifier : le renommer met à jour toutes les règles de logique qui y faisaient référence.

Mise en page et largeurs

Chaque champ a une largeur, de sorte que deux ou trois champs peuvent partager une ligne : 1/1, 2/3, 1/2, 1/3 et 1/4. Sur téléphone, chaque champ occupe de toute façon toute la largeur.

Trois types de champs ne portent aucune réponse et servent uniquement à structurer le formulaire :

  • Titre : un titre de section.
  • Bloc de texte : un paragraphe d’explication.
  • Séparateur : une ligne horizontale.

Types de champs

Groupe Type Ce qu’il recueille
TexteLigne simpleUne réponse courte. Longueur minimale et maximale facultatives, et une expression régulière.
ParagrapheUne réponse plus longue, avec un nombre de lignes configurable.
E-mailUne adresse e-mail validée. Peut servir d’adresse de réponse et de destinataire de la réponse automatique.
TéléphoneUn numéro de téléphone, avec un modèle facultatif.
Site webUne URL validée.
NombreUn nombre, avec minimum, maximum et pas facultatifs.
ChoixListe déroulanteUne valeur parmi une liste.
Boutons radioUne valeur parmi une liste, toutes les options étant visibles.
Cases à cocherPlusieurs valeurs, avec un nombre minimal et maximal de sélections facultatif.
ConsentementUne case unique pour une déclaration. Lorsqu’elle est obligatoire, elle doit réellement être cochée.
AvancéDateUne date, avec des bornes minimale et maximale facultatives.
HeureUne heure de la journée.
NoteUne note par étoiles ; vous choisissez le nombre d’étoiles.
CurseurUne valeur sur une échelle, avec minimum, maximum et pas.
Téléversement de fichierUn ou plusieurs fichiers. Voir Fichiers téléversés.
CachéUne valeur fixe envoyée avec le formulaire mais jamais affichée.
Mise en pageTitreRien : un titre de section.
Bloc de texteRien : un paragraphe d’explication.
SéparateurRien : une ligne horizontale.
Les libellés des choix ne sont pas traduits. Le libellé, le texte indicatif et le texte d’aide d’un champ sont traduits par langue, mais les options d’une liste déroulante, d’un groupe de boutons radio ou de cases à cocher sont saisies une seule fois. Sur les formulaires multilingues, préférez des options qui se lisent de la même façon dans toutes les langues : tranches de prix, nombres, dates, noms de produits.

Logique conditionnelle

Tout champ peut être affiché ou masqué selon ce que le visiteur a répondu ailleurs. Ouvrez l’onglet Logique du champ, activez N’afficher ce champ que dans certains cas, et ajoutez une ou plusieurs conditions.

Une règle se lit comme une phrase :

Show this field  when  all  of these match:
    [ Reason ]  [ is ]  [ support ]
  • Afficher ou Masquer : ce qui se passe lorsque les conditions sont remplies.
  • toutes ou au moins une : si chaque condition doit être remplie, ou une seule d’entre elles.
  • Les conditions peuvent cibler n’importe quel autre champ qui porte une réponse. Les blocs de mise en page ne peuvent pas être testés.
Un champ masqué est réellement absent. Il n’est pas validé : un champ obligatoire que le visiteur n’a jamais vu ne peut donc pas bloquer le formulaire ; et sa valeur n’est pas enregistrée : une réponse masquée ne se retrouve donc jamais dans votre boîte de réception, votre export CSV ou votre webhook. Cette règle est appliquée côté serveur, pas seulement dans le navigateur.

Opérateurs

OpérateurCorrespond lorsque le champ testé…
est…est égal à la valeur. Pour les cases à cocher, lorsque la valeur fait partie des cases cochées.
n’est pas…n’est pas égal à la valeur.
contient…contient la valeur sous forme de texte.
ne contient pas…ne contient pas la valeur sous forme de texte.
est supérieur à…est numériquement plus grand. Pour les cases à cocher, lorsque plus de cases que ce nombre sont cochées.
est inférieur à…est numériquement plus petit.
est vide…n’a aucune réponse.
n’est pas vide…a une réponse, quelle qu’elle soit.
est coché…est une case de consentement cochée, ou un groupe de cases à cocher avec au moins une sélection.
n’est pas coché…est une case de consentement non cochée, ou un groupe de cases à cocher vide.

Les comparaisons ignorent la casse : une règle saisie comme support correspond donc aussi à une réponse enregistrée comme Support. est vide, n’est pas vide, est coché et n’est pas coché ne testent rien d’autre : ils ne prennent donc pas de valeur.

Exemples

Poser une question complémentaire uniquement lorsqu’elle s’applique

Sur un formulaire de contact, demandez une référence de commande uniquement aux personnes qui choisissent le support technique :

Field:  Order reference   (required)
Logic:  Show this field when all of these match:
            Reason  is  support

Toute personne qui choisit un autre motif ne voit jamais ce champ, et le formulaire est envoyé sans lui.

Faire apparaître un champ lorsqu’une case est cochée

Sur un formulaire d’avis, ne demandez une adresse e-mail qu’aux personnes qui souhaitent une réponse :

Field:  Where should we reply?   (required)
Logic:  Show this field when all of these match:
            I would like someone to get back to me  is checked

Gérer le cas “autre”

Field:  Tell us what you have in mind   (required)
Logic:  Show this field when all of these match:
            Project type  is  other

Conditions en chaîne

Les règles peuvent cibler des champs eux-mêmes conditionnels. Si le champ testé par une règle est masqué, il est considéré comme n’ayant aucune réponse, et le champ dépendant est donc masqué lui aussi. Vous pouvez enchaîner plusieurs niveaux sans rien configurer de particulier.

Paramètres du formulaire

Ouvrez un formulaire et cliquez sur Paramètres du formulaire. Les paramètres sont regroupés en six onglets.

Général

ParamètreRôle
Nom interneLe nom sous lequel le formulaire est listé dans l’administration. Les visiteurs ne le voient jamais.
Slug d’URLL’adresse de la page publique, sous /forms/. Générée à partir du nom si elle est laissée vide.
Titre public et descriptionAffichés au-dessus du formulaire. Traduits par langue.
Libellé du boutonLe texte du bouton d’envoi.
Après l’envoiAfficher un message de remerciement, ou rediriger vers l’URL de votre choix.

Comportement

ParamètreRôle
Formulaire en ligneDésactivé, met le formulaire hors ligne partout à la fois, y compris partout où il est intégré.
Lui donner une page publiqueDésactivé, le formulaire n’existe que là où vous l’intégrez, sans page propre.
Exiger une connexionSeuls les visiteurs connectés peuvent voir et envoyer le formulaire.
Une soumission par adresse e-mailBloque une deuxième soumission provenant d’une adresse déjà utilisée.
Nombre maximal de soumissionsLe formulaire se ferme de lui-même une fois ce nombre atteint.
Ouverture le / Fermeture leUne période en dehors de laquelle le formulaire est fermé.
Message de fermetureCe que voit un visiteur lorsque le formulaire est fermé. Traduit par langue.
Enregistrer les soumissionsDésactivé, vous recevez toujours les e-mails et les webhooks sont toujours déclenchés, mais rien n’est conservé sur le serveur.
Enregistrer l’adresse IPDésactivé, la colonne IP reste vide pour chaque nouvelle soumission.

Les quatre autres onglets sont décrits dans Notifications par e-mail, Réponse automatique, Webhooks et Anti-spam.

Page publique

Sauf si vous désactivez Lui donner une page publique, chaque formulaire a sa propre adresse :

https://your-site.com/forms/contact-us
https://your-site.com/fr/forms/contact-us

La page utilise votre thème actif, possède son propre titre et sa propre description SEO (définis dans l’onglet SEO des paramètres du formulaire), et est disponible dans chaque langue dans laquelle le formulaire est traduit.

Longueur de la méta-description. Les moteurs de recherche signalent les descriptions trop courtes ou trop longues : le champ demande donc entre 110 et 158 caractères, dans chaque langue que vous remplissez. Laissez-le vide pour utiliser à la place la description publique du formulaire.

Intégrer un formulaire

Pour placer un formulaire dans une page existante (une page de contact, une landing page, un article de blog), collez son jeton d’intégration dans le contenu :

[form:contact-us]

Le jeton de chaque formulaire est affiché dans la colonne Jeton d’intégration de Admin → Formulaires → Tous les formulaires ; cliquez dessus pour le copier. Collez-le partout où du contenu se modifie ( une page, une section de texte enrichi, un article) : il est remplacé par le formulaire actif lorsque la page est affichée.

  • Le formulaire fonctionne exactement comme sur sa propre page : validation, logique conditionnelle, téléversement de fichiers, CAPTCHA.
  • Vous pouvez intégrer le même formulaire sur plusieurs pages ; chacune envoie ses soumissions indépendamment.
  • Un jeton qui pointe vers un formulaire supprimé ou désactivé disparaît simplement : les visiteurs ne voient jamais le texte brut.

Les développeurs de thèmes peuvent aussi placer un formulaire directement dans un template :

<x-formbuilder-form slug="contact-us" />
<x-formbuilder-form slug="contact-us" :show-title="false" compact />

Ajouter à un menu

Pour placer un lien vers un formulaire dans votre en-tête ou votre pied de page, allez dans Admin → Menus, ouvrez le menu voulu, ajoutez un élément de type URL personnalisée, et faites-le pointer vers l’adresse du formulaire (par exemple /forms/contact-us). Le libellé est traduit par langue comme tout autre élément de menu.

Boîte de réception des soumissions

Admin → Formulaires → Soumissions liste tout ce que vos formulaires ont recueilli, les plus récentes en premier, avec quatre compteurs en haut : total, non lues, aujourd’hui et spam.

  • Recherchez dans les réponses, vos notes internes et l’adresse IP.
  • Filtrez par formulaire, par statut, par période, ou pour n’afficher que les entrées marquées d’une étoile.
  • Marquez d’une étoile tout ce sur quoi vous voulez revenir.
  • Sélectionnez-en plusieurs avec les cases à cocher pour changer leur statut ou les supprimer en une seule fois.
  • Actualisez automatiquement la liste à intervalle régulier lorsque vous guettez de nouvelles entrées.

Cliquez sur une ligne pour l’ouvrir. La page de détail affiche chaque réponse en regard de sa question, les informations du visiteur (quand, d’où, dans quelle langue, avec quel navigateur), une zone de notes internes, et des flèches pour passer à la soumission suivante ou précédente sans revenir à la liste. Ouvrir une soumission non lue la marque comme lue.

Statuts

StatutSignification
NouveauPas encore ouverte. Comptée dans le badge des non lues.
LuOuverte par un membre de votre équipe.
RéponduVous avez répondu. À définir vous-même après avoir répondu.
SpamIndésirable. Défini automatiquement lorsque les contrôles anti-spam interceptent une soumission.
ArchivéTraitée, conservée pour mémoire.

Les soumissions supprimées vont dans la Corbeille, d’où elles peuvent être restaurées. Vider la corbeille les supprime définitivement, avec leurs fichiers téléversés.

Export CSV

Le bouton Exporter en CSV télécharge exactement ce que la liste affiche actuellement : le même formulaire, le même statut, la même période et la même recherche s’appliquent.

  • Un filtre sur un seul formulaire donne une colonne par question, dans l’ordre où elles apparaissent sur le formulaire.
  • Sans filtre de formulaire, toutes les réponses de chaque soumission sont regroupées dans une seule colonne, car deux formulaires différents n’ont aucune colonne en commun.
  • Les choix sont exportés par leur libellé, et non par leur valeur enregistrée : le fichier se lit donc comme le formulaire.
  • Le fichier s’ouvre correctement dans Excel, caractères accentués compris.

Fichiers téléversés

Les fichiers joints à une soumission apparaissent sur sa page de détail avec leur nom d’origine et leur taille ; cliquez sur l’un d’eux pour le télécharger.

Les fichiers téléversés sont privés. Ils sont stockés en dehors du dossier public et ne peuvent être téléchargés que depuis le panneau d’administration, par une personne autorisée à consulter les soumissions. Il n’existe aucune URL publique à deviner ou à partager : un CV ou une pièce d’identité envoyé via votre formulaire ne devient donc jamais accessible depuis le web.

Ce qu’un champ accepte (types de fichiers, taille maximale, nombre de fichiers) se règle champ par champ dans son onglet Règles, dans les limites globales du site définies dans Paramètres globaux. Un champ peut restreindre cette liste, jamais l’élargir.

Notifications par e-mail

Dans l’onglet Notifications des paramètres d’un formulaire :

ParamètreRôle
M’envoyer les nouvelles soumissions par e-mailDésactive la notification sans affecter la boîte de réception.
DestinatairesUne ou plusieurs adresses, séparées par des virgules. Laissez vide pour notifier plutôt tous les administrateurs.
Objet de la notificationVotre propre ligne d’objet. Utilisez {form} et {site} comme variables.
Champ de réponseLe champ e-mail qui appartient au visiteur, afin que répondre à la notification lui parvienne directement.

L’e-mail liste chaque réponse en regard de sa question et renvoie directement à la soumission dans le panneau d’administration. Les administrateurs peuvent aussi se désabonner individuellement sous Mon compte → Notifications, et l’ensemble du type de notification peut être désactivé pour tout le site dans les paramètres de notification principaux.

Réponse automatique

Une réponse automatique confirme au visiteur que son message est bien arrivé. Dans l’onglet Réponse automatique :

  • Activez Envoyer une réponse automatique.
  • Choisissez à quel champ e-mail elle est envoyée, ou laissez la détection automatique.
  • Rédigez l’objet et le message. Tous deux sont traduits par langue, et le visiteur reçoit la langue qu’il a utilisée.

Le message peut reprendre ce qui a été envoyé. Écrivez le nom machine d’un champ entre accolades :

Hello {full_name},

Thank you for your quote request. Our team is reviewing your brief
and will send you a costed proposal within two business days.

{form} et {site} sont également disponibles. Les réponses sont adressées à la première adresse de votre liste de Destinataires : un visiteur qui répond à la confirmation atteint donc une vraie boîte de réception.

Webhooks

Un webhook envoie chaque soumission directement vers un autre système (un CRM, un service de tableur, une plateforme d’automatisation, ou votre propre application) sous forme de requête POST JSON.

Dans l’onglet Webhook des paramètres d’un formulaire, activez Envoyer les soumissions à un webhook et collez l’URL du point de terminaison. Cliquez ensuite sur Envoyer un test : des données d’exemple partent immédiatement et le résultat s’affiche à l’écran, ce qui vous permet de configurer le côté réception avant même qu’un visiteur ne remplisse le formulaire.

Signature

Définissez un secret de signature et chaque requête portera une signature que votre point de terminaison pourra vérifier :

X-Larapen-Signature: sha256=<hmac of the raw body>
X-Larapen-Event:     form.submission.created
X-Larapen-Form:      contact-us
X-Larapen-Delivery:  <unique id for this attempt>

Recalculez le HMAC du corps brut de la requête avec votre secret et comparez-le à l’en-tête. S’ils diffèrent, la requête ne provient pas de votre site, ou elle a été modifiée en chemin. La documentation développeur en donne un exemple complet.

Nouvelles tentatives et journal de livraison

Si le point de terminaison ne répond pas avec un code de succès, la livraison est automatiquement retentée après une minute, puis cinq, puis quinze. Chaque tentative est enregistrée sous Admin → Formulaires → Journal des webhooks, avec son statut, le code HTTP, sa durée, les données exactes envoyées et la réponse reçue.

  • Ouvrez n’importe quelle entrée pour inspecter les données, et copiez-les pour tester votre point de terminaison.
  • Utilisez Renvoyer pour rejouer une livraison échouée une fois le point de terminaison corrigé : cela renvoie exactement ce qui avait été envoyé à l’origine.
  • Les anciennes entrées sont nettoyées automatiquement ; voir Confidentialité et conservation.
Les livraisons sont mises en file d’attente. Un point de terminaison lent ou injoignable ne ralentit jamais le visiteur qui envoie le formulaire. Si aucun worker de file d’attente ne tourne sur votre site, les livraisons partent lors du prochain passage de la file au lieu d’immédiatement.

Anti-spam et CAPTCHA

Trois défenses s’exécutent sur chaque formulaire public, et elles se cumulent : un robot doit toutes les franchir.

1. Le piège caché

Chaque formulaire comporte un champ qu’aucun humain ne voit jamais, ainsi qu’un enregistrement signé du moment où la page a été affichée. Une soumission qui remplit le champ invisible, ou qui revient plus vite qu’une personne ne pourrait taper, est considérée comme automatisée.

Les soumissions interceptées sont classées, pas rejetées. Un robot reçoit le même message de remerciement qu’une personne, tandis que la soumission est enregistrée comme Spam et que rien n’est envoyé par e-mail ni à votre webhook. Comme le robot ne reçoit aucun retour, il n’a rien sur quoi s’ajuster, et comme vous conservez l’entrée, un faux positif est récupérable : ouvrez le filtre Spam de la boîte de réception et changez son statut.

2. Limitation de fréquence

Le nombre de soumissions acceptées d’un même visiteur par formulaire, et la période sur laquelle il est compté, se règlent dans Paramètres globaux. Les tentatives suivantes sont refusées avec un message indiquant au visiteur quand réessayer.

3. CAPTCHA

Form Builder utilise le fournisseur de CAPTCHA configuré dans Admin → Paramètres → Sécurité : le défi image auto-hébergé, reCAPTCHA, hCaptcha ou Turnstile. Activez-le pour l’ensemble des formulaires dans Paramètres globaux, et exemptez-en des formulaires individuellement dans leur onglet Comportement.

L’option auto-hébergée ne nécessite aucun compte tiers ni aucune requête externe, ce qui permet au formulaire de fonctionner sur les sites qui bloquent les services externes.

Multilingue

Les formulaires se traduisent à deux endroits, tous deux pilotés par un sélecteur de Langue.

Libellés des champs

Dans le constructeur, choisissez une langue dans l’en-tête et modifiez les libellés, textes indicatifs et textes d’aide pour cette langue. Enregistrez, puis changez de langue et passez à la suivante. Chaque langue est enregistrée séparément.

Enregistrez avant de changer de langue. Changer de langue dans le constructeur recharge le canevas : tout ce qui a été saisi sans être enregistré serait perdu. Le constructeur vous avertit d’abord.

Paramètres du formulaire

Dans Paramètres du formulaire, un seul sélecteur de langue au-dessus des onglets gouverne tous les paramètres traduisibles à la fois : le titre et la description publics, le libellé du bouton, les messages de succès et de fermeture, la réponse automatique, ainsi que le titre et la description SEO. Changez de langue, remplissez, et enregistrez une seule fois.

Tout le reste (les libellés du panneau d’administration, les messages de validation, les boutons du formulaire public) est déjà traduit dans les langues fournies avec la plateforme. Le contenu non traduit se rabat sur votre langue par défaut : un formulaire partiellement traduit fonctionne donc quand même.

Confidentialité et conservation

Les formulaires recueillent souvent des données personnelles : l’add-on vous donne donc un contrôle direct sur ce qui est conservé et pendant combien de temps.

ContrôleEmplacementEffet
Enregistrer les soumissions Paramètres du formulaire → Comportement Désactivé, la notification et le webhook partent toujours avec les données, mais rien n’est écrit dans votre base de données.
Enregistrer l’adresse IP Paramètres du formulaire → Comportement Désactivé, l’IP reste vide pour les nouvelles soumissions.
Supprimer les soumissions après Paramètres globaux → Conservation Les soumissions plus anciennes que ce délai sont supprimées automatiquement, avec leurs fichiers téléversés. 0 les conserve indéfiniment.
Supprimer les enregistrements de webhook après Paramètres globaux → Conservation Les entrées du journal de livraison plus anciennes que ce délai sont supprimées. 0 les conserve indéfiniment.
Champ de consentement N’importe quel formulaire Une case obligatoire qui enregistre l’accord du visiteur, stockée avec la soumission.

La purge s’exécute une fois par jour avec le planificateur de votre site. Pour la lancer manuellement, ou pour voir ce qu’elle supprimerait sans rien effacer :

php artisan formbuilder:prune
php artisan formbuilder:prune --dry-run

Paramètres globaux

Admin → Formulaires → Paramètres regroupe les valeurs par défaut qui s’appliquent à tous les formulaires.

OngletParamètreDéfaut
TéléversementsTypes de fichiers autoriséspdf, doc, docx, xls, xlsx, csv, txt, zip, jpg, jpeg, png, gif, webp
Taille maximale de fichier5120 Ko par fichier
Anti-spamCAPTCHA sur les formulairesActivé
Durée minimale de remplissage2 secondes
Soumissions par IP5
Période10 minutes
ConservationSupprimer les soumissions après0 (conservation illimitée)
Supprimer les enregistrements de webhook après30 jours
En-tête de pageL’apparence de l’en-tête des pages publiques des formulaires, qui remplace les paramètres d’en-tête de page de l’ensemble du site.

La limite de téléversement propre à votre serveur s’applique toujours en plus de la taille maximale de fichier : une valeur supérieure à ce que le serveur autorise ne prendra pas effet.

Permissions

L’add-on enregistre onze permissions, attribuables par rôle sous Admin → Utilisateurs → Rôles.

PermissionAutorise
formbuilder.forms.viewVoir la liste des formulaires et le constructeur.
formbuilder.forms.createCréer et dupliquer des formulaires.
formbuilder.forms.editModifier les formulaires et leurs champs, et envoyer des tests de webhook.
formbuilder.forms.deleteSupprimer des formulaires et gérer la corbeille des formulaires.
formbuilder.submissions.viewLire les soumissions et télécharger leurs fichiers.
formbuilder.submissions.editChanger le statut, marquer d’une étoile et rédiger des notes internes.
formbuilder.submissions.deleteSupprimer des soumissions et gérer leur corbeille.
formbuilder.submissions.exportTélécharger l’export CSV.
formbuilder.webhooks.viewConsulter le journal de livraison des webhooks.
formbuilder.settings.viewOuvrir la page des paramètres globaux.
formbuilder.settings.editModifier les paramètres globaux.
Répartition utile : donnez à un rôle de support ou de vente uniquement submissions.view, submissions.edit et submissions.export. Ses membres peuvent traiter la boîte de réception sans pouvoir modifier les formulaires eux-mêmes.

Mise à jour

Il existe deux façons de mettre à jour cet add-on : via le panneau d’administration (recommandé) ou en remplaçant manuellement les fichiers.

Méthode 1 : Téléversement depuis le panneau d’administration (recommandé)

  1. Téléchargez le dernier fichier .zip de cet add-on.
  2. Allez dans Panneau d’administration → Add-ons et cliquez sur le bouton Téléverser.
  3. Sélectionnez ou faites glisser le fichier .zip dans la zone de téléversement.
  4. Une demande de confirmation affiche le numéro de la version actuelle et celui de la nouvelle version. Cliquez sur Remplacer pour continuer.
  5. Allez dans Panneau d’administration → Mise à jour du système (/admin/update) pour appliquer les éventuelles migrations de base de données en attente.

Méthode 2 : Remplacement manuel des fichiers

Étape 1 : Remplacer les fichiers

Remplacez le dossier de l’add-on par la nouvelle version.

Étape 2 : Exécuter les migrations

php artisan migrate

Les migrations en attente ne s’exécutent qu’une fois : la commande peut donc être relancée sans risque.

Étape 3 : Vider les caches

php artisan config:clear
php artisan route:clear
php artisan view:clear

Étape 4 : Vérifier

Rendez-vous dans Admin → Formulaires → Tous les formulaires pour confirmer que l’add-on fonctionne correctement, et ouvrez l’un de vos formulaires sur le front-end pour vérifier qu’il s’envoie toujours.

Sauvegardez d’abord : sauvegardez toujours votre base de données avant d’exécuter des migrations sur un système en production. Vos soumissions se trouvent dans cette base de données.

Désinstallation

Éteindre un add-on sans rien perdre, c’est le désactiver : allez dans Panneau d’administration → Add-ons, trouvez Form Builder et cliquez sur Désactiver.

  • Ses routes, ses vues, ses entrées de menu d’administration et ses permissions cessent d’être enregistrées, et ses pages publiques de formulaire ne répondent plus.
  • Les jetons d’intégration ne sont plus remplacés : [form:<slug>] dans une page ne produit donc simplement rien au lieu d’un formulaire.
  • Ses tables de base de données et toutes les données qu’elles contiennent sont conservées, vos formulaires et chaque soumission, et ses fichiers restent dans extensions/addons/formbuilder/. Rien n’est supprimé.
  • Le code d’achat enregistré lors de l’activation est conservé lui aussi : réactiver l’add-on ne le redemande pas.
  • La désactivation est refusée tant qu’un autre add-on actif dépend de celui-ci : désactivez d’abord cet add-on.

Cliquez sur Activer sur la même carte pour le rallumer. Les migrations en attente sont rejouées, les assets republiés, et l’add-on reprend exactement là où il s’était arrêté.

Suppression

La suppression est définitive et détruit les données de l’add-on. Le bouton Supprimer n’apparaît que sur un add-on désactivé : la suppression se fait donc toujours en deux temps :

  1. Désactivez Form Builder (voir Désinstallation).
  2. Cliquez sur Supprimer sur sa carte et confirmez la demande.

Le panneau d’administration, en une seule passe :

  • exécute le hook de désinstallation de l’add-on, s’il en fournit un, tant que son code est encore sur le disque ;
  • révoque les permissions déclarées dans son addon.json ;
  • annule ses migrations (ce qui supprime ses tables de base de données et toutes les lignes qu’elles contiennent, y compris tous vos formulaires et chaque soumission recueillie) et purge ses entrées de la table migrations, afin qu’une réinstallation ultérieure reparte de zéro ;
  • supprime ses assets publiés : public/addons/formbuilder/, public/vendor/formbuilder/ et storage/app/public/addons/formbuilder/ ;
  • supprime le dossier de l’add-on extensions/addons/formbuilder/ ;
  • supprime sa ligne dans la table addons (le code d’achat enregistré disparaît avec elle) et vide le cache de l’application.
Cette action est irréversible. Exportez d’abord ce dont vous avez besoin : Admin → Formulaires → Soumissions → Exporter en CSV, une fois par formulaire, vous donne une copie de chaque réponse. Les fichiers téléversés sont supprimés avec le reste : téléchargez ceux dont vous avez encore besoin. Réinstaller l’add-on plus tard crée des tables vides, pas votre ancien contenu.

La suppression est refusée, avec un message explicatif et avant toute destruction, lorsque l’add-on est encore actif, lorsqu’un autre add-on actif en dépend, ou lorsque l’utilisateur du serveur web (PHP) ne peut pas supprimer extensions/addons/formbuilder/. Dans ce dernier cas, donnez à cet utilisateur le droit d’écriture sur le dossier et sur son parent, puis réessayez.

Supprimer le dossier en FTP ou en SSH n’est pas équivalent : les tables de l’add-on, ses entrées dans la table migrations et sa ligne addons restent en place, et sa carte reste dans la liste. Utilisez plutôt Supprimer dans le panneau d’administration.

Dépannage

Le formulaire n’apparaît pas sur sa page

  • Vérifiez que Formulaire en ligne est activé, dans Paramètres du formulaire → Comportement.
  • Vérifiez que Lui donner une page publique est activé : lorsqu’il est désactivé, le formulaire n’existe que là où vous l’intégrez.
  • Si Exiger une connexion est activé, la page n’est visible que par les visiteurs connectés.
  • Assurez-vous que le formulaire comporte au moins un champ : un formulaire vide affiche un avis à la place.

Le jeton d’intégration s’affiche en texte au lieu d’un formulaire

  • Vérifiez que le slug du jeton correspond exactement au formulaire, tirets compris : [form:contact-us].
  • Un formulaire inconnu ou désactivé fait disparaître entièrement le jeton ; si vous voyez le texte brut, c’est que l’add-on n’est pas actif. Vérifiez dans Panneau d’administration → Add-ons.
  • Videz le cache de votre site après l’activation : Admin → Paramètres → Cache.

Un champ obligatoire bloque le formulaire alors qu’il est masqué

  • Cela ne devrait pas arriver : un champ masqué n’est jamais validé. Si c’est le cas, vérifiez l’onglet Logique du champ : une règle qui cible un champ que vous avez depuis supprimé ou renommé peut ne plus correspondre.
  • Ouvrez Aperçu dans le constructeur et parcourez le formulaire : il se comporte exactement comme la page publique.

Les soumissions arrivent mais aucun e-mail

  • Vérifiez que M’envoyer les nouvelles soumissions par e-mail est activé, et que Destinataires contient une adresse valide (laissez vide pour notifier tous les administrateurs).
  • Envoyez un e-mail de test depuis Admin → Paramètres → E-mail pour confirmer que le site peut envoyer des e-mails.
  • Vérifiez que la notification n’est pas désactivée pour tout le site dans les paramètres de notification principaux, ni individuellement sous Mon compte → Notifications.
  • Regardez dans le dossier de spam du destinataire.

De vraies soumissions sont marquées comme spam

  • Réduisez ou désactivez la Durée minimale de remplissage sous Admin → Formulaires → Paramètres → Anti-spam. Un formulaire très court peut légitimement être rempli en deux ou trois secondes.
  • Rien n’est perdu : filtrez la boîte de réception sur Spam et rétablissez le statut.

Un fichier téléversé est refusé

  • Vérifiez que l’extension du fichier figure dans les Extensions acceptées du champ, ainsi que dans la liste des extensions autorisées pour tout le site sous Admin → Formulaires → Paramètres → Téléversements. Un champ peut restreindre cette liste, jamais l’élargir.
  • Vérifiez la taille par rapport à la Taille max. du champ, et par rapport à la limite de téléversement de votre serveur, qui l’emporte toujours.

Le webhook ne se déclenche jamais

  • Utilisez Envoyer un test dans l’onglet Webhook du formulaire : il affiche immédiatement la réponse du point de terminaison.
  • Consultez Admin → Formulaires → Journal des webhooks pour voir les tentatives et les réponses reçues.
  • Les livraisons sont mises en file d’attente : un site sans worker de file d’attente les envoie lors du prochain passage de la file. Vérifiez que votre worker tourne.
  • Le point de terminaison doit être une URL absolue en http:// ou https://.

Un libellé traduit ne s’affiche pas

  • Dans le constructeur, choisissez la langue dans le sélecteur de l’en-tête et vérifiez que le libellé est renseigné pour cette langue : chaque langue est enregistrée séparément.
  • Enregistrez avant de changer de langue : le changement recharge le canevas.
  • Les traductions vides se rabattent sur votre langue par défaut, ce qui est généralement le comportement souhaité.

Form Builder v1.0.0 : fait partie de la plateforme CMS Larapen.

© BeDigit. Tous droits réservés.

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket

Guides des Modules

sept. 28, 2026