Datenformate des NexAI Mailagenten

Diese Seite wird aus dem Programm erzeugt und beschreibt den Stand, der gerade läuft.

Die Verwaltung einer Instanz lädt alle Daten ihres Hauses jederzeit selbst herunter: angemeldet unter „Datenschutz“, Knopf „Export herunterladen“. Der Export ist eine ZIP-Datei. Hier steht, was darin ist, in welchem Format, was jedes Feld bedeutet, wie sich die Freigabeliste auf Veränderungen prüfen lässt und was mit welchem Grund fehlt.

Aufbau der ZIP-Datei

nexai-mailagent-export-JJJJ-MM-TT/
  LIESMICH.txt         kurze Übersicht
  <tabelle>.jsonl      eine Datei je Tabelle, siehe unten
  einstellungen.json   Einstellungen des Hauses
  anhaenge/            die Dateianhänge der Nachrichten
  dateien/             was das Haus als Datei pflegt

Allgemeine Regeln

FormatBedeutung
Ganzzahlganze Zahl
KommazahlZahl mit Nachkommastellen, Punkt als Trenner
TextZeichenkette in UTF-8
ja/nein (1/0)1 heißt ja, 0 heißt nein
ja/nein (true/false)JSON-Wahrheitswert, nur in einstellungen.json
JSON-TextZeichenkette, die selbst JSON enthält und ein zweites Mal gelesen werden muss
Zeitpunkt ISO 8601 UTCzum Beispiel 2026-11-01T15:45:33.123Z
Zeitpunkt SQLite UTCzum Beispiel 2026-11-01 15:45:33, Weltzeit ohne Zonenangabe
DatumJJJJ-MM-TT, zum Beispiel 2026-11-01
VerweisNummer oder Kennung eines Datensatzes in einer anderen Datei

Die Tabellen

messages.jsonl

Die aus den angebundenen Postfächern abgerufenen E-Mails mit Kopfdaten und Text, eine Zeile je Nachricht und Ordner.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Nachricht in dieser Datenbank, auf die die anderen Tabellen verweisen.
account_idVerweisKennung des Postfachs, aus dem die Nachricht stammt (Verweis auf accounts.id).
folderTextName des Ordners auf dem Mailserver, aus dem die Nachricht abgerufen wurde, etwa INBOX für den Posteingang, der Gesendet-Ordner oder beim Archivabruf der Ordner „Alle Nachrichten“.
uidGanzzahlNummer der Nachricht innerhalb dieses Ordners auf dem Mailserver (IMAP-UID).
message_idText
kann null sein
Kennung der Mail aus ihrer Kopfzeile Message-ID; leer, wenn die Mail nicht gelesen werden konnte oder keine hat.
thread_keyText
kann null sein
Kennung des Gesprächsverlaufs, wie sie der Mailserver liefert (zum Beispiel Gmail); leer, wenn der Server keine liefert.
directionTextRichtung der Nachricht, bestimmt danach, ob der Absender die eigene Postfachadresse ist, und ersatzweise nach dem Ordner.
  • in eingehende Nachricht
  • out vom eigenen Postfach gesendet
sent_atZeitpunkt ISO 8601 UTC
kann null sein
Datum der Mail aus ihrer Kopfzeile Date, in UTC umgerechnet; leer, wenn die Mail keines hat oder nicht gelesen werden konnte.
from_addressText
kann null sein
E-Mail-Adresse des Absenders.
from_nameText
kann null sein
Anzeigename des Absenders.
to_addressesText
kann null sein
Empfängeradressen aus dem Feld An, durch Komma und Leerzeichen getrennt.
cc_addressesText
kann null sein
Empfängeradressen aus dem Feld Kopie (CC), durch Komma und Leerzeichen getrennt.
subjectText
kann null sein
Betreff der Nachricht.
body_textText
kann null sein
Der Text der Nachricht als reiner Text.
body_htmlText
kann null sein
Die HTML-Fassung des Textes, die nur für Betrugsprüfung und Linkleser gebraucht und deshalb nach der Einstufung, frühestens zwei Tage nach dem Datum der Mail (ohne Einstufung nach 30 Tagen), geleert wird.
size_bytesGanzzahl
kann null sein
Größe der gesamten Nachricht auf dem Mailserver in Bytes, einschließlich Anhängen.
flagsText
kann null sein
Markierungen der Nachricht auf dem Mailserver zum Zeitpunkt des Abrufs (zum Beispiel \Seen für gelesen), durch Komma getrennt und danach nicht mehr aktualisiert.
has_attachmentsja/nein (1/0)1, wenn beim Abruf Anhänge gespeichert wurden (beim Archivabruf ohne Anhänge immer 0); der Wert bleibt 1, auch wenn die Anhänge später nach Frist gelöscht werden.
fetched_atZeitpunkt SQLite UTCZeitpunkt, zu dem der Agent die Nachricht abgerufen und gespeichert hat.
headersJSON-Text
kann null sein
Alle Kopfzeilen der Mail als JSON-Objekt, mit dem Namen der Kopfzeile in Kleinbuchstaben als Schlüssel und einer Liste ihrer Werte; leer, wenn die Mail nicht gelesen werden konnte.

attachments.jsonl

Die Dateianhänge der abgerufenen Nachrichten; im Export stehen hier die Angaben zur Datei, die Dateien selbst liegen im Ordner anhaenge/.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Anhangs, die auch im Dateinamen unter anhaenge/ steht.
message_idVerweisNummer der Nachricht, zu der der Anhang gehört (Verweis auf messages.id).
filenameText
kann null sein
Dateiname, wie ihn die Mail angibt; im Ordner anhaenge/ steht er um unzulässige Zeichen bereinigt.
mime_typeText
kann null sein
Dateiart, wie sie die Mail angibt (zum Beispiel application/pdf), ohne Prüfung übernommen.
size_bytesGanzzahl
kann null sein
Größe der Datei in Bytes.
contentText
kann null sein
Inhalt der Datei; im Export steht hier nur der Hinweis „<n Bytes, siehe anhaenge/>“, die Datei selbst liegt unter anhaenge/ mit dem Namen <Nachricht>-<Kennung>-<Dateiname>.

anhang_text.jsonl

Der aus Anhängen ausgelesene Text (Textdateien und PDF), einmal gespeichert für die Volltextsuche, samt Grund, wenn nichts auslesbar war.

FeldFormatBedeutung
attachment_idVerweisNummer des Anhangs, aus dem der Text stammt (Verweis auf attachments.id).
quelleText
kann null sein
Wie der Text gewonnen wurde; leer, wenn kein Text herauskam.
  • klartext Textdatei direkt gelesen
  • pdf Text aus PDF ausgelesen
textTextDer ausgelesene Text, ohne Steuerzeichen und auf höchstens 200.000 Zeichen gekürzt; ein leerer Text, wenn nichts herauskam.
grundText
kann null sein
Warum kein Text herauskam; leer, wenn das Auslesen gelungen ist.
  • Der Anhang ist nicht gespeichert. kein gespeicherter Inhalt vorhanden
  • Zu gross, nicht angesehen. Datei größer als 12 MB
  • Markup, kein Text. Der Inhalt steht schon in der Nachricht. HTML oder ähnliches Markup
  • Kein PDF und kein Klartext. anderes Dateiformat, nicht ausgelesen
  • Im PDF steht kein auslesbarer Text. Vermutlich ein Scan. PDF ohne Text, vermutlich Scan
  • Der ausgelesene Text ist unlesbar. Vermutlich eine eingebettete Teilschrift. PDF-Text nicht lesbar
gelesen_amZeitpunkt SQLite UTCZeitpunkt, zu dem der Text ausgelesen wurde.

anhang_pruefung.jsonl

Das Ergebnis der Virenprüfung je Anhang; Einträge gibt es nur, wenn ein Virenscanner eingerichtet ist, und ein Anhang, der nicht geprüft werden konnte, erscheint hier nicht.

FeldFormatBedeutung
attachment_idVerweisNummer des geprüften Anhangs (Verweis auf attachments.id).
befundTextErgebnis der Prüfung durch den Virenscanner.
  • sauber keine Schadsoftware gefunden
  • befallen Schadsoftware erkannt
hinweisText
kann null sein
Name der erkannten Schadsoftware laut Virenscanner; leer, wenn der Anhang sauber ist.
amZeitpunkt SQLite UTCZeitpunkt der Prüfung.

analysis.jsonl

Die Einstufung jeder eingehenden Nachricht im Posteingang durch den Agenten: Kategorie, Kurzfassung, erwartete Antwort, Terminwunsch und Ergebnis der Betrugsprüfung.

