Passer au contenu

Dépannage

Trouvez ce qui ne va pas et remettez votre formulaire en marche. Chaque section part de ce que vous voyez, montre comment le vérifier et donne la solution. Formerie renvoie des codes stables, et cette page utilise leurs noms exacts.

Les sections :

Mon courriel n’est pas arrivé

Symptôme : quelqu’un a rempli le formulaire, et le courriel n’est jamais arrivé.

Comment vérifier : ouvrez Livraisons dans l’application et trouvez la réponse par formulaire et par date. Chaque ligne donne un état et un diagnostic, avec un code, un résumé et une prochaine étape. Les mêmes détails se trouvent sur la réponse elle-même, sous Soumissions. Cherchez ensuite ce que vous voyez dans ce tableau.

Ce que vous voyezCe que ça veut direQue faire
Aucune réponse sous SoumissionsElle a été refusée avant d’être conservéeConsultez Une soumission a été refusée
Une réponse sans livraisonLe formulaire n’avait aucun destinataire : elle a seulement été conservéeAjoutez un destinataire sous Livraison. Les nouvelles réponses seront envoyées par courriel. Les précédentes n’ont jamais été envoyées, et un nouvel essai ne les enverra pas
En attenteLe courriel attend sa tentativePatientez un moment
Nouvel essaiUn problème temporaire chez le fournisseur. Formerie essaie jusqu’à 5 fois, à 60 secondes d’intervallePatientez, sauf si le diagnostic est DELIVERY_STALLED
ÉchouéLe courriel n’a pas pu partirTrouvez le code dans le prochain tableau, corrigez la cause, puis choisissez Réessayer l’envoi
LivréeLe fournisseur a accepté le courrielConsultez Livré, mais pas dans la boîte de réception

Les codes de diagnostic de livraison

CodeCe que dit l’applicationSolution
DELIVERY_RECIPIENTS_UNAVAILABLEAucun destinataire actif et vérifié n’est configuré pour ce formulaireFaites confirmer le destinataire par courriel, ou ajoutez-en un autre, sous Livraison
DELIVERY_SENDER_UNAVAILABLEL’identité d’expéditeur choisie n’est pas active ou vérifiéeConfirmez l’expéditeur sous Expéditeurs, ou remettez Envoyer depuis sur l’expéditeur par défaut de Formerie
DELIVERY_CREDENTIALS_MISSINGIl manque des identifiants requis pour le fournisseur d’envoiReconnectez le fournisseur sous Destinations
DELIVERY_PROVIDER_NOT_FOUNDLe fournisseur de courriel configuré n’a pas pu être utiliséVérifiez le fournisseur sous Destinations et dans l’onglet Livraison
DELIVERY_PROVIDER_UNREACHABLELe fournisseur d’envoi n’a pas pu être jointVérifiez l’état du fournisseur, puis réessayez
DELIVERY_PROVIDER_ERRORLe fournisseur n’a pas accepté l’envoiVérifiez l’état du fournisseur et vos réglages chez lui, puis réessayez
DELIVERY_FAILEDL’envoi a échoué avant que le fournisseur accepte le messageVérifiez l’expéditeur, les destinataires et le fournisseur, puis réessayez
DELIVERY_STALLEDLes nouvelles tentatives d’envoi ont cessé après une erreur temporaireOuvrez la réponse et réessayez
DELIVERY_PROVIDER_UNREACHABLE_RETRYINGLe fournisseur d’envoi n’a pas pu être jointRien pour l’instant. Formerie va réessayer
DELIVERY_PROVIDER_TEMPORARY_ERRORLe fournisseur a renvoyé une erreur d’envoi temporaireRien pour l’instant. Formerie va réessayer
DELIVERY_QUEUED, DELIVERY_WAITING_FOR_ATTEMPTL’envoi attend une tentativeRien pour l’instant
DELIVERY_ACCEPTED, DELIVERY_COMPLETEDLe fournisseur a accepté le courrielConsultez la prochaine section s’il n’est toujours pas arrivé

Livré, mais pas dans la boîte de réception

Livrée veut dire que le fournisseur a pris le courriel. Cela ne prouve pas qu’il s’est rendu à la boîte de réception.

  1. Demandez au destinataire de regarder dans ses courriels indésirables.
  2. Si vous utilisez votre propre fournisseur de courriel, cherchez le message dans ses journaux.
  3. Ouvrez l’onglet Livraison du formulaire et assurez-vous que cette adresse s’y trouve.
  4. Ouvrez Destinataires et regardez cette adresse. Un destinataire En attente, Désactivé ou Supprimé ne reçoit rien. Une adresse supprimée a habituellement rebondi ou marqué un message comme indésirable.

Seulement certaines personnes l’ont reçu

Un destinataire avec une condition reçoit seulement les réponses qui y correspondent. Comparez la condition, dans l’onglet Livraison, avec les réponses reçues. Si une condition ne laisse personne à qui envoyer, la réponse est conservée et aucun courriel ne part, sans que ce soit compté comme un échec.

Réessayer une livraison

Corrigez d’abord la cause, car la plupart des échecs se répètent autrement. Ouvrez ensuite la réponse sous Soumissions et choisissez Réessayer l’envoi. Un vrai courriel part, avec les réglages de livraison actuels du formulaire, et la réponse ne change pas.

CodeCe que ça veut dire
DELIVERY_NOT_RETRYABLECet envoi ne peut pas être relancé pour le moment, par exemple parce qu’il a déjà été livré
DELIVERY_ATTEMPT_IN_PROGRESSUne tentative est en cours. Attendez son résultat
QUEUE_FAILEDLe nouvel essai n’a pas pu être mis en file d’attente. Réessayez sous peu

Un courriel de test ne part pas

CodeCauseSolution
FORM_DELIVERY_TEST_NOT_READYUn expéditeur ou un destinataire n’est pas prêt, ou le formulaire n’a aucun destinataireSuivez les éléments sous État de préparation de la livraison
FORM_DELIVERY_TEST_NO_RECIPIENTSLes réponses d’exemple ne correspondent à aucun destinataireChangez les réponses d’exemple sous Aperçu, ou revoyez les conditions des destinataires
FORM_DELIVERY_TEST_RATE_LIMITEDVous pouvez envoyer un test par minutePatientez une minute
FORM_DELIVERY_TEST_SEND_FAILEDLe fournisseur l’a refuséVérifiez l’expéditeur et le fournisseur, puis réessayez

Une soumission a été refusée

Symptôme : le visiteur voit une erreur, ou votre code obtient ok: false.

Comment vérifier : une soumission refusée n’est pas conservée, donc elle n’apparaît jamais sous Soumissions. Lisez plutôt le code dans la réponse, dans le panneau réseau de votre navigateur ou dans result.error.code avec le SDK. Il ressemble à ceci :

JSON
{
  "ok": false,
  "error": {
    "code": "SPAM_REJECTED",
    "message": "The submission was rejected."
  }
}

Le serveur fait ses vérifications dans l’ordre et s’arrête à la première qui échoue : origine, disponibilité, limite de débit des routes publiques, fenêtre de réponse, taille, format, envoi répété, limites de soumission, vérifications antipourriel, vérification humaine, réponses et quota.

CodeÉtat HTTPCauseSolution
VALIDATION_FAILED422Une réponse a échoué à une vérificationConsultez Les réponses refusées
SPAM_REJECTED403Une vérification antipourriel l’a bloquéeConsultez Refusée comme pourriel
TURNSTILE_FAILED403La vérification humaine a échoué, peu importe le fournisseurConsultez La vérification a échoué
RATE_LIMITED429Trop de soumissions en peu de tempsConsultez Trop de soumissions
FORM_QUOTA_REACHED409Le formulaire a atteint son Nombre maximal de soumissions acceptéesAugmentez-le ou videz-le sous Limites de soumission, dans Paramètres
DUPLICATE_SUBMISSION409Ce metadata.idempotencyKey a déjà été acceptéTraitez-le comme un succès. Consultez Les envois répétés
FORM_NOT_OPEN403La Fenêtre de réponse n’est pas encore ouverteChangez la fenêtre dans l’onglet Publication
FORM_CLOSED403Le formulaire est fermé, ou sa fenêtre est terminéeChangez Accès public ou la fenêtre dans l’onglet Publication
FORM_MAINTENANCE503Accès public est sur MaintenanceRemettez-le sur Public
FORM_NOT_FOUND404Mauvaise adresse, ou le formulaire n’est pas publiéConsultez Le formulaire ne s’affiche pas
FORBIDDEN_ORIGIN403Le site du navigateur n’est pas une origine autoriséeConsultez Une erreur CORS ou d’origine
BAD_REQUEST400 ou 413Le corps n’a pas d’objet fields, ou dépasse 100 000 octetsEnvoyez { "fields": { ... } } et raccourcissez les longues réponses
INVALID_JSON400Le corps n’est pas du JSON valideCorrigez ce que votre code envoie
QUEUE_FAILED503Le courriel n’a pas pu être mis en file d’attenteDemandez au visiteur de réessayer sous peu
INTERNAL_ERROR500Quelque chose s’est mal passé de notre côtéRéessayez sous peu

Les réponses refusées

VALIDATION_FAILED énumère chaque problème dans error.fields et error.issues, avec un chemin, un code et un message :

