Offenes Umfrageformat

Ein offenes, JSON-basiertes Format zur Definition von Umfragen und Formularen. Wird von YourOpinion.is verwendet und kann von jedem frei implementiert werden.

Aktuelle Version: 1.0 (Veröffentlicht: 15.11.2025)

Spezifikation herunterladen

  • JSON-Schema - Maschinenlesbare Formatdefinition
  • Markdown - Menschenlesbare Dokumentation (optimiert für LLMs)

Einführung

Das Offene Umfrageformat bietet eine standardisierte Methode, um Umfragen, Fragebögen und Formulare als JSON-Objekte zu definieren. Dieses Format ermöglicht:

  • Portabilität - Verschieben von Umfragen zwischen verschiedenen Plattformen und Werkzeugen
  • Versionskontrolle - Nachverfolgen von Änderungen an Umfragen mit Standard-Diff-Werkzeugen
  • Programmatische Erstellung - Dynamisches Erstellen von Umfragen aus Code
  • LLM-Kompatibilität - KI-Assistenten können Umfragen einfach erstellen und ändern

Kernkonzepte

Sammlungen (Seiten)

Umfragen sind in Sammlungen organisiert, die als Seiten oder Abschnitte fungieren. Jede Umfrage muss mindestens eine Sammlung enthalten.

Elemente

Individuelle Komponenten innerhalb einer Sammlung, wie zum Beispiel:

  • Fragen (Texteingabe, Multiple-Choice, Bewertungen usw.)
  • Inhaltsblöcke (Markdown-Text, Bilder)
  • Ablaufsteuerungselemente (bedingte Logik, Seitensprünge)

Assets

Wiederverwendbare Komponenten, auf die von mehreren Fragen aus verwiesen werden kann:

  • Optionslisten (für Auswahlfragen)
  • Bewertungsskalen
  • Geteilte Ressourcen

Dokumentstruktur

Eine Umfrage wird als JSON-Objekt mit dieser Struktur dargestellt:

{
    "$schema": "https://youropinion.is/json-schema/1.0",
    "$readme": "https://youropinion.is/docs/survey-format.md",
    "collections": {
        "collection-id-1": {
            "name": "Name der Sammlung",
            "elements": {
                "element-id-1": {
                    "type": "Markdown",
                    "data": {
                        /* Elementspezifische Daten */
                    }
                }
            },
            "displayOrder": ["element-id-1"]
        }
    },
    "displayOrder": ["collection-id-1"],
    "assets": {
        "asset-id-1": {
            "type": "options",
            "data": {
                /* Asset-spezifische Daten */
            }
        }
    }
}

Top-Level-Eigenschaften

$schema (optional)

URL zur JSON-Schema-Definition für die Validierung:

"$schema": "https://youropinion.is/json-schema/1.0"

$readme (optional)

URL zur menschenlesbaren Dokumentation:

"$readme": "https://youropinion.is/docs/survey-format.md"

collections (erforderlich)

Objekt, das die Seiten/Abschnitte der Umfrage enthält. Jeder Schlüssel ist eine eindeutige Sammlungs-ID:

"collections": {
    "welcome": {
        "name": "Willkommensseite",
        "elements": { /* ... */ },
        "displayOrder": ["intro", "consent"]
    },
    "questions": {
        "name": "Hauptfragen",
        "elements": { /* ... */ },
        "displayOrder": ["q1", "q2", "q3"]
    }
}

Eigenschaften der Sammlung:

  • name (string, optional) - Menschenlesbarer Name der Sammlung (wird Benutzern nicht angezeigt, dient als Referenz)
  • condition (object, optional) - Bedingte Logik, um zu bestimmen, ob diese Sammlung angezeigt werden soll (siehe Abschnitt Bedingte Logik)
  • elements (object) - Enthält die Elemente für diese Sammlung. Jeder Schlüssel ist eine eindeutige Element-ID
  • displayOrder (array) - Array von Element-IDs, das die Anzeigereihenfolge definiert