FeldFormatBedeutung
message_idVerweisNummer der eingestuften Nachricht (Verweis auf messages.id); je Nachricht gibt es höchstens eine Einstufung.
categoryTextKategorie der Nachricht laut Sprachmodell; eine Absenderregel des Hauses kann sie auf wichtig heben oder von wichtig auf normal setzen, und Massenpost wird ohne Sprachmodell als werbung abgelegt.
  • wichtig Geld, Verträge, Fristen, Kunden, Behörden
  • normal sonstige Post von Menschen
  • werbung Newsletter, Werbung, Kaltakquise
  • system automatische Bestätigungen und Benachrichtigungen
summaryText
kann null sein
Ein Satz auf Deutsch, was in der Nachricht steht und was vom Haus erwartet wird; ein leerer Text bei Massenpost, die ohne Sprachmodell abgelegt wurde.
reply_expectedja/nein (1/0)1, wenn der Absender laut Sprachmodell eine Antwort erwartet.
importance_noteText
kann null sein
Begründung des Sprachmodells, warum die Nachricht wichtig ist; nur gefüllt, wenn das Modell sie als wichtig eingestuft hat.
instruction_attemptja/nein (1/0)1, wenn die Nachricht laut Sprachmodell versucht, dem Assistenten Anweisungen zu geben, etwa Regeln zu ändern, etwas weiterzuleiten oder Zugangsdaten zu nennen.
scam_scoreGanzzahlPunktzahl der regelbasierten Betrugsprüfung, etwa für eine fehlgeschlagene Absenderprüfung, einen getarnten Link, einen ausführbaren Anhang oder eine andere Bankverbindung als bisher; ein Virenfund zählt 6 Punkte.
scam_levelTextStufe der Betrugsprüfung, aus der Punktzahl abgeleitet.
  • unauffaellig weniger als 2 Punkte
  • pruefen 2 bis 4 Punkte
  • verdaechtig ab 5 Punkten oder Virenfund
scam_reasonsJSON-Text
kann null sein
Die Gründe aus der Betrugsprüfung als JSON-Liste von Texten; leer, wenn nichts auffiel.
modelText
kann null sein
Name des Sprachmodells, mit dem eingestuft wurde, so wie er beim Anbieter heißt; „ohne Modell“ bei Massenpost, die nur anhand der Kopfzeilen abgelegt wurde.
input_tokensGanzzahl
kann null sein
Anzahl der Tokens (Abrechnungseinheiten des Sprachmodells), die für die Einstufung an das Modell gingen; 0 ohne Modell.
output_tokensGanzzahl
kann null sein
Anzahl der Tokens, die das Sprachmodell für die Einstufung zurückgab; 0 ohne Modell.
analysed_atZeitpunkt SQLite UTCZeitpunkt der Einstufung.
wants_appointmentja/nein (1/0)1, wenn die Nachricht laut Sprachmodell einen Termin, ein Gespräch oder einen Rückruf vereinbaren will.
stimmungTextWie der Absender laut Sprachmodell klingt; nur bei eingeschalteter Stimmungseinstufung gefüllt und im Export enthalten, beim Ausschalten werden alle gespeicherten Einstufungen auf sachlich zurückgesetzt.
  • sachlich Normalfall, auch ohne Einstufung
  • unzufrieden Beschwerde, Nachfassen, erkennbarer Ärger
  • veraergert deutlicher Ärger, Drohung, Kündigung

deadlines.jsonl

Termine und Fristen, die das Sprachmodell bei der Einstufung aus einer eingehenden Nachricht gelesen hat.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Frist.
message_idVerweisNummer der Nachricht, aus der die Frist stammt (Verweis auf messages.id).
due_onText
kann null sein
Datum der Frist als JJJJ-MM-TT, wenn das Sprachmodell es erkennen konnte, sonst die Formulierung aus der Nachricht als freier Text; leer, wenn nichts genannt ist.
matterTextWorum es bei der Frist oder dem Termin geht, laut Sprachmodell.
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem die Frist erfasst wurde.

drafts.jsonl

Antwortentwürfe und Weitergaben an Dritte, die zu einer Nachricht angelegt wurden, und neue Mails (über „E-Mail schreiben“), jeweils mit aktuellem Text, Prüfergebnis und Stand von Freigabe und Versand.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Entwurfs.
message_idVerweis
kann null sein
Nummer der Nachricht, auf die der Entwurf antwortet oder die er weitergibt (Verweis auf messages.id); leer bei einer neuen Mail.
subjectTextBetreff des Entwurfs in der aktuellen Fassung.
bodyTextText des Entwurfs in der aktuellen Fassung, den eine Bearbeitung durch einen Menschen überschreibt; noch offene Lücken stehen als [[Name]] im Text.
gapsJSON-Text
kann null sein
JSON-Objekt mit "gaps" und "note": "gaps" ist die Liste der Lücken mit "name" (Platzhalter im Text), "options" (Vorschläge) und bei fremdsprachigen Mails "nameDe" und "optionsDe" als deutsche Lesehilfe (ältere Entwürfe führen eine Lücke nur als Text), "note" ist ein Hinweis zum Entwurf, beim Modellentwurf worauf beim Prüfen zu achten ist.
warningsJSON-Text
kann null sein
Ergebnis der automatischen Prüfung des Entwurfstexts als JSON-Liste von Einträgen mit "kind" (zahl, prozent oder termin für Beträge, Prozentangaben und Daten, die weder im Faktenverzeichnis noch in der Nachricht stehen, iban für eine Kontonummer im Entwurf, luecke für eine offene Lücke) und "detail" (Beschreibung); wird bei jeder Bearbeitung neu berechnet.
modelText
kann null sein
Name des Sprachmodells, das den Entwurf geschrieben hat; „uebergabe“ bei einer ohne Sprachmodell gebauten Weitergabe an Dritte, „serie“ bei einem aus einer Serie gleichartiger Nachrichten übernommenen Entwurf; leer bei einer neuen Mail, deren Text ein Mensch selbst geschrieben hat (sie geht ohne KI-Hinweis hinaus).
input_tokensGanzzahl
kann null sein
Anzahl der Tokens (Abrechnungseinheiten des Sprachmodells), die beim Schreiben an das Modell gingen; 0 bei Weitergaben und Serienentwürfen.
output_tokensGanzzahl
kann null sein
Anzahl der Tokens, die das Sprachmodell beim Schreiben zurückgab; 0 bei Weitergaben und Serienentwürfen.
statusTextStand des Entwurfs.
  • entwurf offen, noch nicht versandt
  • gesendet freigegeben und verschickt
  • verworfen verworfen oder neu geschrieben
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem der Entwurf angelegt wurde.
sent_atZeitpunkt SQLite UTC
kann null sein
Zeitpunkt des Versands; leer, solange der Entwurf nicht versandt ist.
extra_factsText
kann null sein
Beim Bearbeiten eingefügte, aus dem Kalender belegte Angaben wie freie Zeiten und Buchungslinks, eine je Zeile, damit die Prüfung sie nicht als erfunden meldet.
regeln_versionVerweis
kann null sein
Stand der Hausregeln, der beim Anlegen des Entwurfs galt (Verweis auf hausregeln.version); leer bei Entwürfen, die vor Einführung dieser Spalte entstanden.
ziel_adresseText
kann null sein
Empfängeradresse einer Weitergabe an Dritte, zum Beispiel an die Steuerberatung, oder einer neuen Mail; leer bei einer normalen Antwort an den Absender.
kontoText
kann null sein
Nur bei einer neuen Mail: Kurzname des Postfachs, aus dem sie geht (wie messages.account_id); leer bei Antworten und Weitergaben, die aus dem Postfach ihrer Nachricht gehen.

corrections.jsonl

Wesentliche Änderungen, die ein Mensch an einem Entwurf vorgenommen hat, als Vorher und Nachher (kleine Korrekturen werden nicht gespeichert); die jüngsten dienen dem Agenten als Beispiel für künftige Entwürfe.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Änderung.
draft_idVerweisNummer des geänderten Entwurfs (Verweis auf drafts.id).
before_textTextText des Entwurfs vor der Änderung, ohne Leerraum am Rand und auf 4.000 Zeichen gekürzt.
after_textTextText des Entwurfs nach der Änderung durch den Menschen, ebenso auf 4.000 Zeichen gekürzt.
created_atZeitpunkt SQLite UTCZeitpunkt der Änderung.

questions.jsonl

