Wie schreibe ich Dialogabläufe in OBotML?
OBotML verwendet eine einfache Syntax zum Festlegen von Variablen und Definieren von Status. Da es sich um eine Variante von YAML handelt, müssen Sie beim Definieren des Dialogablaufs die YAML-Abstandskonventionen beachten. Sie müssen Dialogabläufe nicht völlig neu erstellen. Stattdessen können Sie die Standard-Dialogablaufdefinition als Basisvorlage verwenden.
context
und states
, sodass Sie einfach den vorhandenen Boilerplate löschen und Ihren eigenen Inhalt hinzufügen können. Um syntaktisch korrekte Statusdefinitionen zu erstellen, verwenden Sie die Komponentenvorlagen im Menü + Komponente. Tipps zum Festlegen von Variablen und Definieren von Status finden Sie unter Dialogablaufsyntax.
Tipp:
Klicken Sie beim Schreiben des Dialogablaufs auf Validieren, um nach Syntaxfehlern zu suchen und Best Practices anzuwenden.Dialogablaufsyntax
Vorgehensweise | Dies verwenden |
---|---|
Wie lege ich Variablen fest, die den Kontext über den gesamten Dialogablauf persistieren? |
Verwenden Sie im
context -Knoten die folgende Syntax: variablename: "variableType" Beispiel:
Sie können Variablen als Entitys (wie |
Wie definiere ich einen Error Handler für einen Skill? |
Definieren Sie den Knoten
defaultTransitions , der auf einen Status verweist, der Fehler verarbeitet. In der Regel wird dieser Status am Ende der Dialogablaufdefinition hinzugefügt. Beispiel:
|
Wie definiere ich eine Variable, die den Wert für das aufgelöste Intent enthält? |
Definieren Sie im
context -Knoten eine Variable, die die Entity nlpresult benennt. Wie der Name impliziert ("nlp" steht für Natural Language Processing), extrahiert diese Entity das von der Intent Engine aufgelöste Intent. In nahezu allen Referenzbots werden nlpresult -Variablen deklariert. Beispiel:
|
Wie kann ich den Dialogablauf basierend auf Benutzereingaben steuern? |
In der Regel (aber nicht immer) definieren Sie eine Eigenschaft Wie unter Dialogablaufstruktur im YAML-Modus beschrieben, können Sie eine Variable |
Wie richte ich meinen Skill für die Verarbeitung nicht aufgelöster Intents ein? |
Definieren Sie einen Status für die Beispiel:
|
Wie ermögliche ich Komponenten den Zugriff auf Variablenwerte? |
Verwenden Sie die Eigenschaft
.value in Ihren Ausdrücken (${crust.value} ). Um einen Standardwert zu ersetzen, verwenden Sie ${variable.value!\"default value\"} . Beispiel: thick ist der Standardwert in ${crust.value!\"thick\"} . Beispiel:
Verwenden Sie den Apache FreeMarker-Standardoperator ( |
Wie kann ich Benutzerwerte für Folgebesuche speichern? |
Fügen Sie in einer Statusdefinition eine Variablendefinition mit dem Präfix
user. hinzu. Siehe Integrierte YAML-Komponenten zum Festlegen von Benutzerwerten. Beispiel:
Weitere Informationen zu Benutzervariablen finden Sie im Dialogablauf des Referenzbots "PizzaBotWithMemory". |
Wie kann ich einen Dialogablauf verlassen und die Benutzersession beenden? |
Verwenden Sie einen Beispiel:
|
Ablaufnavigation und Übergänge
Sie können die Dialog-Engine auf einen bestimmten Pfad im Dialogablauf setzen, indem Sie die Übergangseigenschaft für einen Status festlegen. Übergänge beschreiben, wie sich der Dialog verzweigt, wenn Variablenwerte festgelegt sind oder nicht. Mit ihnen können Sie die typische Route der Unterhaltung (den "Happy Flow") darstellen und alternative Routen festlegen, die fehlende Werte oder unvorhersehbares Benutzerverhalten aufgreifen.
Gehen Sie folgendermaßen vor... | ... Verwenden Sie diesen Übergang |
---|---|
Nächsten auszuführenden Status angeben | Legen Sie einen next -Übergang (next: "statename" ) feat, um die Dialog-Engine anzuweisen, in den Status zu wechseln, der mit dem Schlüssel next benannt wird. Wie unter nächster Übergang beschrieben, können Sie einen next -Übergang zu jedem Status hinzufügen, sofern er nicht den Übergang return enthält.
|
Unterhaltung zurücksetzen | Mit einem return -Übergang können Sie alle für die Kontextvariablen festgelegten Werte löschen und den Dialogablauf zurücksetzen. Sie können diesem Übergang einen beliebigen Zeichenfolgenwert zuweisen. Wenn Sie einen return: "done" -Übergang definieren, wird die Benutzersession beendet, und die Dialog-Engine wird zurück an den Anfang des Ablaufs geleitet.
|
Bedingte Aktionen auslösen | Definieren Sie actions -Schlüssel, um die Navigation zu einem bestimmten Status auszulösen. Wenn die Verarbeitung einer Komponente abgeschlossen ist, gibt sie eine Aktionszeichenfolge zurück, mit der die Dialog-Engine angewiesen wird, welche Aktion sie als nächstes ausführen soll. Wenn Sie keine Aktionsschlüssel definieren, verwendet die Dialog-Engine einen Standardübergang oder einen next -Übergang (sofern vorhanden). Sie können beliebig viele Aktionen definieren. Einige integrierte Komponenten enthalten spezifische Aktionen. Beispiel: Eine Komponente wie System.MatchEntity, die einen Apache FreeMarker-Ausdruck auswertet, verwendet match - und nomatch -Aktionen. System.OAuthAccountLink enthält textReceived -, pass - und fail -Aktionen, und die Benutzeroberflächenkomponenten verwenden ihre eigenen Aktionen (wie unter Übergänge für gemeinsame Antwortkomponenten beschrieben). Verwenden Sie die Komponentenvorlagen als Richtlinie. Sie können einen actions -Übergang für jeden Status definieren, sofern er nicht den Übergang return enthält.
|
Fehler beheben. | Komponenten lösen gelegentlich Fehler aus. Ursache sind häufig systembezogene Probleme oder Fehler (ungültige Kennwörter, ungültige Hostnamen oder Kommunikationsfehler). Wenn Sie einen error -Übergang festlegen, der einen Fehlerbehandlungsstatus benennt, kann Ihr Skill Probleme ordnungsgemäß verarbeiten: Wenn Sie keinen error -Übergang festlegen, gibt der Skill den Prompt für unerwartete Fehler aus (Hoppla! Ich habe ein Problem erkannt) und beendet die Session. Sie können einen error -Übergang in jedem Status definieren, sofern er nicht den Übergang return enthält.
Bei einigen Komponenten tritt ein Fehler auf, der als Aktion definiert ist. Diese integrierten Fehlerübergänge verarbeiten komponentenspezifische Fehler:
|
next
:state_name:
component: "component name"
properties:
component_property: "value"
component_proprety: "value"
transitions:
next: "go_to_state"
error: "go_to_error_handler"
actions:
action_string1: "go_to_state1"
action_string2: "go_to_state2"
Obwohl Sie mehrere Übergänge definieren können, stellt der
return
-Übergang hierzu eine Ausnahme dar: Sie können einen return
-Übergang nicht mit den Übergängen error
, next
oder actions
kombinieren.
Nächster Übergang
Mit dem Übergang next
geben Sie den nächsten Standardstatus an. Wenn ein Status die Übergänge error
, actions
und next
kombiniert, wird der Übergang next
nur ausgelöst, wenn die Komponente keine Zeichenfolge zurückgeben kann, die den Übergang error
oder actions
erfüllt.
next
-Übergang ausgelöst wird, wenn Fehler oder Aktionen vorhanden sind, definieren Sie eine next
-Aktion im defaultTransition
-Knoten.
context:
variables:
name: "string"
defaultTransitions:
next: "nextRules"
states:
getName:
component: "System.Text"
properties:
prompt: "What's your name please?"
variable: "name"
transitions:
next: "printName"
printName:
component: "System.Output"
properties:
text: "Hello ${name.value}."
transitions:
return: "done"
nextRules:
component: "System.Output"
properties:
text: "Hello ${name.value}. I told you! Next transitions rule the game!"
transitions:
return: "done"
Dialogablauf für unerwartete Aktionen konfigurieren
Szenario | Lösung |
---|---|
Anstatt auf Schaltflächen zu tippen, antwortet der Benutzer unpassenderweise mit einer Texteingabe. | Damit Ihr Bot dieses Verhalten ordnungsgemäß verarbeiten kann, leiten Sie ihn zu einem Status weiter, bei dem die Komponente System.Intent die Texteingabe auflösen kann, wie textReceived: Intent im folgenden Snippet aus dem CrcPizzaBot:
|
Benutzer scrollen zu einer früheren Nachricht zurück und tippen auf die zugehörigen Optionen, auch wenn sie auf die Schaltflächen in der aktuellen Antwort tippen müssen. |
Standardmäßig verarbeitet Digital Assistant Out-of-Order-Nachrichten. Sie können dieses Verhalten jedoch überschreiben oder anpassen, wie unter So werden Out-of-Order-Aktionen erkannt beschrieben.
Beispiel: Wenn Sie einen
system.outofOrderMessage -Standardübergang hinzufügen, wird die Dialog-Engine angewiesen, zu einem einzigen Status überzugehen, der alle Out-of-Order-Nachrichten verarbeitet, wie den Status HandleUnexpectedAction im OBotML-Snippet oben. Sie können verschiedene Methoden verwenden, um diesen Status zu erstellen:
|
Skill von einem anderen Skill aus einem YAML-Dialogablauf aufrufen
In bestimmten Situationen möchten Sie Benutzern unter Umständen die Möglichkeit geben, den Skill vorübergehend zu verlassen, mit dem sie gerade interagieren, um einen Vorgang in einem zweiten Skill innerhalb desselben digitalen Assistenten auszuführen. Beispiel: Wenn Benutzer einen Shoppingskill verwenden, in dem sie bereits Artikel ausgewählt haben, könnten Sie eine Schaltfläche anzeigen, mit dem Benutzer zu einem Bankingskill wechseln (um sicherzustellen, dass sie genügend Geld für den Einkauf haben) und dann zum Shoppingskill zurückkehren können, um die Bestellung abzuschließen.
Dazu können Sie in einem YAML-Dialogablauf eine Aktion in einem Skill konfigurieren, um die Interaktion mit einem anderen Skill in demselben digitalen Assistenten zu initiieren und dann zum ursprünglichen Ablauf zurückzukehren.
Funktionsweise:
-
Mit der Komponente
System.CommonResponse
stellen Sie dem Benutzer eine Schaltfläche zur Verfügung, um Aufgaben in einem anderen Skill auszuführen.Die Schaltfläche basiert auf einer Postback-Aktion, in der Sie die Payload so konfigurieren, dass sie eine Äußerung tätigt, die an den Zielskill geleitet wird. Idealerweise sollte diese Äußerung den Aufrufnamen des Zielskills (d.h. einen expliziten Aufruf) enthalten, um die Wahrscheinlichkeit zu erhöhen, dass ein Routing an diesen Skill erfolgt. Dadurch können Sie im Wesentlichen eine Äußerung hartcodieren, um das gewünschte Intent auszulösen.
Format dieses Codes:
component: "System.CommonResponse" properties: metadata: ... responseItems: - type: "cards" ... actions: ... - label: "Press me to switch to different skill" type: "postback" payload: action: "system.textReceived" variables: system.text: "utterance with invocation name that you want passed to the digital assistant" ...
Wenn Sie die
system.textReceived
-Aktion verwenden und den Text in der Variablesystem.text
angeben, stellen Sie sicher, dass der Postback wie eine Benutzernachricht behandelt wird, die vom digitalen Assistenten ordnungsgemäß weitergeleitet werden kann.Hinweis
Wenn Siesystem.textReceived
auf diese Weise verwenden, istsystem.text
die einzige Variable, die Sie in der Postback Payload definieren können. Alle anderen Variablen in der Payload werden ignoriert. - Setzen Sie den
textReceived
-Übergang auf den Status mit der KomponenteSystem.Intent
.transitions: actions: .... textReceived: "Name of the state for the System.Intent component"
So wird sichergestellt, dass der digitale Assistent eine geeignete Fallback-Antwort ausgibt, wenn der digitale Assistent den Zielskill nicht enthält.
Dazu muss die Eigenschaft
daIntercept
der KomponenteSystem.Intent
des Skills auf"always"
(der Standardwert) gesetzt sein.
Wenn der Zielskill im digitalen Assistenten enthalten ist, erkennt der digitale Assistent den expliziten Aufruf, übernimmt die Kontrolle über die Anforderung (die normalerweise von der Komponente verarbeitet wird) und leitet die Anforderung an die System.Intent
-Komponente des Zielskills weiter. Sobald der Ablauf des Zielskills abgeschlossen ist, wird der Benutzer an den aufrufenden Skill zurückgeleitet.
Wenn der Zielskill nicht im digitalen Assistenten enthalten ist (oder der aufrufende Skill ohne einen digitalen Assistenten bereitgestellt wird), wird die Komponente System.Intent
des aufrufenden Skills aufgerufen, und das Intent sollte als unresolvedIntent
aufgelöst werden.
Tipp:
Falls der Aufrufname des Zielskills geändert wird, wenn er einem digitalen Assistenten hinzugefügt wird, können Sie einen benutzerdefinierten Parameter verwenden, um den Aufrufnamen des Skills an die Variable system.text
zu übergeben.
Beispiel: Sie können einen Parameter mit dem Namen da.CrcPizzaCashBankInvocationName
im Pizzaskill erstellen und ihm den Standardwert CashBank
zuweisen. Anschließend können Sie den Parameter wie folgt referenzieren:
system.text: "ask ${system.config.daCrcPizzaFinSkillInvocationName}, what is my balance"
Wenn der Aufrufname des Skills geändert wird, ändern Sie einfach den Wert des benutzerdefinierten Parameters so, dass er mit dem neuen Aufrufnamen übereinstimmt.
Siehe Benutzerdefinierte Parameter.
Wenn Sie einen ausdrücklichen Aufruf in der Variable
system.text
verwenden, kann der Benutzer die Nachricht mit dieser Schaltfläche zweimal sehen:
- Wenn ihnen die Schaltfläche angezeigt wird, um zum anderen Skill zu navigieren.
- Wenn sie den Ablauf im anderen Skill abschließen.
system.text
anstelle eines ausdrücklichen Aufrufs. Ein impliziter Aufruf ist eine Äußerung, die gut mit einem bestimmten Skill übereinstimmt, ohne den Aufrufnamen des Skills (oder eine Variante des Aufrufnamens mit unterschiedlichem Zeichenabstand oder anderer Großschreibung) zu verwenden.
Beispiel: Skill von einem anderen Skill aufrufen
Beispiel: Nachfolgend ist ein Intent zum Bestellen von Pizza (OrderPizza
) dargestellt, mit dem der Benutzer sein Bankkontensaldo prüfen kann, bevor er seine Bestellung abschließt. Der Kontensaldo wird durch einen anderen Skill bereitgestellt (CashBank
). Wenn der Benutzer die Option Saldo prüfen
auswählt, wird der Text "Frage CashBank nach meinem Saldo" per Postback an den digitalen Assistenten übertragen, und der Benutzer wird zum entsprechenden Intent im CashBank
-Skill weitergeleitet.
OrderPizza:
component: "System.CommonResponse"
properties:
metadata:
...
responseItems:
- type: "cards"
headerText: "Our pizzas:"
cardLayout: "vertical"
name: "PizzaCards"
actions:
- label: "More Pizzas"
...
- label: "Check bank account balance"
type: "postback"
payload:
action: "system.textReceived"
variables:
system.text: "ask CashBank, do I have enough money?"
...
processUserMessage: true
transitions:
actions:
order: "AskPizzaSize"
more: "OrderPizza"
textReceived: "Intent" # where the value of textReceived is the name CashBank's System.Intent state
...
Angenommen, Ihr Pizzaskill befindet sich in demselben digitalen Assistenten wie der CashBank-Skill. Im folgenden Beispiel wird gezeigt, wie Sie den digitalen Assistenten im Tester öffnen, den Pizzaskill aufrufen und dann auf Bankkontensaldo prüfen klicken.

Beschreibung der Abbildung skill-skill.png
Auf der Registerkarte "Routing" des Testers können Sie sehen, dass der explizite Aufruf erkannt wurde und vorrangig behandelt wird:
Unten können Sie sehen, dass für das Intent "Saldo prüfen" des CashBank-Skills eine Übereinstimmung vorliegt:
Benutzerbezogene Variablen in YAML-Dialogabläufen
Wenn die Unterhaltung beendet wird, werden die durch die Benutzereingabe festgelegten Variablenwerte zerstört. Wenn diese Werte nicht mehr verfügbar sind, müssen Ihre Skillbenutzer ihre Schritte jedes Mal zurückverfolgen, wenn sie zu Ihrem Skill zurückkehren Sie können Ihren Benutzern diesen Aufwand ersparen, indem Sie im Dialogablauf benutzerspezifische Variablen definieren. Ihr Skill kann diese Variablen verwenden, die die Benutzereingabe aus vorherigen Sessions speichern, um Benutzer schnell durch die Unterhaltung zu führen.
context
, erhalten das Präfix user.
Der Status checklastorder
im folgenden Auszug aus dem Dialogablauf PizzaBotWithMemory enthält die Variable user.lastsize
, bei der die Pizza-Größe aus der vorherigen Benutzersession beibehalten wird. Die Variable user.
persistiert die Benutzer-ID. Diese ID ist kanalspezifisch, d.h. Sie können zwar zu einer Unterhaltung zurückkehren oder mit Ihren vorherigen Einträgen in Skills, die auf demselben Kanal ausgeführt werden, eine Bestellung durchlaufen, aber über verschiedene Kanäle hinweg ist das nicht möglich.
main: true
name: "PizzaBot"
parameters:
age: 18
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
sameAsLast: "YesNo"
states:
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
OrderPizza: "checklastorder"
CancelPizza: "cancelorder"
unresolvedIntent: "unresolved"
checklastorder:
component: "System.ConditionExists"
properties:
variable: "user.lastsize"
transitions:
actions:
exists: "lastorderprompt"
notexists: "resolvesize"
lastorderprompt:
component: "System.List"
properties:
options: "Yes,No"
prompt: "Same pizza as last time?"
variable: "sameAsLast"
transitions:
next: "rememberchoice"
rememberchoice:
component: "System.ConditionEquals"
properties:
variable: "sameAsLast"
value: "No"
transitions:
actions:
equal: "resolvesize"
notequal: "load"
...
load:
component: "System.CopyVariables"
properties:
from: "user.lastsize,user.lasttype,user.lastcrust"
to: "size,type,crust"
transitions:
...
Integrierte YAML-Komponenten zum Festlegen von Benutzerwerten
Definieren Sie die value
-Eigenschaft der folgenden Komponenten mit Ausdrücken wie "${user.age.value}"
, um gespeicherte Benutzerwerte festzulegen.
Komponente | Verwendungen |
---|---|
System.SetVariable | Legt den gespeicherten Benutzerwert fest. |
System.ResetVariables | Setzt einen gespeicherten Benutzerwert zurück. |
System.CopyVariables | Kopiert den gespeicherten Benutzerwert und fügt ihn ein. |
System.Output | Gibt den gespeicherten Benutzerwert als Text aus. |
System.ConditionExists | Prüft, ob die benutzerspezifische Variable bereits im Kontext vorhanden ist. |
System.ConditionEquals | Sucht nach der benutzerspezifischen Variable. |
System.Switch | Verwendet den gespeicherten Wert, um von einem Status in einen anderen zu wechseln. |
Automatische Nummerierung für Nur-Text-Kanäle in YAML-Dialogabläufen
Mit dem Framework für automatische Nummerierung kann Ihr Skillbot in Nur-Text-Kanälen ausgeführt werden, weil Schaltflächen und Listenoptionen Nummern als Präfixe vorangestellt werden. Wenn Benutzer keine Tippgesten verwenden können, können sie die Postback-Aktionen der Schaltfläche trotzdem durch Eingeben einer Nummer auslösen. Beispiel: Wenn der CrcPizzaBot in einem Kanal ausgeführt wird, der Schaltflächen unterstützt, werden die Optionen "Pizzas" und "Pastas" angezeigt.
Wenn er jedoch auf einem Nur-Text-Kanal ausgeführt wird, werden die Optionen "Pizza" und "Pasta" als Text dargestellt, dem fortlaufende Nummern als Präfixe vorangestellt sind (1. Pizza 2. Pasta).
Die automatische Nummerierung ist nicht auf Nur-Text-Kanäle beschränkt. Durch Aktivierung dieses Frameworks in Kanälen, in denen Schaltflächen unterstützt werden, erhalten Benutzer eine weitere Möglichkeit zur Eingabe ihrer Optionen. Beispiel: Benutzer können entweder auf "Pizza" tippen oder 1 eingeben.
Automatische Nummerierung für YAML-Dialogabläufe festlegen
Bei YAML-Dialogabläufen können Sie das Feature für die automatische Nummerierung auf globaler Ebene festlegen (d.h. es wirkt sich auf alle Komponenten aus, die in der Dialogablaufdefinition benannt sind) oder auf Komponentenebene für die Komponenten, die Postback-Aktionen auslösen, nämlich die Komponenten System.List
, System.CommonResponse
, System.ResolveEntities
, System.QnA
, System.Webview
, System.OAuthAccountLinkComponent
und System.OAuth2AccountLinkComponent
.
-
Fügen Sie im Kontextknoten
autoNumberPostbackActions: "boolean"
hinzu. Diese Variable ist wietextOnly
undautoTranslate
eine gemeinsame Variable, die in allen Bots verwendet werden kann.context: variables: pizzaSize: "PizzaSize" pizzaType: "PizzaType" pizzaCrust: "PizzaCrust" pizzaCheese: "CheeseType" autoNumberPostbackActions: "boolean" iResult: "nlpresult"
-
Setzen Sie die Eigenschaft
autoNumberPostbackActions
auftrue
:type: component: "System.List" properties: prompt: "What Type of Pizza do you want?" options: "${pizzaType.type.enumValues}" variable: "pizzType" autoNumberPostbackActions: "true" footerText: "Enter a number or tap your selection." transitions: ...
Wenn Sie die automatische Nummerierung für eine bestimmte Komponente (eine Systemkomponente oder eine benutzerdefinierte Komponente) außer Kraft setzen müssen, setzen Sie die EigenschaftautoNumberPostbackActions
auffalse
. Um die automatische Nummerierung für eine bestimmte Postback-Aktion in der Komponente System.CommonResponse außer Kraft zu setzen, fügen Sie eineskipAutoNumber
-Eigenschaft hinzu, und benennen Sie die Aktion.Hinweis
Weil die automatische Nummerierung über die serverseitige Verarbeitung angewendet wird, funktioniert sie nur für Postback-Aktionen, nicht für die clientseitigen URL-Aktionen. Folglich führen Komponenten, die zwei Schaltflächenaktionen, eine URL-Aktion und eine Postback-Aktion wiedergeben, zu einer suboptimalen Benutzererfahrung aufgrund der inkonsistenten Nummerierung der verschiedenen UI-Elemente. Für die OAuth-Komponenten, die sowohl eine Anmelde-URL-Aktion als auch eine Postback-Aktion wiedergeben, wird nur der Abbruchaktion eine Nummer als Präfix vorangestellt. Um in solchen Fällen die Konsistenz zu gewährleisten, setzen Sie die EigenschaftautoNumberPostbackActions
auffalse
. -
Sie können die automatische Nummerierung bedingt aktivieren, indem Sie die Variable
autoNumberPostbackActions
mit dem aktuellen Kanal festlegen. Beispiel:
Nachdem Sie die VariablesetAutoNumbering: component: "System.SetVariable" properties: variable: "autoNumberPostbackActions" value: "${(system.channelType=='facebook')?then('true','false')}"
autoNumberPostbackActions
festgelegt haben, können Sie sie referenzieren, um denprompt
-Text zu ändern:
Ebenso können Sie den Footertext konditionalisieren:prompt: "Hello ${profile.firstName}, this is our menu today<#if autoNumberPostbackActions.value>. Make your choice by entering the menu option number</#if>:"
footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
Inhalt für schreibgeschützte Kanäle in YAML-Dialogabläufen wiedergeben
textOnly
in den verzweigenden Komponenten des Dialogablaufs referenzieren, wie System.ConditionEquals oder System.Switch. Bevor Sie Ihren Ablauf basierend auf Nur-Text-Nachrichten verzweigen können, müssen Sie textOnly
als Kontextvariable deklarieren und dann den Wert festlegen. Hierzu sind die folgenden grundlegenden Schritte erforderlich:
-
Fügen Sie die Variable
textOnly: "boolean"
zumcontext
-Knoten hinzu.context: variables: autoNumberingPostbackActions: "boolean" textOnly: "boolean"
-
Referenzieren Sie
textOnly
in den Variableneinstellungskomponenten, wie System.SetVariable und System.Switch. -
Verwenden Sie die Eigenschaft
system.message
, um die vollständige Benutzernachricht anzuzeigen. Das folgende Snippet zeigt, wie Sie einen booleschen Wert innerhalb des Ausdruckssystem.channelType
festlegen, der angibt, ob ein Nur-Text-Kanal (in diesem Fall Twilio) verwendet wird oder nicht.setTextOnly: component: "System.SetVariable" properties: variable: "textOnly" value: "${(system.channelType=='twilio')?then('true','false')}"
Sie können die automatische Nummerierung bedingt aktivieren, indem Sie den Benutzernachrichtenkanal referenzieren. Beispiel:setAutoNumbering: component: "System.SetVariable" properties variable: autoNumeringPostbackActions value: "${(system.channelType=='twilio')?then('true','false')}"