JSON
{
  "ok": false,
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "The submitted form contains invalid fields.",
    "fields": {
      "contact.email": [
        {
          "path": "contact.email",
          "code": "FIELD_EMAIL_INVALID",
          "message": "Invalid email address.",
          "rule": "email",
          "params": {}
        }
      ]
    },
    "issues": [
      {
        "path": "contact.email",
        "code": "FIELD_EMAIL_INVALID",
        "message": "Invalid email address.",
        "rule": "email",
        "params": {}
      }
    ]
  }
}

Affichez chaque message à côté de son champ. Les pages hébergées et les intégrations le font pour vous. Les codes sont présentés par type de champ dans la Référence de la définition de formulaire, et vos propres validateurs renvoient le code que vous leur avez donné.

Un champ obligatoire mais masqué ne peut pas échouer, parce que le serveur ignore les champs masqués. Si un champ obligatoire échoue sans arrêt, vérifiez que votre interface l’envoie sous son nom exact, avec les groupes sous forme d’objets imbriqués.

Refusée comme pourriel

La réponse ne dit pas quelle vérification l’a bloquée. Passez donc les trois en revue sous Paramètres, dans Antipourriel :

VérificationCe qui la déclencheSolution
Champ cachéLe champ caché a une valeur. Les nouveaux formulaires utilisent _formerie_hpDans votre interface, omettez ce champ ou laissez-le vide
Délai minimal de soumissionmetadata.startedAt est plus récent que la limite, 1 seconde sur les nouveaux formulairesFixez startedAt à l’affichage du formulaire, pas à l’envoi, ou baissez la limite
Nombre maximal de liensPlus de liens que la limite dans l’ensemble des réponses, 3 sur les nouveaux formulaires. Les adresses Web des champs url comptent aussiAugmentez la limite. 0 refuse tout lien, et un réglage vide désactive la vérification

Trop de soumissions

RATE_LIMITED vient de l’un de ces deux endroits :

  • Limites de soumission, sous Paramètres. Les nouveaux formulaires permettent 10 soumissions par visiteur toutes les 10 minutes, et 300 pour tout le formulaire chaque heure. Augmentez-les si votre formulaire connaît de vrais pics. Les gens d’un même réseau, comme un bureau, partagent la limite par visiteur.
  • Une limite à court terme sur les routes publiques, que vous ne pouvez pas changer. Elle envoie Retry-After, en secondes.

Dites au visiteur de patienter, et gardez ses réponses à l’écran.

Les envois répétés

DUPLICATE_SUBMISSION veut dire que le premier envoi a fonctionné : c’est une bonne nouvelle. Affichez votre message de réussite. Envoyez un nouveau metadata.idempotencyKey pour chaque nouvelle soumission, et réutilisez une clé seulement pour réessayer la même soumission.

Le formulaire ne s’affiche pas

Symptôme : le lien affiche une erreur, ou la page où vous avez intégré le formulaire est vide.

Comment vérifier : ouvrez l’URL hébergée du formulaire dans une fenêtre privée. Si elle fonctionne, le formulaire est correct et le problème vient de la page autour. Si vous voyez une ligne de JSON, lisez son code.

Ce que vous voyezCauseSolution
FORM_NOT_FOUNDLe formulaire n’a jamais été publié, Accès public est sur Non publié, ou l’adresse est mauvaisePubliez dans l’onglet Publication, et copiez l’adresse à partir de là
FORM_CLOSED, FORM_NOT_OPENLe formulaire est fermé, ou en dehors de sa Fenêtre de réponseChangez-les dans l’onglet Publication
FORM_MAINTENANCEAccès public est sur MaintenanceRemettez-le sur Public
FORM_NOT_FOUND sur votre propre nom d’hôteLe nom d’hôte n’est pas actif ou n’est pas connecté à ce formulaireTerminez les étapes DNS sous Domaines et vérifiez sa connexion
« The form could not be loaded. » ou « Loading form… »Le navigateur n’a pas pu charger le script du formulaireCherchez une requête bloquée vers cdn.formerie.com dans le panneau réseau du navigateur
Une ancienne version du formulaireVos changements sont encore un brouillonChoisissez Publier les modifications
Une question manqueUne condition la masque, ou elle se trouve à une étape suivanteRevoyez Conditions et Parcours

Une intégration n’affiche rien

  • Le script ajoute son iframe à l’endroit exact de la balise. Avec data-formerie-target, le sélecteur doit correspondre à un élément de la page au moment où le script s’exécute.
  • data-formerie-form doit être identifiant-espace/identifiant-formulaire, comme dans le Code d’intégration. Une mauvaise valeur affiche FORM_NOT_FOUND dans l’iframe.
  • Si votre site définit une politique de sécurité du contenu (CSP), autorisez https://forms.formerie.com comme source de cadre et de script, et https://cdn.formerie.com comme source de script.

Un montage dans le navigateur n’affiche rien

