formbasedocs
Zur AppApp

Anfragen

Fehlerbehebung bei Requests

Wo du nachsiehst, wenn ein Request abgelehnt wurde, eine Einladung nie ankam, oder ein Workflow noch auf einen Callback wartet, der bereits passiert ist.


Einen Fehler lesen

Jede Ablehnung trägt zwei Dinge: einen code für die Art des Fehlers, und einen details.reason für die konkrete Ursache. Verzweige nach dem Code; lies den Grund, um zu wissen, was zu beheben ist. Wo es hilft, nennt details auch das betroffene field, die Schlüssel, die akzeptiert worden wären, oder die Optionsschlüssel, die eine Auswahlfrage annimmt.

Die Request-Methoden verwenden vier Codes: VALIDATION_ERROR (der Aufruf war falsch), CONFLICT (der Request ist im falschen Zustand, oder ein Idempotenz-Schlüssel wurde wiederverwendet), NOT_FOUND, und UPGRADE_REQUIRED (eine Plan-Schranke oder das monatliche Kontingent). Ruft man zu schnell auf, kommt stattdessen RATE_LIMITED zurück, mit retryAfterMs — siehe die Ratenbegrenzung.

Ein abgelehnter requests.create
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"] }
  }
}

Gründe, die dir begegnen könnten

Den Aufruf richtig hinbekommen

GrundWas zu tun ist
FORM_NOT_PUBLISHEDVeröffentliche das Formular. Ein Request pinnt eine veröffentlichte Version, also muss es eine geben.
UNKNOWN_FIELD_KEYKein Feld mit diesem Schlüssel, oder er gehört in den anderen Bucket. Jeder Kontext-Schlüssel muss ein verstecktes Feld auf dem veröffentlichten Formular sein; sende frei formulierbare Schlüssel in metadata. Prüfe fields.list; validKeys listet die akzeptierten.
CONTEXT_KEY_NOT_HIDDEN_FIELDDu hast eine sichtbare Frage — oder ein berechnetes Feld — in context gesendet. Sichtbare Fragen gehören in prefill; berechnete Felder lassen sich überhaupt nicht setzen.
INVALID_PREFILL_VALUEFalsche Form für diesen Fragetyp. expectedType sagt, was erwartet wurde; bei Auswahlfragen sende den Optionsschlüssel, nicht das Label; eine Matrix nimmt { "row_key": "column_key" }. expectedType "not_prefillable" bedeutet, das Feld nimmt keinen Wert von einer aufrufenden Seite entgegen — eine Datei, Signatur, Zahlung, Terminbuchung oder ein berechnetes Feld.
READONLY_REQUIRES_PREFILLEin gesperrter Schlüssel hat keinen Wert. Jeder Schlüssel in readonly muss auch in prefill stehen.
READONLY_REQUIRED_EMPTYEin Pflichtfeld ist mit einem leeren Wert gesperrt — die empfangende Person könnte nie absenden. Liefere einen Wert oder sperre es nicht.
LANGUAGE_NOT_PUBLISHEDDiese Sprache ist auf der aktuellen Version nicht veröffentlicht. validKeys listet die, die es sind.
INVALID_REMINDER_SCHEDULEEin Offset konnte nicht gelesen werden, derselbe Offset kommt zweimal vor, oder es sind mehr als fünf Schritte. Verwende positive ganze Tage, Stunden oder Minuten: 2d, 12h, 30m.
EXPIRY_OUT_OF_RANGEexpiresAt liegt in der Vergangenheit oder mehr als 365 Tage in der Zukunft.
CALLBACK_URL_NOT_ALLOWEDDie URL ist nicht HTTPS, trägt Zugangsdaten, oder löst sich zu einer privaten Adresse auf. Localhost funktioniert nicht — nutze einen Tunnel.
DOMAIN_NOT_ALLOWEDDiese benutzerdefinierte Domain ist nicht aktiv oder gehört zu einem anderen Workspace.
INVALID_DOCUMENT_TARGETDas Formular hat keinen Dokumente-Block, oder es hat mehr als einen und du hast mit field nicht angegeben, welchen. validKeys listet die Blockschlüssel.
DOCUMENT_NOT_UPLOADEDDer Upload wurde reserviert, aber die Bytes sind nie angekommen. Sende die Datei zuerst per PUT an ihre uploadUrl.
DOCUMENT_INVALIDDie hochgeladenen Bytes stimmen nicht mit der Größe, dem Typ oder dem sha256 überein, die documents.create angegeben hat, oder der Typ ist kein PDF oder Bild.
DOCUMENTS_TOO_MANYDer Block würde mehr als 20 Dokumente zeigen, einschließlich der hinterlegten.
DOCUMENTS_TOO_LARGEEin Request darf insgesamt 100 MB an Dokumenten tragen, und 25 MB pro Dokument.
SCOPE_REQUIREDZum Auflisten von Requests wird ein Workspace oder ein Formular benötigt, auf das die Liste eingegrenzt wird.
RECIPIENT_EMAIL_REQUIREDE-Mail-Zustellung oder Erinnerungen brauchen recipient.email.
UPGRADE_REQUIREDDer Plan enthält das Feature nicht — Erinnerungen sind Pro oder Business, und ein Gastkonto kann keine Einladungen per E-Mail versenden.
FREE_INVITATIONS_USEDDieses Free-Konto hat seine 10 kostenlosen Einladungen endgültig aufgebraucht. Erstelle den Request mit "delivery": "none" und sende den Link selbst, oder upgrade auf Pro.
MONTHLY_ALLOWANCE_REACHEDDer Workspace hat sein Kontingent für diesen Monat an Einreichungen und Requests aufgebraucht. Jeder Request kostet beim Erstellen eine Einheit, egal ob er beantwortet wird oder nicht. Bereits erstellte Requests bleiben beantwortbar; neue warten auf den 1. des Monats (UTC) oder ein Upgrade.

