Automatische Nachricht
Die Implementierung von GTNet ist noch nicht vollständig abgeschlossen. Diese Dokumentation beschreibt die geplante und teilweise bereits umgesetzte Funktionalität.
Work in Progress
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:
| Variable | Typ | Beschreibung |
|---|---|---|
MyDailyRequestLimit | NUMBER | Tägliches Anfragelimit, das wir entfernten Servern auferlegen |
MyTimezone | STRING | Zeitzone dieses Servers |
MyMaxLimitLastPrice | NUMBER | Max. Instrumente pro LP-Anfrage von diesem Server |
MyMaxLimitHistorical | NUMBER | Max. Instrumente pro historischer Anfrage von diesem Server |
Entfernter Server
Variablen über den anfragenden entfernten Server:
| Variable | Typ | Beschreibung |
|---|---|---|
RemoteDailyRequestLimit | NUMBER | Tägliches Anfragelimit des entfernten Servers |
RemoteTimezone | STRING | Zeitzone des entfernten Servers |
RemoteDomainRemoteName | STRING | URL des entfernten Servers |
RemoteMaxLimitLastPrice | NUMBER | Max. Instrumente pro LP-Anfrage vom entfernten Server |
RemoteMaxLimitHistorical | NUMBER | Max. Instrumente pro historischer Anfrage vom entfernten Server |
Nachricht
| Variable | Typ | Beschreibung |
|---|---|---|
Message | STRING | Freitext-Nachrichteninhalt aus der Anfrage |
Verbindungen
| Variable | Typ | Beschreibung |
|---|---|---|
TotalConnections | NUMBER | Gesamtzahl der aktiven GTNet-Verbindungen |
ConnectionsLastPrice | NUMBER | Anzahl der Verbindungen für LP-Daten |
ConnectionsHistorical | NUMBER | Anzahl der Verbindungen für historische Daten |
Berechnet
| Variable | Typ | Beschreibung |
|---|---|---|
TimezoneOffsetHours | NUMBER | Stundendifferenz zwischen entfernter und lokaler Zeitzone |
hour | NUMBER | Aktuelle Stunde (0-23) in UTC |
dayOfWeek | NUMBER | Wochentag (1=Montag, 7=Sonntag) |
dailyCount | NUMBER | Anzahl der heute von diesem entfernten Server empfangenen Anfragen, die gerade zu beurteilende eingeschlossen |
dailyLimit | NUMBER | Tä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:
| Funktion | Beschreibung |
|---|---|
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):
Ablehnen, bevor das Tageslimit erreicht ist:
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:
Nachrichteninhalt auf bestimmte Schlüsselwörter prüfen:
Kombinierte Bedingung - von bekannten Domains während der Geschäftszeiten akzeptieren:
Basierend auf Zeitzonenkompatibilität akzeptieren:
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.