Automatische Nachricht

Work in Progress

Die Implementierung von GTNet ist noch nicht vollständig abgeschlossen. Diese Dokumentation beschreibt die geplante und teilweise bereits umgesetzte Funktionalität.

GTNet ermöglicht die automatische Beantwortung von eingehenden Nachrichten basierend auf konfigurierbaren Regeln. Dadurch können häufige Anfragen ohne manuelles Eingreifen bearbeitet werden.

Funktionsweise

Für jeden Nachrichtentyp, der eine Antwort erfordert, können mehrere Antwortregeln definiert werden. Diese Regeln werden in der Reihenfolge ihrer Priorität ausgewertet. Sobald eine Bedingung erfüllt ist, wird die entsprechende Antwort gesendet und die Auswertung beendet. Falls keine Regel zutrifft, wartet die Nachricht auf eine manuelle Bearbeitung durch den Administrator.

Regel-Konfiguration

Jede automatische Antwortregel umfasst folgende Eigenschaften:

  • Anfrage-Nachrichtentyp: Die Art der eingehenden Nachricht, auf die diese Regel angewendet wird.
  • Antwort-Nachrichtentyp: Die zu sendende Antwort bei erfüllter Bedingung (z.B. Akzeptieren oder Ablehnen).
  • Priorität: Die Auswertungsreihenfolge der Regeln. Niedrigere Werte werden zuerst geprüft.
  • Bedingung: Eine EvalEx-Formel, die bestimmt, ob diese Regel angewendet wird. Eine leere Bedingung wird immer erfüllt.
  • Nachrichtentext: Ein optionaler Text, der mit der Antwort gesendet wird.
  • Wartezeit in Tagen: Eine Abkühlphase nach einer Ablehnung, bevor der Absender erneut anfragen kann.

Beide Auswahllisten werden vom Server gefüllt. Als Anfragetyp stehen nur jene Nachrichtentypen zur Auswahl, für die eine automatische Antwort sinnvoll ist — eine Anfrage, welche die empfangende Instanz selbst beantwortet, etwa der Abgleich der Austauscheinstellungen, gehört nicht dazu — und als Antworttyp nur die Antworten, die zu dieser Anfrage gehören — eine Regel, die einen Handshake mit der Ablehnung einer Datenanfrage kombiniert, wird beim Speichern zurückgewiesen. Ablehnungen, die der Server von sich aus ausspricht, werden gar nicht angeboten: die Ablehnung für eine dieser Instanz unbekannte Domäne gehört dazu, denn als Regel konfiguriert würde sie einer bereits erfassten Gegenstelle mitteilen, sie stehe nicht in der Liste.

Verfügbare Variablen für Bedingungen

Das Bedingungsfeld unterstützt EvalEx-Ausdrücke. Ein Kontextmenü (Rechtsklick) im Bedingungseingabefeld bietet einfachen Zugang zu allen verfügbaren Variablen und Funktionen. Die Variablen sind nach Kategorien gruppiert:

Mein Server

Variablen über diese Serverinstanz:

VariableTypBeschreibung
MyDailyRequestLimitNUMBERTägliches Anfragelimit, das wir entfernten Servern auferlegen
MyTimezoneSTRINGZeitzone dieses Servers
MyMaxLimitLastPriceNUMBERMax. Instrumente pro LP-Anfrage von diesem Server
MyMaxLimitHistoricalNUMBERMax. Instrumente pro historischer Anfrage von diesem Server

Entfernter Server

Variablen über den anfragenden entfernten Server:

VariableTypBeschreibung
RemoteDailyRequestLimitNUMBERTägliches Anfragelimit des entfernten Servers
RemoteTimezoneSTRINGZeitzone des entfernten Servers
RemoteDomainRemoteNameSTRINGURL des entfernten Servers
RemoteMaxLimitLastPriceNUMBERMax. Instrumente pro LP-Anfrage vom entfernten Server
RemoteMaxLimitHistoricalNUMBERMax. Instrumente pro historischer Anfrage vom entfernten Server

Nachricht

VariableTypBeschreibung
MessageSTRINGFreitext-Nachrichteninhalt aus der Anfrage

Verbindungen

VariableTypBeschreibung
TotalConnectionsNUMBERGesamtzahl der aktiven GTNet-Verbindungen
ConnectionsLastPriceNUMBERAnzahl der Verbindungen für LP-Daten
ConnectionsHistoricalNUMBERAnzahl der Verbindungen für historische Daten

Berechnet

VariableTypBeschreibung
TimezoneOffsetHoursNUMBERStundendifferenz zwischen entfernter und lokaler Zeitzone
hourNUMBERAktuelle Stunde (0-23) in UTC
dayOfWeekNUMBERWochentag (1=Montag, 7=Sonntag)
dailyCountNUMBERAnzahl der heute von diesem entfernten Server empfangenen Anfragen, die gerade zu beurteilende eingeschlossen
dailyLimitNUMBERTägliches Abfragelimit, das dieser Server jedem Gegenpart gewährt; entspricht MyDailyRequestLimit

