D Apache FreeMarker-Referenz
Integrierte FreeMarker-Zeichenfolgenvorgänge
tester
verwendet werden, deren Wert an "hello world "
gesendet wird (mit drei abschließenden Leerzeichen).
Der folgende Ausdruck lässt zu, dass der Bot entweder den Wert
tester
oder no string found
ausgibt, wenn kein Wert für die Variable festgelegt wurde.${tester.value!'no string found'}
Integrierter Vorgang | Verwendung | Ausgabe |
---|---|---|
capitalize |
${tester.value?capitalize} |
Hello World |
last_index_of |
${tester.value?last_index_of('orld')} |
7 |
left_pad |
${tester.value?left_pad(3,'_')} |
___hello world |
length |
${tester.value?length} |
14 |
lower_case |
${tester.value?lower_case} |
hello world |
upper_case |
${tester.value?upper_case} |
HELLO WORLD |
replace |
${tester.value?replace('world', 'friends')} |
hello friends |
remove_beginning |
${tester.value?remove_beginning('hello')} |
world |
trim |
${tester.value?trim} |
hello world (die drei angehängten Leerzeichen werden entfernt)
|
ensure_starts_with |
${tester.value?ensure_starts_with('brave new ')} |
brave new hello world |
ensure_ends_with |
${tester.value?ensure_ends_with(' my friend')}$ |
hello world my friend |
contains |
${tester.value?contains('world')?string ('You said world', 'You did not say world')} |
You said world Der Ausdruck |
ends_with |
${tester.value?ends_with('world')?string ('Ends with world', 'Doesn't end with world')} |
Ends with world |
starts_with |
${tester.value?starts_with('world')?string ('Starts with world', 'Doesn't start with world')} |
Doesn't start with world |
matches (regulärer Ausdruck gibt "true" oder "false" zurück)
|
${tester.value?matches('^([^0-9]*)$')} |
Der reguläre Ausdruck gibt true oder false zurück, je nachdem, ob der Wert eine Zahl enthält (in diesem Fall wird der boolesche Wert als false zurückgegeben). Der Wert tester gibt true zurück.
|
matches (regulärer Ausdruck gibt eine Zeichenfolge zurück)
|
${tester.value?matches('^([^0-9]*)$')?} |
Wie oben, gibt nun aber true als Zeichenfolge zurück. Die Funktion matches('regulärer Ausdruck') gibt true oder false als boolesche Typen zurück. Um true oder false in einer System.Output -Komponente zu drucken, verwenden Sie ?string , um eine Konvertierung in eine Zeichenfolge durchzuführen.
Hinweis: Sie können keine regulären Ausdrücke verwenden, um eine Gruppe von Werten zurückzugeben. Verwenden Sie diese, um einen einzelnen übereinstimmenden Wert (oder keine Übereinstimmung) zurückzugeben. |
Beispiel: Umwandlung der Groß- und Kleinschreibung mit der Switch-Komponente
Stellen Sie sich einen Fall vor, in dem verschiedene Status aufgerufen werden, abhängig von der Benutzereingabe (wine oder beer), die in der Variablen choice
gespeichert ist.
upper_case
, um die Groß- und Kleinschreibung zu vereinheitlichen:${choice.value?upper_case}
Beispiel: FTL-Ausdrücke verketten
Sie können FTL-Vorgänge auch in einem einzigen Ausdruck verketten.
flight.value
) von UA1234
und UA 1234
in 1234
umgewandelt.
${flight.value?trim?lower_case?remove_beginning('ua ')?remove_beginning('ua')}"
Integrierte FreeMarker-Zahlenvorgänge
negativeValue
(-2.5) und positiveValue
(0.5175) festgelegten Wert ausgeben:
Vorgang | Beispiel | Ausgabe |
---|---|---|
abs |
${negativeValue.value?abs} |
2.5
Der Operator wandelt den negativen numerischen Wert in einen positiven Wert um. |
string (wird mit einem numerischen Wert verwendet)
|
${negativeValue.value?abs?string.percent} |
250%
Der Operator wandelt zuerst den negativen Wert in einen positiven Wert um. Anschließend wird der Wert in Prozent konvertiert, also implizit mit 100 multipliziert. |
string (mit dem Dezimalformatwert und verschiedenen Währungen)
Tipp: Prüfen Sie die Charbase auf weitere Währungssymbole. |
${positiveValue.value?string['###.##']} |
0.51 |
${positiveValue.value?string['###.##%']} |
51%
Der Operator fügt ein Prozentzeichen hinzu, nachdem der Wert mit 100 multipliziert wurde. |
|
${positiveValue.value?string['##.###\u00A4']} |
0.51 $ | |
${positiveValue.value?string['##.###\u20AC']} |
0.51 € | |
${positiveValue.value?string['##.###\u00A3']} |
0.51 £ | |
round |
${negativeValue.value?round} |
-2
Der Operator rundet auf die nächste Ganzzahl. Wenn die Zahl mit ".5" endet, wird aufgerundet. |
${positiveValue.value?round} |
1
Der Operator rundet auf die nächste Ganzzahl. Wenn die Zahl mit ".5" endet, wird aufgerundet. |
|
floor |
${positiveValue.value?floor} |
0
Der Operator rundet ab. |
ceiling |
${positiveValue.value?ceiling} |
1
Der Operator rundet auf. |
lower_abc |
${negativeValue.value?abs?round?lower_abc} |
c
Der Operator wandelt den negativen Wert in einen positiven Wert um und rundet ihn auf 3. Er gibt c zurück, den dritten Buchstaben des Alphabets. |
upper_abc |
${negativeValue.value?abs?round?upper_abc} |
C
Der Operator wandelt den negativen Wert in einen positiven Wert um und rundet ihn auf 3. Er gibt C zurück, den dritten Buchstaben des Alphabets. |
is_infinite |
${positiveValue.value?is_infinite?string} |
false
Der Operator gibt "false" zurück, weil ein Gleitkommawert gemäß IEEE 754 (Standard für Gleitkommazahlarithmetik) nicht unendlich ist. Hinweis: Der zurückgegebene Wert wäre ein boolescher Wert ohne |
Integrierte FreeMarker-Arrayvorgänge
Mit Arrayvorgängen (oder Sequenzen ) kann der Bot unter anderen Objekten die Größe eines Arrays bestimmen, Arrays sortieren oder Inhalte innerhalb eines Arrays finden.
person
bzw. colors
.[
{
"firstName" : "Frank",
"lastName" : "Normal"
},
{
"firstName" : "Grant",
"lastName" : "Right"
},
{
"firstName" : "Geoff",
"lastName" : "Power"
},
{
"firstName" : "Marcelo",
"lastName" : "Jump"
}
]
[
"yellow", "blue", "red", "black", "white", "green"
]
Diese Arrays werden verwendet, um die Arrayvorgänge in der folgenden Tabelle und im Beispiel: Arrays iterieren zu veranschaulichen.
Operator | Beispiel | Ausgabe |
---|---|---|
size |
${person.value?size?number} |
4 - Die Größe (vier Elemente) des Arrays person .
|
array index | ${person.value[1].firstName} |
Grant - Der Wert der zweiten Eigenschaft firstName im Array person .
|
${person.value[1].firstName !'unbekannt'} |
Wie oben, in diesem Fall gibt der Bot jedoch unbekannt aus, wenn die zweite Eigenschaft firstName keinen Wert aufweist.
|
|
first |
${person.value?first.firstName} |
Frank - Der erste Eintrag des Personenarrays. Dieser Vorgang verwendet den Arrayindex nicht.
|
last |
${person.value?last.firstName} |
Marcelo - Der letzte lastName -Wert im Personenarray.
|
sort_by |
${person.value?sort_by('lastName') [0].firstName} |
Marcelo Dieser Operator sortiert das
person -Array nach der Eigenschaft lastName in aufsteigender Reihenfolge. Anschließend wird der Wert der entsprechenden Eigenschaft firstName für den letzten Eintrag im Personenarray ausgegeben:
Hinweis: Wenn Sie das sortierte Array nicht mit |
${person.value?sort_by('lastName')?reverse[0].firstName} |
Grant - Die Werte werden in absteigender Reihenfolge sortiert:
|
|
seq_index_of |
${colors.value?seq_index_of('red')} |
2 - Der Indexwert für Rot im Farbarray.
|
seq_last_index_of |
${colors.value?seq_last_index_of('red')} |
2 - Der letzte Indexwert für Rot im
|
join |
${colors.value?join(',')} |
Gibt das colors -Array als durch Komma getrennte Zeichenfolge zurück: yellow, blue, red, black, white, green |
seq_contains |
${colors.value?seq_contains('red')?string('Yes', 'No') |
Gibt Yes zurück, da das Array "red" (rot) enthält.
Hinweis: |
sort |
${colors.value?sort?join(',')} |
Gibt das Farbarray als durch Komma getrennte Zeichenfolge in aufsteigender Reihenfolge zurück: black, blue, green, red, white, yellow |
reverse |
${colors.value?sort?reverse?join(',')} |
Gibt das colors -Array als durch Komma getrennte Zeichenfolge in absteigender Reihenfolge zurück: yellow, blue, red, black, white, green |
Intents und Scores zurückgeben
-
${skill.system.nlpresult.value.entityMatches[‘name of entity’]}
gibt ein Array von Entitys zurück, das in einer Benutzerzeichenfolge gefunden wird, die an die Intent Engine übergeben wird, die in der Variablennlpresult
gespeichert ist. -
${skill.system.nlpresult.value.intentMatches.summary[n].intent}
gibt den Namen des Intents zurück, das ein Konfidenzranking vonn
aufweist, wobei0
das Intent mit der höchsten Priorität,1
das Intent mit der zweiten Rangfolge usw. darstellt. ${skill.system.nlpresult.value.intentMatches.summary[n].score}
gibt den Vertrauensscore für das angegebene Intent zurück.
n
der Index des Elements, das Sie suchen möchten. Beispiel: Der Ausdruck zur Rückgabe des Intent-Namens mit höchster Auflösung lautet:${skill.system.nlpresult.value.intentMatches.summary[0].intent}
Für den Score des Top-Intents lautet der Ausdruck:${skill.system.nlpresult.value.intentMatches.summary[0].score}
Sie können diese Ausdrücke für Intents verwenden, die über dem Konfidenzgrenzwert bewertet wurden. Sie können sie jedoch auch verwenden, um Intents zurückzugeben, deren Score unter dem Konfidenzgrenzwert liegt. Diese Ausdrücke hängen nicht vom Konfidenzschwellenwert ab, der auf der Seite Einstellungen des Skills konfiguriert ist, sodass Sie damit die Kandidaten-Intents und deren Scores zurückgeben können, auch wenn kein Intent aufgelöst werden konnte und eine unresolvedIntent
-Aktion ausgelöst wurde. In diesem Fall können Sie z.B. diese Ausdrücke verwenden, um die drei Top-Intents und deren Schwellenwerte für das Unterbewusstsein zurückzugeben.
Wenn Sie auf das Intent verweisen müssen, das ein Benutzer nach der Aufforderung zur Klärung ausgewählt hat, können Sie
${system.intent.name}
verwenden. (${skill.system.nlpresult.value.intentMatches.summary[0].intent}
gibt immer das Intent mit der höchsten Punktzahl zurück. Dies ist möglicherweise nicht das Intent, das der Benutzer bei der Klärung auswählt.
Beispiel: Arrays iterieren
Arrays bestimmen die Anzahl der Entitys in der Benutzereingabe.
Im folgenden Snippet aus der Metadateneigenschaft einer Komponente "Allgemeine Antwort" wird dargestellt, wie die Größe des Arrays bestimmt wird, das in der Variablen person
gespeichert ist, und dann über die Elemente iteriert wird, sodass der Skill etwa Folgendes ausgibt:
responseItems:
- type: "text"
text: "${person?index+1}. ${person.firstName} ${person.lastName}"
name: "Sorry"
separateBubbles: true
iteratorVariable: "person"
Die in diesem Code beschriebene Ausgabe ist nicht sortiert (d.h. es wird kein
sort_by
-Vorgang verwendet).
Integrierte FreeMarker-Datumsvorgänge
.now
und dem integrierten date
-Operator ab.
${.now?date}
Vorgänge | Beispiel | Ausgabe |
---|---|---|
date |
${.now?date} |
Das aktuelle Datum |
time |
${.now?time} |
Die Uhrzeit, z.B. 5:46:09 PM |
datetime |
${.now?datetime} |
Gibt das aktuelle Datum und die aktuelle Uhrzeit aus, z.B. Jan 17, 2018 5:36:13 PM. |
long und number_to_date |
${(.now?long + 86400000)?number_to_date } |
Fügt 24 Stunden zum aktuellen Datum hinzu. Wenn der Aufruf am 17. Januar 2018 erfolgt, gibt FreeMarker den 18. Januar 2018 aus. |
string (mit Formatierungsstilen)
|
${.now?string.full} |
Konvertiert das aktuelle Datum in eine Zeichenfolge, die als Wednesday, January 17, 2018 6:35:12 PM UTC formatiert ist. |
${.now?string.long} |
Konvertiert das Datum in eine Zeichenfolge mit der wie folgt formatierten Ausgabe: January 17, 20186:36:47 PM UTC. | |
${.now?string.short} |
Konvertiert das Datum in eine Zeichenfolge mit der wie folgt formatierten Ausgabe: 1/17/18 6:37 PM | |
${.now?string.medium} |
Konvertiert das Datum in eine Zeichenfolge mit der wie folgt formatierten Ausgabe: Jan 17, 2018 6:38:35. | |
${.now?string.iso} |
Gibt das Datum im ISO-8601-Standard aus, z.B. 2018-01-17T18:54:01.129Z. |
|
string (mit angegebenen Ausgabeformaten)
|
${.now?string['dd.MM.yyyy, HH:mm']} |
Gibt das aktuelle Datum in einem benutzerdefinierten Format aus, z.B. 17.01.2018, 18:58. |
${.now?string['yyyy']} |
2018 |
|
datetime (mit string und Formatierungsstil)
|
${date_variable?datetime?string.short} |
Konvertiert das Datum in eine Zeichenfolge im Format 1/17/18 6:37 PM.
Mit dem |
Konvertierung des Entitywertes in eine Zeichenfolge mit folgenden Elementen:
|
${dateVar.value.date?long?number_to_date?date?string.short} |
Konvertiert das Datum aus der Entityextraktion in eine Zeichenfolge, die als 11/17/18 formatiert ist.
Der Datumsoperator weist FreeMarker an, dass die Variable nur ein Datum und keine Zeitinformationen enthält. Durch die Verwendung dieses Formats werden Fehler vermieden. |
${dateVar.value.date?long?number_to_date?string.medium} |
Konvertiert das Datum, das aus der Entityextraktion abgeleitet wird, in eine als Jan 17, 2018 formatierte Zeichenfolge.
Hinweis: Alle anderen Formate wie |
|
${dateVar.value.date?long?number_to_date?string['dd.MM.yyyy']} |
Gibt das Datum im benutzerdefinierten Format aus. Beispiel: 17.01.2018, 18:58. | |
${dateVar.value.date?long?number_to_date?string['yyyy']} |
Gibt das von der Entity abgeleitete Datum in einem benutzerdefinierten Format aus. |
Beispiel: Daten aus Benutzereingaben extrahieren
DATE
, um morgen aus der Anforderung zu extrahieren. Das angeforderte Datum wird mit ${(theDate.value.date?long + 86400000)?number_to_date}
ausgegeben, um 24 Stunden (oder 86.400.000 Millisekunden) zu "morgen" hinzuzufügen.
Text mit Ausdruck | Ausgabe |
---|---|
|
|
|
|
|
|
Beispiel: Standarddatum festlegen (wenn kein Datumswert festgelegt ist)
Wenn die Benutzernachricht keine Datumsinformationen enthält, kann der Skill Benutzer zur Eingabe des Datums auffordern oder ein Standarddatum angeben. Um das aktuelle Datum anzugeben, können Sie den folgenden Ausdruck verwenden:
${.now?datetime?string.long}
Von FreeMarker zugängliche Systemvariablen
Oracle Digital Assistant verfügt über eine Reihe von Systemvariablen, über die Sie nützliche Informationen in Ihren Dialogabläufen über FreeMarker-Ausdrücke abrufen können.
In ihrer einfachsten Form haben diese Ausdrücke die folgende Form:
${system.variableName}
Einige Variablen können Objekte mit verschachtelten Eigenschaften enthalten, auf die mit der Punktnotation nach dem Variablennamen in folgender Form zugegriffen werden kann.
${system.variableName.propertyName}
Darüber hinaus können die verschachtelten Eigenschaftswerte auch Objekte mit verschachtelten Eigenschaften sein.
Nachfolgend finden Sie die Systemvariablen, die über FreeMarker-Ausdrücke verfügbar sind.
Variable | Beschreibung |
---|---|
system.actualState |
Name des Status, zu dem der Benutzer navigiert ist, indem auf eine ältere, nicht mehr funktionsfähige Schaltfläche getippt wurde. Wenn die Postback-Payload eine Eigenschaft system.state enthält, navigiert die Dialog-Engine zu diesem Status und setzt diese Variable auf den Namen dieses Status. Siehe auch Dialogablauf für unerwartete Aktionen konfigurieren.
|
system.authorizedUsers |
Eine Liste aller Benutzer, die für einen bestimmten Gruppenchat autorisiert wurden. |
system.channelType |
Der Kanaltyp der aktuellen Benutzersession. Die zulässigen Werte: facebook , androidsdk , iossdk , websdk , slack , twilio , msteams , cortana , webhook und test .
Wenn die Session im Tester ausgeführt wird, entspricht der Wert dem simulierten Kanaltyp. |
system.entityToResolve |
Das Objekt, das das aktuelle Mischentityelement darstellt, das in der Komponente "Gemeinsame Antwort" aufgelöst werden soll, wenn die Variableneigenschaft der Komponente auf ein Mischentityobjekt entity.The verweist, weist die folgenden Eigenschaften auf:
Unter Die Variable "system.entityToResolve" finden Sie Beispiele zur Verwendung der Variablen |
system.errorAction |
Fehlermeldungstext eines unerwarteten Fehlers, der während der Ausführung des Status ausgelöst wurde. |
system.errorState |
Name des Status, der während der Ausführung einen unerwarteten Fehler ausgelöst hat. |
system.expectedState |
Wenn der Benutzer durch die Nachrichtenhistorie scrollt und auf eine ältere, nicht mehr funktionsfähige Schaltfläche tippt, wird diese Variable mit dem Namen des Status gefüllt, der hätte ausgeführt werden sollen, jedoch niemals ausgeführt wurde, weil der Benutzer auf diese nicht mehr funktionsfähige Schaltfläche getippt hat. Siehe auch Dialogablauf für unerwartete Aktionen konfigurieren. |
system.intent.name |
Wird verwendet, um auf das Intent zu verweisen, das ein Benutzer ausgewählt hat, nachdem er aufgefordert wurde, es eindeutig zu machen. (
Gibt immer das Intent mit der höchsten Punktzahl zurück. Dies ist möglicherweise nicht das Intent, das der Benutzer bei der Klärung auswählt.) |
system.invalidUserInput |
Der boolesche Wert wird auf true gesetzt, wenn die Benutzereingabe nicht mit dem angeforderten Variablentyp übereinstimmt.
|
system.message |
Letzte von Oracle Digital Assistant empfangene Nachricht. Diese Variable hat die folgenden Eigenschaften:
|
system.requestedState |
Wenn Benutzer einer Unterhaltung in einem Status beitreten, der eine Autorisierung erfordert, und der Benutzer nicht in der in system.authorizedUsers gespeicherten Benutzerliste enthalten ist, speichert die Dialog-Engine den Status, der ausgeführt werden sollte, in dieser Variable.
|
system.selectedCardIndex |
Diese Variable enthält den Index der ausgewählten Karte, wenn mit der Funktion das Kartenrendering für reine Textkanäle wie Twilio optimiert wird. Mit dieser Optimierung kann der Benutzer eine Karte in einem Prozess mit zwei Schritten auswählen: Zuerst wird eine Kartenliste angezeigt, dann kann der Benutzer die Nummern der Karten eingeben, die er auswählen möchte. Die entsprechende Indexnummer dieser Karte wird in dieser Variablen gespeichert. |
Die Systemvariablen in der obigen Tabelle sind die einzigen Variablen, die Sie in FreeMarker-Ausdrücken verwenden können. Andere Systemvariablen sind nicht öffentlich und ihre Verwendung unterliegt Änderungen, was bedeutet, dass sich Ihre Fähigkeiten nicht auf sie verlassen können.
Beispiel: Die Variablen system.routingFromSkill
, system.routingToSkill
, system.routingFromIntent
und system.routingToIntent
sind nur für bestimmte Einstellungen des digitalen Assistenten verfügbar. Siehe Systemvariablen für digitale Assistenten.