Direkt zum Hauptinhalt

Hinzufügen und Aktualisieren von Gast-Daten (push)

AufrufWorum es geht

DieMit Übertragung erfolgt über eine HTTP-POST-Anfrage an folgende URL:

https://gwatch.events/ext-api/push

Authentifizierung

übertragen

Folgende Header müssen gesetzt werden:

    X-Api-key: Haupt-API-Schlüssel (Pflicht) X-Api-push: zusätzlicher Import-Schlüssel (optional, empfohlen – bitte separat anfordern)

    Request-Body (Payload)

    1. meta

    Enthält Steuerparameter für das Importverhalten:

      failIfExists (Boolean): Gibt an, ob bei vorhandenem Ticketcode ein Fehler erzeugt wird oder die Daten aktualisiert werden. insertAs (Integer): Definiert den Status für neue Datensätze:
        1: bereits bestätigt 2: zu bestätigen (erfordert spätere Rückmeldung durch den Gast) Hinweis: Wird nur bei neu angelegten Gästen berücksichtigt.

        2. guests

        Enthält ein Array mitSie bis zu 100 Gast-DatensätzenDatensätze pro Anfrage. JederDas DatensatzPortal istlegt einneue Key-Value-Objekt,Gäste basierendan aufoder denaktualisiert Feldernbestehende ausGäste anhand von /metadataGUEST_TICKET_CODE.

        Besonderheiten:Dieser Aufruf verändert Daten. Prüfen Sie Hauptschlüssel und Veranstaltungsnamen zunächst über metadata und beginnen Sie mit abgestimmten Testdaten.

          Aufruf

          Ticketcode:und FehltHeader er,

          Speichern wirdSie einden neuerJSON-Body generiert.in einer lokalen Datei push.json. Senden Sie ihn beispielsweise so:

          curl --request POST 'https://gwatch.events/ext-api/push' \
            --header 'X-Api-key: IHR_HAUPTSCHLUESSEL' \
            --header 'X-Api-push: IHR_IMPORTSCHLUESSEL' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data-binary '@push.json'
          

          Ein konfigurierter Import-Schlüssel ist erforderlich und muss genau passen. Ist erfür vorhanden,die erfolgtVeranstaltung einekein PrüfungImport-Schlüssel –eingerichtet, abhängigentfernen vonSie failIfExists.

          die Gates: Falls im Metadata-Abschnitt gates enthalten sind, kann zusätzlich ein Array gatesZeile mit Gate-IDsX-Api-push. gesetztEin werden.nicht Istleerer dasHeader Array vorhandnen und fehlenwird in diesem ArrayFall demabgewiesen. GastEin Flavor-Schlüssel wird bei push nicht verwendet.

          Aufbau der Anfrage

          Feld Vorgabe meta.failIfExists Erforderlicher Boolean: true weist vorhandene Ticketcodes ab; false erlaubt Aktualisierungen. meta.insertAs Erforderliche Ganzzahl: 1 für bereits zugewiesenebestätigte Gates,neue werdenGäste, sie2 entfernt.für neue Gäste mit ausstehender Bestätigung. Wird nur bei Neuanlage berücksichtigt. guests Array mit 1 bis 100 Gastobjekten. Jedes Objekt verwendet Schlüssel aus metadata.guest.

          Beispiel-RequestVollständiges Beispiel für push.json:

          {
            "meta": {
              "failIfExists": false, "insertAs": 2
            },
            "guests": [
              {
                "GUEST_FIRST_NAME": "Max",
                "GUEST_LAST_NAME": "Mustermann",
                "GUEST_EMAIL": "max@example.com",
                "GUEST_TICKET_CODE": "ABC123",
                "gates": [1, 3]
              }
            ]
          }

          Response

          HTTP Status Codes:

            422 Formale Fehler: z.B. fehlendes meta Objekt.
            200 OK: Alle Datensätze wurden erfolgreich verarbeitet.
            207 Multi-Status: Einige Datensätze konnten nicht verarbeitet werden (Details in results - s.u.).

            Beispiel für HTTP 422

            Request

            {
                "meta": {
                    "failIfExists": true,
                    "insertAs": 3
                }2},
              "guests": [
                {
                  "GUEST_TICKET_CODE": "223345"TEST0001",
                  "GUEST_FIRST_NAME": "Hans"Erika",
                  "GUEST_LAST_NAME": "Hermann"Musterfrau",
                  "GUEST_LOCALE": "de",
                  "GUEST_ACTIVE": true,
                  "gates": [6398]
                },
              {]
            "GUEST_TICKET_CODE":}
            "4711",
            "GUEST_FIRST_NAME":

            Die "Susi",benutzerdefinierten "GUEST_LAST_NAME":Namensfelder "Sorglos",und Gate-ID 6398 sind Beispiele. Sie müssen in Ihren Metadaten vorkommen. Wenn keine Gate-Zuordnung geändert werden soll, lassen Sie gates weg.

            Neuanlage oder Aktualisierung?

            Situation Verarbeitung Ticketcode fehlt Das Portal erzeugt einen neuen Code und legt einen Gast an. Ticketcode vorhanden, aber kein bestehender Gast mit diesem Code gefunden Ein neuer Gast wird mit diesem Code angelegt, sofern die Validierung erfolgreich ist. Ticketcode gefunden und failIfExists=false Der vorhandene Gast wird aktualisiert. Ticketcode gefunden und failIfExists=true Der Datensatz schlägt fehl; es wird kein zweiter Gast mit diesem Code angelegt.

            Die Zuordnung erfolgt über den Ticketcode innerhalb der Veranstaltung, nicht über E-Mail-Adresse, Name oder die Datenbank-ID. Übermitteln Sie den Ticketcode als Zeichenfolge. Er muss den Restriktionen aus metadata entsprechen.

            Bei einem Update werden die gesendeten Felder verarbeitet. Weglassen und null sind nicht dasselbe: Weggelassene Felder werden nicht gezielt überschrieben; ein ausdrücklich übergebenes null kann bei zulässigen Feldern einen Wert leeren. Bei nullable=false ist null ungültig. Prüfen Sie beabsichtigtes Leeren je Feldtyp zunächst mit Testdaten.

            insertAs setzt keinen bestehenden Gast nachträglich auf einen anderen Teilnahmestatus. Dafür ist dieser Parameter nicht vorgesehen.

            Gate-Zuordnungen bewusst ersetzen

            Inhalt im Gastobjekt Wirkung nach erfolgreicher Gastverarbeitung Kein gates-Schlüssel Vorhandene Zuordnungen bleiben erhalten. "gates": [6398, 6399] }Die ]Auswahl }wird

            Response

            durch
            diese IDs ersetzt. Bereits zugeordnete Gates, die fehlen, werden entfernt.
            { "error": true, "message": { "meta.insertAs"gates": [] "TheAlle valuevorhandenen mayGate-Zuordnungen notwerden beentfernt. greater than 2." ]

            Verwenden }Sie }ausschließlich freigegebene Gate-IDs aus metadata.gates.

            Wenn

            Erfolgreichedort keine Gates verfügbar sind, lassen Sie den Schlüssel weg; im aktuellen API-Verhalten ist er dann kein freigegebenes Eingabefeld.

            Die Ersetzung betrifft auch vorhandene Zuordnungen, die in Ihrer übermittelten Auswahl nicht vorkommen. Sie ist kein reines Hinzufügen. Soll nur ein Gate ergänzt werden, muss die vollständige gewünschte Auswahl abgestimmt sein. Eine Gate-Zuordnung über push ist kein Ein- oder TeilerfolgreicheAusgangsscan.

            Verarbeitung

            Antwort (HTTPund 200, HTTP 207):Einzelergebnisse

            DerBei Responseverarbeiteten gliedertAnfragen sichenthält indie zweiAntwort Bereiche:summary und results, ohne zusätzliches oberstes error-Feld.

            1.

            summary
            • Feld Bedeutung
            summary.total: AnzahlZahl der übergebenen DatensätzeGastobjekte. summary.created Zahl erfolgreich neu angelegter Gäste. summary.updated Zahl erfolgreich aktualisierter Gäste. summary.failed Zahl fehlgeschlagener Gastobjekte. results[].index Position in Ihrem Eingabearray, beginnend bei 0. results[].status created:, neu angelegte Gäste updated: aktualisierteoder Gäste failed:. fehlerhafte Einträge results[].ticketCode

            2./ results

            id

            Gibt

            Zugeordneter fürTicketcode jedenund DatensatzGast-ID; an,bei obFehlern diegegebenenfalls Verarbeitungnull. erfolgreich war results[].message Bei Erfolg null, bei Fehlern eine Zeichenfolge oder nicht.ein

            Objekt mit Feldmeldungen.

            Beispiel füreiner erfolgreichen Neuanlage mit HTTP 207

            Request:

            {
                "meta": {
                    "failIfExists": false,
                    "insertAs": 2
                },
                "guests": [
                    {
                        "GUEST_TICKET_CODE": "223344",
                        "GUEST_FIRST_NAME": "Hans",
                        "GUEST_LAST_NAME": "Hermann",
                        "GUEST_EMAIL": "didi@aol.com",
                        "gates": [6398]
                    },
                    {
                        "GUEST_FIRST_NAME": "Frank",
                        "GUEST_LAST_NAME": "Fuhrmann",
                        "GUEST_EMAIL": "ffuhrmann@aol",
                        "gates": [6398]
                    },
                    {
                        "GUEST_TICKET_CODE": "4711",
                        "GUEST_FIRST_NAME": "Susi",
                        "GUEST_LAST_NAME": "Sorglos",
                        "gates": [6399,4]
                    },
                    {
                        "TICKET_CODE": "4712",
                        "GUEST_FIRST_NAME": "Didi",
                        "GUEST_LAST_NAME": "Dröge",
                        "gates": [6399]
                    }
                ]
            }

            Response:200:

            {
              "summary": {
                    "total": 4,1, "created": 1, "updated": 0, "failed": 0},
              "results": [
                {"index": 0, "ticketCode": "TEST0001", "id": 12345, "status": "created", "message": null}
              ]
            }
            

            HTTP 207: Ergebnisse einzeln behandeln

            Sobald mindestens ein Datensatz fehlschlägt, lautet der HTTP-Status 207, auch wenn alle Datensätze fehlschlagen. Erfolgreiche Datensätze werden dadurch nicht insgesamt zurückgerollt.

            Beispiel einer Anfrage mit einem erfolgreichen Update und einem nicht freigegebenen Eingabeschlüssel:

            {
              "summary": {"total": 2, "created": 0, "updated": 1, "failed": 3
                }1},
              "results": [
                {
                        "index": 0, "ticketCode": "223344"TEST0001", "id": 3247987,12345, "status": "updated", "message": null
                    }null},
                {
                        "index": 1,
                        "ticketCode": null,
                        "id": null,
                        "status": "failed",
                        "message": {
                            "GUEST_EMAIL": [
                                "Please enter a valid email address."
                            ]
                        }
                    },
                    {
                        "index": 2,
                        "ticketCode": "4711",
                        "id": 3247986,
                        "status": "failed",
                        "message": {
                            "gates.1": [
                                "The selected gates.1 is invalid."
                            ]
                        }
                    },
                    {
                        "index": 3, "ticketCode": null, "id": null, "status": "failed", "message": "The following keys are not available: TICKET_CODE"
                    }
              ]
            }
            

            TICKET_CODE ist kein Ersatz für GUEST_TICKET_CODE. Nutzen Sie index, um Fehler eindeutig dem gesendeten Datensatz zuzuordnen; bei einem Fehler muss ticketCode nicht den ursprünglich übergebenen Wert enthalten.

            HTTP 422: Anfrage korrigieren

            Fehlende Steuerparameter, ein unzulässiges insertAs, eine leere Gästeliste oder mehr als 100 Datensätze führen zur Ablehnung der äußeren Anfrage. Beispiel:

            {
              "error": true,
              "message": {"meta.insertAs": ["The meta.insertAs field must not be greater than 2."]}
            }
            

            Der Meldungstext ist beispielhaft. Verwenden Sie Feldschlüssel und HTTP-Status für die Auswertung. Fehler innerhalb einzelner Gastobjekte werden dagegen in der Regel über results und HTTP 207 gemeldet. Senden Sie stets echte Gastobjekte; andere Array-Inhalte sind kein unterstütztes Eingabeformat.

            Wiederholungen und Teiländerungen

              Speichern Sie das Ergebnis einschließlich index, Ticketcode und ID. Wiederholen Sie eine fehlgeschlagene Anfrage ohne eigene Ticketcodes nicht blind: Bereits angelegte Gäste könnten erneut angelegt werden. Auch eine Fehlermeldung bei einem Update garantiert nicht, dass sämtliche Felder des Gastes unverändert geblieben sind. Die Speicherung vorhandener Gäste ist nicht als atomarer Gesamtvorgang abgesichert. Prüfen Sie den aktuellen Stand, bevor Sie korrigiert erneut senden. Korrigieren Sie fehlgeschlagene Datensätze gezielt. Ein Timeout auf Ihrer Seite beweist nicht, dass der Server nichts gespeichert hat.

              Häufige Fehler

              Problem Prüfung HTTP 401 Hauptschlüssel, Archivstatus, allgemeinen IP-Filter und exakt passenden Import-Schlüssel prüfen. Unbekannter Feldschlüssel Aktuelle metadata.guest verwenden, nicht die frei vereinbarten Lesefelder. Listenwert abgewiesen items[].key senden, nicht value oder values. Bild wird abgewiesen Gültige eingebettete Bild-Data-URI und freigegebenes Bildfeld prüfen. Gate-ID ungültig ID muss für diese Veranstaltung in metadata.gates vorkommen. Bestehender Gast abgewiesen failIfExists prüfen. Nur bei gewolltem Update auf false setzen. Werte nach Update unerwartet leer Gesendete null- oder Leerwerte prüfen. Unveränderte Felder weglassen. Alte Gate-Zuordnungen fehlen gates ersetzt die gesamte Auswahl. Vollständige gewünschte Zuordnung abstimmen.

              Vor dem produktiven Einsatz prüfen

                Veranstaltung und Feldliste über metadata bestätigen. Einen Testgast anlegen und zurückgegebenen Ticketcode speichern. Denselben Gast mit failIfExists=false gezielt aktualisieren. Fehlerfall mit failIfExists=true sowie Feldvalidierung prüfen. Gate-Ersetzung nur mit abgestimmten Testzuordnungen testen. Antwortauswertung für HTTP 200, 207, 401 und 422 vorsehen.

                Zurück: Einzelabruf.
                Zum Einstieg: Übersicht.