Automation
Content
Diese Dokumentation beschreibt das Konzept Content. Was ist Content, wie wird es benutzt und was sind die Vorteile gegenüber einer standard Dialogmodellierung.
Einleitung
Der Content ist eine graphische Datenbank in der fest-strukturierte Daten gespeichert werden können. Dazu können zunächst verknüpfte Schemata der Daten definiert werden zu denen dann Entitäten gepflegt werden können. Über verschiedene dialogische Mechanismen kann so direkt im Bot auf die Datenbank zugegriffen werden. Typische Anwendungsfälle sind zum Beispiel die Einbindung eines (externen) Shop-Systems wo mit Hilfe des Bots die Produkte gefiltert und anschließens dem nutzer präsentiert werden soll.
Die Dialogengine in Kombination mithilfe der ContextInitiativen bietet hier eine schnelle und einfach zu integrierende Schnittstelle zwischen Datenbank und Bot.
Die Benutzung von Content im Dialog beruht im Grunde auf vier Schritten:
- Anlegen eines Datenschemas inkl. Aktivierung der Suchparameter und Settings.
- Anlegen der Datenpunkte.
- Pflegen ContextInitiativen für die erzeugten content-spezifischen ContextParameter.
- Benutzung der Suche im Dialog.
Schema
Das Schema ist eine Art Daten-Template zu welchen Datenpunkte (Entitäten) angelegt werden können. klicke auf den Button Create new entity schema, um ein neues Schema anzulegen. Wähle einen sprechenden Namen und optional einen Key ein. Der Key kann später nicht mehr geändert werden und wird ausschließlich zu verwendet, um intern auf dieses Schema zu verweisen.
Ein Schema besteht immer aus einem Label, welches der Anzeige im Dialogeditor dient und einer optionalen Beschreibung. Ausserdem kann einem Schema getypte Attribute hinzugefügt werden, um das template zu erweitern. Auf diese Attribute können später im Dialogverlauf zugegriffen werden, um Such-Filter zu definieren oder einfach nur um Informationen der gefundenen Entitäten anzuzeigen.
Content-spezifische ContextParameter
Die Suche nach Entitäten läuft dabei entweder über das Label, den Key oder den Attributen der Entitäten, in dem getypte Suchparameter gesetzt werden. Ein Suchparameter besteht dabei immer aus einem entsprechenden Datentyp, einem konditionalem Such Operator (z.B. equals
, similar
oder exists
etc.) und einem konkreten Wert. Soll ein Attribut für die Suche verwendet werden, wird automatisch ein ContextParameter in der Kategorie Search <Key>
(z.B. Search Product
) angelegt:
Diese content-spezifischen ContextParameter befinden sich im Namespace contentSearch
z.B:
contentSearch.Product.attributes.price
für ein Attribut mit KeyPrice
,contentSearch.Product.label
für die Suche nach dem Label (und Synonyme) undcontentSearch.Product.key
für die Suche über den Key.
Search Settings
In der Detailansicht eines Schemas können verschiedene Einstellungen vorgenommen und Attribute hinzugefügt werden die das Dialogverhalten des bots beeinflussen:
Include entity label and synonyms for search
Wird dieses Flag aktiviert, kann im Bot eine Entität nach seinem Label bzw. seinen Synonymen gesucht werden. Das Label (+ Synonyme) werden ausschließlich über den similar Operator gesucht werden.
Include entity key for search
Wird dieses Flag aktiviert, kann im Bot eine Entität nach seinem Key gesucht werden. Der Key kann ausschließlich über den equals Operator gesucht werden.
Attributes
Jedes Schema können weitere Attribute hinzugefügt werden, die entweder bei der Suche verwendet werden können oder einfach nur nützliche Informationen beinhalten, die über den Bot dem Nutzer angezeigt werden sollen. Klicke auf den Button Add attribute um ein neues Attribut anzulegen:
Wähle zunächst den Namen und optional ein (finalen) Key aus. Ausserdem gibt es hier die Möglichkeit den Datentyp und die Kardinalität zu bestimmen.
Bedenke, dass nachträglich nur das Label geändert werden kann.
Die Detailansicht eines Attributes beinhaltet verschiedenen Einstellmöglichkeiten um die Suche zu spezifizieren:
Das Label und die Beschreibung haben keinen Einfluss auf die Suche!
- Available as filter in content search: Aktiviere das Flag, um dieses Attribut im Bot bei der Suche freizuschalten. Bei Aktivierung wird ein neuer content-spezifischer ContextParameter angelegt.
Damit der Parameter in der Suche verwendet werden kann, muss mindestens ein Operator aktiviert sein:
Enabled comparison operators in content search:
Aktiviere einen operator um ihn in der Suche als Filter verwenden zu können. Zum Beispiel bietet sich bei der Suche nach einem Preis die Operatoren
lessOrEquals
,greaterOrEquals
undignore
an, so können dialogisch Filter gesetzt werden um den Preis entweder zu ignorieren oder ihn einzugrenzen.
Context Initiative
ContextInitiativen für content-spezifische ContextParameter verhalten sich zum größten Teil gleich zu den standard Initiativen. Es gibt jedoch einen relevanten Unterschied. Eingesammelte Werte können pro konditionalem Operator gespeichert werden. Das heißt wir können in unserem Beispiel explizit einen Wert für contentSearch.product.attributes.Price#lessOrEquals
und einen Wert für contentSearch.product.attributes.Price#greaterOrEquals
setzen und/oder aber einen für contentSearch.product.attributes.Price#ignore
.
Dazu gibt es in den hier beschriebenen Arten einen Wert einzusammeln zusätzlich die Möglichkeit den entsprechenden Operator zu setzen.
- Provide Value: Der Provide Value Button gibt die Möglichkeit per Button Werte zu setzen. Zum Beispiel kann der Filter mit dem ìgnore`Operator ignoriert werden: Es können aber auch mehrere Werte (ein pro Operator) gesetzt werden:
- Utterances: Während in der standard ContextInitiative die Slots einer Utterance nicht angepasst werden können, kann man bei content-spezifischen Parametern einem Slot einen Operator mitgeben. Wird der Slot von der NLP gefüllt, wird der entsprechende Wert an den zugehörigen Operator gehangen:
- Hooks: Auch über Hooks können Werte gesetzt werden. Dazu gibt es die Möglichkeit einen Hook um eine
Component
zu erweitern:
Attribute Mappings (Experimental)
Dies ist ein experimentelles Feature welches in Zukunft geändert oder gelöscht werden kann!
Für jedes Attribut kann eine Liste an Mappings definiert werden. Ein Mapping besteht aus einem Operator, einem konkreten Wert sowie einer Liste an Synonymen:
Wird in einer content-spezifischen ContextInitiative ein Slot verwendet, wird von der NLP-Komponente überprüft, ob sich der eingesammelte Slot-Wert in der Liste der Synonyme für eines der Mappings befindet. Kann der Slot-Wer einem Mapping zugewiesen werden wird anstelle des Slot-Werts der im Mapping angegeben Wert und Operator verwendet:
In diesem Beispiel würde die Eingabe "I want something Cheap" also den Wert 20
in den Parameter contentSearch.Product.attributes.price#lessOrEquals
schreiben.
Entities
Nachdem ein Schema angelegt wurde, können unter dem Tab Entities echte Datenpunkte also Entitäten zu diesem Schema angelegt werden. Dazu wird zunächst das entsprechende Schema aus der Liste ausgewählt, zu dem man Daten pflegen möchte:
Hier kann aus der Liste der Entitäten eins ausgewählt werden um dieses zu modifizieren oder neue hinzugefügt werden:
Es gibt zwei Möglichkeiten neue Entitäten anzulegen:
- Batch: Lade eine JSON-Datei hoch um gleichzeitig mehrere Entitäten anzulegen. Klicke dazu auf den Button Upload JSON, lade das Template herunter, befülle die Datei nach dem template und lade die Datei anschließen wieder hoch. Dabei kann ausgewählt werden ob die bestehenden Entitäten gelöscht werden sollen oder nicht.
- Individuell: Um eine neue Entität für dieses Schema hinzuzufügen, klicke auf den Button Add entity, wähle einen sprechenden Namen und (optional) ein Key.
Nachdem eine Entität angelegt ist kann diese modifiziert werden:
- Definiere das Label und die Synonyme um diese in der Suche verwenden zu können.
- Gib eine Beschreibung an um diese im Dialog in einer Ergebnispräsentation anzeigen zu können.
- Bestimme die konkreten Werte der einzelnen Attribute, um diese entweder im Dialog anzuzeigen oder um über sie in der Suche zu filtern.
Verwendung im Dialog
Ist der Content angelegt und die Initiativen gepflegt, können sie in speziellen Such-Operationen in einer DialogAction verwendet werden:
Content: Search
Die Content Search Operation kann dazu verwendet werden eine Suche auf dem Content auszuführen.
Es gibt folgende Einstellmöglichkeiten:
- Entity type: Wähle das Schema bzw. den Entitätstypen aus, welcher durchsucht werden soll.
- Number of results to present: Bestimme wie viele Entitäten angezeigt werden sollen.
- Search parameters: Definiere welche Attribute verwendet werden sollen, um die Suche auszuführen.
Das Hinzufügen von Suchparametern bewirkt, dass an der entsprechenden Stelle im Dialog die entsprechenden Initiativen getriggert werden:
Jede Content: Search-Operation beschreibt eine Edge Variable mit Key edge.numberOf<SchemaKey>
z.B. edge.numberOfProduct
. In dieser Edge-Variable steht die tatsächliche Anzahl an gefundenen Entitäten. Sie kann z.B. dazu verwendet werden die Suche weiter zu verfeinern (falls es sehr viele Ergebnisse sind) oder entsprechend zu reagieren, falls keine Ergebnisse gefunden wurden:
Verwendung der Suchergebnisse
Wurde die Operation erfolgreich ausgeführt, kann im folgenden Verlauf der Edge auf die Suchergebnisse zugegriffen werden. Die Suchergebnisse stehen in ContextParametern unter folgenden Namespace internal.contentSearch.result.<SchemaKey>
:
- Label
internal.contentSearch.result.<SchemaKey>.label
- Key
internal.contentSearch.result.<SchemaKey>.key
- Attributes
internal.contentSearch.result.<SchemaKey>#attributes.<AttributeKey>
z.B. internal.contentSearch.result.Product#attributes.Price
Im Dialogeditor kann auf die unterschiedlichen Werte zugegriffen werden, in dem man
- zunächst das entsprechende Schema auswählt:
- und dann den gewünschten Wert:
Dabei gilt:
- Innerhalb von Operationen und Branches und allen Message-Typen die keine Ergebnispräsentation unterstützen kann nur auf das erste Ergebnis zugegriffen werden.
- Messagetypen die eine Ergebnispräsentation unterstützen sind für die verschiedenen Kanäle die folgenden:
Web: Gallery Facebook: Gallery Instagram: Gallery Whastapp: List
- Es kann jeweils nur ein Schema pro Ergebnis-Präsentations-Nachricht verwendet werden.
- Nur die erste Slide / Section wird automatisch dupliziert, wenn sie ContextParameter im Namespace
internal.contentSearch.result
beinhaltet. - Werden weitere Slides / Sections hinzugefügt, werden ans Ende der Message gehangen.
So sieht der entsprechende Dialog aus.
- Nachfrage (um einen Filter zusetzen):
- Durchsuchen des Contents und Ergebnisse präsentieren:
Content: Clear
Die Content: Clear-Operation setzt alle bisherigen Such-Filter (ContextParameter) für ein entsprechendes Schema zurück.
Werden vor einer Suche die Parameter nicht zurückgesetzt, würden (je nach Einstellung der ContextInitiative) keine nachfragen mehr gestellt werden!
Content: More
Die Content: More-Operation schreibt neue Suchergebnisse in den ContextParameter. Wähle zunächst das Schema aus zu welchem neue Ergebnisse geladen werden sollen und danach die Anzahl an Ergebnissen die in der Ergebnis-Präsentation angezeigt sollen:
Benötigt eine vorausgegangene Content: Search Operation!
Jede Content: More-Operation beschreibt eine Edge Variable mit Key edge.numberOf<SchemaKey>
z.B. edge.numberOfProduct
siehe Content: Search.
Content: Salient
Die Content: Salient-Operation ermöglicht es über eine bestimmte Entität zu sprechen, um zum Beispiel weiter führende Informationen anzuzeigen. Dazu muss eine Entität in der entsprechenden Operation über ihren Key
als salient markiert werden. Hier wird zunächst das Schema ausgewählt und dann der Key der Entität über welche gesprochen werden soll:
Dies kann statisch eingetragen werden. In den meisten Fällen lässt man den Nutzer jedoch eine Entität über die Ergebnis-Präsentation auswählen. Dazu erzeugt man einen UserIntent welcher als Slot einen Key entgegennimmt und verwendet diesen Slot in der Operation. Der UserIntent wird dann über einen Button in der Ergebnis-Präsentation verlinkt.
Lege einen UserIntent mit einem Slot(EntityType) vom Typ Product.key
an:
Befülle den Slot beim Klicken auf einen Button in der Ergebnis-Präsentation mit internal.contentSearch.result.Procut.key
:
Verwende den Slot (EntityType) in der Content: Salient-Operation:
Danach kannst du in den folgenden Operations, Branches und BotIntents auf die Werte der salienten Entität zugreifen:
Parallel zu den ergebnissen, liegen die entsprechenden ContextParameter im folgenden Namespace internal.contentSearch.salient.<SchemaKey>
:
- Label
internal.contentSearch.salient.<SchemaKey>.label
- Key
internal.contentSearch.salient.<SchemaKey>.key
- Attributes
internal.contentSearch.salient.<SchemaKey>#attributes.<AttributeKey>
Um z.B. internal.contentSearch.salient.Product#attributes.Price
zu verwenden klicke zunächst auf den Product
ContextParameter:
und wähle dann das entsprechende Attribut aus:
So sieht der entsprechende Dialog aus: