If you take a look at the flowcharts, you will notice that there are four kinds of visual elements:
- Rectangle, which represents the user's message and the bot's reply within an intent
- Diamonds represent contexts
- Red relationship arrows represent the setting of an output context based on a user's message. They flow from the rectangle to the diamond
- The "labels" just below the rectangles represent the intent names
The rectangles colored green represent the end of the conversation (to be discussed in detail in a future post).
As the flowchart becomes more complex, and as you try to add more detail into the flowchart, you will have more visual elements. For now, I will discuss these four elements we have seen.
The rectangles are representations of the user says message, followed by the bot's reply immediately after that. This corresponds to a request-response pair and both the user's message as well as the bot's reply is always seen inside a single intent definition in the API.AI console.
The label which is attached to the bottom of each rectangle is used to represent the intent's name in API.AI. This allows us to get a bird's eye view of the entire list of intent names, in the context of the conversation flowchart.
The diamonds are used to represent both input and output contexts. Displaying multiple contexts inside a single diamond (as I have done in the flowchart you see) is one possibility. You can also break it out so that each context gets its own diamond.
The children of a context (when you read the chart from top to bottom) are all intents whose "input context" is the string value you see in the diamond.
The red arrows represent a mapping from a given input to its output context. While an output context can and often is just a child of the intent's rectangle (e.g. see the diamond under the "yes-compose" intent), in the case of a "merge" - that is there are multiple intents which both set the same output context, you need to use the extra red arrows to represent this.
In the florist chatbot, both the "compose" intent and the "greetings-reply" intent set the same output contexts ("compose" and "bouquet"). So one of them has the diamond as the child, while we draw a red arrow from the other.