Rückfragen, die der Agent beim Schreiben eines Entwurfs an das Haus stellt, meist zu einer Lücke, und die Antworten darauf, die beim nächsten Entwurf zu derselben Nachricht berücksichtigt werden.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Rückfrage.
message_idVerweisNummer der Nachricht, zu deren Entwurf die Rückfrage gehört (Verweis auf messages.id).
questionTextText der Rückfrage des Agenten.
answerText
kann null sein
Antwort, die ein Mensch in der Oberfläche gegeben hat; leer, solange die Frage offen ist.
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem die Rückfrage gestellt wurde.
answered_atZeitpunkt SQLite UTC
kann null sein
Zeitpunkt der Antwort; leer, solange die Frage offen ist.

freigaben.jsonl

Fortlaufendes, nur ergänztes und durch eine Prüfkette gesichertes Protokoll, wer welchen Antwortentwurf geschrieben, geändert, gegengelesen, gesendet oder verworfen hat und mit welchem Wortlaut; dazu Löschungen auf Verlangen und bestätigte Bankverbindungen.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Zeile; sie wird nie erneut vergeben und liegt nach einer Kürzung immer über freigaben_anker.bis_id.
draft_idVerweis
kann null sein
Nummer des Entwurfs in drafts.id; leer bei Einträgen ohne Entwurf (Löschung auf Verlangen, bestätigte Bankverbindung), und der Entwurf selbst kann nach seiner Frist schon gelöscht sein.
message_idVerweis
kann null sein
Nummer der Nachricht in messages.id, auf die sich die Zeile bezieht; leer bei Löschungen auf Verlangen, und die Zeile bleibt bestehen, auch wenn die Nachricht nach ihrer Frist gelöscht wurde.
person_idVerweisKennung der handelnden Person aus einstellungen.json (Liste personen, Feld id); beim Versand durch die Automatik steht hier „automatik“.
person_nameTextName der handelnden Person zum Zeitpunkt der Aktion; bei der Automatik „Automatik (Freigabeliste)“.
aktionTextWas in dieser Zeile geschehen ist.
  • geschrieben Entwurf auf Anforderung erstellt
  • geaendert Entwurfstext von einer Person geändert
  • gesendet Antwort verschickt, durch Person oder Automatik
  • verworfen Entwurf verworfen oder Löschung auf Verlangen
  • freigegeben gegengelesen oder Bankverbindung bestätigt
betreffText
kann null sein
Betreff des Entwurfs; bei einer Löschung auf Verlangen „Loeschung auf Verlangen“, bei einer bestätigten Bankverbindung „Bankverbindung bestaetigt“.
textTextVollständiger Wortlaut des Entwurfs zum Zeitpunkt der Aktion (bei einer Löschung auf Verlangen eine Beschreibung mit der betroffenen Adresse, bei einer bestätigten Bankverbindung IBAN und Absenderadresse); nach Ablauf der Frist für das Protokoll, bei nie gesendeten Entwürfen schon nach der Frist für Entwürfe, wird er durch einen leeren Text ersetzt, nicht durch null.
text_pruefsummeTextSHA-256-Prüfsumme des Wortlauts als 64-stellige Hexadezimalzahl, beim Anlegen berechnet; sie bleibt unverändert, auch wenn der Wortlaut nach Frist geleert wird.
regeln_versionVerweis
kann null sein
Fassung der Hausregeln, nach der der Entwurf geschrieben wurde, als Nummer in hausregeln.version; gefüllt nur bei „geschrieben“ und beim Versand durch die Automatik.
notizText
kann null sein
Ergänzende Angabe zur Aktion, etwa der Empfänger beim Versand („an …“), „zweites Augenpaar“ beim Gegenlesen, „Artikel 17“ bei einer Löschung auf Verlangen oder „Betrugspruefung“ bei einer bestätigten Bankverbindung.
amZeitpunkt ISO 8601 UTCZeitpunkt der Aktion.
ketteTextPrüfkettenwert dieser Zeile als 64-stellige Hexadezimalzahl, beim Anlegen aus dem Wert der vorigen Zeile und den Angaben dieser Zeile berechnet (Verfahren unten); er ändert sich danach nie, auch nicht beim Leeren des Wortlauts.
text_entfernt_amDatum
kann null sein
Tag, an dem der Wortlaut nach Frist geleert wurde (text ist dann ein leerer Text); leer, solange der Wortlaut noch vorhanden ist.

freigaben_anker.jsonl

Eine einzige Zeile, die nach dem fristgemäßen Löschen der ältesten Zeilen aus freigaben den neuen Anfang der Prüfkette und den Umfang der Kürzung festhält; ohne Kürzung ist die Tabelle leer.

FeldFormatBedeutung
idGanzzahlNummer der Zeile, immer 1, weil es höchstens eine Ankerzeile gibt.
ketteTextPrüfkettenwert (freigaben.kette) der zuletzt gelöschten Zeile, an den die erste verbliebene Zeile anknüpft; wird bei jeder weiteren Kürzung überschrieben.
bis_idGanzzahlNummer (freigaben.id) der zuletzt gelöschten Zeile; alle Zeilen bis einschließlich dieser Nummer sind gelöscht.
entferntGanzzahlGesamtzahl der bisher nach Frist gelöschten Zeilen aus freigaben, über alle Kürzungen aufsummiert.
amZeitpunkt ISO 8601 UTCZeitpunkt der letzten Kürzung.

verwaltungsprotokoll.jsonl

Protokoll, wer wann was an der Einrichtung des Mailagenten geändert hat (Postfächer, Personen, Fristen, Hausregeln, Buchungen, Datenexporte), dazu je Person die erste Anmeldung, das Einlösen eines Einrichtungslinks und beim Entfernen die letzte Anmeldung; ausdrücklich ohne Passwörter oder andere Geheimnisse.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Eintrags.
amZeitpunkt SQLite UTCZeitpunkt des Vorgangs.
person_idVerweisKennung der handelnden Person aus einstellungen.json (Liste personen, Feld id); bei Aufträgen über die NexAI-Zugangszentrale steht hier „nexai-zentrale“.
person_nameTextName der handelnden Person zum Zeitpunkt des Eintrags; bei der Zugangszentrale „NexAI-Zentrale: “ gefolgt vom Namen aus dem unterschriebenen Auftrag des NexAI-Portals.
wasTextArt des Vorgangs, als fester Wortlaut ohne Umlaute gespeichert.
  • Einrichtung: Schritt bestaetigt Einrichtungsschritt bestätigt
  • Einrichtung: Freigaberegeln Betragsgrenze für das Vier-Augen-Prinzip gesetzt
  • Einrichtung abgeschlossen Ersteinrichtung abgeschlossen
  • Postfach angebunden Postfach neu angebunden
  • Postfach-Passwort erneuert Postfachpasswort neu hinterlegt
  • Postfach getrennt Postfach vom Agenten getrennt
  • Einrichtungslink angelegt Einmal-Link für das erste Passwort erzeugt
  • Einrichtungslink verschickt Einmal-Link per Mail verschickt
  • Einrichtungslink an die Zentrale Einmal-Link an die NexAI-Zentrale übergeben
  • Person aufgenommen Person neu angelegt
  • Person gesperrt Zugang einer Person gesperrt
  • Person entsperrt Zugang einer Person entsperrt
  • Person geaendert Angaben oder Rolle geändert
  • Person entfernt Person gelöscht
  • Passwort geaendert eigenes Anmeldepasswort geändert
  • Zweiten Faktor eingerichtet zweiten Anmeldefaktor eingerichtet
  • Zweiten Faktor abgeschaltet zweiten Anmeldefaktor abgeschaltet
  • Neue Wiederherstellungscodes Wiederherstellungscodes neu erzeugt
  • Einrichtungslink eingeloest Passwort über einen Einmal-Link gesetzt
  • Erste Anmeldung erste Anmeldung einer Person an der Oberfläche; spätere Anmeldungen stehen nicht im Protokoll
  • Zugang hinzugebucht zusätzlichen Benutzerzugang gebucht
  • Zugang zurueckgegeben Benutzerzugang zurückgegeben
  • Postfach hinzugebucht zusätzlichen Postfachplatz gebucht
  • Postfach zurueckgegeben Postfachplatz zurückgegeben
  • Abrechnung nicht gemerkt Abrechnungsmeldung konnte nicht gespeichert werden
  • Meldung an NexAI fehlgeschlagen Mitteilung an NexAI nicht versandt
  • Kontaktwunsch zu Zugaengen und Postfaechern Anfrage an NexAI gestellt
  • Rechnungsadresse geaendert Rechnungsadresse geändert oder entfernt
  • Rechtemodell geaendert Regel geändert, wer verwalten darf
  • Hausregeln geaendert neue Fassung der Hausregeln
  • Signatur geaendert Signatur eines Postfachs geändert
  • Empfaenger fuer Versand freigegeben Adresse für automatischen Versand freigegeben
  • Freigabe zurueckgezogen automatischen Versand an eine Adresse beendet
  • Loeschfristen geaendert Löschfristen geändert
  • Antwortziele geaendert Ziel-Antwortzeiten geändert
  • Stimmungseinstufung eingeschaltet Stimmungseinstufung eingeschaltet
  • Stimmungseinstufung ausgeschaltet Stimmungseinstufung ausgeschaltet, Einstufungen gelöscht
  • Datenexport heruntergeladen Datenexport über die Oberfläche heruntergeladen
  • Vier-Augen-Prinzip eingeschaltet Vier-Augen-Prinzip in den Einstellungen eingeschaltet
  • Vier-Augen-Prinzip ausgeschaltet Vier-Augen-Prinzip in den Einstellungen ausgeschaltet; es muss keine zweite Person mehr gegenlesen
  • Ueber den Assistenten Aufgabe, die der Assistent erledigt hat (gegenstand sagt welche; „Rueckgaengig:“ davor, wenn zurückgenommen)
  • Schnittstellenschluessel angelegt Schlüssel für die offene Schnittstelle angelegt
  • Schnittstellenschluessel widerrufen Schlüssel für die offene Schnittstelle widerrufen
