Mischentitys konfigurieren
Mit Composite Bag-Entitys können Sie wesentlich kürzere, kompaktere Dialogablaufdefinitionen schreiben, da diese mit nur einer Komponente aufgelöst werden können (entweder Entitys auflösen oder eine gemeinsame Antwort).
-
den gesamten freien Text erfassen, Dateiuploads zulassen und den aktuellen Standort des Benutzers mit den Elementen STRING, ATTACHMENT und LOCATION erfassen.
-
individuelles Verhalten für jede Mitgliedsentity in der Mischentity ausführen - Sie können wertespezifische Prompts und Fehlermeldungen für einzelne Entitys innerhalb der Mischentity hinzufügen (dazu gehören benutzerdefinierte Entitys, Systementitys und die Elemente STRING, ATTACHMENT und LOCATION). Sie können auch kontrollieren, welche Entitys mit der Benutzereingabe übereinstimmen sollen (oder nicht). Da Sie eine Prompt-Sequenz erstellen können, kann der Skill unterschiedliche Prompts für jeden Benutzerversuch ausgeben.
-
Mehrfachauswahllisten anzeigen.
-
Wertübereinstimmungen basierend auf Validierungsregeln validieren.
-
den "Unhappy Flow" unterstützen - Benutzer können vorherige Eingaben korrigieren.
-
temporäre, übereinstimmungsbasierte Übergänge ausführen - Der Dialogablauf kann die Komponente vorübergehend verlassen, wenn eine Übereinstimmung für eine Entity vorliegt, sodass ein anderer Status eine unterstützende Funktion wie einen REST-Aufruf ausführen kann. Nach Abschluss der Funktion geht der Dialogablauf wieder zurück zur Komponente, sodass der Wertabgleich fortgesetzt werden kann. Beispiel:
-
Nachdem ein Benutzer eine Quittung hochgeladen hat, muss die Quittung selbst gescannt werden, sodass Werte wie Spesendatum, Betrag und Spesentyp aus der Quittung für die anderen Entitys in der Mischentity extrahiert werden können. Auf diese Weise kann die Komponente die restlichen Werte aus der Quittung ausfüllen, nicht von einer Benutzereingabe.
-
Der Skill gibt zwischen übereinstimmenden Entitysets in der Mischentity eine Nachricht aus, wie "Fast geschafft, nur noch ein paar Fragen".
-
Die Benutzereingabe muss über einen Backend-REST-Aufruf validiert werden. Die Validierung ist möglicherweise sofort erforderlich, da sie bestimmt, welches der Mischentityelemente den Benutzer zur weiteren Eingabe auffordern muss. Alternativ kann der Aufruf Informationen zurückgeben, die mit dem Benutzer geteilt werden müssen, wie eine Out-of-Policy-Warnung.
-
-
Werte eindeutig erklären - Sie können einen Wert aus der Benutzereingabe über entityspezifische Prompts und Komponenteneigenschaften isolieren. Dies umfasst die Unterstützung von Korrekturen an vorherigen Eingaben (dem "Unhappy Flow") und die Aufforderung des Benutzers zur Eingabe bestimmter Eigenschaften integrierter Entitys.
Mischentity erstellen
-
Klicken Sie in der seitlichen Navigationsleiste auf Entitys
.
-
Klicken Sie auf Entitys hinzufügen.
-
Wählen Sie Mischentity als Entitytyp aus.
- Geben Sie einen Namen und eine Beschreibung ein.
- Klicken Sie auf + Event-Handler, wenn Sie das Prompting und die Logik der Mischentity programmgesteuert mit Entity-Event-Handlern ausführen möchten.
-
Klicken Sie auf + Mischentityelement, um das Dialogfeld "Mischentityelement hinzufügen" zu öffnen. Wenn Sie eine integrierte Entity oder eine vorhandene benutzerdefinierte Entity hinzufügen, können Sie einen mischentityspezifischen Namen für sie erstellen und eine Beschreibung der Rolle innerhalb des Kontextes der Mischentity hinzufügen.
-
Sie können die Tasche mit benutzerdefinierten Entitys, integrierten Entitys sowie folgenden Entitys füllen:
-
STRING - Erfasst freien Text vom Benutzer.
-
LOCATION - erfasst den Standort des Benutzers.
-
ATTACHMENT - Akzeptiert Dateien, Audiodateien, Video- und Bilddateien, die vom Benutzer hochgeladen wurden. Die Mischentity speichert die URL, unter der der Anhang gehostet wird.
HinweisDie Elemente werden in der Reihenfolge aufgelöst, in der Sie sie hinzufügen. Die Reihenfolge kann jedoch davon beeinflusst werden, wie Sie die einzelnen Elemente der Mischentity konfigurieren.
Sie werden zur Eingabe eines Subtyps aufgefordert, wenn Sie die Entity DATE_TIME hinzufügen. -
-
Wenn Sie auf Schließen klicken, kehren Sie zur Seite "Entitys" zurück. Zunächst können Sie dem Element jedoch weitere mischentityspezifische Funktionen hinzufügen (oder es später aktualisieren, indem Sie auf der Seite "Entitys" auf
klicken).
-
Nächste Schritte:
- Fügen Sie einzelne Fehlermeldungen, Begriffserklärungs-Prompts oder bedingte Eingabeaufforderungen für die Mischentityelemente hinzu.
Hinweis
Diese werden überschrieben, wenn Sie die Entity zu einer Mischentity hinzufügen. -
Fügen Sie die Entity einem Intent hinzu. Informationen hierzu finden Sie unter Entitys zu Intents hinzufügen.
-
Konfigurieren Sie den Dialogablauf für die Verwendung der Mischentity..
- Fügen Sie einzelne Fehlermeldungen, Begriffserklärungs-Prompts oder bedingte Eingabeaufforderungen für die Mischentityelemente hinzu.
Erweiterte Slotfüllung
- Nur das aktuell auflösende Element wird aktualisiert. Wenn eine Übereinstimmung für mehrere Mischentityelemente gilt, hat das aktuell auflösende Mischentityelement Vorrang vor anderen Elementen. Wenn Sie die erweiterte Slotfüllung deaktivieren, werden alle Elemente mit demselben Wert aktualisiert.
- Wenn es sich bei dem aktuell auflösenden Element um ein STRING-Beutelartikel handelt, werden keine anderen Beutelartikel jemals aktualisiert.
- Wenn eine Entityübereinstimmung für mehrere (nicht auflösende) Mischentityelemente gilt, wird ein Dialogfeld mit einer eindeutigen Definition angezeigt, in dem der Benutzer auswählen kann, welches Element aktualisiert werden soll, anstatt alle Mischentityelemente zu aktualisieren.
- Der Schalter Prompt für Begriffsklärung der Entity wird ignoriert. Es wird empfohlen, benutzerdefinierte Desambiguation mit einem Entity Event Handler zu implementieren.
Der Schalter Erweiterte Slotfüllungen verwenden ist standardmäßig für Skills aktiviert, die mit Version 22.08 der Plattform erstellt wurden. Es wurde für Skills deaktiviert, die auf diese Version upgegradet wurden.
Prompts hinzufügen
-
Wenn Sie Prompting aktivieren möchten, lassen Sie das Feld Prompt für Wert leer (Standardstatus). Die Eingabe von
false
im Feld Prompt für Wert verhindert das Prompting. Um Benutzer zur Eingabe eines bedingten Wertes aufzufordern, fügen Sie einen booleschen FreeMarker-Ausdruck hinzu, dertrue
(für Prompting) oderfalse
ergibt.Tipp:
Wenn Sie Prompt für Wert auffalse
setzen, kann das Element dennoch als Teil eines anderen Elements aufgelöst werden, zu dessen Eingabe der Benutzer aufgefordert wird, wenn Sie die Option Out-of-Order-Extraktion aktivieren. -
Klicken Sie auf Prompt hinzufügen, um die Prompt-Sequenz zu erstellen. Sie können die Reihenfolge ändern, indem Sie die Felder durch Drag-and-Drop-Gesten neu anordnen oder sie neu nummerieren. Sie können die Ausgabe der Prompts zufällig anordnen, indem Sie zwei oder mehr Prompts dieselbe Nummer zuweisen.HinweisSie können Prompts in Resource Bundles (z.B.
Sie können Prompts für integrierte Entitys nur hinzufügen, wenn Sie sie einer Mischentity hinzufügen.${rb.askCheese}
) speichern oder als Kombinationen aus Text und FreeMarker-Ausdrücken schreiben.
Slotted Values mit Apache FreeMarker-Ausdrücken aktualisieren
Geben Sie im Feld Aktualisierbar einen Apache FreeMarker-Ausdruck ein, der true
ergibt, damit der für ein Mischentityelement erstellte Wert aktualisiert werden kann.
Out-of-Order-Export aktivieren
- Immer: Die Standardoption. Wenn Sie diese Option für ein Element auswählen, kann der Wert ohne Prompt eingefügt werden. Beispiel: Die PizzaSize-Entity kann aufgelöst werden, wenn ein Kunde Ich möchte eine große Pizza eingibt. Mit dieser Option kann der Elementwert jederzeit geändert werden, sofern der Ausdruck in der Eigenschaft Aktualisierbar nicht als
false
ausgewertet wird. Beispiel: Wenn die Composite Bag zur Eingabe der Entity PizzaType auffordert, kann der Kunde dann Vegetarisch bitte, aber mittelgroß antworten. Der Skill kann den Wert der PizzaSize-Entity mit "mittelmäßig" aktualisieren, ohne die Unterhaltung neu zu starten, weil Immer für die Elemente PizzaSize und PizzaType der Tasche aktiviert ist.Hinweis
Obwohl diese Option das Standardverhalten ist, ist sie möglicherweise nicht immer für STRING-Elemente geeignet. Wenn Sie diese Option für ein STRING-Element ausgewählt haben, wird beispielsweise die erste Benutzernachricht vom STRING-Element gespeichert, anstatt mit der beabsichtigten Entity abgeglichen zu werden (die als das erste Element in der Tasche angegeben werden kann, um aufgelöst zu werden). - Niemals: Wenn Sie diese Option auswählen, wird das Element erst nach der Eingabeaufforderung angezeigt, selbst wenn andere Benutzernachrichten gültige Werte enthalten. Wählen Sie Nie aus, um versehentliche Übereinstimmungen zu verhindern.
- Nur beim Auflösen der Intent-Äußerung - Schränkt das Out-of-Order-Wert-Slotting auf die erste Benutzeräußerung ein, die in das Intent aufgelöst wurde, das mit der Mischentity verknüpft ist.
Extraktionsregel für Out-of-Order | Anfängliche Benutzeräußerung | Geschätzter Wert | Hinweise |
---|---|---|---|
Immer | Pizza bestellen mit Thunfisch | Thunfisch | Der Wert, der für das Element PizzaToppings festgelegt wird, kann immer dann abgeglichen werden, wenn die Benutzernachricht den richtigen Wert enthält ("Mushrooms stattdessen!"). Es kann an jedem Punkt in der Konversation ohne Aufforderung aktiviert oder aktualisiert werden. |
Nie | Pizza bestellen mit Thunfisch | - | Der Wert für das Element PizzaTopping kann nicht in der falschen Reihenfolge platziert oder ad hoc aktualisiert werden. Sie kann nur abgeglichen werden, wenn sie dazu aufgefordert wird. |
Nur beim Auflösen der Intent-Äußerung | Pizza bestellen mit Thunfisch | Thunfisch. Wenn der Benutzer jedoch "Große Pizza bestellen" eingegeben hat, muss die Mischentity den Wert PizzaTopping eingeben. | Das Element PizzaTopping kann nur dann in der falschen Reihenfolge angeordnet werden, wenn die erste Benutzeräußerung, die in ein Intent aufgelöst wird, einen übereinstimmenden Wert aufweist. Andernfalls muss dieser Wert zur Eingabe aufgefordert werden. Die Mischentity lässt keine Ad-hoc-Aktualisierung oder Verschiebung dieses Artikels zu. |
"Export aktivieren mit"
- Die Mischentity enthält zwei adressbezogene Entitys: "NamedAddress", eine Wertelistenentity mit Werten wie "Home" und "Büro", und "DeliveryAddress", die ADDRESS-Entity.
- Der Prompt für die Entity "DeliveryAddress" lautet "Wohin soll geliefert werden? "
- Die Entity "NamedAddress" fordert den Benutzer nicht zur Eingabe auf (in das Feld "Prompt für Wert" wird false eingegeben).
- Die Entity "NamedAddress" kann mit "DeliveryAddress" extrahiert werden ("DeliveryAddress" wird im Menü Extrahieren mit ausgewählt).
Wenn die Mischentity den Benutzer zur Eingabe der Entity "DeliveryAddress" auffordert, kann er die Entity entweder mit einer physischen Adresse oder mit einem Wert aus der "NamedAddress"-Liste (Home oder "Büro") auflösen.
Validierungsregeln hinzufügen
varName
ist der Name der Composite Bag-Entity, die in der Dialogablaufdefinition als Variable deklariert ist:${varName.value.itemName}
Wenn die Auswertung dieses Ausdrucks "false" ergibt, ist die Benutzereingabe nicht gültig.amount
der CURRENCY-Entity hinzu:${expense.value.Amount.amount > 4}
Amounts below 5 ${expense.value.Amount.currency} cannot be expensed. Enter a higher amount or type 'cancel'.
Weitere Informationen zu CURRENCY-Eigenschaften (samt anderen integrierten Entityeigenschaften) finden Sie unter Integrierte Entitys und ihre Eigenschaften.
YAML-Dialogablauf für Composite Bag-Entitys konfigurieren
Wenn Ihr Skill im YAML-Dialogmodus entwickelt wird, müssen Sie Folgendes tun, um den Dialogablauf für Mischentitys zu konfigurieren:
-
Deklarieren Sie im
context
-Knoten die Mischentity als Variable:... metadata: platformVersion: "1.1" main: true name: "ExpenseBot" context: variables: expense: "Expense" iResult: "nlpresult"
-
Sie können
System.ResolveEntities
oderSystem.CommonResponse
verwenden. Mit beiden Komponenten können Sie die Mischentity verwenden. Sie bieten beide individuelle Vorteile.System.ResolveEntities
ist die einfachere der beiden Komponenten und weist ein kleines Set von Eigenschaften auf. Im Gegensatz zur KomponenteSystem.ResolveEntities
bietetSystem.CommonResponse
mehr Kontrolle über die Benutzeroberfläche, mit der die Entitys in der Mischentity aufgelöst werden. Beispiel: Sie können eine bedingte Logik hinzufügen, um Prompts und wertbezogene globale Aktionen zu bestimmen.Tipp:
Da die Metadaten für die KomponenteSystem.CommonResponse
sehr komplex werden können, wenn Sie Mischentitys verwenden, wird empfohlen, stattdessen die KomponenteSystem.ResolveEntities
zu verwenden und Entity-Event-Handler für UI-Anpassungen zu verwenden. -
Referenzieren Sie die Kontextvariable der Composite Bag-Entity in der
variable
-Eigenschaft der Komponente, und definieren Sie gegebenenfalls die anderen Eigenschaften. Unter System.ResolveEntities und Komponenteneigenschaften werden diese Komponenten beschrieben. Außerdem finden Sie hier weitere Beispiele.Nachfolgend ein Beispiel für die KomponenteSystem.ResolveEntities
:createExpense: component: "System.ResolveEntities" properties: variable: "expense" useFullEntityMatches: true nlpResultVariable: "iResult" cancelPolicy: "immediate" transitions: actions: cancel: "cancelExpense" return: "done"
Die Variable system.entityToResolve
system.entityToResolve
enthält Informationen zum aktuellen Status des Entityauflösungsprozesses, wie er von den Komponenten "Entitys auflösen" und "Gemeinsame Antwort" ausgeführt wird. In der Regel referenzieren Sie die Eigenschaften dieses Variablenwerts in den Metadaten der Komponente "Allgemeine Antwort", wenn Sie Nachrichten anpassen möchten. Sie können damit die Logik für die Fehlermeldung einer Entity oder für verschiedene Eigenschaften definieren, die zu den Komponenten "Entitys auflösen" und "Gemeinsame Antwort" gehören. Hängen Sie die folgenden Eigenschaften an, um den aktuellen Entitywert zurückzugeben:
userInput
prompt
promptCount
updatedEntities
outOfOrderMatches
disambiguationValues
enumValues
needShowMoreButton
rangeStartVar
nextRangeStart
prompt
, errorMessage
und Validierungsregeln verwenden.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
system.entityToResolve
-Definitionen. Bei diesen Meldungen handelt es sich um eine Meldung, die für die Eigenschaft text
definiert wurde und eine Aktualisierung bestätigt, die an einem zuvor festgelegten Entitywert mit der Apache FreeMarker-Anweisung list
und der Eigenschaft updatedEntities
vorgenommen wurde. metadata:
responseItems:
- type: "text"
text: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
- type: "text"
text: "${system.entityToResolve.value.prompt}"
actions:
- label: "${enumValue}"
type: "postback"
iteratorVariable: "system.entityToResolve.value.enumValues"
needShowMoreButton
, rangeStartVar
und nextRangeStart
: globalActions:
- label: "Show More"
type: "postback"
visible:
expression: "${system.entityToResolve.value.needShowMoreButton}"
payload:
action: "system.showMore"
variables:
${system.entityToResolve.value.rangeStartVar}: ${system.entityToResolve.value.nextRangeStart}
- label: "Cancel"
type: "postback"
visible:
onInvalidUserInput: true
payload:
action: "cancel"
Das Label "Mehr anzeigen" muss system.showMore
(action: "system.showMore"
) enthalten. Andernfalls funktioniert es nicht.
entityToResolve-Ausdrücke
Ausdruck | Beschreibung |
---|---|
${system.entityToResolve.value.resolvingField} |
Gibt den Namen des Mischentityelements zurück. |
${system.entityToResolve.value.allMatches[0].entityName} |
Gibt den Entitynamen zurück, der durch das Mischentityelement referenziert wird. Das allMatches -Array enthält alle Entitys, deren Werte möglicherweise durch die Benutzernachricht aktualisiert werden.
|
${<variable>1.value[system.entityToResolve.value.resolvingField]} |
Gibt den vom Benutzer eingegebenen oder ausgewählten Wert des Mischentityelements zurück. |
${system.entityToResolve.value.userInput} |
Gibt den vom Benutzer eingegebenen Text zurück. Mit diesem Ausdruck können Sie die Benutzereingabe protokollieren oder im Chat anzeigen, beispielsweise wenn ein Benutzer einen ungültigen Wert eingibt. |
${system.entityToResolve.value.outOfOrderMatches[n].entityName} |
Gibt die Namen der Entitys zurück, die bei der Out-of-Order-Extraktion extrahiert werden. Neben den Werten, für die Benutzer von den Komponenten "Entitys auflösen" oder "Gemeinsame Antwort" aufgefordert werden, können Benutzer zusätzliche Werte bereitstellen, die Out-of-Order-Wertsextraktion und Aktualisierungen für andere Entitys in der Composite Bag auslösen. |
${system.entityToResolve.value.outOfOrderMatches[n].name} |
Gibt den Namen des Mischentityelements zurück. |
${system.entityToResolve.value.outOfOrderMatches? has_content?then(…,…)} |
Gibt den Wert einer Entity zurück, die in der falschen Reihenfolge abgeglichen wurde. Da wahrscheinlich keine Entity in der falschen Reihenfolge abgeglichen wurde, verwendet dieser Ausdruck den Operator has_content .
|
Entity-Event-Handler
Sie können den für den EEH bereitgestellten Service auf der Seite "Komponenten"