Auf einen bestehenden Request einwirken

GrundWas zu tun ist
REQUEST_NOT_FOUNDKein Request mit dieser ID in einem Workspace, den dieses Token erreichen kann.
REQUEST_NOT_PENDINGBereits abgeschlossen, abgelaufen oder storniert. Du kannst einen fertigen Request nicht erinnern oder stornieren.
REMINDER_TOO_SOONEine manuelle Erinnerung ging vor weniger als zehn Minuten raus. details.retryAfterMs sagt, wie lange zu warten ist.
REMINDER_CAP_REACHEDDieser Request hat bereits alle acht Erinnerungen erhalten, die er jemals bekommt, manuell und geplant zusammen.
TEST_REQUESTDu hast formbase gebeten, eine Testanfrage per E-Mail zu versenden. Für eine solche wird nie etwas versendet — öffne ihren Link stattdessen selbst.
REQUEST_NOT_TERMINALDu hast versucht, einen Callback für einen Request wiederzuholen, der noch ausstehend ist. Es gibt noch nichts zu wiederholen.
NO_CALLBACK_TO_REPLAYDer Request wurde ohne callbackUrl erstellt.
IDEMPOTENCY_CONFLICTDieser Schlüssel wurde für einen anderen Body verwendet. Nutze einen neuen Schlüssel, oder sende den ursprünglichen Body unverändert erneut.

Die Einladung ist nie angekommen

Öffne den Request auf der Requests-Seite und lies die Timeline. Die erste Einladungszeile sagt dir, welcher Fall vorliegt.