gegenstandText
kann null sein
Woran sich der Vorgang bezieht, etwa die Postfachadresse, Name oder Kennung einer Person, die Fassung der Hausregeln, die Empfängeradresse, die neue Rechnungsadresse, der Text eines Kontaktwunsches, der Stand vorher und nachher bei Buchungen oder bei Fehlern die Fehlermeldung.
einzelheitenText
kann null sein
Ergänzende Angaben, etwa der Anmeldeweg eines Postfachs („Weg: …“), beim Entfernen einer Person deren letzte Anmeldung („letzte Anmeldung …“ in deutscher Zeit oder „nie angemeldet“), die geänderten Felder einer Person, der Umfang eines Datenexports oder bei geänderten Löschfristen und Antwortzielen die neuen Werte als JSON-Text.

rechnungen.jsonl

Aus Mails per Textmuster und ohne Sprachmodell erkannte Rechnungen und Mahnungen mit Betrag, Fälligkeit und Mahnstufe, als Liste offener Posten.

FeldFormatBedeutung
message_idVerweisNummer der Nachricht in messages.id, in der die Rechnung erkannt wurde; je Nachricht höchstens eine Rechnung.
betrag_centGanzzahl
kann null sein
Betrag der Forderung in Cent (1.234,56 € stehen als 123456), aus dem Mailtext abgeschrieben, bevorzugt der Betrag neben Wörtern wie „Gesamtbetrag“ oder „zu zahlen“.
waehrungTextWährung des Betrags.
  • EUR Euro, derzeit einziger Wert
nummerText
kann null sein
Rechnungsnummer, Aktenzeichen, Kundennummer oder Vorgangsnummer, wie sie im Text neben einem solchen Stichwort steht; nur übernommen, wenn sie mindestens eine Ziffer enthält.
faellig_amDatum
kann null sein
Fälligkeitstag aus Formulierungen wie „zahlbar bis“ oder „fällig am“; fehlt im Text die Jahreszahl, wird das Jahr der Mail angenommen.
mahnstufeGanzzahlStufe der Mahnung, aus Betreff und Textanfang erkannt.
  • 0 keine Mahnung, normale Rechnung
  • 1 Zahlungserinnerung
  • 2 Mahnung oder erste Mahnung
  • 3 zweite Mahnung
  • 4 letzte Mahnung oder Inkasso
mahnstufe_nameText
kann null sein
Bezeichnung der erkannten Mahnstufe; leer bei Stufe 0.
  • Zahlungserinnerung Stufe 1
  • Mahnung Stufe 2
  • 2. Mahnung Stufe 3
  • letzte Mahnung Stufe 4, letzte Mahnung
  • Inkasso Stufe 4, Inkasso oder gerichtlich
glaeubigerText
kann null sein
Mailadresse des Absenders der Rechnung, wie sie bei der ersten Erkennung gespeichert wurde; eine spätere erneute Erkennung ändert sie nicht.
bezahlt_amDatum
kann null sein
Tag, an dem eine Person die Rechnung im Mailagenten als bezahlt markiert hat; leer, solange sie offen ist oder wenn die Markierung zurückgenommen wurde.
erkannt_amZeitpunkt SQLite UTCZeitpunkt der ersten Erkennung; eine erneute Erkennung derselben Nachricht ändert ihn nicht.

wiedervorlagen.jsonl

Erinnerungen an Nachrichten, die wieder auf den Tisch müssen, mit einer Stufe, die mit jeder folgenlosen Erinnerung steigt.

FeldFormatBedeutung
message_idVerweisNummer der Nachricht in messages.id; je Nachricht höchstens eine Wiedervorlage.
amDatumTag, an dem die Wiedervorlage fällig ist; nach jeder Erinnerung wird er auf den folgenden Tag gesetzt.
grundTextGrund der Wiedervorlage: bei automatischen Einträgen ein erzeugter Satz (etwa „Frist am …: …“ oder „… hat das seit … offen“), bei von Hand gesetzten der eingegebene Text mit höchstens 200 Zeichen.
quelleTextWoher die Wiedervorlage stammt.
  • frist Frist in der Nachricht, drei Tage vorher
  • zuweisung Zuweisung seit drei Tagen unberührt
  • unbearbeitet wichtig, Antwort erwartet, niemand zuständig
  • hand von einer Person gesetzt
stufeGanzzahlWie oft die Wiedervorlage schon gemeldet wurde; jede Meldung erhöht sie um 1, und ab Stufe 3 geht die Meldung zusätzlich an die Leitung, sofern es eine zweite Person gibt.
zuletzt_gemeldetDatum
kann null sein
Tag der letzten Erinnerung; leer, solange noch keine erfolgt ist.
erledigt_amDatum
kann null sein
Tag, an dem die Wiedervorlage als erledigt markiert wurde; wird beim erneuten Setzen wieder geleert.
angelegt_amZeitpunkt SQLite UTCZeitpunkt, zu dem die Wiedervorlage erstmals angelegt wurde.

zuweisungen.jsonl

Hält fest, welche Person sich um eine Nachricht kümmert und wie weit die Bearbeitung ist.

FeldFormatBedeutung
message_idVerweisNummer der Nachricht in messages.id; je Nachricht höchstens eine Zuweisung.
person_idVerweisKennung der zuständigen Person aus einstellungen.json (Liste personen, Feld id); ist die gewählte Person abwesend, steht hier ihre Vertretung.
person_nameTextName der zuständigen Person zum Zeitpunkt der Zuweisung.
statusTextBearbeitungsstand der Nachricht.
  • offen zugewiesen, noch nicht begonnen
  • in_arbeit wird gerade bearbeitet
  • erledigt Bearbeitung abgeschlossen
von_idVerweisKennung der Person aus einstellungen.json, die zuletzt zugewiesen oder den Stand gesetzt hat.
von_nameTextName der Person, die zuletzt zugewiesen oder den Stand gesetzt hat.
geaendert_amZeitpunkt SQLite UTCZeitpunkt der letzten Zuweisung oder Änderung des Stands.

notizen.jsonl

Interne Notizen der Mitarbeiter zu einer Nachricht, die nur im Haus sichtbar sind und nie an den Absender oder das Sprachmodell gehen.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Notiz.
message_idVerweisNummer der Nachricht in messages.id, zu der die Notiz gehört.
person_idVerweisKennung der verfassenden Person aus einstellungen.json (Liste personen, Feld id); nur sie kann die Notiz löschen.
person_nameTextName der verfassenden Person zum Zeitpunkt der Notiz.
textTextInhalt der Notiz, ohne Leerzeichen am Anfang und Ende, höchstens 2.000 Zeichen.
amZeitpunkt SQLite UTCZeitpunkt, zu dem die Notiz geschrieben wurde.

vorgaenge.jsonl

Ordnet jeder Nachricht das tatsächliche Gegenüber und den Eingangskanal zu, damit Nachrichten derselben Person über Mail, Telefon, Chat und Formular als ein Vorgang zusammengeführt werden.

