formbasedocs
Aller à l'applicationAppli

Demandes

Dépannage des demandes

Où chercher quand une demande a été refusée, qu'une invitation n'est jamais arrivée, ou qu'un workflow attend toujours un callback qui s'est déjà produit.


Lire une erreur

Chaque refus porte deux choses : un code pour le type d’échec, et un details.reason pour la cause précise. Testez le code ; lisez la raison pour savoir quoi corriger. Quand c’est utile, details nomme aussi le field fautif, les clés qui auraient été acceptées, ou les clés d’option acceptées par une question à choix.

Les méthodes de demande utilisent quatre codes : VALIDATION_ERROR (l’appel était incorrect), CONFLICT (la demande est dans le mauvais état, ou une clé d’idempotence a été réutilisée), NOT_FOUND, et UPGRADE_REQUIRED (une restriction de plan ou l’allocation mensuelle). Appeler trop vite renvoie RATE_LIMITED à la place, avec retryAfterMs — voir la limite de débit.

Un requests.create rejeté
json
{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "No field with key \"company\".",
    "details": { "reason": "UNKNOWN_FIELD_KEY", "field": "prefill.company", "validKeys": ["company_name", "company_size"] }
  }
}

Raisons que vous pourriez rencontrer

Bien faire l’appel

RaisonQue faire
FORM_NOT_PUBLISHEDPubliez le formulaire. Une demande épingle une version publiée, donc il doit y en avoir une.
UNKNOWN_FIELD_KEYAucun champ avec cette clé, ou elle appartient à l'autre compartiment. Chaque clé de contexte doit être un champ caché sur le formulaire publié ; envoyez les clés de forme libre dans metadata. Vérifiez fields.list ; validKeys liste celles acceptées.
CONTEXT_KEY_NOT_HIDDEN_FIELDVous avez envoyé une question visible — ou un champ calculé — dans context. Les questions visibles vont dans prefill ; les champs calculés ne peuvent jamais être définis.
INVALID_PREFILL_VALUEMauvaise forme pour ce type de question. expectedType indique ce qui était attendu ; pour les questions à choix, envoyez la clé de l’option, pas le libellé ; une matrice prend { "row_key": "column_key" }. expectedType "not_prefillable" signifie que le champ n’accepte aucune valeur de l’appelant — un fichier, une signature, un paiement, une prise de rendez-vous, ou un champ calculé.
READONLY_REQUIRES_PREFILLUne clé verrouillée n'a pas de valeur. Chaque clé de readonly doit aussi être dans prefill.
READONLY_REQUIRED_EMPTYUn champ obligatoire est verrouillé avec une valeur vide — le destinataire ne pourrait jamais soumettre. Fournissez une valeur ou arrêtez de le verrouiller.
LANGUAGE_NOT_PUBLISHEDCette langue n'est pas publiée sur la version actuelle. validKeys liste celles qui le sont.
INVALID_REMINDER_SCHEDULEUn délai n'a pas pu être lu, le même délai apparaît deux fois, ou il y a plus de cinq étapes. Utilisez des jours, heures ou minutes entiers positifs : 2d, 12h, 30m.
EXPIRY_OUT_OF_RANGEexpiresAt est dans le passé ou à plus de 365 jours.
CALLBACK_URL_NOT_ALLOWEDL'URL n'est pas en HTTPS, porte des identifiants, ou pointe vers une adresse privée. Localhost ne fonctionnera pas — utilisez un tunnel.
DOMAIN_NOT_ALLOWEDCe domaine personnalisé n'est pas actif, ou appartient à un autre espace de travail.
INVALID_DOCUMENT_TARGETLe formulaire n'a pas de bloc Documents, ou il en a plusieurs et vous n'avez pas précisé lequel avec field. validKeys liste les clés de bloc.
DOCUMENT_NOT_UPLOADEDL'envoi a été réservé mais les octets ne sont jamais arrivés. Effectuez d'abord un PUT du fichier vers son uploadUrl.
DOCUMENT_INVALIDLes octets envoyés ne correspondent pas à la taille, au type ou au sha256 déclarés par documents.create, ou le type n'est pas un PDF ou une image.
DOCUMENTS_TOO_MANYLe bloc afficherait plus de 20 documents, en comptant ceux de l'auteur.
DOCUMENTS_TOO_LARGEUne demande peut porter 100 Mo de documents au total, et 25 Mo par document.
SCOPE_REQUIREDLister les demandes nécessite un espace de travail ou un formulaire pour délimiter la liste.
RECIPIENT_EMAIL_REQUIREDLa livraison par e-mail ou les rappels nécessitent recipient.email.
UPGRADE_REQUIREDLe plan n'inclut pas la fonctionnalité — les rappels sont Pro ou Business, et un compte invité ne peut pas envoyer d'invitations par e-mail.
FREE_INVITATIONS_USEDCe compte Free a épuisé ses 10 invitations gratuites, définitivement. Créez la demande avec "delivery": "none" et envoyez le lien vous-même, ou passez à Pro.
MONTHLY_ALLOWANCE_REACHEDL'espace de travail a épuisé son allocation du mois pour les soumissions et les demandes. Chaque demande coûte une unité à sa création, qu'elle soit répondue ou non. Les demandes déjà créées restent répondables ; les nouvelles attendent le 1er du mois (UTC) ou une mise à niveau.

