SUSI botbuilder enables you to create your own bot which you can integrate in your own website. While creating the skill for the bot, you often need to visualize the dialog flow. The Tree View helps you to visualize the conversation flow. The queries from the user and the related responses from the bot can easily be understood by seeing the tree.
Installing package
We will be using react-orgchart to make the tree. React-orgchart offers minimum basic implementation of the tree and we can easily customise the nodes. To install the package, type the following command in your terminal:
npm i react-orgchart --save
Using the Orgchart
In the TreeView.js file, we import the orgchart and render it. The tree data and node component is passed to the OrgChart component. Tree data stores the format and conversations in the tree and the node component represents the rendering of the individual node. We can customise the node according to our needs.
const MyNodeComponent = ({node}) => { return (
); }; <OrgChart tree={this.props.treeData} NodeComponent={MyNodeComponent} />
Generating the Tree Data
The data for the tree is generated by the code view. As user adds or edit skills in the code view, the skill language is interpreted and converted to a tree data structure. The generateTreeData() function in Build.js file does this job.
//generation of skills from the code view for (let i = 0; i < lines.length; i++) { let bot_response = null; let line = lines[i]; if (line && !line.startsWith('::') && !line.startsWith('!') && !line.startsWith('#')) { let user_query = line; while (true) { i++; if (i >= lines.length) { break; } line = lines[i]; if (line && !line.startsWith('::') && !line.startsWith('!') && !line.startsWith('#')) { bot_response = lines[i]; break; } } let obj = { user_query, bot_response, }; skills.push(obj); } }
Thus, we are separating the skills in the code view and separating the bot and user response. A sample Tree data looks like:
const treeData = { name: 'Welcome!', children: [ { name: 'User query 1', type: 'user', children: [ { name: 'Answer for the user query', type: 'bot', } ] }, { name: 'User query 2', type: 'user', children: [ { name: 'Answer for the user query', type: 'bot', } ] }, { name: 'User query 3', type: 'user', children: [ { name: 'Answer for the user query', type: 'bot', } ] } ] }
Result:
Resources
- React-orgchart: https://www.npmjs.com/package/react-orgchart
- Passing functions to components: https://reactjs.org/docs/faq-functions.html
- Using props in react: https://reactjs.org/docs/render-props.html