FeldFormatBedeutung
message_idVerweisNummer der Nachricht in messages.id.
gegenseiteText
kann null sein
Mailadresse des tatsächlichen Gegenübers in Kleinschreibung: bei gewöhnlichen Mails der Absender, bei Meldungen eines in den Einstellungen als eigenes System eingetragenen Absenders (etwa Kontaktformular oder Telefonanlage) die Adresse aus einem beschrifteten E-Mail-Feld im Text; leer, wenn keine Adresse gefunden wurde.
kanalTextÜber welchen Weg die Nachricht kam, bei eigenen Systemen anhand von Absender, Name und Betreff erkannt.
  • mail gewöhnliche Mail vom Gegenüber
  • telefon Meldung einer Telefonanlage
  • chat Meldung eines Chatfensters
  • formular Webformular oder sonstige Systemmeldung
  • portal vorgesehen, derzeit nie vergeben

anfragen.jsonl

Per Textmuster und ohne Sprachmodell erkannte Preisanfragen mit den wörtlich genannten Positionen.

FeldFormatBedeutung
message_idVerweisNummer der Nachricht in messages.id, in der die Preisanfrage erkannt wurde.
grundText
kann null sein
Die Wendung aus der Mail, an der die Preisanfrage erkannt wurde, auf höchstens 80 Zeichen gekürzt.
positionenJSON-TextListe der wörtlich in der Mail genannten Positionen als JSON-Liste; jedes Element hat menge (Zahl), einheit (etwa „Stück“ oder „m²“), bezeichnung (Text) und fundstelle (die Zeile der Mail, aus der die Position stammt, wörtlich); „[]“, wenn keine Position erkannt wurde.
erkannt_amZeitpunkt SQLite UTCZeitpunkt der ersten Erkennung; eine erneute Erkennung ändert ihn nicht.
erledigt_amZeitpunkt SQLite UTC
kann null sein
Zeitpunkt, zu dem eine Person die Anfrage als erledigt markiert hat; leer, solange sie offen ist.

absender_ibans.jsonl

Merkt sich, welche Bankverbindungen eine absendende Firma bisher genannt hat, damit eine plötzlich andere Kontonummer derselben Firma als möglicher Rechnungsbetrug auffällt.

FeldFormatBedeutung
domainTextDomain der Absenderadresse, auf die letzten beiden Teile gekürzt und kleingeschrieben (aus rechnung@mail.beispiel.de wird beispiel.de).
ibanTextIn einer Mail dieser Firma genannte IBAN in Großbuchstaben ohne Leerzeichen, nur mit gültiger Prüfziffer; aus als verdächtig eingestuften Mails wird keine übernommen.
zuerst_gesehenZeitpunkt SQLite UTCZeitpunkt, zu dem diese IBAN erstmals bei dieser Firma erkannt wurde.
zuletzt_gesehenZeitpunkt SQLite UTCZeitpunkt, zu dem diese IBAN zuletzt in einer Mail dieser Firma erkannt wurde; 24 Monate danach wird die Zeile gelöscht.
bestaetigt_amZeitpunkt SQLite UTC
kann null sein
Zeitpunkt, zu dem eine Person diese Bankverbindung als geprüft bestätigt hat; leer, solange sie nicht bestätigt ist.
bestaetigt_vonText
kann null sein
Name der Person, die die Bankverbindung bestätigt hat.

sender_rules.jsonl

Absenderregeln: für welche Absender das Haus festgelegt hat, dass ihre Post immer oder nie als wichtig gilt; die Regel geht der Einstufung durch das Sprachmodell vor.

FeldFormatBedeutung
addressTextE-Mail-Adresse des Absenders, in Kleinbuchstaben gespeichert.
verdictTextDie Festlegung des Hauses für diesen Absender.
  • wichtig Post gilt immer als wichtig
  • unwichtig nie wichtig, höchstens normal
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem die Regel zuletzt festgelegt wurde; eine erneute Festlegung überschreibt ihn.

auto_send.jsonl

Die Freigabeliste der Automatik: Absender, deren Nachrichten der Agent ohne Freigabe durch einen Menschen beantworten darf, und zwar nur, wenn der Entwurf ohne Lücken, Fragen, Warnungen und verbindliche Erklärungen ist und keine zweite Freigabe verlangt.

FeldFormatBedeutung
addressTextE-Mail-Adresse des Absenders, dessen Nachrichten automatisch beantwortet werden dürfen, in Kleinbuchstaben.
noteText
kann null sein
Vermerk zur Aufnahme: über die Oberfläche „freigegeben von“ mit dem Namen der Person, über die Kommandozeile ein freier Text oder nichts.
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem die Adresse in die Liste aufgenommen wurde.

briefings.jsonl

Die Übersichten über neu eingestufte Post, die der Agent nach jedem geplanten oder von Hand angestoßenen Lauf schreibt, sofern es Neues gab.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Übersicht.
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem die Übersicht geschrieben wurde.
covers_fromZeitpunkt SQLite UTC
kann null sein
Zeitpunkt der vorherigen Übersicht, aufgenommen ist alles, was seitdem eingestuft wurde; leer bei der ersten Übersicht.
file_pathText
kann null sein
Speicherort einer zusätzlich als Markdown-Datei abgelegten Kopie auf dem Server; leer, wenn sie nicht geschrieben werden konnte; die Datei selbst ist nicht im Export, ihr Inhalt steht in content.
contentTextWortlaut der Übersicht als Markdown: Zahl der neuen Nachrichten, Wichtiges, Fristen, Verdächtiges, Fragen des Agenten, Inhalte verlinkter Seiten, ausstehende Antworten und der Rest in einer Zeile.

Kurzfassungen der Webseiten, die in unverdächtigen eingehenden Nachrichten der Kategorien wichtig und normal verlinkt waren (höchstens drei je Nachricht), oder der Grund, warum eine Seite nicht gelesen wurde.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Eintrags.
message_idVerweisNummer der Nachricht, in der der Link stand (Verweis auf messages.id).
urlTextAdresse der verlinkten Seite; ein leerer Text bedeutet, dass die Nachricht keine lesbaren Links enthielt und nur als erledigt vermerkt ist.
statusTextErgebnis des Lesens.
  • gelesen zusammengefasst, oder Nachricht ohne Links
  • abgelehnt nicht abgerufen oder nicht erreichbar
  • fehler Zusammenfassung ist fehlgeschlagen
summaryText
kann null sein
Ein bis zwei Sätze des Sprachmodells, was auf der Seite steht, ergänzt um einen Warnsatz, wenn die Seite nach Daten oder Geld fragt oder dem Assistenten Anweisungen geben will; leer, wenn die Seite nicht gelesen wurde.
wantedText
kann null sein
Was die Seite laut Sprachmodell vom Haus will, etwa Zahlung, Anmeldung, Bestätigung oder Termin, oder „nichts“; leer, wenn die Seite nicht gelesen wurde.
refused_reasonText
kann null sein
Grund, warum die Seite nicht abgerufen wurde (etwa eine ungültige oder ins eigene Netz zeigende Adresse oder ein Fehlercode der Seite), oder die Fehlermeldung bei misslungener Zusammenfassung; sonst leer.
created_atZeitpunkt SQLite UTCZeitpunkt des Eintrags.

hausregeln.jsonl

Jede Fassung der Hausregeln, die je gegolten hat, damit sich später sagen lässt, welche Regeln beim Schreiben eines Entwurfs galten.

FeldFormatBedeutung
versionGanzzahlLaufende Nummer der Fassung, beginnend bei 1; darauf verweist regeln_version in drafts.jsonl und freigaben.jsonl.
inhaltTextVollständiger Wortlaut der Hausregeln in dieser Fassung, als Markdown.
pruefsummeTextDie ersten 16 Zeichen des SHA-256-Hashwerts über den Wortlaut aus inhalt, kodiert als UTF-8 und hexadezimal in Kleinbuchstaben geschrieben (16 Zeichen, also 64 Bit); eine neue Fassung entsteht nur, wenn diese Prüfsumme von der der letzten Fassung abweicht.
mandant_idTextKennung des Hauses, für das die Fassung galt, dieselbe wie id in einstellungen.json.
notizText
kann null sein
Vermerk zur Fassung: bei einer Änderung über die Oberfläche „geaendert von“ mit dem Namen der Person und gegebenenfalls ihrer Begründung (höchstens 200 Zeichen), leer, wenn der Agent eine geänderte Datei beim Lesen bemerkt hat.
gueltig_abZeitpunkt SQLite UTCZeitpunkt, zu dem der Agent diese Fassung zuerst abgelegt hat; wurde die Datei außerhalb der Oberfläche geändert, ist es der Zeitpunkt, zu dem er die Änderung zuerst gelesen hat.

