Formulaire de capture de leads

Formulaire de capture de leads6 min de lecture

Créer un formulaire de demande de consultation pour une entreprise de services

Un formulaire de demande de consultation pour comptables, avocats, coachs et cabinets, qui demande comment et quand appeler, et garde les détails sensibles pour l'appel.

Preet SutharFondateur, Ikiform

Demandez le nom, l'e-mail, le moyen de joindre la personne et à peu près quand, plus un sujet général, et gardez tous les détails de sa situation pour l'appel. Enregistrez son fuseau horaire depuis le navigateur pour qu'une matinée demandée corresponde à sa matinée. Appliquez dans votre propre code les règles que le schéma du formulaire ne peut pas exprimer, comme un numéro de téléphone obligatoire seulement si la personne a choisi un appel téléphonique.

Ce qui change avec une demande de consultation

Une demande de consultation vient d'une personne qui a un problème : un courrier des impôts, un litige de bail, une entreprise à créer. Elle veut l'expliquer, et le formulaire l'y invite. C'est là le piège. Tout ce qu'elle tape est stocké avec la soumission, affiché dans les e-mails de notification et envoyé par webhook partout où vous les dirigez. Les numéros de compte et les détails d'un dossier n'ont leur place nulle part là-dedans.

La mission du formulaire est donc plus étroite qu'il n'y paraît : qui est la personne, comment et quand la joindre, et à peu près de quoi il s'agit. Tout le reste attend l'appel, où vous contrôlez ce qui est noté et où c'est conservé.

Ce que demande un formulaire de consultation, et ce qui attend l'appeldans le formulairependant l'appelquinom, e-mailcommente-mail,téléphone ouvisioquandjour, créneau,fuseau horairesujetun sujetgénéralsasituationdans ses motsdocumentspar votrepropre canalnuméroscomptes,identifiants,dossiersadéquationethonorairesvotre réponseCe que demande un formulaire de consultation, et ce qui attend l'appeldans le formulairependant l'appelquinom, e-mailcommente-mail, téléphone ou visioquandjour, créneau, fuseau horairesujetun sujet généralsa situationdans ses motsdocumentspar votre propre canalnuméroscomptes, identifiants, dossiersadéquation et honorairesvotre réponse
  1. Le formulaire demande qui est la personne : nom et e-mail.
  2. Il demande comment la joindre : e-mail, téléphone ou visio.
  3. Il demande quand : un jour préféré, un créneau et son fuseau horaire.
  4. Il demande de quoi il s'agit, sous la forme d'un sujet général.
  5. L'appel couvre sa situation, dans ses propres mots.
  6. Les documents passent par un canal que vous choisissez, pas par le formulaire.
  7. Les numéros de compte, identifiants et dossiers ne sont jamais tapés dans le formulaire.
  8. L'appel se termine par votre réponse sur l'adéquation et les honoraires.
La ligne du haut suffit pour réserver l'appel et le préparer. La ligne du bas, c'est ce à quoi sert l'appel.

Les champs

Aperçu

Exécute le validateur d'Ikiform dans votre navigateur. Rien n'est envoyé.

Comment souhaitez-vous être contacté ?

Seulement si vous avez choisi un appel téléphonique.

Meilleur moment

Une phrase ou deux. Merci de ne pas indiquer de numéros de compte ni de documents personnels.

Choisissez Appel téléphonique et laissez le téléphone vide : le schéma l'accepte, car un champ ne peut pas être obligatoire seulement dans certains cas. Le code ci-dessous comble ce manque.
ChampPourquoi cette forme
contact_methodUn radio, pour que le premier contact se fasse comme la personne l'a demandé
phoneFacultatif dans le schéma, exigé par votre code quand la personne choisit un appel téléphonique
preferred_dateUn champ date stocke YYYY-MM-DD. Le min de son schéma est fixe, donc la page définit demain comme min dans le navigateur
timezoneRempli depuis le navigateur avec Intl.DateTimeFormat().resolvedOptions().timeZone, comme Europe/Berlin
noteLimité à 500 caractères. Les e-mails de notification affichent jusqu'à 500 caractères par valeur, la note tient donc en entier

Des règles conditionnelles dans votre propre code

Ikiform valide chaque champ séparément. Les règles qui dépendent d'un autre champ, comme le téléphone seulement pour les appels téléphoniques, s'exécutent dans votre code. Les versions serveur peuvent les imposer réellement ; les versions navigateur guident le visiteur et n'envoient rien d'inutile.

Le script met required sur l'input du téléphone quand Appel téléphonique est choisi, définit demain comme premier jour possible dans le calendrier du visiteur et remplit le fuseau horaire masqué.

consultation.html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST" id="consult">
  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name" required />
  <label for="email">Email</label>
  <input id="email" name="email" type="email" autocomplete="email" required />

  <fieldset>
    <legend>How should we reach you?</legend>
    <label><input type="radio" name="contact_method" value="email" checked /> Email</label>
    <label><input type="radio" name="contact_method" value="phone" /> Phone call</label>
    <label><input type="radio" name="contact_method" value="video" /> Video call</label>
  </fieldset>
  <label for="phone">Phone</label>
  <input id="phone" name="phone" type="tel" autocomplete="tel" />

  <label for="topic">What is it about?</label>
  <select id="topic" name="topic" required>
    <option value="new_business">Starting a business</option>
    <option value="tax">Tax and bookkeeping</option>
    <option value="other">Something else</option>
  </select>

  <label for="preferred_date">Preferred day</label>
  <input id="preferred_date" name="preferred_date" type="date" />
  <fieldset>
    <legend>Best time</legend>
    <label><input type="radio" name="time_window" value="morning" /> Morning</label>
    <label><input type="radio" name="time_window" value="afternoon" /> Afternoon</label>
    <label><input type="radio" name="time_window" value="evening" /> Evening</label>
  </fieldset>
  <input type="hidden" name="timezone" />

  <label for="note">Anything we should know first?</label>
  <textarea id="note" name="note" rows="3" maxlength="500"></textarea>
  <p>A sentence or two. Please don't include account numbers or personal records.</p>

  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Request a consultation</button>