Wichtig: Das displayOrder-Array fungiert sowohl als Filter als auch zur Festlegung der Reihenfolge:

  • Nur Elemente, die in displayOrder aufgeführt sind, werden angezeigt
  • Elemente, die nicht in displayOrder aufgeführt sind, verbleiben in der Definition, sind aber versteckt
  • Das Hinzufügen einer nicht existierenden Element-ID führt zu einem Fehler

displayOrder (erforderlich)

Array, das die Reihenfolge der Sammlungen festlegt:

"displayOrder": ["welcome", "questions", "thank-you"]

Dieselben Filterregeln gelten: Nur hier aufgeführte Sammlungen werden angezeigt.

assets (optional)

Wiederverwendbare Komponenten, auf die von mehreren Elementen verwiesen wird. Assets reduzieren Duplikate und erleichtern die Wartung von Umfragen.

Asset-Typen:

  1. options - Wiederverwendbare Optionslisten für SelectOne/SelectMany-Fragen
  2. ordinal-scale - Wiederverwendbare beschriftete Skalen für OrdinalScale-Fragen
  3. interval-scale - Wiederverwendbare numerische Skalen für IntervalScale-Fragen

Beispiel - Options-Asset:

"assets": {
    "color-options": {
        "type": "options",
        "name": "Farboptionen",
        "data": {
            "options": {
                "red": { "label": "Rot" },
                "blue": { "label": "Blau" },
                "green": { "label": "Grün" },
                "yellow": { "label": "Gelb" }
            },
            "displayOrder": ["red", "blue", "green", "yellow"]
        }
    },
    "satisfaction-scale": {
        "type": "ordinal-scale",
        "name": "Standard-Zufriedenheitsskala",
        "data": {
            "labels": {
                "1": "Sehr unzufrieden",
                "2": "Unzufrieden",
                "3": "Neutral",
                "4": "Zufrieden",
                "5": "Sehr zufrieden"
            }
        }
    },
    "nps-scale": {
        "type": "interval-scale",
        "name": "Net-Promoter-Score-Skala",
        "data": {
            "start": 0,
            "end": 10,
            "labels": {
                "start": "Unwahrscheinlich",
                "end": "Sehr wahrscheinlich"
            }
        }
    }
}

Alle Asset-Typen erfordern:

  • type - Asset-Typ: "options", "ordinal-scale" oder "interval-scale"
  • name - Menschenlesbarer Name für Dokumentationszwecke
  • data - Typspezifische Datenstruktur

Auf Assets kann mittels JSON-Referenzen verwiesen werden (siehe Abschnitt JSON-Referenzen).


Elementtypen

Elemente sind die Bausteine Ihrer Umfrage. Jedes Element hat eine type- und eine data-Eigenschaft. Alle Elemente können optional ein extensions-Objekt für benutzerdefinierte Metadaten enthalten (wird vom Standard-Renderer nicht verwendet).

Verfügbare Elementtypen:

TypKategorieBeschreibung
MarkdownInhaltFormatierten Text und Inhalte anzeigen
FlowControlSteuerungBedingte Logik und Navigation
StringFrageTexteingabe (ein- oder mehrzeilig)
NumberFrageNumerische Eingabe
DateFrageDatumsauswahl
BooleanFrageJa/Nein-Kontrollkästchen
SelectOneFrageEinzelauswahl aus Optionen (Radio-Buttons)
SelectManyFrageMehrfachauswahl aus Optionen (Kontrollkästchen)
IntervalScaleFrageNumerische Bewertungsskala (z. B. 0-10 für NPS, 1-5 für Zufriedenheit)
OrdinalScaleFrageBeschriftete Bewertungsskala (z. B. von „Stimme überhaupt nicht zu“ bis „Stimme voll zu“)
PaymentFrageElement zur Zahlungsabwicklung

Inhaltselemente

Markdown

Zeigt formatierten Text, Überschriften, Listen und andere Inhalte mithilfe der Markdown-Syntax an.