style_profile.jsonl

Das Schreibprofil des Hauses, gezählt aus bis zu 50 eigenen gesendeten Mails (übliche Anrede, Grußformel, Länge), das der Agent beim Entwerfen berücksichtigt; es gibt höchstens eine Zeile.

FeldFormatBedeutung
idGanzzahlImmer 1, weil es je Haus nur ein Profil gibt.
profileJSON-TextDas Profil als JSON-Objekt mit greeting (häufigste Anrede, Namen durch <Name> ersetzt, oder null), signoff (häufigste Grußformel oder null), averageWords (durchschnittliche Zahl der Wörter, Ganzzahl), sampleSize (Zahl ausgewerteter Mails, Ganzzahl) und notes (Liste von Texten, möglich sind „schreibt kurz, meist unter zehn Zeilen“ und „schreibt ausfuehrlich“).
sample_sizeGanzzahlZahl der eigenen gesendeten Nachrichten, aus denen das Profil gezählt wurde, höchstens 50.
created_atZeitpunkt SQLite UTCZeitpunkt, zu dem das Profil ermittelt wurde; es entsteht beim ersten Entwurf und wird danach nicht von selbst erneuert.

mailbox_actions.jsonl

Was der Agent zu einer Nachricht im Postfach oder in angebundenen Systemen getan hat: ein Label gesetzt, sie archiviert, eine Sofortmeldung verschickt, einen Termin für den Kalender verarbeitet oder einen Kontakt an das CRM gegeben.

FeldFormatBedeutung
idGanzzahlLaufende Nummer der Aktion.
message_idVerweisDie Nachricht, um die es geht (Verweis auf id in messages.jsonl).
actionTextArt der Aktion.
  • label Label im Postfach gesetzt
  • archiviert in den Archivordner verschoben
  • eilmeldung Sofortmeldung an das Haus
  • kalender Termin für Kalender verarbeitet
  • crm Kontakt an CRM übergeben
detailText
kann null sein
Einzelheit zur Aktion: bei label der Name des Labels (NexAI/Wichtig, NexAI/Antwort offen oder NexAI/Verdaechtig), bei archiviert der Zielordner im Postfach, bei eilmeldung der Grund, bei kalender das Ergebnis (eingetragen mit Kennung des Termins, war schon da oder uebersprungen, jeweils gegebenenfalls mit Grund), bei crm „neuer Kontakt“ oder „bestehender Kontakt“ mit dessen Kennung im CRM.
created_atZeitpunkt SQLite UTCZeitpunkt der Aktion.
undone_atZeitpunkt SQLite UTC
kann null sein
Zeitpunkt, zu dem eine Archivierung rückgängig gemacht wurde, also die Nachricht zurück in den Posteingang kam oder dort nicht mehr vorhanden war; nur bei archiviert, sonst leer.

accounts.jsonl

Die Postfächer, aus denen der Agent je Post abgeholt hat; ein Eintrag bleibt bestehen, wenn das Postfach später getrennt wird, weil die Nachrichten daran hängen.

FeldFormatBedeutung
idTextKennung des Postfachs, dieselbe wie postfaecher[].id in einstellungen.json; darauf verweist account_id in messages.jsonl.
addressTextE-Mail-Adresse des Postfachs, bei jeder Abholung auf den Stand der Einstellungen gebracht.
kindTextFreie Beschriftung des Postfachs aus den Einstellungen (zum Beispiel geschaeftlich), so wie sie bei der ersten Abholung lautete; spätere Änderungen werden hier nicht nachgetragen.
created_atZeitpunkt SQLite UTCZeitpunkt der ersten Abholung aus diesem Postfach.

runs.jsonl

Das Laufprotokoll: jeder Abruflauf des Agenten mit Art, Beginn, Ende, Ergebnis, Zahl neuer Nachrichten, Störungen und Anmerkungen.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Laufs.
kindTextWodurch der Lauf ausgelöst wurde.
  • scheduled Lauf nach festem Zeitplan
  • catchup nachgeholter Lauf nach einer Pause
  • manual von Hand angestoßen
  • sofort ausgelöst durch neu eingetroffene Post
  • zeitplan Lebenszeichen der Vorführinstanz
started_atZeitpunkt SQLite UTCZeitpunkt, zu dem der Lauf begann.
finished_atZeitpunkt SQLite UTC
kann null sein
Zeitpunkt, zu dem der Lauf endete oder als abgebrochen abgehakt wurde; leer, solange er läuft.
statusTextWie der Lauf ausging.
  • running Lauf ist noch unterwegs
  • ok ohne Störung beendet
  • error mit Störung beendet
  • abgebrochen nie beendet, später abgehakt
new_messagesGanzzahlZahl der in diesem Lauf neu abgeholten Nachrichten über alle Postfächer.
errorText
kann null sein
Störungen des Laufs als Text, mehrere durch „ | “ getrennt, etwa ein Postfach, bei dem die Anmeldung scheiterte; leer, wenn es keine gab.
hinweiseText
kann null sein
Anmerkungen des Laufs, die keine Störung sind, etwa ein noch nicht eingerichtetes Postfach oder der Empfänger einer automatisch beantworteten Mail, mehrere durch „ | “ getrennt; leer, wenn es keine gab.

verbrauch.jsonl

Jeder Aufruf des Sprachmodells mit Zweck, Modell, Token-Zahlen und errechneten Kosten, als Grundlage für Kostenanzeige und Kostendeckel.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Aufrufs.
zweckTextWofür das Modell gefragt wurde.
  • einstufung Einstufung einer eingegangenen Nachricht
  • entwurf Antwortentwurf zu einer Nachricht
  • auftragsentwurf Entwurf zu einem Portalauftrag
  • uebersetzung Übersetzung einer Nachricht ins Deutsche
  • linkzusammenfassung Zusammenfassung einer verlinkten Seite
  • archivantwort Antwort auf Frage ans Archiv
  • assistent Frage an den Assistenten, je Werkzeugrunde ein Aufruf
modelTextBezeichnung des verwendeten Sprachmodells, zum Beispiel claude-haiku-4-5.
input_tokensGanzzahlZahl der Token, die an das Modell gingen.
output_tokensGanzzahlZahl der Token, die das Modell erzeugte.
usdKommazahlKosten des Aufrufs in US-Dollar, vom Agenten aus den Token-Zahlen und einer im Programm hinterlegten Preisliste (Stand Oktober 2026) errechnet und nicht einer Rechnung des Anbieters entnommen; für ein dort unbekanntes Modell gilt der höchste hinterlegte Preis.
created_atZeitpunkt SQLite UTCZeitpunkt des Aufrufs.

schnittstellen_schluessel.jsonl

Die Schlüssel der offenen Schnittstelle, die die Verwaltung angelegt hat, mit Anlage, letzter Benutzung und Widerruf; der Schlüssel selbst ist nirgends gespeichert, und sein Prüfwert geht nicht in den Export.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Schlüssels, auf die schnittstellenprotokoll.schluessel_id verweist.
nameTextName, den die Verwaltung beim Anlegen vergeben hat, damit sie den Schlüssel wiedererkennt; höchstens 80 Zeichen.
anfangTextDie ersten 16 Zeichen des Schlüssels (die Vorsilbe nexaimail_ und sechs Zeichen), an denen man ihn erkennt; damit lässt sich nichts abrufen.
angelegt_amZeitpunkt SQLite UTCZeitpunkt, zu dem der Schlüssel angelegt wurde.
angelegt_vonTextName der Person aus der Verwaltung, die ihn angelegt hat.
zuletzt_benutztZeitpunkt SQLite UTC
kann null sein
Zeitpunkt des letzten Abrufs mit diesem Schlüssel; leer, solange er nie benutzt wurde.
widerrufen_amZeitpunkt SQLite UTC
kann null sein
Zeitpunkt des Widerrufs; ab dann wird jeder Abruf mit diesem Schlüssel abgewiesen. Leer, solange er gilt; ein Ablaufdatum gibt es nicht.
widerrufen_vonText
kann null sein
Name der Person aus der Verwaltung, die ihn widerrufen hat.

schnittstellenprotokoll.jsonl

Jeder Abruf über die offene Schnittstelle, auch der abgewiesene, mit Schlüssel, Weg, Ergebnis, Größe und IP-Adresse; die IP-Adresse wird nach 90 Tagen geleert, die Zeile mit der Frist des Verwaltungsprotokolls (fristen.protokollTage) gelöscht.

