{"id":18023,"date":"2018-01-16T09:23:42","date_gmt":"2018-01-16T09:23:42","guid":{"rendered":"http:\/\/developer.kore.ai\/v10-1\/?post_type=docs&#038;p=12557"},"modified":"2023-11-23T13:25:15","modified_gmt":"2023-11-23T13:25:15","slug":"defining-universal-bots","status":"publish","type":"post","link":"https:\/\/developer.kore.ai\/v10-1\/docs\/bots\/advanced-topics\/universal-bot\/defining-universal-bots\/","title":{"rendered":"Defining a Universal Bot"},"content":{"rendered":"<section class=\"l-section wpb_row height_auto\"><div class=\"l-section-h i-cf\"><div class=\"g-cols vc_row type_default valign_top\"><div class=\"vc_col-sm-12 wpb_column vc_column_container\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<p>Kore.ai\u2019s Universal Bots facilitate a scalable, modular approach to bot building by linking several standard individual bots into one.<\/p>\n<ul>\n<li><strong>Modularity<\/strong>: Build separate bots that address domain-specific issues and then integrate them to optimally interoperate.<\/li>\n<li><strong>Scalability<\/strong>: Start building bots that address key use cases and keep adding additional bots to address more use cases.<\/li>\n<\/ul>\n<p>Before starting with <a href=\"\/docs\/bots\/bot-builder-tool\/develop\/bot-types\/universal-bot\/creating-a-universal-bot\/\">creating a Universal Bot<\/a>, let us understand how Universal Bots work and how they differ from Standard Bots.<\/p>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n<div class=\"w-separator size_small with_line width_default thick_1 style_solid color_border align_center\"><div class=\"w-separator-h\"><\/div><\/div>\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<h3><span class=\"ez-toc-section\" id=\"Bot_Behavior\">Bot Behavior<\/span><\/h3>\n<p>Universal bot responses vary with the number of bots and tasks that match the user intent along with their relevance (exact matches or suggestions). The Natural Language Processing (NLP) engine processes the utterances sent to the linked bots, detects the user intents, and ranks them based on relevance. As a developer, you can test and train the bot responses as explained in <a href=\"\/docs\/bots\/bot-builder-tool\/develop\/bot-types\/universal-bot\/creating-a-universal-bot\/#Testing_a_User_Utterance\">Test the Universal Bot<\/a>.<\/p>\n<p>Following the table shows how universal bot responses operate in various possible NLP outcomes:<\/p>\n<table>\n<thead>\n<tr>\n<th width=\"50%\">NLP Outcome<\/th>\n<th>Bot Response<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Only one exact match found from any of the linked bots<\/td>\n<td>Executes the task with the exact match<\/td>\n<\/tr>\n<tr>\n<td>Exact matches found in more than one linked bot<\/td>\n<td>Tries to match the invocation names from the user utterance with the bot results, else prompts the user to select one.<\/td>\n<\/tr>\n<tr>\n<td>Exact matches found with two or more tasks of a single linked bot<\/td>\n<td>Disambiguates using the current bot context, else prompts the user to select one.<\/td>\n<\/tr>\n<tr>\n<td>Suggestions found in more than one linked bot<\/td>\n<td>Evaluates the individual scores and executes the winning intent based on the P&amp;R settings.<\/td>\n<\/tr>\n<tr>\n<td>Suggestions found with two or more tasks of a single linked bot<\/td>\n<td>Executes the winning intent based on the P&amp;R settings.<\/td>\n<\/tr>\n<tr>\n<td>Only one suggestion found<\/td>\n<td>Shows the suggestion to the user asking if they would like to select it<\/td>\n<\/tr>\n<tr>\n<td>No exact match or suggestion found<\/td>\n<td>Checks for intent in the Universal Bot &#8211; small talk or fallback bot<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n<div class=\"w-separator size_small with_line width_default thick_1 style_solid color_border align_center\"><div class=\"w-separator-h\"><\/div><\/div>\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<h3><span class=\"ez-toc-section\" id=\"Standard_Bots_vs_Universal_Bots\">Standard Bots vs. Universal Bots<\/span><\/h3>\n<p>Universal Bots connect multiple Standard Bots into a single bot. They support most Standard Bot features with a few exceptions.<\/p>\n<h4>Enabled Features and Configurations<\/h4>\n<p>This section assumes that you understand the fundamentals of <a href=\"\/docs\/bots\/bot-builder-tool\/bot-creation\/defining-a-standard-bot\/\" target=\"_blank\" rel=\"noopener noreferrer\">standard bots<\/a>. Details relevant to the Universal Bots alone are listed here. We recommend you to refer to the relevant standard bot documentation for help with the basics.<br \/>\nThe <strong>Feature<\/strong> column entries in the following table provide URLs to the standard bot documentation.<br \/>\nThe <em>Learn more<\/em> links in the <strong>Description<\/strong> column refer to the universal bot documentation.<\/p>\n<table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"2\">\n<h5><b>Natural Language<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/test-your-bot\/testing-your-bot-with-nlp\/\">Testing<\/a><\/td>\n<td>Since the universal bot links together standard bots, the Natural Language Processing (NLP) settings are optimized to accurately recognize the relevant bot and intent. You can test and train the universal bot like a standard bot with small differences. When you train the task it happens at the linked bot level. <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/creating-a-universal-bot\/#Step_4_Test_the_Universal_Bot\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/test-your-bot\/testing-your-bot-with-nlp\/\">Training<\/a><\/p>\n<p>(UB 2.0)<\/td>\n<td>Post ver7.3 of the platform, the Universal Bot 2.0 can be trained, the approach is slightly different from the standard bots. <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/training-a-universal-bot\/\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-intelligence\/default-dialog\/#Standard_Responses\">Standard Responses<\/a><\/td>\n<td>The universal bot will hold a limited set of standard responses that are relevant to bot level functions like greetings. Go to <strong>Natural<\/strong> <b>Language -&gt; Default Conversation<\/b>, to access the <b>Standard Responses<\/b> section to edit the relevant standard responses.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/test-your-bot\/batch-testing\/batch-testing\/\">Batch Testing<\/a><\/td>\n<td>Universal bots only support testing <em>Custom-defined utterances<\/em> and not <em>Developer-defined utterances<\/em> and <em>Succesful user utterances<\/em>.<br \/>\nThe <em>Custom-defined utterances<\/em> test suites remain similar to the standard bots&#8217; except that the JSON Dataset file that you upload should contain a bot name along with the intent and input for every test case. Also, the downloaded batch test report shows the results with corresponding bot names.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/train-nlp-optimization\/custom-behavior\/default-dialog\/#Default_Dialog\">Default Dialog<\/a><\/td>\n<td>Universal bots come with a default dialog task that gets triggered for unidentified intents. You can customize this task or import a new one. <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/customizing-the-universal-bots-default-dialog-task\/#Default_Dialog_Task\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/event-based-bot-actions\/\">Event-Based Bot Actions<\/a><\/td>\n<td>With ver8.0, you can choose different tasks from the linked bots for various events. <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/customizing-the-universal-bots-default-dialog-task\/#Event_Handlers\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td>Help<\/td>\n<td>When a user types\u00a0<strong>Help<\/strong> during a chat, a standard bot responds with the list of tasks that it can perform, allowing the user to select a task name to execute.<\/p>\n<p>When it comes to Universal bots, if a user types <strong>Help<\/strong>, the bot responds with the names of linked bots. The user cannot select or execute a task from the list.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<h5><b>Channel Configuration<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/channel-enablement\/adding-channels-to-your-bot\/\">All<\/a><\/td>\n<td>Universal bots do not obtain the channel configurations of the linked bots and need an independent channel configuration. You can set up new channels for the universal bot independent of the linked bot channels. The published tasks in the linked bots execute from the universal bot channels. <a href=\"\/docs\/bots\/bot-builder-tool\/develop\/bot-types\/universal-bot\/creating-a-universal-bot\/##Step_3_Configure_the_Channels\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<h5><b>Settings<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/bot-settings\/general-settings\/\">General Settings<\/a><\/td>\n<td>Universal and standard bots share the same general settings.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/multi-lingual\/building-multi-language-bots\/\">Language Management<\/a><\/td>\n<td>Universal bots do not obtain the enabled languages of the linked bots. You must enable default and additional languages explicitly for the universal bot. But when user utterances are made in an enabled language, the universal bot routes it to only those linked bot tasks that support the language. For example, if German is enabled for the universal bot and a user utters in German, the NLP engine looks for all the linked bot tasks that support German and sends the utterance to those tasks. <a href=\"\/docs\/bots\/bot-builder-tool\/develop\/bot-types\/universal-bot\/enabling-additional-languages-for-the-universal-bot\/\">Learn more<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/collaborative-development\/sharing-bots-for-development\/\">Developer Collaboration<\/a><\/td>\n<td>Works similar to standard bots. Once you share a Universal Bot with other developers, they can link and unlink bots.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/bot-management\/viewing-the-bot-change-log\/\">Change Logs<\/a><\/td>\n<td>Universal bot change logs record all the changes applicable to the standard bots, plus the following:<\/p>\n<ol>\n<li>Linking of a bot<\/li>\n<li>Un-linking of the bot<\/li>\n<li>Change to default dialog<\/li>\n<li>Publishing of default dialog<\/li>\n<\/ol>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-settings\/bot-management\/bot-management-2\/\">Import &amp; Export bot<\/a><\/p>\n<p>(supported from ver7.1)<\/td>\n<td>Like standard bots, you can export and import the published and unpublished universal bots. Since universal bots deal with linked bots the following need to be taken care of:<\/p>\n<ul>\n<li><span style=\"text-decoration: underline;\">Export of a universal bot<\/span> &#8211; only the reference to the linked bot (reference id) will be included not the entire linked bot definition;<\/li>\n<li><span style=\"text-decoration: underline;\">Import of the universal bot<\/span> &#8211; in the environment where the bot is being imported to, the platform checks for the bots with reference id matching the linked bot. If found they are automatically linked to the imported universal bot. Also you should have permissions for the linke bot, else it will not be linked. Ensure that you import the linked bots before importing the universal bot.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-settings\/bot-management\/bot-management-2\/#Deleting_a_Bot\">Delete bot<\/a><\/td>\n<td>Like standard bots, you can delete the unpublished universal bots.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-admin\/bots-management\/using-bot-variables\/\">Variable Management<\/a><\/p>\n<p>(UB 2.0)<\/td>\n<td>Like standard bots, you can define global and content variables in universal bots. In addition, you can choose whether or not the variables can be propagated to the linked bots.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<h5><b>API Extensions<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/advanced-topics\/sdks\/using-the-botkit-sdk\/\">SDK toolkit<\/a><\/td>\n<td>Enabled with the following events &#8211; on message,\u00a0on hook,\u00a0on event,\u00a0on alert<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/develop\/dialog-task\/working-with-the-agent-transfer-node\/\">Agent Transfer<\/a><\/td>\n<td>Agent Transfer can be configured for a Universal Bot. The Agent Node needs to be added in default dialog and addition of any subsequent nodes after the agent node is not allowed.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/bot-builder-tool\/develop\/dialog-task\/working-with-the-web-hook-node\/\">WebHook Node<\/a><\/td>\n<td>Multiple webhook nodes can be placed in the default dialog. When a webhook node is reached during the conversation, the platform invokes the BotKit similar to that of a Standard Bot.<\/td>\n<\/tr>\n<tr>\n<td>SDK as Channel<\/td>\n<td>Enabled<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<h5><b>Analyze<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td>Chat History<\/td>\n<td>All the Universal Bot chats get recorded. Any initiated training will affect the individual linked bot.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<h5><b>Publish<\/b><\/h5>\n<\/td>\n<\/tr>\n<tr>\n<td><a href=\"\/docs\/bots\/publish\/publishing-bot\/#Publishing_Tasks\">All<\/a><\/td>\n<td>You can select one or more linked bots and publish the Universal Bot. <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/creating-a-universal-bot\/#Step_6_Publishing\">Learn more about the publish flow<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n<div class=\"w-separator size_medium with_line width_default thick_1 style_solid color_border align_center\"><div class=\"w-separator-h\"><\/div><\/div>\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<h3><span class=\"ez-toc-section\" id=\"Event_Management\">Event Management<\/span><\/h3>\n<p>Let us see the behavior of Universal Bots for the following BotKit events in Linked Bots:<\/p>\n<ul>\n<li>End of Conversation (<a href=\"#eoc\">see below<\/a>)<\/li>\n<li>On Message<\/li>\n<li>Agent<\/li>\n<li>Webhook<\/li>\n<li>Event<\/li>\n<li>Alert Events<\/li>\n<\/ul>\n<p>When a child bot is in context i.e., a task from a child bot is in progress, then the events related to the child bots will be triggered based on the configurations set up by the developer:<\/p>\n<ul>\n<li>If an event is enabled in child bot, then the event will be forwarded to child bot BotKit<\/li>\n<li>If an event is not enabled in child bot and\n<ul>\n<li>if that event is enabled in Universal bot, then the event will be sent to Universal bot BotKit<\/li>\n<li>if that event is not enabled in Universal bot as well, then the event will not be forwarded to any BotKit.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Following table summarises the above scenarios and behavior:<\/p>\n<table>\n<thead>\n<tr>\n<th>Event Name<\/th>\n<th>Child Bot Status<\/th>\n<th>Universal Bot Status<\/th>\n<th>Expected Behavior<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>On Message<\/td>\n<td>Enabled<\/td>\n<td>\u2013<\/td>\n<td>Event sent to child bot BotKit<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Disabled<\/td>\n<td>Enabled<\/td>\n<td>Event sent to Universal BotKit<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Disabled<\/td>\n<td>Disabled<\/td>\n<td>Invalid scenario. The event does not trigger in this case<\/td>\n<\/tr>\n<tr>\n<td>All other events<\/td>\n<td>Enabled<\/td>\n<td>\u2013<\/td>\n<td>Event sent to child bot BotKit<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Disabled<\/td>\n<td>Enabled<\/td>\n<td>Event sent to Universal BotKit<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Disabled<\/td>\n<td>Disabled<\/td>\n<td>Same as the current behavior. E.g. dialog reaches Webhook node but &#8216;on Hook&#8217; event is not enabled<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<h4 id=\"eoc\">End of Conversation<\/h4>\n<p>The following table depicts the bot behavior for the end of the conversation event:<\/p>\n<table>\n<thead>\n<tr>\n<th>Conversation ends<\/th>\n<th>End of Conversation Event in Universal Bot<\/th>\n<th>End of Conversation Event in Linked Bot<\/th>\n<th>Behavior<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Universal Bot<\/td>\n<td>Enabled<\/td>\n<td>Enabled or Disabled<\/td>\n<td>Trigger event in Universal Bot<\/td>\n<\/tr>\n<tr>\n<td>Universal Bot<\/td>\n<td>Disabled<\/td>\n<td>Enabled or Disabled<\/td>\n<td>No event triggered<\/td>\n<\/tr>\n<tr>\n<td>Linked Bot<\/td>\n<td>Enabled or Disabled<\/td>\n<td>Enabled<\/td>\n<td>Tigger event in Linked Bot<\/td>\n<\/tr>\n<tr>\n<td>Linked Bot<\/td>\n<td>Enabled<\/td>\n<td>Disabled<\/td>\n<td>Tigger event in Universal Bot<\/td>\n<\/tr>\n<tr>\n<td>Linked Bot<\/td>\n<td>Disabled<\/td>\n<td>Disabled<\/td>\n<td>Event not triggered<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n<div class=\"w-separator size_small with_line width_default thick_1 style_solid color_border align_center\"><div class=\"w-separator-h\"><\/div><\/div>\r\n\t<div class=\"wpb_text_column \">\r\n\t\t<div class=\"wpb_wrapper\">\r\n\t\t\t<h2><span class=\"ez-toc-section\" id=\"Next_Steps\">Next Steps<\/span><\/h2>\n<ul>\n<li>You can start creating your Universal Bots by <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/creating-a-universal-bot\/\" target=\"_blank\" rel=\"noopener noreferrer\">referring here<\/a>.<\/li>\n<li>You can learn about training the Universal Bots from <a href=\"\/docs\/bots\/advanced-topics\/universal-bot\/training-a-universal-bot\/#Invocation_Names\">here<\/a>.<\/li>\n<\/ul>\n\r\n\t\t<\/div>\r\n\t<\/div>\r\n<div class=\"w-separator size_small with_line width_default thick_1 style_solid color_border align_center\"><div class=\"w-separator-h\"><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/section>\n","protected":false},"excerpt":{"rendered":"Kore.ai\u2019s Universal Bots facilitate a scalable, modular approach to bot building by linking several standard individual bots into one. Modularity: Build separate bots that address domain-specific issues and then integrate them to optimally interoperate. Scalability: Start building bots that address key use cases and keep adding additional bots to address more use cases. Before starting...","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57],"tags":[],"class_list":["post-18023","post","type-post","status-publish","format-standard","hentry","category-universal-bot"],"_links":{"self":[{"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/posts\/18023","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/comments?post=18023"}],"version-history":[{"count":13,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/posts\/18023\/revisions"}],"predecessor-version":[{"id":60345,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/posts\/18023\/revisions\/60345"}],"wp:attachment":[{"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/media?parent=18023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/categories?post=18023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developer.kore.ai\/v10-1\/wp-json\/wp\/v2\/tags?post=18023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}