Parameter der Anfrage

Neben den oben aufgeführten Variablen kann eine Bedingung auch auf die Parameter zugreifen, welche die eingehende Anfrage selbst mitbringt. Diese werden mit dem Präfix param. angesprochen, eine Anfrage nach Datenaustausch beispielsweise mit param.entityKinds. Welche Parameter vorhanden sind, hängt vom Anfrage-Nachrichtentyp ab.

Warnung

Das Präfix param. ist zwingend. Die Parameter stammen von der anfragenden Gegenstelle und werden deshalb bewusst in einem eigenen Namensraum geführt, damit ein Gegenpart nie den Wert einer der oben aufgeführten Variablen überschreiben und so über die eigene Aufnahme entscheiden kann. Ohne das Präfix lässt sich der Name nicht auflösen und die Bedingung trifft nicht zu. Bestehende Regeln, die einen solchen Parameter ohne Präfix verwenden, müssen angepasst werden.

Zeichenkettenfunktionen

Für Bedingungen mit Zeichenkettenvergleichen stehen EvalEx-Zeichenkettenfunktionen zur Verfügung. Diese können über das Kontextmenü unter “Zeichenkettenfunktionen” eingefügt werden:

FunktionBeschreibung
STR_STARTS_WITH(string, prefix)Gibt true zurück, wenn die Zeichenkette mit dem Präfix beginnt (Gross-/Kleinschreibung beachtet)
STR_ENDS_WITH(string, suffix)Gibt true zurück, wenn die Zeichenkette mit dem Suffix endet (Gross-/Kleinschreibung beachtet)
STR_CONTAINS(string, substring)Gibt true zurück, wenn die Zeichenkette die Teilzeichenkette enthält (ohne Gross-/Kleinschreibung)
STR_MATCHES(string, pattern)Gibt true zurück, wenn die Zeichenkette dem RegEx-Muster entspricht
STR_LENGTH(string)Gibt die Länge der Zeichenkette zurück
STR_LOWER(string)Wandelt die Zeichenkette in Kleinbuchstaben um
STR_UPPER(string)Wandelt die Zeichenkette in Grossbuchstaben um
STR_TRIM(string)Entfernt führende und nachfolgende Leerzeichen
STR_LEFT(string, n)Gibt die ersten n Zeichen zurück
STR_RIGHT(string, n)Gibt die letzten n Zeichen zurück
STR_SUBSTRING(string, start, end)Extrahiert eine Teilzeichenkette von der Start- bis zur Endposition

Kontextabhängige Eingabehilfe

Bei der Eingabe von Bedingungen filtert das Kontextmenü automatisch die verfügbaren Variablen basierend auf der Cursorposition:

  • Innerhalb eines Funktionsparameters, der einen STRING erwartet, werden nur STRING-Variablen angezeigt
  • Innerhalb eines Funktionsparameters, der eine NUMBER erwartet, werden nur NUMBER-Variablen angezeigt
  • Ausserhalb jeder Funktion sind alle Variablen und Funktionen verfügbar

Beispiel-Bedingungen

Anfragen nur während der Geschäftszeiten akzeptieren (UTC):

hour >= 8 && hour <= 18 && dayOfWeek >= 1 && dayOfWeek <= 5

Ablehnen, bevor das Tageslimit erreicht ist:

dailyCount >= dailyLimit * 0.8
Tipp

Das Tägliche Abfragelimit wird von GT selbst durchgesetzt; dafür braucht es keine Regel. Eine Anfrage darüber hinaus wird abgewiesen, bevor überhaupt eine Regel ausgewertet wird — die Bedingung dailyCount >= dailyLimit trifft deshalb nur auf die allerletzte noch zugelassene Anfrage zu. Sinnvoll sind Regeln hier, wenn Sie früher als die harte Grenze reagieren wollen, wie im Beispiel oben ab vier Fünfteln des Kontingents.

Nur von vertrauenswürdigen Domains akzeptieren:

STR_STARTS_WITH(RemoteDomainRemoteName, "https://trusted-partner")

Nachrichteninhalt auf bestimmte Schlüsselwörter prüfen:

STR_CONTAINS(Message, "dringend") || STR_CONTAINS(Message, "priorität")

Kombinierte Bedingung - von bekannten Domains während der Geschäftszeiten akzeptieren:

STR_STARTS_WITH(RemoteDomainRemoteName, "https://partner") && hour >= 9 && hour <= 17

Basierend auf Zeitzonenkompatibilität akzeptieren:

TimezoneOffsetHours >= -3 && TimezoneOffsetHours <= 3

Wartezeit nach Ablehnung

Um wiederholte Anfragen von abgelehnten Servern zu vermeiden, kann eine Wartezeit in Tagen festgelegt werden. Während dieser Zeit werden erneute Anfragen desselben Typs von derselben Instanz automatisch ignoriert oder verzögert. Dies gibt dem Administrator Zeit für eine manuelle Überprüfung hartnäckiger Anfragen.