bots-node-sdk
bereitgestellten Ereignis-Handler-Funktionen definieren. Beispiel: Das folgende Snippet veranschaulicht die Definition eines validate
-Ereignisses für ein Mischentityelement namens ExpenseDate, das verhindert, dass Benutzer bei der Einreichung einer Spesenabrechnung ein zukünftiges Datum eingeben.ExpenseDate: {
validate: async (event, context) => {
if (new Date(event.newValue.date) > new Date()) {
context.addValidationError("ExpenseDate",context.translate('ExpenseDate.text'));
return false;
}
}
In der Dokumentation Writing Entity Event Handler von bots-node-sdk
werden die Gesamtstruktur des Event Handler-Codes, die Ereignisse auf Element- und Entityebene und die Methoden EntityResolutionContext wie addValidationError
und translate
im obigen Snippet beschrieben.
Da Entity-Event-Handler in JavaScript geschrieben werden, können Sie erweiterte Logik verwenden, die mit den FreeMarker-Ausdrücken, mit denen Sie die Validierung, Fehler und Prompts auf der Seite "Bag-Element bearbeiten" und im Dialogablauf definieren können, nicht einfach erreicht oder sogar möglich ist. Sie sind auch einfacher zu debuggen. Allerdings müssen Sie Entity-Event-Handler nicht FreeMarker-Ausdrücken vorziehen. Sie können beide Verfahren kombinieren. Beispiel: Sie können FreeMarker-Ausdrücke für einfache Validierungen und Prompts verwenden und einen EEH für komplexere Funktionen wie das Aufrufen einer REST-API reservieren, wenn alle Mischentityelemente aufgelöst wurden.
Entity-Event-Handler mit dem Event Handler-Codeeditor erstellen
Sie können den EEH mit dem Event Handler-Codeeditor erstellen, auf den über die Seite mit den Mischentityeigenschaften oder mit der IDE Ihrer Wahl zugegriffen wird. Während der Event Handler-Codeeditor einige Vorteile gegenüber einem Drittanbietertool bietet, können Sie je nach Größe der Aufgabe und den benötigten Bibliotheken mit einer IDE eines Drittanbieters wechseln. Informationen zum Wiegen der Vor- und Nachteile finden Sie unter Welche IDE sollte ich verwenden?
- Klicken Sie auf + Event Handler.
- Füllen Sie das Dialogfeld "Event Handler erstellen" aus, indem Sie einen Servicenamen und einen Handler-Namen hinzufügen.
Nachdem Sie den Handler erstellt haben, können Sie den Editor öffnen, indem Sie auf klicken.
Der Editor wird mit dem Startcode aufgefüllt. Das zugehörige handlers
-Objekt enthält die Objekte entity
, items
und custom
. Innerhalb dieser Objekte definieren Sie Ereignisse auf Ereignisebene, die für die gesamte Mischentity ausgelöst werden, die Ereignisse auf Elementebene, die die Auflösung der einzelnen Mischentityelemente steuern, und die benutzerdefinierten Ereignisse, die bei Postback-Aktionen ausgelöst werden. Standardmäßig ist für das Objekt handler
ein entity
-Objekt definiert. Die Objekte items
und custom
werden aufgefüllt, wenn Sie eine Vorlage auf Elementebene oder eine benutzerdefinierte Vorlage hinzufügen.
Beschreibung der Abbildung eeh-default-template.png
event
: Ein JSON-Objekt der ereignisspezifischen Eigenschaften.context
: Eine Referenz auf die Klasse EntityResolutionContext, deren Methoden (wieaddValidationError
im folgenden Snippet) die Ereignis-Handler-Logik bereitstellen.
items: {
Amount: {
validate: async (event, context) => {
let amount = event.newValue.amount;
if (amount < 5) {
context.addValidationError("Amount",`Amounts below 5 ${event.newValue.currency} cannot be expensed. Enter a higher amount or type 'cancel'.`);
}
}
}
Weitere Informationen zu EEH-Startcode, Ereignissen auf Element- und Entityebene, EntityResolutionContext und Codebeispielen finden Sie in der Dokumentation zu
bots-node-sdk
Writing Entity Event Handlern.
Ereignisse hinzufügen
Beispiel: Wenn Sie eine Vorlage für das Ereignis
validate
hinzufügen, wird der Editor mit dem folgenden Code aufgefüllt:validate: async (event, context) => {
},
Dann können Sie diese Vorlage mit Ihrem eigenen Code aktualisieren:validate: async (event, context) => {
if (event.newValue.value === 'PEPPERONI')
context.addValdiationError('Type', "Sorry, no pepperoni pizzas today!");
},
Wenn der Code gültig ist, wird er durch Klicken auf Speichern automatisch bereitgestellt und in einer TGZ-Datei verpackt. Sie können den Status des Deployments überwachen und die TGZ-Datei zur Wiederverwendung in anderen Skills auf der Seite "Komponenten" herunterladen.
Tipp:
Um nach Laufzeitfehlern zu suchen, aktivieren Sie Komponentenlogging aktivieren, und prüfen Sie die Logs (auf die Sie durch Klicken auf Diagnose > Logs anzeigen zugreifen). So ermitteln Sie die Parameter, die die Ereignisse aufgerufen haben.

Ereignishandler auf Entityebene hinzufügen
validate
, publishMessage
, maxPromptsReached
, resolved
, attachmentReceived
und locationReceived
aktualisieren.Ereignis | Beschreibung |
---|---|
validate |
Ein Handler für Validierungen auf Entityebene, der aufgerufen wird, wenn der Wert für mindestens eines der Mischentityelemente geändert wurde. |
publishMessage |
Ein generischer Fallback Handler, der aufgerufen wird, wenn einem Bag-Element keine Prompt-Nachricht oder eine Disambiguationsbehandlung fehlt. |
maxPromptsReached |
Ein generischer Fallback Handler, wenn der elementspezifische Handler zum Erreichen der maximalen Anzahl von Prompts nicht angegeben wurde. |
resolved |
Diese Funktion wird aufgerufen, wenn die Mischentity aufgelöst wurde. In der Regel fügen Sie ein resolved -Ereignis hinzu, um eine Backend-API aufzurufen, die eine Transaktion im Zusammenhang mit den von der Composite Bag-Entity erfassten Werten abschließt. Wenn der API-Aufruf Fehler zurückgibt, weil einige der von der Mischentity erfassten Werte nicht gültig sind, können Sie diese Werte löschen.
|
attachmentReceived |
Dieser Handler wird aufgerufen, wenn der Benutzer einen Anhang sendet. |
locationReceived |
Dieser Handler wird aufgerufen, wenn der Benutzer einen Standort sendet. |
publishMessage
aufgefüllt. Über die Funktionen updatedItemMessage
und outOfOrderItemsMessage
(die auch in der Standardvorlage definiert sind) ermöglicht dieses Ereignis dem Skill, Nachrichten auszugeben, die bestätigen, dass ein zuvor aufgelöster Mischentityelementwert aktualisiert wurde oder dass er eine gültige Eingabe für ein Mischentityelement akzeptiert hat, das nicht das von der Entity derzeit angeforderte Mischentityelement ist (Out-of-Order-Eingabe).Dieses Ereignis ist optional. Sie können ihn löschen, unverändert lassen oder ihm Funktionen hinzufügen. Beispiel: Sie können die Schaltfläche "Abbrechen" hinzufügen, wenn die Versuche eines Benutzers, einen gültigen Wert einzugeben, die maximale Anzahl von Prompts überschritten haben.
publishMessage: async (event, context) => {
updatedItemsMessage(context);
outOfOrderItemsMessage(context);
//Add Cancel button for invalid values entered by users
let message = context.getCandidateMessageList()[0];
}
…
message.addGlobalAction(context.getMessageFactory().createPostbackAction('Cancel', {action:'cancel'}));
context.addMessage(message); }
}
Handler auf Elementebene hinzufügen
shouldPrompt
, validate
, publishPromptMessage
, publishDisambiguateMessage
und MaxPromptsReached
.Ereignis | Beschreibung |
---|---|
shouldPrompt |
Fordert basierend auf den Werten der anderen Elemente in der Tasche zur Eingabe eines Elements auf. Dieser Handler hat Vorrang vor dem Prompting, das über das Feld Prompt für Wert konfiguriert wurde. |
validate |
Dieser Handler wird nur aufgerufen, wenn ein Wert für ein Mischentityelement festgelegt wurde. Wenn die Gültigkeit des Wertes von anderen Mischentityelementen abhängt, müssen Sie stattdessen das Ereignis validate auf Entityebene implementieren.
|
publishPromptMessage |
Mit dieser Funktion können Sie die von den Komponenten "Allgemeine Antwort" und "Entitys auflösen" generierte Nachricht zur Eingabe des Elements ersetzen oder erweitern. |
publishDisambiguateMessage |
Mit dieser Funktion können Sie die von den Komponenten "Common Response" und "Resolve Entities" generierte Prompt-Nachricht für die Disambiguierung ersetzen oder erweitern. |
maxPromptsReached |
Diese Funktion wird aufgerufen, wenn die maximale Anzahl von Prompts für dieses Element erreicht wurde. Diese wird unter "Maximale Benutzereingabeversuche" im Bildschirm für das Mischentityelement angegeben. |
Wenn Sie ein Ereignis auf Elementebene hinzufügen, wird das Objekt items
generiert.
Beschreibung der Abbildung eeh-items-block.png
Benutzerdefinierte Ereignisse hinzufügen
Beim Hinzufügen einer benutzerdefinierten Vorlage wird ein
custom
-Objekt mit dem Basisereigniscode hinzugefügt. Beispiele für die Implementierung eines benutzerdefinierten Ereignisses finden Sie in der Dokumentation Writing Entity Event Handler von bots-node-sdk
.someCustomEvent: async (event, context) => {
}
Entity Event Handler ersetzen oder entfernen
- Wählen Sie im Menü "Event Handler" eine leere Zeile aus, um die Schaltfläche + Event Handler erneut zu aktivieren.
- Öffnen Sie die Seite "Komponenten"
. Deaktivieren Sie Service aktiviert, oder löschen Sie den Service.
Hinweis
Sie können einen Service nicht löschen oder deaktivieren, wenn der EEH noch mit der Mischentity verknüpft ist. - Falls erforderlich, fügen Sie der Mischentity einen neuen EEH hinzu. Wenn Sie sich nicht für einen neuen EEH entscheiden, können Sie die Auflösungslogik mit FreeMarker-Ausdrücken hinzufügen.
Tipp:
Wenn Sie die Mischentity löschen, wird auch der für den EEH bereitgestellte Service gelöscht.Welche IDE sollte ich verwenden?
bots-node-sdk pack
verpackt haben. Sie können aber auch den bereitgestellten Event Handler-Codeeditor verwenden. Wenn Sie unseren Editor verwenden, müssen Sie keine Entwicklungsumgebung einrichten und keinen Code verpacken und bereitstellen. Der Code wird automatisch bereitgestellt, nachdem Sie ihn gespeichert haben. Sie können den Code auch direkt ändern, ohne ihn erneut bereitstellen zu müssen. Das ist nicht möglich, wenn Sie einen Handler verpacken und bereitstellen, den Sie mit Ihrer eigenen IDE erstellt haben. Mit dem Event-Handler-Codeeditor können keine weiteren NPM-Packages hinzugefügt werden. Dazu benötigen Sie eine weitere IDE. Beispiel: Wenn Sie Moment.js zum Arbeiten mit Datumsangaben verwenden möchten, müssen Sie die TGZ herunterladen, die Library mit der IDE Ihrer Wahl hinzufügen und dann die TGZ neu verpacken und bereitstellen. Anschließend können Sie wieder den Event-Handler-Codeeditor verwenden.
Tipp:
Der Event-Handler-Codeeditor ist möglicherweise eine bessere Option für kleine Änderungen. Wenn Sie größere Änderungen vornehmen oder zusätzliche NPM-Packages hinzufügen müssen, können Sie die TGZ-Datei von der Seite "Komponenten" herunterladen, sie dekomprimieren und anschließend mit Ihrem bevorzugten Editor den Code ändern, bevor Sie ihn neu verpacken und bereitstellen.Dialogabläufe mit Entity Event Handlern vereinfachen
Entity-Event-Handler können die Definition des Dialogablaufs vereinfachen, da sie mit der Best Practice zur Dialogverkürzung von Mischentitys verwendet werden. Im Hinblick auf Backend-Services machen sie die Dialogablaufdefinition weniger kompliziert, da Sie keinen separaten Status für die benutzerdefinierte Komponente schreiben müssen, die sie aufruft.
metadata
der Komponente "Common Response" zu verwenden. Stattdessen können Sie das Carousel über einfachen Code hinzufügen. Das bedeutet, dass Sie auch Kartenantworten zur Komponente "Entitys auflösen" hinzufügen können. Beispiel: Mit diesem Code kann die Komponente "Entitys auflösen" ein horizontal scrollendes Karousel von Karten für den Pizza-Typ ausgeben, wobei jede Karte die Schaltfläche "Abbrechen" enthält:Type: {
publishPromptMessage: async (event, context) => {
let candidateMessage = context.getCandidateMessageList()[0];
const mf = context.getMessageFactory();
const message = mf.createCardMessage()
.setLayout(horizontal)
.setCards(context.getEnumValues().map(p => {
mf.createCard(p.value)
.setDescription(pizzaInfo[p.value].description)
.setImageUrl(pizzaInfo[p.value].image)
.addAction(mf.createPostbackAction('Order',{variables: {pizza: p.value}}));
})
.setGlobalActions(candidateMessage.getGlobalActions());
context.addMessage(message);
}
Entity-Event-Handler - Tutorials
Befolgen Sie dieses Tutorial, um sich mit Entity-Event-Handlern vertraut zu machen, indem Sie einen mit dem Editor erstellen. Sehen Sie sich dieses Tutorial für fortgeschrittene Benutzer an, um einen Entity-Event-Handler mit einer externen IDE und bots-node-sdk
zu erstellen.
Verschachtelte Beutelartikel und Subtypen eindeutig machen
startTime
und endTime
für einen INTERVAL-Subtyp der Fall sein könnte, werden Benutzer mit dem für die Eigenschaft Label definierten Wert angezeigt, um die angeforderte Eingabe zu verdeutlichen. Tipp:
Wie bei allen Zeichenfolgen wird empfohlen, den Wert Label als Resource Bundle zu definieren.DATE_TIME-Entity zu einer Composite Bag hinzufügen
Obwohl Sie Datum, Uhrzeit und Dauer als eigenständige Entitys verwenden können, wird empfohlen, diese in Mischentitys zu verwenden.
- Bevor Sie ein Mischentityelement DATE_TIME erstellen, konfigurieren Sie die für Ihren Anwendungsfall geeigneten Auflösungsregeln für Datum und Uhrzeit. Beispiel: Wenn Sie einen Skill für Spesenabrechnungen erstellen, wählen Sie Vergangen aus. Wenn der Skill ein Besprechungsplaner ist, wählen Sie Zukünftig aus.
- Klicken Sie in der Mischentity auf Element hinzufügen.
- Wählen Sie im Menü "Typ" die Option Entity aus.
- Wählen Sie im Menü "Entityname" die Option DATE_TIME aus.
- Wählen Sie im Menü "Subtyp" einen DATE_TIME-Subtyp.
Die Konfigurationsoptionen auf der Seite "Beutelartikel hinzufügen" ändern sich je nach ausgewähltem Subtyp. Beispiel: Wenn Sie den Subtyp Wiederkehrend auswählen, können Sie auf Konfigurationsoptionen für die verschachtelten Mischentityelemente zugreifen, die spezifisch für das Festlegen eines sich wiederholenden Ereignisses sind, wie z.B. das Objekt Datum und Uhrzeit für das Anfangsdatum und die Anfangszeit und das Objekt Dauer zum Festlegen der Ereignishäufigkeit. - Wenn Sie die Subtypen "Wiederkehrend" oder "Intervall" ausgewählt haben:
- Legen Sie die Subtypwerte fest, die vom Mischentity-Prompt im Menü Prompt für angefordert werden.
- Da Besprechungen normalerweise am selben Tag beginnen und enden, aktivieren Sie für den Subtyp
startDate
das Standardenddatum bis Startdatum. Dadurch wird das Enddatum auf das Startdatum gesetzt, wenn die Benutzernachricht das Enddatum nicht erwähnt (oder wenn das Enddatum nicht in der falschen Reihenfolge extrahiert wird).
- Fügen Sie optional ein Begriffslabel hinzu, wenn die Benutzereingabe mehrere Subtypen abgleichen kann.
Tipp:
Sie können auch die Eigenschaften konfigurieren, die nicht DATE_TIME-spezifisch sind, wie Erweiterte Slotfüllung, Slotting-Werte aktualisieren mit Apache FreeMarker, benutzerdefinierte Prompts und Fehlermeldungen. - Sie können auf die Konfiguration auf Subtypebene zugreifen, indem Sie auf einen Subtyp klicken. Mit der Traversal kehren Sie zur Konfiguration auf Elementebene zurück.
- Nächste Schritte:
- Ordnen Sie die Mischentity dem Intent zu.
- Deklarieren Sie eine Variable für die Entity im Dialogablauf.
- Referenzieren Sie im Dialogablauf die Mischentity mit dem Element DATE_TIME mit dem Status "Composite Bag auflösen".
- Die DATE_TIME-Werte werden als ISO 8601 dargestellt. Für eine benutzerfreundliche Ausgabe verwenden Sie den Apache FreeMarker
.xs
integriert. Im folgenden Snippet wird der Wert für den Zeitsubtyp mit.value?time.xs?string['hh:mm a']
formatiert.
Anstatt das Element DATE_TIME als Zeichenfolge zu referenzieren, können Sie den Best-Practice-Ansatz verfolgen, es in einem Resource Bundle zu referenzieren, wie z.B.Your pizza will be delivered at ${pizza.value.deliveryTime.value?time.xs?string['hh:mm a']}.
DeliveryMessage
im folgenden Beispiel.
Für die Resource Bundle-Nachricht${rb('DeliveryMessage','time',pizza.value.deliveryTime.value?time.xs?string['hh:mm a'])}
DeliveryMessage
wird der Wert über den Parameter{time}
wiedergegeben:Your pizza will be delivered at {time}.
Tutorial: Reale Entitys mit Mischentitys extrahieren
Im Tutorial Reale Entitys mit Mischentitys extrahieren wird das Erstellen einer Mischentity anhand eines praktischen Beispiels erläutert.