FeldFormatBedeutung
idGanzzahlLaufende Nummer des Abrufs.
amZeitpunkt SQLite UTCZeitpunkt, zu dem die Antwort abgeschlossen oder abgebrochen war.
schluessel_idVerweis
kann null sein
Nummer des benutzten Schlüssels in schnittstellen_schluessel.id; leer, wenn kein gültiger Schlüssel mitkam.
schluessel_nameText
kann null sein
Name dieses Schlüssels zum Zeitpunkt des Abrufs; leer ohne gültigen Schlüssel.
methodeTextHTTP-Methode der Anfrage; außer GET wird alles abgewiesen.
pfadTextDer abgerufene Weg, etwa /api/v1/tabellen/messages; von der Adresse nur der Weg und bei /api/v1/datei der Wert pfad, sonst nichts, damit ein versehentlich in die Adresse geschriebener Schlüssel nicht hier landet.
statusGanzzahlHTTP-Status der Antwort.
  • 200 geliefert
  • 401 kein oder kein gültiger Schlüssel
  • 404 gibt es nicht
  • 405 andere Methode als GET
  • 429 es lief schon ein Export
bytesGanzzahlWie viele Bytes der Antwort hinausgingen; bei einem abgebrochenen Abruf weniger als die volle Größe.
ipText
kann null sein
IP-Adresse des Aufrufers, wie sie der vorgeschaltete Proxy meldet; dient dazu, einen entwendeten Schlüssel zu erkennen; nach 90 Tagen geleert, die Zeile bleibt als Nachweis, wer was abgerufen hat.

einstellungen.json

Ein JSON-Objekt (RFC 8259, UTF-8) mit den Einstellungen des Hauses. Pfade mit [] stehen für jedes Element einer Liste. Felder, die nicht eingestellt sind, fehlen; dann gilt die Vorgabe des Programms. Zugangsdaten stehen nicht darin.

FeldFormatBedeutung
idTextKennung des Hauses aus Kleinbuchstaben, Ziffern und Bindestrich, 2 bis 40 Zeichen.
nameTextName der Firma.
postfaecher[].idTextKennung des Postfachs, eindeutig im Haus, dieselbe wie id in accounts.jsonl und account_id in messages.jsonl.
postfaecher[].addressTextE-Mail-Adresse des Postfachs.
postfaecher[].kindTextFreie Beschriftung des Postfachs, etwa geschaeftlich, info oder buchhaltung; bei Anlage über die Oberfläche ist die Vorgabe geschaeftlich.
postfaecher[].hostTextName des Servers, von dem der Agent die Post abholt (IMAP).
postfaecher[].portGanzzahlPort des Abholservers; bei Anlage über die Oberfläche ist die Vorgabe 993.
postfaecher[].smtpHostTextName des Servers, über den der Agent Mails versendet (SMTP).
postfaecher[].smtpPortGanzzahlPort des Versandservers; bei Anlage über die Oberfläche ist die Vorgabe 587.
postfaecher[].ohneSignaturja/nein (true/false)
kann null sein
true, wenn Mails aus diesem Postfach ohne Signatur hinausgehen, auch ohne die allgemeine, etwa bei einem privaten Postfach; fehlt das Feld, gilt die Signatur des Postfachs oder die allgemeine.
postfaecher[].anmeldungTextWie sich der Agent an diesem Postfach anmeldet; fehlt das Feld, gilt passwort; die Zugangsdaten selbst stehen nicht hier.
  • passwort Passwort oder App-Passwort des Postfachs
  • microsoft Anmeldung über das Microsoft-Konto
  • microsoft-anwendung Zustimmung eines Microsoft-Administrators
  • google Google-Dienstkonto für die Domain
personen[].idTextKennung der Person, eindeutig im Haus, auf die person_id in anderen Dateien verweist; fehlt die Liste personen ganz, gibt es einen einzigen Zugang, der alles sieht und verwaltet, und ein Eintrag mit der Kennung alle ohne Anmeldeadresse ist der Platzhalter für diesen früheren Einzelzugang.
personen[].nameTextName der Person.
personen[].emailTextAnmeldeadresse der Person für die Oberfläche; ohne sie kann sich die Person nicht anmelden.
personen[].rolleTextWas die Person im Haus darf; fehlt die Angabe, gilt verwalter, wenn die Person alle Postfächer sieht, sonst mitarbeiter.
  • verwalter richtet Postfächer, Leute, Regeln ein
  • mitarbeiter arbeitet mit eigenen Postfächern
personen[].postfaecherVerweisWelche Postfächer die Person sieht: eine Liste von Kennungen aus postfaecher[].id oder der Text alle; eine leere Liste heißt, dass sie noch keines sieht.
  • alle sieht alle Postfächer des Hauses
personen[].abwesendBisDatumLetzter Tag einer Abwesenheit; bis dahin bekommt die Person nichts zugewiesen, und was ihr zugewiesen war, geht an die Vertretung.
personen[].vertretungVerweisDie Person, die während der Abwesenheit einspringt (Verweis auf personen[].id).
personen[].gesperrtja/nein (true/false)Steht hier true, ist die Person gesperrt: sie bleibt in der Liste, kann sich aber nicht anmelden und bekommt keine Post zugewiesen; beim Entsperren entfällt das Feld.
fristen.nachrichtenTageGanzzahlLöschfrist in Tagen für Nachrichten mit allem, was an ihnen hängt, sowie für Übersichten und Laufprotokoll, gerechnet ab dem Datum der Mail; Vorgabe 180, mindestens 7.
fristen.anhaengeTageGanzzahlLöschfrist in Tagen für Dateianhänge; Vorgabe 90, mindestens 7.
fristen.entwuerfeTageGanzzahlLöschfrist in Tagen für nicht gesendete Entwürfe und für den Wortlaut nie gesendeter Entwürfe im Freigabeprotokoll; Vorgabe 90, mindestens 7.
fristen.protokollTageGanzzahlFrist in Tagen, nach der im Freigabeprotokoll der Wortlaut entfernt wird (Zeile und Prüfsumme bleiben) und Einträge des Verwaltungs- und des Schnittstellenprotokolls gelöscht werden; Vorgabe 1095, mindestens 7.
fristen.protokollEndeJahreGanzzahlVolle Kalenderjahre nach dem Jahr der Freigabe, nach denen auch die Zeile im Freigabeprotokoll ganz gelöscht wird; Vorgabe 6, erlaubt 1 bis 30.
fristen.verbrauchTageGanzzahlLöschfrist in Tagen für die Zeilen zum Verbrauch des Sprachmodells; Vorgabe 1095, mindestens 7.
vierAugen.anja/nein (true/false)
kann null sein
Ob das Vier-Augen-Prinzip in diesem Haus gilt; fehlt die Angabe, gilt es; false hat die Verwaltung in den Einstellungen ausgeschaltet, die Schwellen bleiben dann erhalten.
vierAugen.abBetragEuroGanzzahlBetrag in Euro, ab dem eine Antwort auf eine erkannte Rechnung eine zweite Freigabe durch eine andere Person braucht; 0 heißt, der Betrag löst nichts aus; Vorgabe 1000; das Vier-Augen-Prinzip gilt nur, wenn sich mehr als eine Person anmelden kann.
vierAugen.woerter[]TextWort, bei dessen Vorkommen in Betreff oder Text eines Entwurfs eine zweite Freigabe nötig ist, ohne Rücksicht auf Groß- und Kleinschreibung; Vorgabe sind kuendigung, kündigung, kuendigen, vertrag, anwalt, rechtsanwalt, klage, mahnung und vergleich.
vierAugen.empfaenger[]TextAdresse oder Domain der Gegenseite, bei der für jede Antwort eine zweite Freigabe nötig ist; Vorgabe ist keine.
ziele.wichtigStundenGanzzahlZielzeit in Stunden, bis zu der eine wichtige Nachricht beantwortet sein soll; Vorgabe 4, erlaubt über 0 bis 720.
ziele.normalStundenGanzzahlZielzeit in Stunden, bis zu der eine normale Nachricht beantwortet sein soll; Vorgabe 24, erlaubt über 0 bis 720.
rechtemodellTextWer im Haus Postfächer anbinden darf; fehlt die Angabe, gilt verwalter.
  • verwalter nur die Verwaltung bindet an
  • jeder jeder bindet eigenes Postfach an
