Ablauf der Gästeverifizierung

Dieser Leitfaden erklärt, wie Sie die Liste der Gäste im Haus in einem Captive Portal verwenden: wie Sie die Eingaben des Gastes mit der Liste abgleichen, wann die WLAN-Sitzung enden sollte, wie oft die Liste aktualisiert wird und welche Felder Sie für die Protokolle nach dem türkischen Gesetz Nr. 5651 aufbewahren.

Was im Portal abgefragt wird#

Da die Liste Zimmer- und Identitätsdaten gemeinsam liefert, ist die gängigste Form Zimmernummer + Nachname. Die Zimmernummer allein reicht nicht aus; jeder, der die Nummer eines Nachbarzimmers kennt, könnte sich sonst anmelden. Alternativen sind Zimmernummer + Ausweis-/Reisepassnummer oder Nachname + Geburtsdatum; halten Sie Letzteres als Ausweichlösung für Gäste ohne Ausweisnummer bereit.

Abgleichsregeln#

Normalisieren Sie beide Seiten, bevor Sie die Eingaben des Gastes mit den Werten in der Liste vergleichen:

  • Zimmernummer: Leerzeichen am Anfang und Ende entfernen und in Großbuchstaben umwandeln. roomName ist ein String (etwa "104", "A-12" oder "Villa 3"); wandeln Sie ihn nicht in eine Zahl um und entfernen Sie keine führenden Nullen.
  • Nachname: in Großbuchstaben umwandeln (beachten Sie die türkische Zuordnung i → İ) und mehrfache Leerzeichen zusammenfassen. Die Werte der Liste stammen meist in Großbuchstaben aus dem Ausweisdokument.
  • Ausweisnummer: Leerzeichen entfernen und in Großbuchstaben umwandeln. Eine türkische Identitätsnummer hat 11 Ziffern; eine Reisepassnummer enthält Buchstaben und Ziffern.
  • Geburtsdatum: Die Liste liefert DD.MM.YYYY; konvertieren Sie, wenn Ihr Formular ein anderes Format erfasst.
Abgleich
const norm = (s) => String(s ?? "")
  .replace(/\s+/g, " ")
  .trim()
  .toLocaleUpperCase("tr-TR");

function findGuest(list, room, lastName) {
  return list.find((g) =>
    norm(g.roomName) === norm(room) && norm(g.lastName) === norm(lastName)
  ) || null;
}

const guest = findGuest(data.otelde, form.room, form.lastName);
if (!guest) {
  // „Zimmernummer und Nachname stimmen nicht überein“ — Fehlversuche zählen, nach 5 drosseln
}

Der Wert unique des passenden Datensatzes ist die Identität des Hotspot-Benutzers. Meldet sich derselbe Gast mit einem zweiten Gerät an, verwenden Sie das mit diesem Wert verknüpfte Konto weiter, statt ein neues anzulegen, und setzen Sie das Gerätelimit für dieses Konto durch.

Sitzungsdauer#

checkout ist das geplante Abreisedatum und verweist auf 00:00 Uhr (UTC) dieses Tages; eine Uhrzeit ist nicht enthalten. Wenn Sie die Sitzung bis zu diesem Zeitpunkt freischalten, verliert der Gast am Morgen der Abreise den Zugang. Berechnen Sie das Sitzungsende, indem Sie die Check-out-Zeit des Hotels zum Datum addieren:

Sitzungsende
const CHECKOUT_TIME = "12:00";                       // Check-out-Zeit des Hotels
const day = new Date(guest.checkout * 1000)
  .toLocaleDateString("en-CA", { timeZone: "UTC" });   // "2026-09-10"
const sessionEnd = new Date(`${day}T${CHECKOUT_TIME}:00+03:00`);