Agir sur une demande existante

RaisonQue faire
REQUEST_NOT_FOUNDAucune demande avec cet id dans un espace de travail que ce jeton peut atteindre.
REQUEST_NOT_PENDINGDéjà terminée, expirée, ou annulée. Vous ne pouvez pas relancer ou annuler une demande terminée.
REMINDER_TOO_SOONUn rappel manuel a été envoyé il y a moins de dix minutes. details.retryAfterMs indique combien de temps attendre.
REMINDER_CAP_REACHEDCette demande a déjà reçu les huit rappels qu'elle recevra jamais, manuels et planifiés confondus.
TEST_REQUESTVous avez demandé à formbase d'envoyer une demande test par e-mail. Rien n'est jamais envoyé pour une demande test — ouvrez son lien vous-même à la place.
REQUEST_NOT_TERMINALVous avez demandé à rejouer un callback pour une demande encore en attente. Il n'y a rien à rejouer pour l'instant.
NO_CALLBACK_TO_REPLAYLa demande a été créée sans callbackUrl.
IDEMPOTENCY_CONFLICTCette clé a été utilisée pour un corps différent. Utilisez une nouvelle clé, ou envoyez à nouveau le corps original inchangé.

L’invitation n’est jamais arrivée

Ouvrez la demande dans la page Demandes et lisez la chronologie. La première ligne d’invitation vous indique dans quel cas vous êtes.

La chronologie ditCe que ça signifieQue faire
Invitation en attenteAcceptée, pas encore envoyée.Attendez une minute. Si ça reste en attente, vérifiez que la demande a un e-mail de destinataire.
Invitation livréeRemise au fournisseur d'e-mail.Demandez au destinataire de vérifier les spams. Envoyer depuis votre propre domaine aide — voir domaines e-mail personnalisés.
Invitation échouéeformbase n'a pas pu l'envoyer — ou le fournisseur l'a rejetée, ou le destinataire l'a marquée comme spam.Lisez deliveryStatus sur requests.get : « failed » est généralement un problème de plan ou d'adresse, donc corrigez-le et envoyez un rappel, qui porte le même lien (sur Free, copiez le lien et envoyez-le vous-même). « bounced » signifie que l'adresse est fausse ou morte — créez une nouvelle demande pour la bonne adresse ; relancer n'aidera pas.

Aucune entrée de chronologie du tout

Alors aucun e-mail n’a jamais été demandé. La demande a été créée avec delivery: “none” — livrez le lien vous-même, ou créez une nouvelle demande avec delivery: “email”.

Les invitations et les rappels partagent un budget de dix e-mails par jour, par formulaire et par adresse de destinataire, et une demande n’envoie jamais plus de neuf e-mails à son destinataire au cours de sa vie — une invitation et jusqu’à huit rappels.

Le callback n’a jamais abouti

La section Callback du tiroir de la demande montre l’URL et le résultat. Callback échoué après N tentatives signifie que formbase a essayé et a abandonné — huit tentatives sur environ quatre heures.

  1. Vérifiez l’URL. Elle est affichée dans le tiroir. L’URL de reprise d’un outil de workflow appartient à une seule exécution, et une exécution supprimée ou recréée ne répond plus dessus.

  2. Vérifiez ce qu’a renvoyé votre point de terminaison. Tout ce qui sort de 2xx est un échec. Un 4xx autre que 408 ou 429 arrête immédiatement les nouvelles tentatives — formbase le lit comme « votre point de terminaison a rejeté ceci », et renvoyer les mêmes octets ne peut rien y changer.

  3. Corrigez le récepteur, puis appuyez sur Rejouer. La même charge utile repart avec le même id d’événement, donc un récepteur qui déduplique ne risque rien.

Autres situations rencontrées

  • Le destinataire dit que le lien affiche un avis, pas le formulaire. La demande est définitive — terminée, expirée, ou annulée. C’est la page de résultat. Créez une nouvelle demande s’il a besoin d’une nouvelle tentative.

  • Une automatisation a cessé de correspondre après une modification — une réponse a disparu du callback, ou requests.create a commencé à refuser une clé avec UNKNOWN_FIELD_KEY. Une clé de champ publiée a disparu : quelqu’un l’a retapée, ou a supprimé la question et en a ajouté une nouvelle à sa place. Changer le titre est sûr ; aucun des deux autres cas ne l’est. Saisissez l’ancienne clé sur le champ (icône clé de la barre d’outils → Clés) et publiez à nouveau. La publication avertit avant que cela n’arrive — voir Quand une clé publiée est sur le point de disparaître.

  • Le préremplissage d’un téléversement de fichier ou d’une signature est refusé. Ceux-ci ne peuvent pas être fournis par un appelant — fields.list les marque prefillable: false.

  • Deux demandes sont apparues pour une même exécution de workflow. L’exécution a été retentée sans idempotencyKey. Passez l’id d’exécution comme clé.