zugaengeGanzzahlZahl der gebuchten Zugänge, also der Personen, die mit dem Agenten arbeiten dürfen; fehlt die Angabe, sind es 3.
postfachplaetzeGanzzahlZahl der gebuchten Postfachplätze, also wie viele Postfächer das Haus anbinden darf; fehlt die Angabe, sind es 3.
einrichtung.offenja/nein (true/false)Ob der Einrichtungsablauf nach der ersten Anmeldung noch läuft; solange true, holt der Agent keine Post; fehlt der Abschnitt, gilt die Einrichtung als abgeschlossen.
einrichtung.bestaetigt.fristenZeitpunkt ISO 8601 UTCZeitpunkt, zu dem die Löschfristen im Einrichtungsablauf ausdrücklich bestätigt wurden.
einrichtung.bestaetigt.leuteZeitpunkt ISO 8601 UTCZeitpunkt, zu dem die Personen im Einrichtungsablauf ausdrücklich bestätigt wurden.
einrichtung.bestaetigt.freigaberegelnZeitpunkt ISO 8601 UTCZeitpunkt, zu dem die Freigaberegeln im Einrichtungsablauf ausdrücklich bestätigt wurden.
einrichtung.abgeschlossenAmZeitpunkt ISO 8601 UTCZeitpunkt, zu dem der Einrichtungsablauf abgeschlossen wurde.
rechnungsMailTextE-Mail-Adresse, an die NexAI die Rechnungen für dieses Haus schickt, vom Haus selbst eingetragen; fehlt das Feld, ist keine hinterlegt.
stimmungseinstufungja/nein (true/false)Ob der Agent einstuft, wie ein Absender klingt (sachlich, unzufrieden, verärgert); fehlt die Angabe, ist sie aus, und beim Ausschalten werden die gespeicherten Einstufungen gelöscht.
kostendeckelUsdKommazahlObergrenze der errechneten Modellkosten je Kalendermonat (Weltzeit) in US-Dollar; ab 80 Prozent warnt der Agent, ist sie erreicht, holt er weiter Post, stuft aber nichts mehr ein und schreibt keine Entwürfe; 0 heißt kein Deckel; der Wert stammt nicht aus der Mandantendatei, sondern aus der Serverkonfiguration der Instanz und ist in der Oberfläche nicht änderbar.

dateien/

Was das Haus selbst als Datei pflegt, unverändert kopiert. Fehlt eine Datei, hat das Haus sie nie angelegt.

DateiFormatInhalt
hausregeln.mdMarkdown (UTF-8)Die aktuell geltenden Hausregeln des Hauses: was der Agent beim Entwerfen beachten soll (Ton, was er nie selbst schreibt, wer freigibt, Eskalation), vom Haus über die Oberfläche gepflegt (höchstens 20.000 Zeichen) und beim ersten Lauf aus einer Vorlage angelegt; frühere Fassungen stehen in hausregeln.jsonl.
fakten.mdMarkdown (UTF-8)Das Faktenverzeichnis: kurze Tatsachen, die der Agent in Antworten verwenden darf, etwa Firmenangaben, Angebot und was er nie von sich aus nennt; was dort fehlt, bleibt im Entwurf als Lücke; beim ersten Entwurf aus einer Vorlage angelegt; in der Oberfläche gibt es keinen Editor dafür, gepflegt wird die Datei direkt.
signaturen/Ordner mit Textdateien (UTF-8)Ordner mit den Signaturen, die beim Senden unter jede Mail gesetzt werden: je Postfach eine Datei <Postfach-Kennung>.txt, dazu wahlweise allgemein.txt als Ersatz für Postfächer ohne eigene; vom Haus über die Oberfläche gepflegt (höchstens 4.000 Zeichen) und beim ersten Lauf je Postfach aus einer Vorlage mit Platzhaltern in eckigen Klammern angelegt; kopiert wird der ganze Ordner.
vorlagen/Ordner mit Markdown-Dateien (UTF-8)Ordner mit Vorlagen für Mails zu Aufträgen aus dem NexAI-Portal, eine Markdown-Datei je Fall; benutzt nur, wenn die Instanz an das Portal angebunden ist; fehlt oder ist leer, wenn nie angelegt.
wissen/Ordner mit Markdown- und Textdateien (UTF-8)Ordner mit den Unterlagen des Hauses, aus denen der Agent beim Entwerfen Antworten belegt (zum Beispiel Preislisten oder Leistungsbeschreibungen), eine Datei je Thema; LIESMICH.md darin ist die mitgelieferte Erklärung.
bausteine/Ordner mit Textdateien (UTF-8)Ordner mit den Textbausteinen des Hauses für wiederkehrende Antworten, eine Datei <Name>.txt je Baustein; Platzhalter in geschweiften Klammern werden beim Einsetzen ersetzt.
abfragen.jsonJSON (RFC 8259, UTF-8)Die lesenden Abfragen in Systemen des Hauses, die ein Mensch eingetragen hat: Name, Adresse mit Platzhaltern, erlaubte Muster der Werte und der Name des Zugangs. Die Schlüssel selbst stehen nicht darin.

Prüfsummen und Prüfkette der Freigaben

Die Freigabeliste (freigaben.jsonl) hält fest, wer welchen Text geschrieben, geändert, freigegeben, gesendet oder verworfen hat. Sie ist so gebaut, dass eine nachträgliche Änderung auffällt.

Die Hausregeln (hausregeln.jsonl) tragen eine kürzere Prüfsumme: die ersten 16 Zeichen von SHA-256 über den Inhalt in UTF-8, hexadezimal in Kleinbuchstaben. Sie zeigt, ob sich eine Fassung von der vorigen unterscheidet.

Dieses Programm in Python 3 prüft einen entpackten Export, ohne etwas anderes als die Standardbibliothek: python3 pruefe_freigaben.py <Exportordner>

# Prüft die Freigabeliste eines Exports des NexAI Mailagenten.
# Aufruf: python3 pruefe_freigaben.py <entpackter Exportordner>
import hashlib, json, pathlib, sys

ordner = pathlib.Path(sys.argv[1])

def lies(name):
    datei = ordner / name
    if not datei.exists():
        return []
    return [json.loads(z) for z in datei.read_text(encoding="utf-8").splitlines() if z.strip()]

def sha256(text):
    return hashlib.sha256(text.encode("utf-8")).hexdigest()

def wert(x):
    return "" if x is None else str(x)

anker = next((a for a in lies("freigaben_anker.jsonl") if a["id"] == 1), None)
vorher = anker["kette"] if anker else "anfang"
bis = anker["bis_id"] if anker else 0
zeilen = sorted(lies("freigaben.jsonl"), key=lambda z: z["id"])

for z in zeilen:
    glied = sha256("|".join([
        vorher, z["person_id"], z["aktion"], z["text_pruefsumme"], z["am"],
        wert(z["betreff"]), wert(z["notiz"]), wert(z["draft_id"]), wert(z["message_id"]),
    ]))
    if glied != z["kette"] or z["id"] <= bis:
        sys.exit(f"Kette gebrochen bei Zeile {z['id']}")
    if not z["text_entfernt_am"] and sha256(z["text"] or "") != z["text_pruefsumme"]:
        sys.exit(f"Wortlaut passt nicht zur Prüfsumme bei Zeile {z['id']}")
    vorher = z["kette"]

print(f"Kette heil: {len(zeilen)} Zeilen, letzte Prüfsumme {vorher}")

Abruf über die Schnittstelle

Dieselben Daten gibt es ohne Oberfläche, nur lesend und kostenlos, unter der Adresse der jeweiligen Instanz. Den Schlüssel legt die Verwaltung unter „Datenschutz“ an; er gilt bis zum Widerruf und gehört in die Kopfzeile Authorization: Bearer …, nie in die Adresse. Jeder Abruf steht im Schnittstellenprotokoll. Die maschinenlesbare Beschreibung (OpenAPI 3.1) steht ohne Anmeldung unter /api/v1/openapi.json.

WegLiefert
GET /api/v1/exportDer ganze Export als ZIP-Datei, derselbe wie in der Oberfläche
GET /api/v1/tabellenDie Tabellen mit Zahl ihrer Zeilen
GET /api/v1/tabellen/{name}Eine Tabelle als JSON Lines, Zeile für Zeile wie im Export
GET /api/v1/einstellungenDie Einstellungen des Hauses, wie einstellungen.json im Export
GET /api/v1/anhaenge/{id}Ein Dateianhang; die Angaben dazu stehen in der Tabelle attachments
GET /api/v1/dateienDie Dateien, die das Haus pflegt, mit Pfad und Größe
GET /api/v1/dateiEine dieser Dateien, mit dem Pfad genau wie in der Liste
curl -H "Authorization: Bearer $SCHLUESSEL" -o export.zip https://<instanz>.nexaimail.de/api/v1/export

Was nicht enthalten ist, und warum

Impressum · Datenschutz