Reist der Gast vor der Check-out-Zeit ab, fällt er aus der Liste; schließen Sie das Konto bei der nächsten Synchronisierung. Wird der Aufenthalt verlängert, ändert sich checkout; vergleichen Sie dieses Feld bei der Synchronisierung und aktualisieren Sie das Sitzungsende. Bei spätem Check-out ist es sicherer, den Zugang offen zu lassen, solange der Gast in der Liste steht.

Periodische Synchronisierung#

Die Liste ist eine Momentaufnahme; es gibt keine Änderungsbenachrichtigung (Webhook). Rufen Sie die Liste in einem festen Intervall ab und vergleichen Sie sie anhand von unique mit der vorherigen:

  • Intervall: 5 Minuten genügen für die meisten Hotels. Sollen Gäste direkt beim Check-in online gehen können, können Sie auf 1–2 Minuten heruntergehen; unterschreiten Sie 1 Minute nicht.
  • Neuer unique-Wert: Konto vorbereiten; der Gast wird bei der ersten Anmeldung im Portal abgeglichen.
  • Fehlender unique-Wert: Der Gast hat ausgecheckt oder die Reservierung wurde storniert. Beenden Sie die Sitzung und schließen Sie das Konto.
  • Gleicher unique-Wert, anderer roomName oder checkout: ein Zimmerwechsel oder eine Verlängerung. Aktualisieren Sie das Konto.
  • Fehlgeschlagene Anfrage: Behalten Sie bei Timeout, 401 oder 5xx die letzte erfolgreiche Liste; schließen Sie niemals Konten auf Grundlage einer Fehlerantwort.
Synchronisierungsschleife
async function sync(prev) {
  const res = await fetch(BASE + "/public/json/customer/inhotel", {
    method: "POST",
    headers: { "ApiKey": process.env.HMS_API_KEY, "HotelCode": HOTEL_CODE }
  });
  if (!res.ok) return prev;                                   // 401 / 5xx: alte Liste behalten
  const { success, otelde } = await res.json();
  if (success !== 1) return prev;

  const next = new Map(otelde.map((g) => [g.unique, g]));
  for (const [id] of prev) {
    if (!next.has(id)) await closeAccount(id);                // ausgecheckt
  }
  for (const [id, g] of next) {
    const old = prev.get(id);
    if (!old) await openAccount(g);                           // neuer Gast
    else if (old.checkout !== g.checkout || old.roomName !== g.roomName) await updateAccount(g);
  }
  return next;
}

Mehrere Gäste in einem Zimmer#

Jeder Gast in einem Zimmer ist ein eigener Datensatz: rezervasyon_id ist gleich, unique unterscheidet sich. Eröffnen Sie Konten pro Gast statt pro Zimmer, damit jeder Gast sein eigenes Gerät, seine eigene Sitzung und seinen eigenen Protokolleintrag nach Gesetz Nr. 5651 hat. Eine Abfrage nach Zimmernummer + Nachname kann bei Gästen mit gleichem Nachnamen (einer Familie) mehr als einen Datensatz liefern; nehmen Sie dann nicht einfach den ersten Treffer, sondern unterscheiden Sie anhand von Vorname oder Geburtsdatum oder eröffnen Sie ein gemeinsames Konto.

Protokolle nach Gesetz Nr. 5651#

Die Pflicht, Zugriffsprotokolle nach dem türkischen Gesetz Nr. 5651 zu führen, liegt beim Hotspot-System; HMS liefert lediglich die Identitätsdaten. Speichern Sie beim Öffnen einer Sitzung die folgenden Felder zusammen mit MAC-/IP-Adresse und Zeitstempel: unique, rezervasyon_id, firstName, lastName, identityNumber, birthDate, roomName, checkin, checkout. Sobald ein Gast aus der Liste fällt, stellt HMS diese Daten nicht mehr bereit; bewahren Sie den Datensatz auf Ihrer Seite auf.

Zuletzt aktualisiert: 21. September 2026Fehler gefunden? Schreiben Sie uns