Le montage dans le navigateur charge le formulaire avec un appel à partir de votre page. Sans l’adresse de votre site dans les origines autorisées, cet appel échoue. Consultez la prochaine section.

Une erreur CORS ou d’origine

Symptôme : la console de votre navigateur affiche blocked by CORS policy, votre code obtient une erreur réseau comme Failed to fetch ou le NETWORK_ERROR du SDK, et la requête apparaît en 403 ou 404 dans le panneau réseau. Votre code ne peut pas lire de code Formerie, parce qu’une requête de navigateur refusée revient sans les en-têtes qui le permettraient.

Comment vérifier : cela arrive seulement quand le code du navigateur sur votre site appelle Formerie, c’est-à-dire avec le montage dans le navigateur, un paquet de framework utilisé dans le navigateur ou votre propre fetch. Un lien hébergé et une intégration par script n’appellent rien à partir de votre site, donc ils ne peuvent pas la causer.

Ouvrez la requête en échec dans le panneau réseau. C’est souvent la requête OPTIONS, et sa réponse indique FORBIDDEN_ORIGIN ou FORM_NOT_FOUND. Comparez l’en-tête Origin de la requête avec votre liste.

CauseSolution
Votre site n’est pas dans la listeAjoutez-le sous Adresses de vos sites dans l’onglet Publication, ou Origines autorisées dans Paramètres, puis publiez
Vous l’avez ajouté sans publierLes origines s’appliquent à la publication. Publier les enregistre pour vous
L’adresse diffère légèrementLa correspondance est exacte. https://example.com, https://www.example.com et http://example.com sont trois entrées : ajoutez chacune de celles où votre site répond
Vous testez en localAjoutez votre adresse de développement avec son port, comme http://localhost:5173
Vous avez utilisé un chemin ou un caractère génériqueIndiquez seulement l’adresse. Les chemins échouent avec FORM_CONFIG_ORIGIN_INVALID, et * avec FORM_CONFIG_ORIGIN_WILDCARD
La réponse indique FORM_NOT_FOUNDL’identifiant de l’espace ou du formulaire est mauvais, ou le formulaire n’est pas publié. L’erreur ressemble à du CORS parce que sans formulaire, il n’y a aucune liste d’origines à autoriser
Vous avez ajouté votre propre en-tête de requêteLes navigateurs peuvent seulement envoyer Content-Type ici. Retirez l’en-tête, ou envoyez-le à partir de votre serveur

Le code sur votre propre serveur n’a besoin de rien de tout ça, sauf s’il transmet un en-tête Origin. Sans cet en-tête, la vérification ne s’applique pas. Consultez Origines autorisées.

La vérification a échoué

Symptôme : une soumission renvoie TURNSTILE_FAILED. C’est le même code pour Cloudflare Turnstile et pour reCAPTCHA, et la réponse ne donne pas de raison.

Comment vérifier : regardez les réglages de Vérification humaine du formulaire sous Paramètres, puis passez ces causes en revue.

CauseSolution
Aucun jeton n’a été envoyéVotre interface doit transmettre le jeton du fournisseur dans verificationToken. Les pages hébergées, les intégrations et le montage dans le navigateur s’en occupent pour vous
Le jeton a déjà servi ou est expiréUn jeton fonctionne une seule fois. Obtenez-en un nouveau à chaque tentative, y compris après un envoi refusé
Le domaine du widget ne correspond pasFormerie vérifie que le jeton vient du site qui fait la requête. Consultez la prochaine section
Géré par Formerie sur votre propre siteLes clés gérées fonctionnent sur les domaines Formerie pris en charge. Utilisez vos propres clés pour votre domaine
Mauvaises clésLa clé de site et la clé secrète doivent venir du même widget. Enregistrez-les de nouveau sous Vérification humaine
Action attendue différenteElle doit correspondre à l’action envoyée par votre widget
Score reCAPTCHA v3 trop basBaissez le Score minimal, de 0 à 1

Quel domaine ajouter à votre widget

Avec vos propres clés, la console du fournisseur énumère les domaines où votre widget fonctionne. Ajoutez le domaine où le widget se charge :

Votre méthode de publicationDomaine à ajouter
Lien hébergéforms.formerie.com, ou votre propre nom d’hôte connecté
Intégration par scriptforms.formerie.com, ou votre propre nom d’hôte connecté, parce que le widget s’exécute dans l’iframe
Montage dans le navigateur ou votre propre interfaceVotre propre site

La vérification en passant par votre serveur

Un jeton obtenu sur votre page et transmis par votre propre serveur peut échouer à la vérification du domaine. Sans en-tête Origin, Formerie compare le domaine du jeton avec le sien. Pour que ça passe, transmettez l’en-tête Origin du visiteur avec la requête, et ajoutez aussi ce site aux origines autorisées.