</form>

<script>
  const form = document.getElementById("consult");
  const phone = form.elements.phone;
  const tomorrow = new Date(Date.now() + 86400000);
  const local = new Date(tomorrow.getTime() - tomorrow.getTimezoneOffset() * 60000);

  form.elements.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
  form.elements.preferred_date.min = local.toISOString().slice(0, 10);
  form.addEventListener("change", () => {
    phone.required = form.elements.contact_method.value === "phone";
  });
</script>

Les versions côté serveur envoient avec une clé secrète : Ikiform ignore donc Allowed domains et sa vérification humaine. Chaque envoi vient alors de l'IP de votre serveur, et la limite Standard de 5 par minute par visiteur compte tous vos visiteurs ensemble. Choisissez la limite de débit Relaxed ou Custom pour un formulaire que vous envoyez via un serveur, et gardez IKIFORM_SECRET_KEY dans des variables d'environnement réservées au serveur. Les versions serveur transmettent l'en-tête Origin du visiteur, car un fetch côté serveur n'en envoie aucun, et c'est grâce à lui qu'Ikiform détecte les tests gratuits depuis localhost.

Garder les détails sensibles hors du formulaire

  • Dites-le dans le texte d'aide, comme le fait le formulaire ci-dessus. Les gens suivent une consigne claire plus souvent qu'on ne le croit.
  • N'ajoutez pas de champs pour des numéros d'identité, des numéros de compte ou des informations médicales. Si votre profession encadre les données clients, vérifiez ces règles avant de collecter autre chose que des coordonnées, et recueillez le reste par un canal qui les respecte.
  • Les noms de champ comptent aussi. Ikiform retient l'e-mail de notification pour vérification quand un nom de champ ressemble à un identifiant sensible, y compris les noms contenant password, ssn, cvv ou seed. Un champ nommé seed_round dans le formulaire d'un cabinet de conseil pour startups déclenche ce mécanisme. Nommez-le funding_stage.
  • Ne dirigez les webhooks que là où toute l'équipe a le droit de lire les noms des clients, comme un canal privé, pas un canal ouvert à toute l'entreprise.

La première réponse

L'e-mail de notification arrive avec Reply pointant vers le visiteur : la première réponse peut donc partir directement de votre boîte. Donnez-lui une seule mission : confirmer un horaire. Deux créneaux concrets dans la plage indiquée sont plus faciles à accepter qu'une question sur ce qui l'arrange.

  • Convertissez sa plage horaire dans votre heure avant d'écrire. Un morning à Australia/Sydney correspond à la soirée de la veille à Londres.
  • Proposez deux créneaux dans son fuseau horaire, et nommez ce fuseau dans l'e-mail, pour que personne n'arrive une heure en avance.
  • Dites comment vous appellerez : le numéro donné, ou un lien de visio que vous envoyez avec l'invitation.
  • Si le sujet sort de votre domaine, dites-le dans la première réponse et suggérez quelqu'un qui s'en occupe. Cette réponse vaut quand même la peine d'être envoyée.

Vérifiez que tout fonctionne

  1. Choisissez Appel téléphonique, laissez le téléphone vide et envoyez. Le navigateur ou votre serveur l'arrête avec un message.
  2. Choisissez E-mail, envoyez et ouvrez la soumission. Elle n'a pas de valeur phone et contient votre fuseau horaire, comme America/Chicago.
  3. Essayez de choisir aujourd'hui comme jour préféré. Le sélecteur de date ne le propose pas.
  4. Vérifiez l'e-mail de notification. La note s'affiche en entier, et Reply écrit au visiteur.
  5. Listez vos id de champ et vérifiez qu'aucun ne contient password, ssn, cvv ou seed.

Pièges

  • Une date sans fuseau horaire. preferred_date est un jour du calendrier, pas un instant. Lisez-le avec timezone et time_window avant d'appeler.
  • Des boutons radio sans choix. Un groupe de boutons radio sans sélection n'envoie rien. Ça convient pour time_window, qui est facultatif, et c'est pourquoi contact_method commence avec E-mail coché.
  • Pas de confirmation de rendez-vous. Ikiform n'envoie pas d'e-mail à la personne qui remplit le formulaire. Votre première réponse confirme l'horaire. Si vous voulez que les gens choisissent eux-mêmes un créneau, passez la main à un outil de réservation comme dans le formulaire de demande de démo.
  • Le format du téléphone. Le champ téléphone accepte de 6 à 15 chiffres tels que tapés. Activez e164 si vous appelez depuis un système qui exige +14155550123 ; les numéros sans indicatif pays sont alors refusés.

Questions

Une étape vous bloque, ou vous voulez un guide pour votre cas ? Écrivez à hello@ikiform.com.