Design your Conversation Logic in Flows
Output nodes are flow nodes that specify how the bot should respond. Most importantly, they contain the answer texts, but they also let you specify various other properties.
If you select an output node, various panels on the right side of the window can be used to alter the output nodes' behavior.
Answer texts
The most common thing to add to an output node is an answer text: a response from your bot in natural language. Answer texts are specified in the 'Answers' panel. You may add several answer texts that are phrased slightly differently. Having multiple variations of an answer text is mostly relevant when you expect that the flow containing the answer might be triggered several times in the same conversation. That way your bot won't sound repetitive if a user runs into the same output node more than once.
If you define more than one answer text, the final text will be used as a fallback, meaning it will be repeated after all the other answer texts in the output have been given once. For the blocks of answer text preceding the fallback, you can specify whether the bot should pick one at random or show them in the order provided. To do this, use the button under the green 'Add' button; this will give you the options to 'Set Order' while selected or order randomly when not selected. You also have an option to select 'Cycle'; this works when 'Set Order' is activated. This will make the Outputs go around in a Cycle, returning to the first answer text again. Otherwise, it will return to the last message in the list.
Generate answer variations
Teneo's copilot features allow you to quickly generate new answer variations based on the answer(s) you've written so far. This can be done with the Generate button:
Once new answers have been generated, the flow will look like this:
Revisitability
Still in the 'Output' node panel, you can specify if an output node can be revisited or not in the 'Resume Prompts' section. Revisitability has to do with interruptions, for example situations where your bot has asked a question to the user and the user responds with a request for clarification, switches topic, or simply responds in a way that is not understood. Click here for a practical example of this.
Let's look at an example:
User: I'd like to order a coffee.
Bot: Ok, what coffee would you like?
At this point the flow that handles coffee orders is triggered and the bot asks for the coffee preference of the user.User: Which coffees do you have?
The user does not answer the bot's question, but asks a different question instead. In other words: the flow that handles coffee orders is interrupted.Bot: We offer a variety of handcrafted coffee drinks - from espressos to macchiatos to flat whites and more.
The bot finds another flow to answer the users question and...
Bot: Let's continue with your order. Which coffee would you like?
...then continues the with the flow that handles coffee orders. To be more specific: the output node that asks for the coffee preference is revisited.User: A flat white, please.
Bot: Ok, a flat white will be ready for pickup in 5 minutes.
The flow that handles coffee orders is finished.
In short: if you want your output node to 'survive' an interruption, you make it revisitable. Otherwise, you make it non-revisitable.
- If a flow is interrupted after a revisitable output node, your bot will return to that point of the flow after your bot has completed the flow that was triggered by the interruption.
- If a flow is interrupted after a non-revisitable output node, your bot will simply exit your flow at that point and continue with the flow that was triggered by the interruption. You can thus think of non-revisitable output nodes as optional end nodes or exit points. They even have the same appearance as end nodes: they have a purple border.
You specify revisitability with a checkbox in the 'Resume Prompts' panel. Here you can also limit how many times you allow the output to be revisited. If the limit is exceeded, the flow is dropped. This way you can avoid making your bot too stubborn.
Resume prompts
If you add a resume prompt to an output node, that prompt will be given instead of the ordinary answer texts when the node is revisited after an interruption. You add resume prompts in the 'Resume Prompts' panel. More on how this is done can be seen here.
Skip conditions
Skip conditions are used to prevent your bot from asking for information that is already known.
For example, if a user says: I would like to order one cappuccino please, you want your bot to ask: Ok, what coffee would you like?. But when the user says: I would like to order one cappuccino please, you want your bot to skip the question: Ok, what coffee would you like?.
With a skip condition, you can specify that an output node should be skipped (or jumped over) if a particular condition is true.
You add skip conditions to your output node under its 'Skip conditions' panel. There you specify the condition when it should be skipped (e.g. if the variable for flavor has already been set), and where it should skip to, i.e. which transition to follow after the output has been skipped.
The page Skip Conditions shows how to build a flow that can handle coffee orders and it uses skip conditions to avoid redundant questions.
Output parameters
Output parameters can be used to provide your app with information that has no place in the regular answer text. For example, suppose a bot can provide weather information in a mobile app. The answer text of an output might contain a humanlike description of the weather (It's quite sunny in Amsterdam at the moment, make sure to wear sunscreen!). But in addition to that, the app could display a widget with more detailed weather info. The information that needs to be displayed in the widget could be passed on as JSON in an output parameter. Each output node can have as many output parameters as you like, each parameter needs to have a name and a String as value.
You add output parameter to your output node under its 'Output Parameters' panel shown here.
URLs and Emotions
Each output node has a separate URL field. This URL is included as a separate field in your bot's response. The frontend application can use this field to automatically open a webpage, for example. The same is true for 'emotions': each answer text can have an emotion associated with it. This emotion is included as a separate field in your bot's response and can for example be used by frontends that display avatars.
The emotions can be found and added in 'Globals'.