{
    "type": "Markdown",
    "data": {
        "markdown": "# Willkommen!\n\nVielen Dank für die Teilnahme an unserer Umfrage.\n\n- Bitte antworten Sie ehrlich\n- Alle Antworten sind anonym"
    }
}

Unterstütztes Markdown:

  • Überschriften (#, ##, ###)
  • Listen (geordnet und ungeordnet)
  • Fett (**Text**) und kursiv (*Text*)
  • Links ([Text](URL))
  • Codeblöcke

FlowControl

Steuert den Umfrageverlauf mit bedingter Logik und Navigation.

{
    "type": "FlowControl",
    "data": {
        "condition": {
            /* Optional - Siehe Abschnitt Bedingte Logik */
        },
        "action": {
            "type": "survey-finish" // Optionen: "survey-finish" oder "page-finish"
        }
    }
}

Aktionstypen:

  • survey-finish - Beendet die Umfrage sofort
  • page-finish - Beendet die aktuelle Seite und wechselt zur nächsten

Für detaillierte Informationen zur Bedingungsstruktur und Beispielen siehe den Abschnitt Bedingte Logik weiter unten.


Fragetypen

Alle Fragen teilen sich diese gemeinsamen Eigenschaften:

{
    "type": "QuestionType",
    "data": {
        "label": "Ihr Fragetext hier",
        "required": "yes", // Optional: "yes", "no" oder "suggested" (Standard ist "no")
        "markdown": "Hilfetext" // Optional: zusätzlicher Kontext in Markdown
    }
}

Gemeinsame Eigenschaften:

  • label (string, erforderlich) - Der Fragetext, der den Benutzern angezeigt wird
  • required (string, optional) - Ob eine Antwort erforderlich ist: "yes", "no" oder "suggested" (wird als optional, aber empfohlen angezeigt)
  • markdown (string, optional) - Zusätzlicher Hilfetext oder Beschreibung im Markdown-Format
  • defaultValue (any, optional) - Vorausgefüllter Wert für die Frage

String

Ein- oder mehrzeilige Texteingabe.

{
    "type": "String",
    "data": {
        "label": "Wie lautet Ihr Name?",
        "placeholder": "Geben Sie Ihren vollständigen Namen ein", // Optional
        "multiline": false, // Optional: true für einen Textbereich (textarea)
        "required": "yes"
    }
}

Number

Numerische Eingabe mit optionaler Validierung.

{
    "type": "Number",
    "data": {
        "label": "Wie viele Mitarbeiter?",
        "min": 1, // Optional: Minimalwert
        "max": 1000, // Optional: Maximalwert
        "step": 1, // Optional: Schrittweite (Standard: 1)
        "required": "yes"
    }
}

Eigenschaften:

  • min (number, optional) - Minimal erlaubter Wert
  • max (number, optional) - Maximal erlaubter Wert
  • step (number, optional) - Schrittweite für die Eingabevalidierung (Standard: 1)

Date

Datumsauswahl mit optionaler Genauigkeit und Min/Max-Beschränkungen.

{
    "type": "Date",
    "data": {
        "label": "Wann sind Sie beigetreten?",
        "required": "suggested",
        "accuracy": "day", // Optional: "day", "month" oder "year" (Standard: "day")
        "min": "2020-01-01", // Optional: frühestes wählbares Datum
        "max": "2025-12-31" // Optional: spätestes wählbares Datum
    }
}

Eigenschaften:

  • accuracy (string, optional) - Genauigkeitsstufe des Datums:
    • "day" - Vollständige Datumsauswahl mit Kalender (Standard)
    • "month" - Auswahl von Monat und Jahr per Dropdown
    • "year" - Nur-Jahr-Auswahl per Dropdown
  • min (string, optional) - Frühestes wählbares Datum. Kann sein:
    • ISO-Datumsstring (z. B. "2020-01-01")
    • Relativer Zeitstring (z. B. "+ 3 months", "now", "- 1 year")
  • max (string, optional) - Spätestes wählbares Datum. Gleiche Formatoptionen wie min.

Boolean

Ja/Nein-Kontrollkästchen. Der Standardwert ist false (nicht ausgewählt).

{
    "type": "Boolean",
    "data": {
        "label": "Allgemeine Geschäftsbedingungen",
        "description": "Ich stimme den Allgemeinen Geschäftsbedingungen zu" // Wird neben dem Kontrollkästchen angezeigt
    }
}

SelectOne

Multiple-Choice-Frage (Radio-Buttons) - Benutzer wählen eine Option aus.

{
    "type": "SelectOne",
    "data": {
        "label": "Was ist Ihre Lieblingsfarbe?",
        "required": "yes",
        "options": {
            "options": {
                "red": { "label": "Rot" },
                "blue": { "label": "Blau" },
                "green": { "label": "Grün" }
            },
            "displayOrder": ["red", "blue", "green"]
        }
    }
}

Verwendung von Asset-Referenzen:

{
    "type": "SelectOne",
    "data": {
        "label": "Wählen Sie eine Farbe",
        "options": { "$ref": "#/assets/color-options/data" }
    }
}

SelectMany

Multiple-Choice-Frage (Kontrollkästchen) - Benutzer können mehrere Optionen auswählen.

{
    "type": "SelectMany",
    "data": {
        "label": "Welche Betriebssysteme verwenden Sie?",
        "required": "yes",
        "options": {
            "options": {
                "windows": { "label": "Windows" },
                "macos": { "label": "macOS" },
                "linux": { "label": "Linux" }
            },
            "displayOrder": ["windows", "macos", "linux"]
        },
        "other": true, // Optional: fügt eine „Sonstige“-Option mit Texteingabe hinzu
        "minSelections": 1, // Optional: Mindestanzahl erforderlicher Auswahlen
        "maxSelections": 3 // Optional: Maximal erlaubte Anzahl an Auswahlen
    }
}

IntervalScale

Numerische Bewertungsskala mit einem definierten Bereich (z. B. 0-10 für NPS, 1-5 für Zufriedenheit). Häufig verwendet für:

  • Net Promoter Score (NPS): Skala von 0-10
  • Zufriedenheitsbewertungen: Skala von 1-5 oder 1-7
  • Wahrscheinlichkeitsfragen: Skala von 0-10
{
    "type": "IntervalScale",
    "data": {
        "label": "Wie wahrscheinlich ist es, dass Sie uns einem Freund weiterempfehlen?",
        "required": "yes",
        "scale": {
            "start": 0, // Startnummer der Skala
            "end": 10, // Endnummer der Skala
            "labels": {
                // Beschriftungen für Start- und Endpunkte (erforderlich)
                "start": "Überhaupt nicht wahrscheinlich",
                "end": "Äußerst wahrscheinlich"
            }
        }
    }
}

Häufige Anwendungsfälle:

// Net Promoter Score (NPS)
{
    "type": "IntervalScale",
    "data": {
        "label": "Wie wahrscheinlich ist es, dass Sie uns weiterempfehlen?",
        "scale": {
            "start": 0,
            "end": 10,
            "labels": {
                "start": "Unwahrscheinlich",
                "end": "Sehr wahrscheinlich"
            }
        }
    }
}

// 5-Punkte-Zufriedenheitsskala
{
    "type": "IntervalScale",
    "data": {
        "label": "Wie zufrieden sind Sie mit unserem Service?",
        "scale": {
            "start": 1,
            "end": 5,
            "labels": {
                "start": "Sehr unzufrieden",
                "end": "Sehr zufrieden"
            }
        }
    }
}

Anzeige: Zeigt eine horizontale Skala mit klickbaren Zahlen. Beschriftungen erscheinen unter den Start- und Endpunkten.

OrdinalScale

Beschriftete Bewertungsskala, bei der jeder Punkt eine eigene Beschriftung hat. Ideal für:

  • Likert-Skalen mit spezifischem Wortlaut für jeden Punkt
  • Zustimmungsskalen („Stimme überhaupt nicht zu“ → „Stimme voll und ganz zu“)
  • Häufigkeitsskalen („Niemals“ → „Immer“)
  • Benutzerdefinierte Bewertungsskalen mit aussagekräftigen Beschriftungen
{
    "type": "OrdinalScale",
    "data": {
        "label": "Wie zufrieden sind Sie mit Ihrer Position?",
        "required": "yes",
        "scale": {
            "labels": {
                "1": "Sehr unzufrieden",
                "2": "Unzufrieden",
                "3": "Neutral",
                "4": "Zufrieden",
                "5": "Sehr zufrieden"
            }
        }
    }
}

Häufige Anwendungsfälle:

// Likert-Zustimmungsskala
{
    "type": "OrdinalScale",
    "data": {
        "label": "Das Produkt hat meine Erwartungen erfüllt.",
        "scale": {
            "labels": {
                "1": "Stimme überhaupt nicht zu",
                "2": "Stimme nicht zu",
                "3": "Neutral",
                "4": "Stimme zu",
                "5": "Stimme voll und ganz zu"
            }
        }
    }
}

// Häufigkeitsskala
{
    "type": "OrdinalScale",
    "data": {
        "label": "Wie oft nutzen Sie unser Produkt?",
        "scale": {
            "labels": {
                "1": "Niemals",
                "2": "Selten",
                "3": "Manchmal",
                "4": "Oft",
                "5": "Immer"
            }
        }
    }
}

Anzeige: Zeigt beschriftete Schaltflächen oder Optionen. Jede Beschriftung wird vollständig angezeigt, was die Skala selbsterklärend macht.

IntervalScale vs. OrdinalScale:

  • Verwenden Sie IntervalScale, wenn die Zahlen selbst eine Bedeutung haben (0-10, 1-5).
  • Verwenden Sie OrdinalScale, wenn Sie für jeden Punkt benutzerdefinierte Beschriftungen benötigen.
  • IntervalScale ist kompakter; OrdinalScale ist beschreibender.

Payment

Sammelt Zahlungsinformationen und verarbeitet Transaktionen. Integriert sich mit Zahlungsanbietern, die in Ihren Umfrageeinstellungen konfiguriert sind.

{
    "type": "Payment",
    "data": {
        "label": "Zahlung",
        "required": "yes",
        "amount": {
            "value": 29.99,
            "currency": "USD"
        },
        "captureMethod": "automatic" // Optional: "immediate", "manual" oder "automatic"
    }
}

Eigenschaften:

  • amount (object, erforderlich) - Zahlungsbetrag mit value (Zahl) und currency (3-stelliger Code, z. B. „USD“, „EUR“, „GBP“)
  • captureMethod (string, optional) - Wann die Zahlung erfasst werden soll:
    • "immediate" - Zahlung sofort bei Absenden der Umfrage erfassen
    • "manual" - Erfordert manuelle Erfassung über Ihr Zahlungs-Dashboard
    • "automatic" - Automatische Erfassung bei Abschluss der Umfrage (Standard)

Hinweis: Die Zahlungsabwicklung erfordert, dass ein Zahlungsanbieter in Ihren Kanaleinstellungen konfiguriert ist. Unterstützte Währungen und Zahlungsmethoden hängen von Ihrer Anbieterkonfiguration ab.


JSON-Referenzen

Reduzieren Sie Duplikate durch Verweise auf wiederverwendbare Komponenten. Referenzen verwenden dieses Format:

{ "$ref": "[<location>]#<path>" }
  • location - URL zum Quelldokument (leer = aktuelles Dokument)
  • path - Pfad vom Dokumentenstamm unter Verwendung von /-Trennzeichen

Beispiel - Inline-Duplizierung:

{
    "question-1": {
        "type": "SelectOne",
        "data": {
            "label": "Lieblingsfarbe?",
            "options": {
                "options": {
                    "red": { "label": "Rot" },
                    "blue": { "label": "Blau" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    },
    "question-2": {
        "type": "SelectOne",
        "data": {
            "label": "Am wenigsten gemochte Farbe?",
            "options": {
                "options": {
                    "red": { "label": "Rot" },
                    "blue": { "label": "Blau" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    }
}

Besser - Verwendung von Assets:

{
    "collections": {
        "main": {
            "elements": {
                "question-1": {
                    "type": "SelectOne",
                    "data": {
                        "label": "Lieblingsfarbe?",
                        "options": { "$ref": "#/assets/colors/data" }
                    }
                },
                "question-2": {
                    "type": "SelectOne",
                    "data": {
                        "label": "Am wenigsten gemochte Farbe?",
                        "options": { "$ref": "#/assets/colors/data" }
                    }
                }
            },
            "displayOrder": ["question-1", "question-2"]
        }
    },
    "assets": {
        "colors": {
            "type": "options",
            "data": {
                "options": {
                    "red": { "label": "Rot" },
                    "blue": { "label": "Blau" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    }
}

Vorteile:

  • Eine zentrale Datenquelle (Single Source of Truth)
  • Einfachere Wartung
  • Bessere Diffs in der Versionskontrolle
  • Kleinere Dateigröße

Bedingte Logik

Bedingte Logik ermöglicht es Ihnen, dynamische Umfragen zu erstellen, die sich an die Antworten der Benutzer anpassen. Bedingungen können auf zwei Arten verwendet werden:

1. Bedingungen auf Sammlungsebene

Zeigen oder verbergen Sie ganze Seiten basierend auf Bedingungen. Wenn die Bedingung einer Sammlung zu false ausgewertet wird, wird die gesamte Seite übersprungen und die Ausführung wird mit der nächsten Sammlung fortgesetzt.

{
    "collections": {
        "follow-up": {
            "name": "Folgefragen",
            "condition": {
                "type": "condition",
                "fact": "questions/nps-score",
                "operator": "lt",
                "compare": { "value": 7 }
            },
            "elements": {
                /* ... */
            },
            "displayOrder": ["question-1"]
        }
    }
}

In diesem Beispiel wird die Seite „Folgefragen“ nur angezeigt, wenn der NPS-Score kleiner als 7 ist.

2. FlowControl-Elemente

Steuern Sie den Umfrageverlauf innerhalb einer Seite mit FlowControl-Elementen. Wenn die Bedingung zu true ausgewertet wird, wird die angegebene Aktion ausgeführt.

Verfügbare Aktionen:

  • survey-finish - Beendet die Umfrage sofort (überspringt alle verbleibenden Seiten)
  • page-finish - Beendet die aktuelle Seite und wechselt zur nächsten (überspringt verbleibende Elemente auf der aktuellen Seite)
{
    "type": "FlowControl",
    "data": {
        "condition": {
            "type": "condition",
            "fact": "questions/satisfaction",
            "operator": "eq",
            "compare": { "value": "very-satisfied" }
        },
        "action": {
            "type": "page-finish"
        }
    }
}

Hinweis: Wenn keine condition angegeben ist, wird die Aktion immer ausgeführt, wenn das Element erreicht wird.

Bedingungsstruktur

Bedingungen werden als binärer Baum mit zwei Knotentypen definiert:

1. Vergleichsbedingungen

Vergleichen Sie einen Fakt (Umfrageantwort) mit einem Wert oder einem anderen Fakt.

{
    "type": "condition",
    "fact": "questions/age",
    "operator": "gt",
    "compare": { "value": 18 }
}

Eigenschaften:

  • type - Immer "condition" für Vergleiche
  • fact (string) - Der Elementverweis im Format ‘sammlungs-id/element-id’, aus dem der Wert gelesen wird
  • operator (string) - Vergleichsoperator (siehe Operatoren unten)
  • compare (object, optional) - Womit verglichen werden soll:
    • { "value": <any> } - Vergleich mit einem literalen Wert
    • { "fact": "<sammlungs-id/element-id>" } - Vergleich mit dem Wert eines anderen Elements
    • Nicht erforderlich für Operatoren wie "exists" oder "true"
  • not (boolean, optional) - Invertiert das Ergebnis (Standard: false)

Unterstützte Operatoren nach Elementtyp:

Number, IntervalScale, OrdinalScale, Date:

  • "eq" - Gleich
  • "gt" - Größer als
  • "gte" - Größer als oder gleich
  • "lt" - Kleiner als
  • "lte" - Kleiner als oder gleich
  • "exists" - Hat einen Wert (benötigt kein compare)

String:

  • "eq" - Gleich
  • "contains" - Zeichenkette enthält Wert
  • "exists" - Hat einen Wert (benötigt kein compare)

Boolean:

  • "true" - Wert ist wahr (benötigt kein compare)
  • "exists" - Hat einen Wert (benötigt kein compare)

SelectOne:

  • "eq" - Gleich einer spezifischen Option
  • "in" - Ist eine von mehreren Optionen (Vergleichswert sollte im SelectMany-Format sein)
  • "exists" - Hat einen Wert (benötigt kein compare)

SelectMany:

  • "eq" - Entspricht genau dem Satz von Optionen
  • "exists" - Hat mindestens einen Wert (benötigt kein compare)

2. Kettenbedingungen

Kombinieren Sie mehrere Bedingungen mit logischen Operatoren.

{
    "type": "all",
    "items": [
        {
            "type": "condition",
            "fact": "questions/age",
            "operator": "gt",
            "compare": { "value": 18 }
        },
        {
            "type": "condition",
            "fact": "questions/country",
            "operator": "eq",
            "compare": { "value": "US" }
        }
    ]
}

Eigenschaften:

  • type - Logischer Operator:
    • "all" - Alle Bedingungen müssen wahr sein (UND-Logik)
    • "any" - Mindestens eine Bedingung muss wahr sein (ODER-Logik)
  • items (array) - Array von Bedingungen (können Vergleiche oder verschachtelte Ketten sein)
  • not (boolean, optional) - Invertiert das gesamte Kettenergebnis
  • name (string, optional) - Menschenlesbare Bezeichnung zur Dokumentation

Beispiele

Umfrage für zufriedene Kunden überspringen

{
    "type": "FlowControl",
    "data": {
        "condition": {
            "type": "condition",
            "fact": "questions/nps",
            "operator": "gte",
            "compare": { "value": 9 }
        },
        "action": {
            "type": "survey-finish"
        }
    }
}

Seite nur für bestimmte Altersgruppe anzeigen

{
    "collections": {
        "teen-questions": {
            "name": "Fragen für Teenager",
            "condition": {
                "type": "all",
                "items": [
                    {
                        "type": "condition",
                        "fact": "questions/age",
                        "operator": "gte",
                        "compare": { "value": 13 }
                    },
                    {
                        "type": "condition",
                        "fact": "questions/age",
                        "operator": "lt",
                        "compare": { "value": 20 }
                    }
                ]
            },
            "elements": {
                /* ... */
            }
        }
    }
}

Komplexe verschachtelte Bedingungen

{
    "type": "any",
    "name": "Premium-Nutzer oder Viel-Ausgeber",
    "items": [
        {
            "type": "condition",
            "fact": "questions/membership",
            "operator": "eq",
            "compare": { "value": "premium" }
        },
        {
            "type": "all",
            "items": [
                {
                    "type": "condition",
                    "fact": "questions/total-spent",
                    "operator": "gt",
                    "compare": { "value": 1000 }
                },
                {
                    "type": "condition",
                    "fact": "questions/active-months",
                    "operator": "gte",
                    "compare": { "value": 6 }
                }
            ]
        }
    ]
}

Vergleich zweier Fakten

{
    "type": "condition",
    "fact": "questions/current-salary",
    "operator": "gt",
    "compare": { "fact": "questions/desired-salary" }
}

Verwendung der not-Eigenschaft

{
    "type": "condition",
    "fact": "questions/email-consent",
    "operator": "true",
    "not": true // Invertiert das Ergebnis: wahr, wenn email-consent NICHT wahr ist
}

Versionshistorie

VersionDatumÄnderungen
1.015.11.2025Payment-Element
0.524.01.2025Erste öffentliche Freigabe