cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Getting Started with Khoros Flow

Get acquainted with Khoros Flow and learn how to get started
Filter
Filter by Labels
Select any of the labels below to filter results.
Filters applied...
flow triggers
Sorted by:
New to Khoros Flow? This is a great place to start learning about the basic flow workflow and features. We’ve broken this course into 10 short videos. Choose the topics that interest you most. Overview of Flow basics Training your bot to be smarter Creating a fallback Flow Extracting user input Routing with events and conditions Visualizing the conversation with Rich UI Textual Selection lists Code actions Reusable handover flow
View full article
by Khoros Staff Khoros Staff Aug 17, 2021
Labels (4)
0
914
Context is important in conversational design. Context can be defined as the state of the conversation and depends on previous messages. The NLP engine keeps track of the state of the conversation, allowing for switching flows during a conversation. Steps provide context The way you design flows using steps provides the NLP engine the context it needs to determine which step and flow to match. We can illustrate that using the following example.   It shows two different flows with the same contextual follow up step:   And which is the closest. So whenever a user triggers the second step by sending   And which one is the closest   the context of the first question   How many stars are there in the Milky way?   or   I am looking for a restaurant   is used as context to match the second step and send a reply. How context works You might notice the designing of Flows looks linear, but this is not the case. A user does not get   stuck   inside a flow whenever a step was matched. With each new message, like a user sending text, the NLP engine will decide based on context (probabilistic model) what step inside a specific flow to match. Switching between flows Below is an another example of a conversation combining two flows.   A customer starts a conversation with   I want to order pizza   (order flow) The app replies   Delivery or Carry out? The customer doesn't answer that question but instead asks   What's on the menu?   (menu flow) The app then replies with a menu The customer can continue with   I want my pizza delivered   (order flow) Note: Context applies to every trigger When a user shares an image, shares a location or triggers and event, this also works with context, not just text. The only exception is events, those can be triggered mid-flow. Best practices There are some best practices to follow when designing flows. Single topic Don't combine multiple topics   in one flow. For example,   greetings   and   goodbyes   are separate topics, try not to combine these with flows like the above   order pizza   example. This allows the engine to switch between greetings, pizza ordering and goodbyes without a problem.   Instead, try to make your flows as focussed as possible and keep your app flexible. Create separate flows for each topic. This helps the NLP engine keep track of the position of the conversation.   Open context It's also best practice to start your flows with triggers that are not   within context. In other words,   never start a flow with something like a   yes   or   no   text trigger. Such a trigger should best be in context of any previous question or response.   In stead of creating these specific flows you can use branching for these   contextual   follow ups.   Resetting context Context builds up and exists for at least 24 hours. Sometimes context can lead to unexpected behavior and for that you can clear context by using a   reset action.
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (3)
0
453
Context can be applied within Flows using branches.   Branches are extremely useful when you can expect different input from a user. The following example demonstrates this with a question   Would you like to Takeaway or carry out   that expects 2 different answers.   You can create branches by dragging and dropping triggers on top of each other. It will work with intents, but also for events, timers or unknown triggers. Note: Branches can only exists within flows as follow up steps, and cannot be created for the first step. If you want to achieve that, simply add a another flow with the trigger. Read more Branch out a conversation tutorial How to branch your chatbot in 3 steps
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (4)
0
301
The Flow NLP engine allows your chatbot to understand natural language. The two tasks the NLP can perform is Intent recognition and Entity extraction. Intent recognition can be used to map a user utterance to a predefined bot reply. Entity extraction is used to extract specific data from a user utterance. For these tasks to be successful you'll need to add training data. Intent classification The core of well functioning conversational AI is intent classification. Intent classification is the process of understanding what a user means by the text they type. For example, the user utterance   I want to fly from Amsterdam to San Francisco   can be mapped to the intent of booking a flight. Our Natural Language Processing (NLP) takes care of intent classification but in order to function it needs to be trained with examples that need to be provided by the conversational AI developer. Adding a   Text Trigger   lets you train an intent. When you click the Train button you can add examples for this intent.     Adding more examples enables the classifier to make better predictions. Always make sure you add a least ten examples that are diverse in form, but consistent in meaning. When you have a sufficient amount of examples you can click   Save.   This will save your examples and initiate the training process. Note: Best practice is at least 10 examples When you add fewer than 5 examples, only exact matching will be used. Reusing intents A great way to speed up the development process is reusing intents. This also   improves the quality   of intent classification.   Every intent you create automatically becomes part of you intent library. You can drag and drop any existing intent in other flows to give different answers depending on the context. Tip: Never create duplicate intents Make sure you do not create semantically similar intents: if two intents are very similar, the   probability of misclassification   rises. In that case the best practice is to create a more general intent and then ask follow up questions. Reuse example Start by creating an intent to understand greetings (hi, hello, hi there, hey, etc). After training this intent with examples, reuse it by dragging and dropping it from the library. Now, if a user greets, the system will reply   Hi! How can I help you? . Next, if the user greets again. The system knows that he already has greeted, so it can reply with   Hello again Follow up intents The NLP engine works best if you provide clear examples. In some cases you can also train more generic intents. For example, if a users says   the closest   without any context, it doesn't mean much. But if the user asks it after   I'm searching for a place to park my car , then it becomes relevant. The AI engine makes it possible to create and train these intents in context, and then reuse them in other places. So, if you have a flow on finding parking spaces, training the followup intent 'the closest' makes sense. You can then easily reuse this intent in a flow on finding restaurants or toilets. Confusion When designing your flows it's good to think about the different use cases your bot will serve. One of the biggest challenges is keeping your project from offering too many   identical intents   that   will confuse the NLP. This can be best explained with an example. Example Imagine a company providing support for customers having problems with phones and dish washers. Business wise it might mean each product would result in a different answer. A broken phone might be picked up, while a broken dish washer requires a repair man to make an appointment, Naturally we tend to split these repair questions into different flows, introducing a number of intents for repair questions regarding phones and dishwashers. The training data for the intents might look like: Repair phone intent Hi, I have a broken screen on my new phone, can you fix this? My phone is broken, I want it repaired The phone of my wife hampers and it wont start anymore ... Repair dishwasher intent Hi, I have a broken   door   on my new   dishwasher, can you fix this? My   dishwasher   is broken, I want it repaired The   dishwasher   of my wife hampers and it wont start anymore ...   Can you tell the difference? The problem is this will result in   confusing   the NLP because the example sentences are to similar and would make classification unreliable. Merge intents by subject One way to solve this issue is by combining the two intents into a single repair intent: Repair intent Hi, I have a broken   screen   on my new   phone, can you fix this? My   phone   is broken, I want it repaired The   dishwasher   of my wife hampers and it wont start anymore ...   With a single intent you would mark the products as entity types. Next you can use the extracted product within reply actions and conditions to differentiate the follow up flows. Explanation The NLP engine interprets sentences differently than humans. To us   I have an issue with my mother-in-law   has a totally different meaning than   I might have some problem with the television. To the system both sentences are about someone having a problem with a certain object (no pun intended). Since we cannot prevent this from happening, it's best to   create intents   based on   subjects. Read more Working with entities instead of multiple intents Other best practices Balance the number of examples across intents Try not to create multiple intents with just 10 examples and a number of intents with over 100 example sentences. It's better to keep intents balanced with around an equal amount of training examples. The infamous Hello intent When there is an intent with many short examples (often a 'hello' or greeting intent), short user utterances that are unclear are often misclassified as belonging to this 'hello' intent. Often it can be solved by   turning off NLP   for this intent. Limit the number of entry intents More intents results in a lower degree of classification accuracy, because the probability of choosing the wrong intent increases. Consider keeping the number of intents that can be matched at the entry level of a flow to a bare minimum. If your use case requires hundreds of entry intents, try to   merge as many intents   into the the same topic. Keep your intents clean. On the other hand, make sure you don't merge intents that are not semantically similar. Keep your intents clean and clear!  
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (4)
0
394
A core feature of the NLP engine is the ability to extract data from user input. This can be done in two ways. Contextually using entities and linearly, using slots. Slot filling The easiest way to capture user input is using the   any text    trigger. By default this will capture any user input and store it inside a param. The following example demonstrates a linear flow where we capture a users name.   Typed data Next to capturing any text we provide a way to capture data of a specific type. For example e-mail addresses, dates, phone numbers or a custom list of data. Matching entity types do not require exact input from a user. For example the sentences   my email is   foo@bar.com   or   it's   foo@bar.com , would match and extract   foo@bar.com .   As the above example illustrates, you can also combine capturing user input with other trigger types by simply branching them. Benefits The main benefits of using the   Any text trigger   for slot filling are: Does not require any training data It's more accurate in extracting specific data Contextual With use cases where you do not have a linear flow you are able to extract data contextually from user input by annotating entities. For example, when a user sends   I want to fly from Amsterdam to San Francisco   we want to detect that   Amsterdam   and   San Francisco   are a place of   departure   and   arrival. Entities Within the training view of any intent you can mark entities by annotating them. To train the entity classifier annotate lots of examples. When you annotate lots of cities for example, the classifier will learn to recognize cities.   This means it will also pick up on cities you didn't explicitly marked. Of course you are not limited to cities: you could create a food entity, an animal entity or a movie entity, or something else entirely, you name it! TIP: Mark and name entities consistently Make sure you always mark every example. Do not skip any, as this harms the classification process. Benefits Although they require more work, contextual entity matching has it's own benefits for advanced use cases: Extract data non-linear with any input Extract multiple data contextually, like departure and destinations Validation and formatting We allow the usage of various entity types that allow validation and data transformation. For example the system will convert any entity containing   tomorrow   to a   UTC datetime   format if it's a   date   entity type. System entity types We support the following system entity types Name  Example Text This is the most used entity type. The AI will match anything you train it using your examples. If you'd like to match music artists, train the AI with examples like   Madonna ,   Michael Jackson ,   The Weeknd   etc Date Tomorrow,   next week,   1e of July Time 12am,   23:59,   now, tomorrow at 8am Number 2453.   twenty one Email john@doe.com URL examplecorp.com Distance 200 meters,   12 miles,   1.5cm Money 42€,   $99 Text Anything from names to cities.   Custom entity type At the moment we only support one custom type: List entity type. List entity types work in a similar way as the   Text   entity type. There is one important difference. Lists provide a way to give boundaries to what the AI will match. Let's say we take the above example of a departure and destination city. Perhaps you only want a select number of cities a person can travel to. You can limit these options by creating a custom entity list type named city. Within this entity type you provide only matched city names that are valid to travel to.   When the AI detects an entity of this custom entity type it will determine if it matches. The AI could find an entity that is not valid in relation to the type of entity, For example,   I want to travel to Washington   could be matched in the above example, but since   Washington   is not in our list, it's immediately dropped Tip: Matching is fuzzy No need to add typos as synonyms, matching is case insensitive and works with grammar errors Exact matching By default list entity types will do an exact match. This means, it will only match an extracted value if it is actually present inside the list. When you turn of exact matching, custom entities will actually work the same way as a regular   Text   entity type works. Using extracted data Any extracted data is present within   params . Those params can be used within   Code,   webhooks   and   string templates. The following example shows a try-out window that displays extracted data within the right side bar.   Params always come in the form of an array, even when only one match is found. The following shows an example of an extracted entity within a param named destination. // Example payload inside cloud code with a destination match { params : { destination : [{ match : "NYc" , value : "New York" , id : "NY" }] } } Multiple destinations would look like // Example payload inside cloud code with a 2 destination matches { params : { destination : [{ match : "NYc" , value : "New York" , id : "NY" },{ match : "Amsterdam" , value : "Amsterdam" , id : "AMS" }] } } Filling user profile attributes User profile attributes can be set using params by giving them a system defined name. The following profile data can be filled: user.name user.profile.fullName user.profile.firstName user.profile.lastName user.profile.gender   (M/F/U) user.profile.locale user.profile.timezone   (offset from UTC, -1) user.profile.email user.profile.picture   (url) Read more We've written a number of articles about use cases for extracted data: Capture and validate an address Working with dates Check and verify user input
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (3)
0
367
Creating dynamic flows can be done in multiple ways the easiest one of them is using conditions. With conditions, you can design if / else statements without the need of writing code.   What can conditions be used for? Conditions open up a wide range of possibilities to dynamically branch or redirect flows. Some examples: Show a different response if a handover takes place outside business hours Send a user into an on-boarding flow if a certain piece of data is missing Give a personalised reply whenever a certain tag exists How do Conditions work You can drag and drop conditions below any trigger or reply action. Conditions work fairly similar to branches. Like branches you can add multiple Conditions, re-order or individually remove them. Below any Condition you can add any number of reply actions and follow up triggers.   Matching Conditions are validated in run-time. In other words, each time a Condition is matched, the system will dynamically determine if the Condition is valid or not based on its rules. The order of Conditions is important. If you create multiple branched Conditions for example, A, B, C, the system would first try to match A, next B and finally C. This also means that the first Condition that is valid will be the winner and any other Condition on the same level, even if the rules match, is ignored.   Any Condition can have multiple rules. By default a Condition won’t have any, you’ll need to add them manually. A rule-less Condition is always considered valid. If a Condition has more than 1 rule, you can choose if the Condition should match   all   rules or if meeting   any   rule is sufficient for the Condition to be valid. Rules There are different type of rules you can select. Param Validate params that the NLP engine extracted or were created somewhere along the way. Using this rule you can check if a param exists, contains a certain value or matches a custom entity type. Channel With these type of rules you can match if the conversation is taking place on a certain type or specific channel. Tag Tags can be added and removed throughout the system. With these rules you can validate if a tags exists, has existed or contains a certain value. User Besides tags, you can use this rule to validate certain user profile data like name, language and profile picture. Business hours When you configure business hours you can use this rule to determine if the business is open or closed. AB Testing Choose   AB test   to differentiate a response. Note that AB tests only work in combination with other AB test conditions. The division is random. So when you add 2 AB test conditions, either A or B has a 50% chance to get matched.  
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (4)
0
278
Test your app directly within the Design app using   Try out   in the top menu. You can start having a conversation with your bot and see how it's performing and check if it's collecting the right parameters.   Tip: Reset context while testing Use on reset to clear all parameters and context and clear to start with a clean screen  
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (4)
0
234
Connect, deploy and integrate your Flow project. Built-in integrations Flow can connect directly to different built-in   integrations   like   channels , customer service , analytics    and backend services using   APIs. This allows you to connect a bot to   Messenger   in just a few clicks, place a   web widget   on your website or integrate Flow deeply into your own customer experience software.   Connector When Flow is directly connected to a message channel such as WhatsApp, Flow will provide conversation control. This is important for both measuring a bots performance as it is for hybrid customer service use cases where human agents need to pick up with conversations that are handed over. Agnostic It's also possible to implement Flow behind an agnostic messaging service that controls the conversation.  
View full article
by Khoros Staff Khoros Staff Jun 16, 2021
Labels (4)
0
262
Any project can expect input it has not been designed for. To deal with these situations, Flow allows you to create different fallback and   handover scenarios . Unknown trigger Just like responding to any text input, you can design flows that respond to   unknown   input.       Just like any other trigger and flow setup, you can design what happens next. Handing over to an agent If you want to hand over a conversation to a human agent, you can do this by using the   handover action.   By default, this will automatically pause the bot for a number of minutes. Note: You can configure the pause duration within the project > brains settings screen.
View full article
by Khoros Staff Khoros Staff Aug 29, 2022
Labels (1)
  • Flow Triggers

0
236