Die Timeline sagtWas es bedeutetWas zu tun ist
Einladung wartet in der WarteschlangeAngenommen, noch nicht gesendet.Gib ihr eine Minute. Bleibt sie in der Warteschlange, prüfe, ob der Request eine Empfänger-E-Mail hat.
Einladung zugestelltAn den E-Mail-Anbieter übergeben.Bitte sie, den Spam-Ordner zu prüfen. Vom eigenen Domain zu senden hilft — siehe benutzerdefinierte E-Mail-Domains.
Einladung fehlgeschlagenformbase konnte sie nicht senden — oder der Anbieter hat sie zurückgewiesen, oder die empfangende Person hat sie als Spam markiert.Lies deliveryStatus über requests.get: "failed" ist meist ein Plan- oder Adressproblem, also behebe es und sende eine Erinnerung, die denselben Link trägt (im Free-Plan kopiere den Link und sende ihn selbst). "bounced" bedeutet, die Adresse ist falsch oder tot — erstelle einen neuen Request für die richtige Adresse; eine Erinnerung an dieselbe hilft nicht.

Gar kein Timeline-Eintrag

Dann wurde nie eine E-Mail angefordert. Der Request wurde mit delivery: “none” erstellt — liefere den Link entweder selbst aus, oder erstelle einen neuen Request mit delivery: “email”.

Einladungen und Erinnerungen teilen sich ein Budget von zehn E-Mails pro Tag pro Formular und Empfängeradresse, und ein Request schickt seiner empfangenden Person höchstens neun E-Mails in seinem gesamten Leben — eine Einladung und bis zu acht Erinnerungen.

Der Callback ist nie angekommen

Der Abschnitt Callback in der Request-Detailansicht zeigt die URL und das Ergebnis. Callback nach N Versuchen fehlgeschlagen bedeutet, formbase hat es versucht und aufgegeben — acht Versuche über etwa vier Stunden.

  1. Prüfe die URL. Sie wird in der Detailansicht angezeigt. Die Resume-URL eines Workflow-Tools gehört zu einem Lauf, und ein gelöschter oder neu erstellter Lauf antwortet darauf nicht mehr.

  2. Prüfe, was dein Endpunkt zurückgegeben hat. Alles außerhalb von 2xx ist ein Fehlschlag. Ein 4xx außer 408 oder 429 stoppt die Wiederholungen sofort — formbase liest das als “dein Endpunkt hat das abgelehnt”, und dieselben Bytes erneut zu senden kann daran nichts ändern.

  3. Behebe den Empfänger, dann drücke Erneut senden (Replay). Dasselbe Payload geht mit derselben Ereignis-ID erneut hinaus, sodass ein deduplizierender Empfänger sicher ist.

Andere Dinge, auf die Leute stoßen

  • Die empfangende Person sagt, der Link zeigt einen Hinweis statt des Formulars. Der Request ist endgültig — abgeschlossen, abgelaufen oder storniert. Das ist die Ergebnisseite. Erstelle einen neuen Request, wenn sie es erneut versuchen soll.

  • Eine Automation hat nach einer Bearbeitung aufgehört zu passen — eine Antwort fehlte plötzlich im Callback, oder requests.create fing an, einen Schlüssel mit UNKNOWN_FIELD_KEY abzulehnen. Ein veröffentlichter Feldschlüssel ist verschwunden: Jemand hat ihn neu getippt, oder die Frage gelöscht und an ihrer Stelle eine neue hinzugefügt. Umbenennen des Titels ist sicher; beides davon nicht. Tippe den alten Schlüssel auf das Feld (Schlüssel-Symbol in der Symbolleiste → Schlüssel) und veröffentliche erneut. Die Veröffentlichung warnt, bevor das passiert — siehe Wenn ein veröffentlichter Schlüssel gleich verschwindet.

  • Prefill für einen Datei-Upload oder eine Signatur wird abgelehnt. Diese können nicht von einer aufrufenden Seite geliefert werden — fields.list markiert sie mit prefillable: false.

  • Zwei Requests sind für einen Workflow-Lauf entstanden. Der Lauf wurde ohne idempotencyKey wiederholt. Übergib die Ausführungs-ID als Schlüssel.