# A Single Software, various applications

#### About Dydu Documentation

The Dydu documentation is a comprehensive resource for all Dydu users, from beginners to advanced developers. It offers detailed guides, best practices, and references to help you understand and maximize the use of the Dydu conversational bot platform. Whether you're looking to create your first chatbot, enhance the intelligence of your bot, or integrate the bot into your ecosystem, the documentation contains the necessary information. It is regularly updated to ensure you have access to the latest features and capabilities of the Dydu software suite.

<figure><img src="/files/4Ew5jJ3bRc8Iwde2qseL" alt=""><figcaption></figcaption></figure>

***

[Knowledge:](/contents/knowledge) Learn how to efficiently configure your bot with specific knowledge, and create interactive and engaging scenarios to engage your users.

[Learning:](/learning) Discover the tools that allow your bot to learn and improve through feedback and analysis of user interactions.

[Contents:](/contents) Explore the Content menu to set up and enrich your knowledge base, thereby increasing your bot's skills and responses.

[Integration:](/integration) Follow our guides to integrate and customize your bot into your digital ecosystem for a seamless and consistent user experience.

[Statistics:](/analytics) Use statistical reports to monitor and analyze your bot's performance, in order to optimize its accuracy and efficiency.

***

**About Dydu**

Dydu (Do You Dream Up) provides an innovative software solution that enables businesses to create and manage conversational robots, also known as chatbots. The software is designed to be versatile, offering a wide range of applications including customer service, support automation, and internal knowledge sharing. Dydu focuses on ease of use, allowing non-technical users to design conversations and deploy bots with minimal training. Its features include intuitive knowledge configuration, learning tools, content management, and integration options. Additionally, with Dydu, users have access to detailed analytics to track the performance and effectiveness of their bots, thus continuously improving the user experience.

<figure><img src="/files/KsqQd5DsXLxfy3K8V9kd" alt=""><figcaption></figcaption></figure>

For more information, visit: <https://www.dydu.ai/>


# First use guide

This First-Time User Guide is designed to help new users navigate the initial setup process with ease. You'll learn how to create your first project, customize your settings, and understand the basic features at your disposal. Follow the step-by-step instructions to be up and running in no time. Remember, our support team is always ready to help if you have any questions.


# Getting started

When you first connect to the platform, you will find yourself on the getting started page.

<figure><img src="/files/CVx9ozhSoqcfi1f9Imbk" alt=""><figcaption></figcaption></figure>

The menu is at the left of your page. By default, the menu is persistent but you can deactivate this option via the **Keep menu open** option at the bottom of the menu. If the persistence is deactivated, click on ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAtCAYAAAAHiIP8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAv0lEQVRoge3YIQ7CQBSE4bbhECTUQwikEoeoJ2hMD1eD5gIIHLIBAR6S3qJY9JtJOizz+Zd9/zZrmpfL3ZD9uGLsBRgcocIRKhyhwhEqHKHCESqSiJhEB1fVnLbEvXtC8+GIdbWADv42WsSte0AHM4Uj0Ntj+u+HfWj2tCWO7QmaT+JL5P7bISL8Jrb1hrbE5XyF5sMRs3IKHcwUjkBvjykc8X71zD0gSTxsR6hwhApHqHCECkeocIQKR6hwhIoPPfgZ1Pzr+HwAAAAASUVORK5CYII=) to display the main menu which will allow you to access the main features of the platform.

<figure><img src="/files/9JExOtdNlYR9TNbtNkgx" alt=""><figcaption></figcaption></figure>

Feel free to browse these different menus, including the **Dashboard** which gives you an overall overview of the status of your bot through useful information about your knowledge, your bot analytics and the important actions to be carried out.

Depending on your rights on the platform and modules deployed on the configuration of your bot, the menus that are accessible to you can be significantly different.

Please note that you can also click on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAnCAYAAABJ0cukAAAACXBIWXMAABYlAAAWJQFJUiTwAAABN0lEQVRYhe2XTWvCQBCGX4vJtaAhSSGeCv0Qiz8gp7ZgT/7gHjz6A0pPPYjgyQRNTGk9bArtoQgejEvtDMPCPMcM7Oyzu+y7aSX98Tcc5kx6Av9FBaRRAWlUQBoVkMZ5gTbHoGEcIIy6jfU8WyNfrkh6sQjcDa8RRkFjPc9WmBAJsByhbLk+Wi+Ld7JeLAJ5dnx1qY4PwCVgmaBN8C+w3UJNkyzLCsbUZH3YBIz5Ovj982ML3/fI+pAL+L6Hh1GKpBcfrCe9C9yPUjIJcoGr20tEcfMVCgCdzjkGwxuSfuQ5MJ8tUJsanmWF57MFSb+W6z/1LEm8z+NTijAKftP3eUo+PvtjbpfKtnQ+FedfoypgY5fIlM+HfXQHbGyKCq8vb9gUFcv4zueAHiFpVEAaFZBGBaRxXuAHKcZVCJemjHgAAAAASUVORK5CYII=) icons to pin the pages for which you want to get a shortcut without even having to click on the main menu.

<figure><img src="/files/vN6lu0Nf45pyxdCqWuDg" alt="" width="27"><figcaption></figcaption></figure>

To configure your account, click at the top right of your account name and click **Account**.

<figure><img src="/files/ovqJ5rwYlxg1EVcaxUSx" alt=""><figcaption></figcaption></figure>

You will be able to modify various parameters and modify the default language of your platform.

Important: this is not the language of your bot but only the platform. You can, for example, enrich the knowledge of a bot in English by working from the platform in French.

It is also here that you will be able to manage your email subscription (activity notifications, alerts, etc.).

<figure><img src="/files/lx70WdmwdHRjT1y3JrWC" alt=""><figcaption></figcaption></figure>


# Create your bot

Creating a new bot implies defining new settings such as bot parameters, modules, users, users' rights, etc.

To create a new bot, please follow these steps:

1. Click on the icon at the top right of the page, next to your name.
2. Click on **Create another bot**.
3. A new window opens. Click on the **+ card**.

### For the French version[​](https://docs.dydu.ai/docs/Key_concepts/create_your_bot#for-the-french-version) <a href="#for-the-french-version" id="for-the-french-version"></a>

If your account is in French, by default the bot will be in French too. We offer two templates:

<figure><img src="/files/jNAZwoJmflXV362SVPn8" alt=""><figcaption></figcaption></figure>

* when you create a bot from scratch, you are invited to choose a name for it and then click on **Create the bot**.
* when you create a bot from a template you are asked to:
  * select the category of end users
  * select a template
  * alternatively, you can send us a message to request a template

### For the other languages[​](https://docs.dydu.ai/docs/Key_concepts/create_your_bot#for-the-other-languages) <a href="#for-the-other-languages" id="for-the-other-languages"></a>

We do not yet offer a choice of templates in other languages. You are invited to choose a name for your bot and click on **Create the bot**.

<figure><img src="/files/BfDAOfBh4zB56Wram5Wu" alt=""><figcaption></figcaption></figure>

Your bot is created. You can change bots whenever you want by simply clicking on your bot's name at the top right of the window.

You can then start setting up your bot, [manage your users](https://docs.dydu.ai/docs/Settings/users_and_rights), create your [matching groups](https://docs.dydu.ai/docs/Complementary_items/matching_groups) and your first [knowledge](https://docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge).


# Create your first knowledge

### Definition

We call knowledge the couple question + answer.

The question corresponds to the end user's intention that the chatbot should understand. The answer corresponds to the content that you are going to configure and that will be rendered by the chatbot to the end user.

The knowledge base includes all of your knowledge! It's the brain of your chatbot! You can organize your knowledge by tag.

Knowledge can be simple: a question - an answer, or take the form of a decision tree. The decision tree will allow the chatbot to articulate the sub-questions necessary for its final answer.

### Create a knowledge item

Much of your time will be spent creating your knowledge. This page then allows you to acquire the essentials for creating a knowledge.

Note: You can also create a knowledge using the interactive guide that can be initiated from the support bot through the Knowledge Creation knowledge.

Please follow the steps below to create your first knowledge.

1. Click on the main menu at the top of your page:

<figure><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAtCAYAAAAHiIP8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAv0lEQVRoge3YIQ7CQBSE4bbhECTUQwikEoeoJ2hMD1eD5gIIHLIBAR6S3qJY9JtJOizz+Zd9/zZrmpfL3ZD9uGLsBRgcocIRKhyhwhEqHKHCESqSiJhEB1fVnLbEvXtC8+GIdbWADv42WsSte0AHM4Uj0Ntj+u+HfWj2tCWO7QmaT+JL5P7bISL8Jrb1hrbE5XyF5sMRs3IKHcwUjkBvjykc8X71zD0gSTxsR6hwhApHqHCECkeocIQKR6hwhIoPPfgZ1Pzr+HwAAAAASUVORK5CYII=" alt=""><figcaption></figcaption></figure>

(the menu is already open if you have kept the persistence option enabled by default).

2. Go to **Content > Knowledge**.

<figure><img src="/files/OXEKxnVMUjOXDi6nS4OS" alt="" width="261"><figcaption></figcaption></figure>

From this page, you will build the knowledge base of your bot.

3. Click the **New knowledge** button.
4. Select the type of knowledge you want to create. To create a basic knowledge, please click **Answer to a question**.
5. Write the user sentence (most often questions): user sentences correspond to the questions that the user will ask to your bot.
6. Click **Create**. Several matching groups might be suggested. If you want more information about matching groups, please visit this page. If you do not want to use them, select your original sentence and then click **Create**. The answer window will appear.

<figure><img src="/files/1gtMqEukQU7LGurC4sVm" alt="" width="563"><figcaption></figcaption></figure>

7. Enter the bot answer. A toolbar is at your disposal (adding links, pictures, emojis, etc.).
8. Select the status of your knowledge. All information on knowledge statuses are available here. Select the status **Published** and click **Update**. Your knowledge is created.

{% embed url="<https://youtu.be/lsO99bXVn7o>" %}

### Test your bot

After creating a knowledge, you can now test it.

Note: you must be located on the **Knowledge** page.

1. Click the **Test my bot** button above your knowledge list. A dialog box will open.

<figure><img src="/files/1XxLTrpbyaEVTqlCOOQD" alt=""><figcaption></figcaption></figure>

2. Test your newly created knowledge. The dialog box will display the answer you created.

<figure><img src="/files/m63y8VnyG2jdmqZgVD52" alt=""><figcaption></figcaption></figure>

Different tools and options are available from the test dialog box.


# Create and publish your chatbot

There are many ways to contact a bot. The dydu BMS offers the possibility to customize and deploy its bot on several platforms/channels allowing it to be present where its users are.

As part of an omnichannel strategy, the bot can also hand over to a human for more complex requests requiring special attention. It then becomes an augmented assistant for the teams.

This section describes the different possibilities of deployment and customization of the bot interface to make it accessible to end users.

### Dydubox

To make its customers even more autonomous in the deployment of their chatbot on their intranet or website, dydu provides access, through the BMS, to the dyduBox: an interface for configuring, customizing and integrating the front-end of its chatbot (called also chatbox) on its website. To have more details on how to deploy your chatbot through dydubox, follow this [link](/integration/channels/chatbox)

### Teams

The dydu bots can also be made available on Teams as an application. Thus, the dydu BMS offers the possibility to configure its Teams bot application directly from the BMS through the Channels menu. Follow this link to know how to create [Teams configuration.](/integration/channels/connector/teams)


# Frequent use cases

This page introduces you to different basic and frequent use cases of the dydu platform. Feel free to reproduce them to familiarize yourself with the platform.

### Create a matching group

The matching groups represent groups of words and terms having a similar meaning or intent.

<figure><img src="/files/YlZRL3jGHRWPVZCHp9w8" alt=""><figcaption></figcaption></figure>

Note: creating matching groups is the first major step to complete before any knowledge creation.

To create a matching group, please follow the following steps (in this example, we will be creating the 'computer' matching group):

1. Go to the **Content > Matching groups** page.
2. Click **Add** to create a group. Before creating a group, you can create categories in which your groups will be filed.
3. Click **Add matching group**. A new window appears.
4. Enter the name of your matching group.

<figure><img src="/files/DXH18odPfqUxOhBvglre" alt=""><figcaption></figcaption></figure>

5. Click **Add**. Your matching group is created.
6. Then, select your newly created matching group to add formulations.
7. At the bottom of the page, add all rewords one by one from the **Formulation**.

<figure><img src="/files/pIVHpdwWAdtPq0JzbXgE" alt=""><figcaption></figcaption></figure>

8. Click **Add**. Your matching group now contains formulations and will can be used when creating a knowledge.

For more information, please visit matching groups.

### Create a decision tree

A dialog with a bot can involve more or less complex conversational flows. To meet this need, you have the ability to create decision trees to manage multiple scenarios within one and the same knowledge. Please follow these steps:

1. Create a simple knowledge [(see procedure on this page).](/contents/knowledge) Our knowledge for the example will be "I have a payment problem" with the answer "Do you have an account on our website?"

<figure><img src="/files/egn5nOE06eS0lsZceEJB" alt=""><figcaption></figcaption></figure>

Note: matching groups can be suggested at any time. Select the suggested suggestions if you want to use them or just ignore them.

In this case, the user is asked to answer yes or no.

2. In order to manage the two possible scenarios, it becomes necessary to create a decision tree. To do this, click on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAIAAAAnX375AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA5BJREFUWIW9l71uIzcQx/kxJHclu7ABv0KKAGlSpEseIm+QLi9wT5EXuC5vcA9xl+oCpAlwAVIb9hkRrD15bXk5HDLFyFxqvZA2lpypVlru/DjkcPgfmVISL7X3f/6dn3/45quJX8F0QJ5cfoiR8tsYoxBCSimlPBQ5IJU/GZN/SilTSjxgB3sXsvSeedmEEDGEzVApiUgWxmNGwXJ0L8s/Y4wlRinFjpRSeRKPiCAlB62UymPYA4/chRwsXZ6vMWbHkrCFEBCRJ8T2nDpEDngxxomw0rquIyIAGKVuIZ/zlFIA/yGrsyGi9x4AtNYDau9uwCMirfXLeEIIXpiu60oYb9DQ41F4mZpS4q1lKiNVJoniDEgpD+SxWWtTSkRUHrOt9OUQQwjW2sN5bPP5HBGJiI/QBlmGGGPUWk/x9eHjp99+/2vvME74EEJfmPpSEiOHWNf1FOTFtz8JIf7549e9I1NKq9XKOae11lr3e8kh7i3KLzCuDHlH1aCQDorTsUxrzYVMCDGM8pWQABACMbVPH354JaSUki/XlJJkMh9/RDw5ORn95sPHTz/+/Mte1+/evvn+u69HXy0Wi7qujTF9TDl1X8nyXvZR8r0zn88nru30QyKEQMTlcjmbzay1Q+9ENPrNgVZKlv8J6b0fQbJ0QMTXQK7Xa1YnPTLLJMRw9CSKMXZdxzVoc1+yIMvg9Xo9m832Onr39s1EZNN80VorpTeIfKcQERF57xHx/Pz8WMU2xnh5eemc43QFAJVdZ6kopWqaL0fhCSGur6+llKyARvZSKaW1BtAh4P39/eG8xWLhvTfGGGO01htKfp2pSikA07btgdS2bW9vbwEg67xe4XH6lIGmlGKE1WoVYzw9PX0Bb7lsPn++5v3jLcz6fUtTlUhWSnd3dw8PDxcXF9NvmJTSzc3Ncrms69paa63jVWUPMh8PUSggvlWIKITgvffehxDm8/nZ2dlucEqpbdurq6uUUlVVzjnnKuesMSavqlJqqBxzf1P+I6Vs27ZpGmttVVV1XQNAVVVCCESMMT4+Pq7X66ZpiMgYU1WVtda5ylpTtgm8sHsaBI4VMSB6vmoQMYTAb7PofUo6AABjjHPOGMu8XQ2C2C5DfdcipVIKQCOi1poVYnyyrMTZtTEGADhfJrVBo7FyKKx9iSgEIgqlAN8+01tHYlKzN6CK7Za2VC1Pc0pKbeq1KiwfieeN9L8FuAd0vu42zgAAAABJRU5ErkJggg==) icon below your answer window.&#x20;
3. Select **Add an intention**.
4. Enter "Yes" and click **Create**.
5. Write the answer, select **Published**, click on **Update**. Your first sub-branch is created.
6. Repeat the previous step to create a second sub-branch with the "No" knowledge. Your decision tree is created.<br>

<figure><img src="/files/7UpENXPnG516CpgNkSQ0" alt=""><figcaption></figcaption></figure>

Note: It would have been possible here to insert two clickable redirections "Yes" and "No". However, using direct links to an internal redirect is especially useful when your bot offers multiple and specific choices.

{% embed url="<https://youtu.be/hT5i7RtP8W8>" %}

5. A user can respond with an unexpected answer that the bot did not consider. In this case, it would be an answer that does not correspond to "Yes" or "No". To do this, you must use the  icon ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAA2CAYAAAB++T94AAAACXBIWXMAABYlAAAWJQFJUiTwAAAECUlEQVRoge2aPY/cRBjHf/PiPe/dXoIOUA6dEAkKDQgFKSUVRAEampR8Bago+AD5AjR0qdKkylVICAqogkQJzRUEKYfQiZxQ4NgXr9cez1Bsxvic3AvJjn0X/Jes3fXL7MzP/5nn8XiEc87RgmZZzr3f/+DBaALAC2cHXHjpRXpat1GdUrLVfz+B6oDU1AGpqQNSUwekpg5ITR2QmloN+s45fBpU/d6mGgfiG22tfQSGcw5rLUIIgPKzSYmmMtVq43NT8Nc4ZThJKQqHY9745aWIlThi0O/Ri1QrYBoBUnXFNDOAYClSRFrtO88UltFkxmiasRJrnhvESDkf5pqCEhxI6QxA/odG/T1JyXLD2mofIUS5hVZQINWin6QxzsFwMmXQ7zUGpbEx5GmUznIiLZFSdkC8jCmQMrxLgiRmIRjrhwNw6HwlCJBQd9BHnJA6Uam7nd4n296k+PPHQ88L6ZB25+tqmv18E7PzHQCDq5uIaPDIOVLKMssN4cRWgWTbt3FmPqeqVi8iohUAhF5+LIwm1FqUybZvM9u6sW9ftHGF6OX3EP11ZH/9wGt9lUM4pJUxxOx+z2zrBnrjXQZXN5FnzgOQ73xL9ts3h8LwCnUfW+kysn+O6PyHxK9/QvLDp9jhdnnMTXePvF4IUYbfRbuk1cQs3fqCfPtLANTaGwDY0T3U2pv0L18/9Fo/TbBoIK0Oqh4GQP/ydfKdrzEt1gdadsjoq/eRq69gR78SbVwhvvTZsa6rdpdT7xA7/KUMtQB6/W3kq9dIf/oc4FhQnpnEzOVjJnc+3rdPLp8j2vgAm+yS3b1F78I15JmLh5cTKCmDhoGIaMDKOzdx0/vz33pQNl4/f4ns7i2cGR9ZjrUWpdTpyFSPunuyvw7HyDMOkjHm//H4r9beovfaR8jVg7uLc46iKIBwT9QLjzI+AoR4VE/TFCEEWutgs2fBUndr7ULLS9MUa23wacSFA/G5gbW2tPfTajyZkmUZUv47rxpsEipIqcznLYqiYDabPXHe4Bw82BuRZyla62CRpaogYddXWimFMYYkSVBKEcfxscvYG6dMxglx5NC9Hkqp4O6AwHmIEKK0eZZlJEmCE5qlOCbuabTab1BTWIbJjL1hgsIwiDVRFDXmDmjgRZUPlcYY8jwnz3Oy3JAVgtwKCgeFBSUFWoISBT0FS9EcRh3IqewyXr7yUkr0w+WW3jVRUWCt3ReN5m5SKKXQWpdbE13FK3jq7gFU4SilKA4EMj/ux4ymnFHWt8nlENU1IH6rv//1UKqueOaWQ3g9boGM/11dC1KF0PSimWafdiuN898PWiHQxuohOEUvu5vSiXqVeRLUAampA1JTB6SmDkhNHZCaOiA1dUBq6oDU9A+b4OprYJ+0hgAAAABJRU5ErkJggg==) that will allow you to answer to any user sentences that do not match the defined branches of the decision tree.

<figure><img src="/files/tSPy99WoKJdgaTDOuVW6" alt=""><figcaption></figcaption></figure>

6. Test your knowledge and multiple scenarios through the test bot.

{% embed url="<https://youtu.be/biBbP6lOD7s>" %}

### Create a redirection to another knowledge

You can make redirections to other knowledge items. This allows you, among other things, to create connections within your knowledge base. To perform a redirection, please follow these steps:

1. Create or edit a knowledge and then move to the answer window.
2. Click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAIAAABnBnglAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAcpJREFUSIlj/P//PwPtARMd7Bhwa37R3Jpfr3Z1Z6Zm1O9+/JN61jCiJoFfj3dNbF9w4QMDAwMjr2pCaZWr8usNtTWr7mHxHiOnSmpnk4MwMdYg++bX4609TRA7GBgY/n++vaC9cdtdPi0deS5sWv9/f/3sPZG+YYGz/l1Y2L706ldGXnlZpoePPvLKyTI/evxgafec0v7GOeFo2p4sLS/b+oRIO1CsYZI30le+98k5K/LplLJHH5n0Uurdd/btY7BQ4CBoyuNnLy5eu4kmKC0pYaitjm4Ng6BxerMxAwPDk6VQAXHH7E5HohwrKyXBwMCAbBOyHQxUzDeyUhL6WupY7WBA8Q0x4P3ZmX1rPjlnhTAwMDAwMDL8frl/at8+Bv/iLCsBRoif3rz/iGYHydb8e3ju4t1HH+61vpNlYmBg+HtpYeOWxx8YeU88+GFlwAnxE8QyYq35uKU+aguKyH8uxaCyosro101Lrz58xMDAwPD50WMGRk6F6NJsA0787sMSNwJSItzYlDJ+f3zk+ntZ75K6aG0BqBCvQnRlvZcyO35LGBgY/pMDfr7c2ZURl16369EP4jSgFTakgF8MDGzEqqXAGlLA8KrWAKAg/yqvv/mKAAAAAElFTkSuQmCC) icon, then click **Reword**.
3. Find the knowledge to which you want to redirect from the **Reword** field.

<figure><img src="/files/70dGYHBC4FN0CMPDsizR" alt=""><figcaption></figcaption></figure>

4. Click **Ok**. Your redirection is shown.

<figure><img src="/files/1XdQkGQV7yGBEixaH11v" alt=""><figcaption></figcaption></figure>

{% embed url="<https://youtu.be/bgiH8hPPeFY>" %}

### Create a Livechat escalation

To create a Livechat escalation, you can do this through simple knowledge or through event-triggered knowledge (condition for triggering a Livechat escalation). Please follow these steps:

1. Create a simple knowledge like "I want to talk to an operator".
2. In the answer window, click **More options** then click on the **Other options**.
3. Click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAXCAIAAACeQxh6AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAM1JREFUOI1j/P//PwM1ABNVTBmUBrGg8b/9/PXs5Vs0QSlxYS52NtIMevrizfTlW9EEMyO9VeWlSDMIAvoqUrcfPnv30fOcaJ+ijtkMDAy3Hz7DbwG6QdISIpmR3miqpSVEIAxkcTRz0Q3iYmdD8wWci993NI7+oo7Zu4+eu/f4OSSAiAHYAxstOMgx6O3Hz6cv3/KwMSbVIHSvvfvwedeRc6SagsUgsgHN8hoE7DhyllKDuDjYlWQl7zx8TlCnkqwkFwc7nMs4WkLSzyAATCpCQskdZs4AAAAASUVORK5CYII=)  button at the right of the **Define GUI** field then click **Livechat connection.**

<figure><img src="/files/WHpavoyjQ1Ij65pmxPXA" alt=""><figcaption></figcaption></figure>

Go to [the Livechat page](/livechat/enable-livechat) if you want more information.

### Create a context condition

The context conditions let you add conditions that will trigger a knowledge, you can find more information on this page.

In this example, the context condition to be created will be about the user page. The goal will be to check if the user URL contains "knowledges". If it is the case, the user will get a specific answer. If not, they will get another one, asking to go to the page triggering the knowledge.

Note: if you want to test the context condition at the end of this example with a deployed bot, please customize the example by replacing the term of the URL with a term specific to a URL where your bot is located.

To create and use this context condition, please follow these steps:

1. Go to **Content > Context conditions**.
2. Click **Add** at the top right of the page.
3. Fill in the fields as follows:

<figure><img src="/files/deALThb4h65HCCWzV92b" alt=""><figcaption></figcaption></figure>

Note: the **UserURL()** condition is a selectable context condition by default in the condition list.

4. Click **the tick** to validate the creation of your context condition.
5. Go to **Content > Knowledge** and create your knowledge like this:

<figure><img src="/files/rMabceABGU5E0iUbCVAL" alt=""><figcaption></figcaption></figure>

* Add new knowledge
* Answer to a question
* Create the sentence to understand
* Close the answer window
* Click on ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAmCAYAAABQ3RJZAAAACXBIWXMAABYlAAAWJQFJUiTwAAADBklEQVRYhe2Zv0/bQBTHv3dn+xLSlJEBMZUqA1vF0rB168KPqcwwVe3Yrf9ABf9HUTfUpWMXYKFDJZAAqVIFqKiooCokJU58d69DYteBtNg+k1Rqv5JlRZe799Hzu3fv2YyICDnp/KKBT19OobRBqSBxf3wMpaLMa/lIPPcVB6D/0INSbtBEdO26LTk2k0Ow8G6M6QJ37uFvAGCMWaL+EsuSPa5O6QektAYIAAic8+g/ecCnhiai1Ia11h1jjEWXjTJ5OouICFrryOs24APLHowxcM5jcZ/dVwNNeaGXbR/uwPO0EMI6LeYKPb+0kswo539PeGx9OEhm1DK2h3aM28T2UKGzamjQNnH9b4fH7v5Rzz2phrYRd/ePsLC8iiezVcwvrSQCtzpgKKN29g7p5avXtLN3SJPV57S2vkFERGvrG3Tv4bOe8X5SSlG73SatdWrbmevpWr2Jd+8/4s3bLbx4OovFuRkAwOLcDI5PzrCwvIq75RE8fvSg73ytdebCySo8jk/OAAAX9eYfx/sphM6izNCj5SKq0xVMVSawub3fM7a5fYCpygSq0xWMlovX5iqlAGTP1TfW05Sh6L9JjUYDruvCcZyeriapEnnaaqdfUbPZCaUssKFuhA4XNsZkMhBXEARot9twHMeq9UoV02Gvl0VBEKBer0chwXn2HJBoZtwjrVYr2khJdXl5iVqtFsWxEMKqT0yVpxljEEIgCAL4vg/OeQRyFSBQCr7vo+X7YIzB8zy4rhsB2yhVN07dol1rDa01giCAUgpaaxhjcF6r4/PXb9DaoFQsYnJ8DOVSEY7jXMsWNuCpPQ2g5/EKIWCMgTEGshXAkxJaG0gpUZASUkoIISCEyAU4NXQcPAQIoYkIBdmG9CSUNnA9D67nwfO86PVBfP5AoUPD8Xo4LOidbgiAGzhCRJsuL1gr6FBxEMYYitIDFwKMAGIMBvnChsqlng49PyIl3G4mUd3NeRvKtd0SgqNU6HxjUdqg9qMJY/J/VZh7j3gn9mHo9HsNgcUp+jv9BCwT++IfF0wKAAAAAElFTkSuQmCC)
* Select Current action
* Select your condition in the list
* Click on Update
* Then you will be able to fill Success and Failure answers.

So, depending on the success or failure of the context condition, the bot will send a different answer to the user.

You can create and customize an infinite number of context conditions and use them within your knowledge.


# Best practices

This section presents the best practices to apply when building the knowledge base.

This section describes the key points to build the knowledge base avoiding pitfalls, and maximizing user satisfaction by offering the best possible content.

### Questions and rewords

* Prefer very specific questions to vague questions, they allow to create a more concise content. It creates more knowledge and gives better results when the bot rewords.
* In the same way, reword sentences must be concise and precise. Indeed, they are displayed after a reword made by the bot and if they are too long, the user will not read them.
* Use as many matching groups as possible in formulations to reduce their amount. For example: matching group for email: email, mail, message, e-mail, etc.
* To understand as many formulations as possible, codes and matching groups are available directly in the user sentence edition window.

*Go to Content > Knowledge > Add New Knowledge > Answer to a question*

* Mail: allows to understand an email address.
* Integer: allows to understand an integer.
* Number: allows to understand an integer or decimal.
* Url: allows to understand that the user has entered an url.
* Empty: by clicking on the arrow, you can specify the deletion of a variable. Enter the name of this variable in **Capture Name**:

<figure><img src="/files/RGR4q5SAFE2ukdELuY3g" alt=""><figcaption></figcaption></figure>

* Constant: records the use of a variable to save it during the dialog. Enter the name of this variable in **Capture Name**. To better understand the use of Empty and Constant, you can see the context conditions paragraph.
* month: enter the word "month" to understand every month.
* day: entering the word "day" allows you to understand every day of the week.
* city: enter the word "city" to understand all French cities.
* If your users tend to use just one word as a question, you can create "Keyword Knowledge":
* Either as open questions if large number of questions can be suggested afterwards.

The **Aa** symbol means that the reword on knowledge has been disabled, ie when the bot does not understand a sentence , the question "plane" will not be proposed to users. To do this, uncheck **Enable reword.**:

<figure><img src="/files/YU4TfTqglNC0Mjdgtb4l" alt=""><figcaption></figcaption></figure>

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAVCAIAAADEqSm4AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAb5JREFUOI2lk8FLwlAcx3+bEUXXndzzsktteg0mktTFwDwGQVAwtewv6JKkaB2EhP4CL101iKCDRBBELDzangs8iHvTfyCKonodNuaYmlE/dnh8+X3e9+19f495fvmASTU36/Mo7ERmZP0RmxqW8BOuXdTUhqq1NAAIisElObyrpAI8cnoYz78VSoXKWQUAEI+keQkASI9gHQPAnpIuZnN23/PLh/NF4zFOQImNdb3dcetdYmxlUpyAVhKrlFJK6QDbzx1yAjo6OXEUvd2xeKu1dFrmBHRQzA0wvd2xfDzm0XjMwSillmeXGOC28pzt+vbu+vbOjXWJYRnaAagNFfEI+ZH7erCOiUncSoBHIVG6f1BZp8O6N3fVb+rVi6pHDKBAE2v/mxJpQTL75m8AgxghUbIxeVHWWhrpkQmMSR5bOCKHbSy5lQSAQqkw3Mowg/VBMQ8AGSXtjfu4XHaU88ur88ur17fPsXG7h2tzJ+kO8O39q0uM7b00J6DltZi1xdhRDopB3s8DQL9vNrEGABkldZTN2ycfft2kRypnFbWhWoMfEqWIHM4o6Z8ejqdmplmfjxnWf4qbZZmRDAB8AzxrXM5vz0RcAAAAAElFTkSuQmCC) symbol indicates that we will not ask for the satisfaction of users for this answer. To do so, uncheck **Ask for feedback**:

<figure><img src="/files/LJB8qMtoWVhpyhcVCXFy" alt=""><figcaption></figcaption></figure>

To establish this type of knowledge, one must imagine all the questions that can be suggested and add the formulation keyword + question in the list of formulations of the knowledge used.

For example, for the "plane" knowledge, we can imagine that users can ask "how to book". For "How to cancel my plane ticket", you will have to add "plane how to cancel", etc.

* Or in closed questions if you want people to choose from one of the proposed knowledge. This solution is simpler because it avoids having to anticipate a list of questions to be dealt with later. We suggest you use it when you want to offer between 2 and 4 knowledge to your users.

In this type of question, you should also think about disabling the reword questions and not asking the opinion of users.

The user can click on one of the three suggestions. To make them clickable, select the part you want to click and click **Insert redirection**  from the toolbar and choose **Reword**:

<figure><img src="/files/J2J6WQl8VuVmYBGJ8kvR" alt=""><figcaption></figcaption></figure>

Enter the name of the knowledge to redirect to and click **Ok** then **Update**.

### Answers

* Bot answers must have an editorial style. It is better to write real sentences than injunctions to establish a relationship of trust and an effect of dialog.
* The answers should not start with "yes" or "no", as there are a lot of formulations leading to this type of knowledge and this type of answer is too specific.
* More generally, it is even necessary to repeat the subject of the question in the introduction of the answer. For example, if the question is "How to open a link considered as dangerous by Outlook?", the answer should start this way: "To open a link considered as dangerous by Outlook, you must...".
* It is better to avoid too long answers, it is often possible to subdivide them with a tree.
* Try as much as possible to keep the reword sentences coherent:
* either these are all questions;
* these are all affirmative statements of the user's problem.
* The bot is for users, better use "Click here" instead of "Clicking here...".
* It is possible to use JavaScript functions in your answers. However, note that the text editor prevents the use of certain functions for security reasons. In order to get around them, you will have to add the tag  < !--NOCLEAN--> in the source code. The tag should be placed at the beginning of your code, as follows:

<figure><img src="/files/rtYyQuY6AeubuxMsE2fI" alt=""><figcaption></figcaption></figure>

### Satisfaction

Suggest an alternative solution to unsatisfied users, for example by specifying a support phone number or email address.

### Dialogs

* When you consult the history of dialogs, you can enrich knowledge or match new sentences to existing matching groups. However, a bad or excessive use of this feature may cause a large number of errors and generate inconsistent dialogs in the case of the addition of inadequate knowledge or incorrect formulations.
* Take into account the general context of the dialog and check whether it is relevant to add the knowledge or not.
* It is recommended to search before adding knowledge to check the relevance of its insertion into the knowledge base.
* Remember to perform audits on a regular basis, which allows you to easily browse the various dialogs and validate the relevance of the knowledge offered by your bot.


# Glossary

### General terms

#### Back Office or BMS

This term refers to the platform that allows you to administrate the bot.

### Content of the bot

#### Knowledge

This is a question / answer pair set by an administrator. Example:"What's your name? - the algorithm analyzes the sentence through a distance calculation and searches for the closest knowledge. The "What is your name" knowledge is calculated as the closest knowledge, with the highest matching score. He understands this knowledge and gives the answer associated with it: "My name is XXX".

#### Formulation

A formulation is a different way of asking the same question.

#### Knowledge base

The knowledge base includes all the knowledges of your bot.

#### Social base

This is a knowledge base that groups so-called social interactions common to all projects. It allows the bot to bring a more human / intimate look to the dialog.

#### Decision tree

A decision tree represents a knowledge item divided in several branches to offer several user paths

#### Push rules

These are specific and custom rules that you can add to enhance the rules of your internaut activity type knowledge.

#### Redirection

a redirection within a knowledge represents the action of redirecting to another knowledge on the call (perhaps automatic or inserted in clickable form).

#### Tag

This is a category of knowledge to classify and find your knowledge more easily (by tag, etc.). You can also add subtags.

#### Matching group

Matching groups are groups of words with a similar meaning in a specific context.

For example: In the *'How to edit'* matching group, there is 'How to change'/ 'Edit item' / ...

#### Global sentences

Global sentences represent bot sentences or answers during a dialog that are not handled directly by the knowledge base and that can be used to handle situations that are unique to the dialog such as the misunderstanding of a user sentence.

#### Reword

Depending the understanding of the bot, it may propose knowledge that it considers close to the user's question. This is what we call the bot's reword. However, some knowledge has no interest in being reworded even if the matching result indicates that this knowledge is close to the user's question and could therefore correspond to his initial request. This is the case for example for social knowledge or knowledge such as "I want to cancel my contract".

#### Slot knowledge:

The slot knowledge is used to capture and record information. Thus, if the user asks the bot "I want to buy a train ticket to Paris on July 8", the bot is able to extract the information "Paris" and "July 8". In addition, if there is missing information that the bot needs to continue the user request, it will be able to check the missing slots and request the information from the user.

#### Consultation space

This is a space on which the bot relies to give an answer. Within the same knowledge base, you can create multiple consultation spaces; the advantage being that you can give a different answer to the same question from one space to another.

Example: "How are you? » - « How are you doing? " - "Are you okay?" - "How are you alright?".

#### Context condition

the context condition is used to check that a condition is effective to trigger a knowledge.

#### Bounce condition

A bounce condition is used to redirect to other knowledge after triggering a decision tree.

#### Close knowledge

Close knowledge are knowledge items with a high similarity rate to a user question. You can look up close knowledge when using the search function (in the test dialog box or in a dialog history).

### Learning

#### Dialog

A dialog represents all interactions between the bot (the operator in the case of a Livechat dialog) and the user.

#### Interaction

An interaction represents a question / answer exchange between the bot and the user.

Example:"What's the weather like?" + "The weather is nice.". This exchange is equivalent to an interaction.

#### Qualification mode

The qualification mode allows the use of knowledge in the published and validated state. Dialogs are not counted in the analytics.

### Integrations

#### Chatbot or Chatbox

Chatbot:\*\* the chatbot represents the concept of a conversational bot that allows performing a natural language textual dialog via a dialog box (also called chatbox).

#### Livechat

The Livechat service allows the connection between the user and a human operator to exchange as direct messaging via the dialog box.

#### Meta bot

The meta bot lets your main bot find knowledge in other bots.


# Contents

#### Content Management within DYDU Platform

Content management on the DYDU platform relies heavily on its knowledge base, which is at the heart of the system. Key features for content management include:

**Content Editing**

* Intuitive interface for creating and modifying dialogues
* Capability to adjust pre-programmed responses

**Knowledge Modularity**

* Categorization of knowledge for better organization
* Tag management for easier searching

**Analysis and Improvement**

* User interaction tracking tools
* User feedback to refine bot's responses

**Integration and Compatibility**

* API to integrate the knowledge base with other systems
* Content export and import in a standardized format

Managing bot content is an important part of the bot project. Within the DYDU solution, content management is done, in particular, through its knowledge base and the functionalities that comprise it.

<figure><img src="/files/m7u3l9jcQok3xab9023x" alt=""><figcaption></figcaption></figure>


# Knowledge

What is knowledge?

We call knowledge the question + answer pair. The question is the end user's intent that the chatbot needs to understand. The response corresponds to the content that you will configure and which will be rendered by the chatbot to the end user. The knowledge base includes all of your knowledge! It's the brain of your bot! You can organize your knowledge by theme. Knowledge can be simple: a question - an answer, or take the form of a decision tree. The decision tree will allow the chatbot to articulate the sub-questions necessary for its final answer.

{% embed url="<https://youtu.be/7vJOmjuqwx4>" %}


# Knowledge management

This part of the technical documentation will help you to understand the way you can manage your knowledge base as well as the various tools to your disposition.

The bot understands the users' sentences thanks to calculation of distances between sentences. The calculation is based on a unique mix of public domain algorithms.

Your knowledge base contains all the questions that the bot understands and the associated answers. The changes made to the knowledge base are immediately accessible in production, this ensures a high reactivity.

But it is possible to set up validation processes to check content before publishing by managing [user rights.](/preferences/users-and-rights)

### Knowledge windows

On this part of the screen, you will find your knowledge windows (user sentences and answers). It is through these windows that you can modify your knowledge (content, options, etc.).

Note that you also have access to a toolbar:

<figure><img src="/files/f5h95lyq3Z3TYWpagg5E" alt=""><figcaption></figcaption></figure>

* **Tags**: this option allows you to assign or modify the tag of the current knowledge;
* **Status**: allows you to change the status of your knowledge;
* **Analytics**: this option allows you to view knowledge analytics or enable the ignore analytics parameter;
* **Bounce conditions**: the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAACXBIWXMAABYlAAAWJQFJUiTwAAABPElEQVRYhe3WMUvDQBjG8aciOQRBKVKpgovYxTq1aza3bC6FLq76jfwEQru3H6BZr1PSJSGDGYwKNqYGSrvERYOU0jZ5r5rh/W8H4e7HHZeklCRJggK389+AdTGQGgOpMZAaA6kxkBoDqe1uc/IwihFOYnh+gHEUI4w+cXtzjT2hbTxHZqC0XJjSxl3bWLuQ5wfo9gfpWAgtEw7IccSe/4LgbYyHxx6ms/nKZ5tXF2jUa+n4pFLOulx2YMvQ0ajXNkJKy8XQdiC+d+30+CgzsJT3j7rTMzG0HVQr5aXHLS0X3f4AQmi4bxt4fn3HdDaH3rz8G+Aq5CIuz9EqAS5DjpwnZTglwN/Iw4N9fESxMhyg6D3YMnQASC+EKhygaAd/MuUI52dVZThAMXAbFf5bzEBqDKTGQGoMpFZ44BcqX4q5paaFbQAAAABJRU5ErkJggg==) button allows you to add bounce conditions;
* **See knowledge map**: the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAACXBIWXMAABYlAAAWJQFJUiTwAAACjUlEQVRYhe2WP0gbcRTHPynlrgdK8AqxyRBLJVliBiVQQTsZHZQK2qEotOjUZqsdu5QuXe3WbrYUCnVQKNQh2kXjUBrMELMkKJpCgoGeRgP3Z0mH2KvSQnt/bDPkO93v9+Ddh/d+38fz1Ov1Ok2sS/8b4E9qATpVC9CpWoBO1QJ0qqYHvOxWonS2QHJzC4CRgT5i0ZAreV0BPKzWWFxZ5/ZQPwCLK+tEwl1IouA4tystVqonAMSiIbNypYNvbqR2p4LdQT9+n8ybpTWU6gl+n0x30O9Gajx21y1VN8gV9gGIhLrQNIONdA6A4cFeAHKFfSRR5Ebwmu122wacX1hGqdYAkL1tzM1OsFMsA42Kzi8s0+FtR9V0PB4PD6dGbQHaeoM7xTLlisKTxF0ez05QriiUKsq5OMDMZJyZO8MoRyfn4lZk6w3K3nag4d4fUjUdVTd+nnXDPB8d1/59i5OpDGuncy8+0MdhtcZOsQRAT/g6qmaQK+wBMD7Ub3su2gYEzApJokAylWH3a6O1sZ7GuDkbtyvLgKWKYrr1VixiwkXCQUoHjXcW6JTJ5YuMDPai6g13S6JALBoi4JMvFvD5y/cEOq8CsFssE4uGGR+6yWG19suYWU1lSGfz+H0y2mk152YnLAFacnGponB0XGu4czKOphtEQkEAXi+tsp3fYzu/x6t3H5FEgUgoiKYbJKbHmPuN2/9Gllwc8MmIosCHT5/NO9nbbo6dZ4/uAfD0xVtKFcV0++pmBlUzEEXBcostj5nE9BjJ1BaqpvNgapQOb5sZS2cL5neHtw1JFLg/GWfjyzbSFZHE9JjV3zlz8VmlswWSqdN1a9C9dcs1wItS02/ULUCnagE6VQvQqb4Dc2EVmEjbAC4AAAAASUVORK5CYII=) button gives you access to the knowledge map by focusing on current knowledge;
* **Enable fullscreen**: the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAfCAYAAAB6Q+RGAAAACXBIWXMAABYlAAAWJQFJUiTwAAABBklEQVRYhe2WQQ6CMBBFP8ZDoAkkyglkq0viRbyDnkHv4EWAJWzlBMWkJJZb4MJYEUwsQ6Ni+lYMlMwLHWZqVVVV4ccZfVtABSOpCyOpCyOpCyOpizH1xe3+2LoXLH2sVwsAQJhkiNNTa81ht+mciywJADPHhudOZey5duPalzHjF5yLkpSnl6TnTuWXaz+bwHMnMg4TkCUHUZODkCRvd7D0n2rwHc0a7YJlzpOaIEuGSQbGhfJ6xgWiNCPlIkvG6QmMq7cUxktESbu5q/Df2/1Jek2cvBCI0kc8d2w5ZRgXyGsTJi/U67dJP0kukNd+nlvvvEuWLw8YFEyf1IWR1IWR1MUgJK8JJ0+Q7cEebAAAAABJRU5ErkJggg==) button allows you to display the knowledge in full screen;
* **Close knowledge**: the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAdCAYAAABSZrcyAAAACXBIWXMAABYlAAAWJQFJUiTwAAABCElEQVRIie3VvwqCQBwH8G8NWiBEDkK9T5Ojm1OjvVD4AllrkE0uTb1FQ1CSkCJIqcu1GJgpXZdhwX23gx/3+Q73p0UIIWgo7aZgjnOc47+HB2EEc77G0fMrZ65J+nKGCV/YG+z2LkzLLt38mqQwLRu7vYuls60XH2sjDBQZcYbkC9xh1/MxUGSMtRHVnq133vY80hEFGLqKfk96gA1dRVcU6sfLCvR7EhPMhBcLAGCCAcarFoQRgjCqXH8NP3o+TMtGnKQQRaHyENaOF+GJrsLQVeYC1HgZPFRkdLNTz1KAGl862yf4nmIB2kcGhDKXOCHT2YocTuePZvJhump15T9+NY5z/O/xG7WkMG6DLKpHAAAAAElFTkSuQmCC) button allows you to close the knowledge and show the knowledge list.

### Knowledge list

The bot's knowledge are listed in this view. Several groupings of knowledge are available through the tabs:

#### Tags

Tags allow to organize knowledge according to the topics addressed in the question. They are also used to get information about the categories of issues most commonly addressed by users during a dialog. Go to tags management for more information.

#### Status

**Types of status**

Knowledge can follow a validation workflow before being published and available via the bot. This view allows you to quickly find knowledge according to their status.

<figure><img src="/files/pX4L2CTsDSvgXwNyvh0E" alt=""><figcaption></figcaption></figure>

A knowledge can have the following status:

* *Disabled*: knowledge is completely ignored. This knowledge cannot be suggested in the rewords and is misunderstood by the test bot. A knowledge with this status triggers the misunderstanding sentence from the bot.
* *Draft*: the knowledge is awaiting writing and the bot will say that it understands the question but does not have the answer yet. The knowledge is understood by the test bot.
* *To validate*: the knowledge is pending validation and the bot will suggest that it has understood the question but does not have the answer yet. The knowledge is understood by the test bot.
* *Validated*: the knowledge is validated and is awaiting publication. The bot will suggest that it has understood the question but does not have the answer yet. The knowledge is understood by the test bot.
* *Invalid*: the knowledge has been checked by a validation instance which has determined that the content needs to be reviewed. The bot will suggest that it understands the question but that does not have the answer yet. The knowledge is understood by the test bot.
* *Published*: knowledge can be used by the bot to respond to users.
* *Multiple*: knowledge accumulates several status (for example: one knowledge published and another one to validate)
* Special case: status *Published (modified)*

When an editor (with no publishing rights) updates a *Published* knowledge, the status of the knowledge is now *Published (edited)*. Thus, until an administrator (or user with publishing rights) publishes it, the knowledge call will display the old answer.

For more information on user rights, please see this page.

**Impacts of knowledge status on test bots**

The behavior of your bot may differ depending on the status and the dialog box (test bot in BMS, sample debug, integrated chatbot) on which you perform your tests. Here is the detail of these behaviors:

**Test bot in BMS**

* Interactions with the test bot are not counted in analytics.
* Dialogs are returned to testing (Configuration Interface).
* If there is a direct match, knowledge is triggered regardless of status (even with *Disabled* status).
* All status (except the *Disabled* status) allow you to suggest reword knowledge unless **Display only published rewords** is enabled in preferences (**Preferences > Bot > General**). If these suggestions are clicked, the bot will answer that it understands the question but does not have the answer yet (except *Published* status which will trigger the knowledge). This sentence can be configured in the global sentences.

**Sample debug** (if qualification mode is enabled)

* Interactions with the sample debug are not counted in the analytics.
* Dialogs are returned to test (Qualification).
* If there is a direct match:
  * *Validated*, *Published* Status: Knowledge is triggered;
  * *To validate*, *Draft*, *Invalid* Status: The knowledge is not triggered - the bot will answer that it has understood the question but does not have the answer yet;
  * *Disabled* Status: Knowledge is not triggered - the bot responds that it did not understand the question.
* All status (except the *Disabled* status) allow you to suggest reword knowledge unless **Display only published rewords** is enabled in preferences (**Preferences > Bot > General**). If these suggestions are clicked, the bot will answer that it understands the question but does not have the answer yet (except *Published* status which will trigger the knowledge). This sentence can be configured in the global sentences.

**Chatbot integrated in a website** (qualification mode is unabled)

* Interactions with the embedded chatbot are counted in statistics (except knowledge with *Disabled* status).
* dialogs are returned to production.
* If there is a live match, only knowledge with *Published* status is triggered.
* All status (except the *Disabled* status) allow you to suggest reword knowledge unless **Display only published rewords** is enabled in preferences (**Preferences > Bot > General**). If these suggestions are clicked, the bot will answer that it understands the question but does not have the answer yet (except *Published* status which will trigger the knowledge). This sentence can be configured in the global sentences.

#### Publish or unpublish knowledge in bulk

To publish or unpublish knowledge in bulk, go to **Content > Knowledge** click on the **status** tab. Then click on **...** to display the dropdown menu. On this menu, you can choose the following status:

* published
* validated
* to validate
* invalid
* draft
* disabled

#### Alerts

The integrity of the knowledge base is analyzed regularly to check the availability of links, the length of responses, the validity of rewords, etc.

We have three levels of alerts: *information, warning, error*. The knowledge whose alert is *error* must be corrected in priority, this is the reason why their number appears in overprint of the **Alerts** tab.

You can directly configure your alert parameters

<figure><img src="/files/4Dgx8xZHcKuA3dXDBbpX" alt=""><figcaption></figcaption></figure>

For more information on alerts, please see the qualities [alerts page](/contents/knowledge/qualities-alerts).

#### Comments

All the bot's knowledge with one or more comments are in this list, clicking on a tag allows to display the list of matching knowledge, clicking on the line then shows the knowledge in the center of the page. Get more information on [this page](/contents/knowledge/comments).

### Research

Search allows you to quickly find a knowledge item. Words typed into the field are searched for both questions and answers.

The search displays the result in order of relevance. This is how it works in practical terms:

* Search in conditions via the matching engine (score) to help determine the order of relevance;
* Search Knowledge Labels (text content);
* Search the answers (text content).

### Research and replace

This feature allow you to **Replace** a word, an expression, a formulation group by an another in main question, wordings/formulaiton, answer (including side panel and answer template) no matter the status. To start a replacement Click on the **Replace** button after entering the terms as illustrated by the arrow on the image below:

<figure><img src="/files/DfqvDn1FSSpeVO8TB8qw" alt=""><figcaption></figcaption></figure>

*Example for a replacement "humain" by "robot":*

<figure><img src="/files/HEESte6NhTeSk5FfXRbu" alt=""><figcaption></figcaption></figure>

Once you have clicked on **"overview before replacement"**, a modal will be displayed. In this modal you can see the replacement types. For better visibility you can open or close all the replacements with the buttons at the top right, or select all replacements at the top right.After extending the sentence you can see the location of the replacement, as in the example below:

<figure><img src="/files/ai70dYb06ugfaeVaPTjV" alt=""><figcaption></figcaption></figure>

After checking and/or selecting the changes, a final modal window will be provided for your approval.&#x20;

<figure><img src="/files/XWekviATWQejt4hnH6HE" alt=""><figcaption></figcaption></figure>

### Add

<figure><img src="/files/lomhRDNesNcG7BFH65bJ" alt=""><figcaption></figcaption></figure>

You can create either a new knowledge or a new tag. New knowledge types are: *Answer to a question, Complementary answer, Predefined answer, Slot, ..*. The created knowledge will be added to **Knowledge without tag**. It will be possible to assign a tag later.

### Test

The test dialog box is intended to test the bot configuration. It also lets you edit it. Open it by clicking **Test**.

Test dialogs let you save typical dialogs that you can replay whenever you want to ensure the good working of dialogs and avoid regressions.

Note that you can also modify the variables from the **Debug** function (symbolized by the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA3klEQVRYhe3WoQ6CUBTG8Q/nGzALw4zFBgXeAapWGsVGNBFpFJoZI7zDpeADSHYz8Q4alM2ddHAwCOefOYff7iWgbfbhCwtoNTegTyA0gdAEQhMITSC00SGHwPtrbhJIloTzQ4APJo6CQTNrzkOeY8G1LdbCraEDAOLIx+PZoSjVeBDX3iGOfNbC37IkhGpaPJ7dOJD6dkea815+DDyY31M5nS8sBBuimhaqaVkLPceCaehI84p9LcBEH+u1qpHm5aAZ1okMqSjVoJPo0+TnmSQQmkBoAqEJhCYQ2mIgb71HM3NLPJmVAAAAAElFTkSuQmCC) icon) of the bot and thus repeat immediately the test dialogs.

All information on the test dialog box is available on [this page.](/contents/knowledge/test-the-bot)

### Filters ![](/files/6U9fBQoobVbRmtUAyjfv)

You can filter your knowledge base according to their **Tag**, S**tatus**, **Quality Alert**, or **Comments** left on knowledge.

<figure><img src="/files/R1DrjNjPGSuWNC9N4dv0" alt=""><figcaption></figcaption></figure>

The filtered knowledge will be shown in a list with the number of each category.

<figure><img src="/files/BlnlrwugnmgK0QHLZGgj" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Note: when using the status filter, the sum of the knowledge may differ from the actuel number of the knowledge you have in the bot. For instance, if you use decision tree knowlege in which children knowledge have different status, then statut of both the parent knowlege and the children's one will be counted.
{% endhint %}


# Tags management

Tags represent the main topics addressed by your bot. These can also be separated into sub-tags. Go to **Content > Knowledge**.

<figure><img src="/files/YLdKxvJJN0j0yMK9wXY1" alt=""><figcaption></figcaption></figure>

Tags management has several interests:

* **Classifying knowledge:** each knowledge item usually refers to only one subject. By classifying knowledge thanks to tags, you will be able to find knowledge items easily according to the subject they are about;
* **Knowing the subjects tackled during the dialogs:** knowledge classification with tags allows the dialog engine to calculate analytics about the covered subjects;
* **Reviewing dialogs about a chosen tag:** to observe users' reactions on a specific subject, you can display only dialogs that cover a subject linked to a tag on the dialogs page.

### Create, rename, delete a tag

Tags are managed from the **Content > Knowledge** page.

1. To add a tag, click **New tag**:

<figure><img src="/files/xn2plHOmihQbvrAzw2WS" alt=""><figcaption></figcaption></figure>

2. Enter the name of your tag in the field and click **Create**. The newly created tag then appears on the list.

Since tags are tree-based, you can create subtags for top-level tags using the context menu to the right of the tag.

1. Click **...** on the left of a tag.
2. Click **New sub tag**.

<figure><img src="/files/r9rfPgmPo9FjhH8GF0wq" alt=""><figcaption></figcaption></figure>

3. Enter the name of your subtag and click **Create**. Your subtag is created.

Also note that this menu gives you the possibility to rename a tag, to change its color, or to export a tag branch with the associated knowledge to the excel format.

You can delete a tag if it contains no knowledge. To do so, unroll the empty tag to show the delete option.

Note: the **Knowledge without tag** tag can not be deleted.

### Assign knowledge to tags

When you want to create a knowledge directly in a tag or subtag, use the contextual menu of this one and click on **New knowledge**:

<figure><img src="/files/gCCtGZILNf1BEGEjbMmF" alt=""><figcaption></figcaption></figure>

You can move knowledge from one tag to another simply with a drag and drop.


# Knowledge types


# Answer to a question

Our no-code solution enables you to create various types of chatbot messages. In this article, we will explain how to create a simple bot response to a question.

## Create an "Answer to a Question" knowledge item

{% embed url="<https://youtu.be/lsO99bXVn7o>" %}

An **Answer to a Question** knowledge item consist of a user's question and its corresponding answer. For more complex conversation scenarios where you need to provide different answers based on information given by your users, you can also create a decision tree. (We explain it here)

To create an Answer to a Question knowledge item, please follow these steps:

1. Go to **Content > Knowledge**.
2. Click the **Add** button then click **New knowledge**. Or select a tag and click **... > New knowledge**. This second option allows you to assign a tag directly to your knowledge.

<figure><img src="/files/ytGL7Cj3l2NEURsIHvzO" alt=""><figcaption></figcaption></figure>

3. Click **Answer to a question**.

<figure><img src="/files/42bR0WcGoE4ZqXjegQ5z" alt=""><figcaption></figcaption></figure>

3. Enter the user's question and click **Create**.

<figure><img src="/files/0RbLJbqq1s1dVWGR7jPc" alt=""><figcaption></figcaption></figure>

You can use [matching groups](/contents/matching-groups) to replace certain words in your questions. To insert a matching group in the user's question, clicking at ![](/files/mApP90SCoJo3HCr506j8).

When you click on **Create**, the bot automatically suggests a list of matching group that you can use. You can accept or ignore the suggestion. (To ignore it, click on "Create" again).

<figure><img src="/files/dh9baQr51IEjUlZKkD6z" alt=""><figcaption></figcaption></figure>

5. Once you have created the question, enter the corresponding answer in the appropriate field in the knowledge builder.

You can use different formatting options and add additional actions to your answer.

<figure><img src="/files/xslQD0vUON2ndKsaJ2QN" alt="" width="501"><figcaption></figcaption></figure>

It is formatted in HTML and can therefore contain any type of valid formatting in HTML.

For more tips on creating a relevant answer, please read this article.

6. Save your knowledge item with the appropriate status and click at **Update**. Your knowledge item is now created.

<figure><img src="/files/HQCtpQYSO8jQHmNa0hW0" alt=""><figcaption></figcaption></figure>

## Deep dive into the user's question

### Business Description

This feature allows the system to better understand what the user wants and find the correct answer, even if the question is not precisely formulated or is not understood by usual search methods.

{% hint style="info" %}
To activate the business description feature, it is necessary to import the "**Dydu LLM Business description**" model into the [external NLPs](/developers/api-reference/external-nlps).
{% endhint %}

#### Configuration&#x20;

For this search to work, you must fill out a **field within each knowledge item**.

<figure><img src="/files/Cw6Oxe6aTDCLplPSdQSQ" alt="" width="313"><figcaption></figcaption></figure>

A "**Business description**" field is available for each knowledge item.

* This field is **optional**.
* Use it to **describe**, with simple words, what this knowledge item is for or in what situation it should be used. The **clearer this description is**, **the more accurate the bot will be**.

#### Objective and Functioning

The system uses its **advanced understanding engine (LLM)** to analyze the meaning of the user's question.

* The **Business Description** search is activated automatically when the bot cannot find a clear answer **using its classic search methods**.
* If the system finds a similarity with a knowledge item, it **automatically directs** the user to that knowledge item.
* If it finds nothing, **the bot displays a neutral message**, indicating that it cannot help with that subject.

Example Response:

<div><figure><img src="/files/qGzKGnI71KdFIc76g15Y" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="/files/z66rAkIWzqjRQmS5HReU" alt="" width="277"><figcaption></figcaption></figure></div>

### Edit the user's question and its associated formulations

Once you have created a simple knowledge item, you can edit the principal user's question, which represent an intention, by clicking on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAYAAAArdgcFAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wcQCBYZyN0ErAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAHeSURBVDjLrZTda9pQGMZ/jWeGhDVusx8otuLWrR0TSgfdxQr777eLMXBlFgq1FTsxVlFJ3M4ayceuzNQkmtqdm8OBvL/znOd5824EQRDwyJWEUNaBdQdjag0T1/NZpm3jocpvOkMuWj0ANrUsZ9UyIqM8XnmtYXLR6iEyCpXdZ9jS4UfzLtEqkQbqej61K5PuaIyhq5weldCygonn0+5bAJwcFCIZKGnAn+stuqMxeUPjrFpGy4oQmDc02n0LSzqRcJcqt6TDt8ufSMeltJ3j5KAwV3zTGTKw/2DoKjldjYQrloG/1Fu4ns+b0haHe1tzxbWGSbtvsfv8Ke9fF2O7JhZ+27M4vzYBOH5VYH8nFxZPbbKlE/uaWWtEXA+fX5uIjMKHoxJ5Qw8/tqTD96sOtnR4V97hZfFFIjgWbo5+ITIKH6vlOR8HtuTrZRvX8yOvSVoRuP37nv3t3Bx4apPIKHw6rsSGt6g60ueu52NLh0rh33OnwWlZwenbvVjwIjRW+cT1AGiaQ+rNLq7nA2Doavibp50WQRBEZ8ttz0LeT8Kzpj6hmN8M50eSytnzdI/Ak5Sl8XhxV9KAV10WB049FdMEGLeLVYrXBa8cXOuCQ1vSBvhQcCTQ/2HF7CV/ASslo4fUp0eOAAAAAElFTkSuQmCC) button.

Since an intention can be expressed in many different ways, you can add similar formulations to the principal user's question through the **Formulation** field. Click **Add** or press **Entry** to validate.

<figure><img src="/files/s4i0TempLExiQ6hk3pb1" alt="" width="563"><figcaption></figcaption></figure>

Formulation can be added by entering a string (text) or by adding matching groups.

Once added, formulations can be edited, deleted individually or massively.

> note: the mass deletion option will only appear when you have more than 1 formulation. Mass deletion allows you to choose one formulation to conserve while deleting all others.

<figure><img src="/files/6FBF8m6t54cwYDzpCxME" alt=""><figcaption></figcaption></figure>

The added formulations are sorted in the following order (from top to bottom of the list):

* Numbers (sorted by magnitude)
* Formulations using default variables such as integers, dates or email addresses (sorted alphabetically)
* Other formulations such as matching groups or text (sorted alphabetically)

Note that a formulation can only be used in one knowledge item.

### Use advanced options for your formulations

There are 4 tabs at the bottom of the user's question panel :&#x20;

<figure><img src="/files/Xr2xplDyP53yey9UbfCf" alt=""><figcaption></figcaption></figure>

**Simple addition**

This tab allows you to choose the the type of your formulation:

* **Formulation** : it's the default type without any special options.
* **Keyword** : formulations will be created as **keyword**.

  Keyword has a bigger weight on our matching system, which means if the bot matches with a knowledge item A that contains a keyword and with another knowledge item B that contains only a formulation, the knowledge item 1 will be considered by the bot as a more appropriate answer than B even when B might have a higher matching score.

  Keywords added as a formulation are symbolized by the  icon.
* **Exclusion**: it allows you to exclude a formulation, which means the bot will ignore this formulation in its matching system and, therefore, the knowledge item will never be triggered through this formulation.

  Excluded formulations are symbolized by the  icon.

**Search**

This tab allows you to see the matching details of a given phrase with the existing formulations witin the user's question.

Enter a phrase and click **Search**. You will see to which extend this sentence matches the formulations you have already added. This will give you a better idea on the relevance of your formulations.

<figure><img src="/files/5YoqXDESBmgFCw3UzEFP" alt="" width="563"><figcaption></figcaption></figure>

By clicking on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAVCAIAAABHbRCDAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAPZJREFUSIlj/P//PwONAROtLaCTHSwkqXZycv769Sucy83NvW/fXoK6hktYDRc7SIvzjMyMX79+HTp4kIGBwc7eno2Njfp2hIWGMjAwvHj+nIGBISY6mkhdjHjyeVFR8dGjR0lyhLW1dV9fL5ogAX/k5uViurenp4eBgaGkpARNfMnSpefOnsM0BLsdS5YuZWBgePbsGSMjIwMDg5CgkJeXJwMDw6rVq3/9+nXr1i2IGjY2Nkjobdu2/d37d+fPnX/27BlEL7LLsIeVubkFMldZWXnZsqUMuPN5VFT03bt3kbWcPHkCzh4u+WO42IEvf1ALDJewAgAAVFoUhKAOxQAAAABJRU5ErkJggg==) icon, you can get more details about the matching process.

<figure><img src="/files/PpgENTvW4EtM4J8RCr8j" alt=""><figcaption></figcaption></figure>

**Options**

There are 3 options in this tab:

* **Export:** this allows you to export, in different formats, files containing all the formulations associated with the knowledge;
* **Massive addition:** this allows you to import multiple formulations at once. Simply enter formulations (separated by line breaks) or copy-paste a list into the designated field, then click **Add**.
* **Options:** this allows you to perform advanced actions on your knowledge item:
  * **Strict matching on formulations**: when this option is activated, the knowledge item will only be triggered when there is a exact "textual" match between the user question and formulation. For example, if two letters of a formulation are reversed, the knowledge will not be triggered.
  * **Specific reword sentence**: you can find more information here.
  * **Enable reword**: when this option is activated, this option authorize the bot to use this knowledge item as a **reword** when it can not find a direct match between the user question and your knowledge base.
  * **Non exportable knowledge**: when this option is activated, the knowledge can not be exported.
  * **Exclude from top knowledge** when this option is activated, the knowledge item will not appear in the top knowledge section, whether it is automatic or manual top knowledge.

<figure><img src="/files/TMR51xgdMtsFZb6G0k85" alt="" width="563"><figcaption></figcaption></figure>

## Decision Trees

A decision tree can be used to manage the conversational logic of a bot in the following cases:

* When a user's question is too vague or can lead to several answers depending on complementary elements;
* When a user types a sentence that makes sense only contextually.

To create a decision tree, just click on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAnCAIAAAADwcZiAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA6BJREFUWIW1l81u20YQx3f2k5Tsgw34FXoo0EsPvbUP0TforS+Qp+gL5NY3yEM0PaVALgFSoGcDilHBYmTatHZ2dnMYe7miFImxpDkIpDjcH2d3Zva/kFISL7W/PvyXr3/54bvxL8oXIw8xPd41z0q+iJHy0xijEAIAAOAI1AGsvGVSvgWAlBI77MbvopaAjMwmhIghPLkCEBEUxj5fY8PWbCr/jDGWJCkljyWlzN/xiKgBOHQpZfbhEdhzD3Uwh/mrjTE7JoYthICI/E1sW8FD6gAZYxzJK221WhGR1vpr4DXqJlJKqfU35Hk2RPTea62VUpvgfsQBkoiUUi9DCiF4elarVcnjlRKbOXwUZAanlHiZGZypMsNEURgAcCCSzVqbUiKisvbEoCNyoCEEa+3hSLbpdIqIRMR11VPLQGOMSqkxw7199/Hvf/7d68YlEEIow+17GCdtCKGu6zHUqx9/E0L8//7PvZ4ppeVy6ZxTSimlAKBfVw50TO/+VuOmkVc3pSQHzXazex3FlFLc5vh2GOuJqFrrECiD+2ziixNRAYA346fKZD53BkQ8Ozvb+trbdx9//f2PvaO/ef3q55++3/poPp/XdW2MUUr1keVkPpGV69rHypvUdDodOcnjK0cIgYiLxWIymVhr12JlI6Ktrx1opdYRmxrxRFTv/XYqaw5EPAW16zqWNWvUrLIQw9FzKsa4Wq24Q/X7K0u6zO66bjKZ7B3rzetXI6lN81kpJaXKCMgbEBERkfceES8vL4/VkGOM19fXzjlOYK01APRznfUmgGyaz0dBCiFmsxkAsHravq5SSqWU1ioEvL+/Pxw5n8+998YYbkk5e4Y5zFpSa9O27YHgtm1vb2+11lkprmlEzqYy3JRSjHq5XMYYz8/PX4BcLJpPn2a8lnk5eYYBYE2SlVQWWnd3dw8PD1dXV+P3opTSzc3NYrGo69paa6176vhSMkKUKjyLGt5/iCiE4L333ocQptPpxcXFbnZKqW3b2WwWY6yqyjnnXOWcNcbk6eXfofzMx6byHwBo27ZpGmttVVV1XWutq6oSQiBijPHx8bHruqZpiMgYw1E6V1lrynNHXy+7TxwcMWJA9LwpIWIIgZ9m8fycg1prbYxxzhljGbnnxCHWm1T24GutFSIqpVhmxmfLup5HN8ZorTl9xp6utkbMAbGMJqIQiCiUcn691tfqZOxJcgAW66fmUu48f1aS8qmty8LKOtlsrl8Atm0QkeA8OSkAAAAASUVORK5CYII=) button. Then, the same process of editing the user question and the bot answer occurs. This leads to a knowledge such as:

<figure><img src="/files/pz1VXgf103Bvotyg3SZr" alt="" width="512"><figcaption></figcaption></figure>

For more tips on creating decision trees, continue to read this article.

Next step: to enrich the content of your answers, learn more about the answers elements.


# Complementary answer

This type of knowledge makes it possible to add a complementary answer based on data specific to the user or on external elements. To be more concrete, conditions are the ones triggering of complementary answers.

The major interest of the complementary answer will be to provide an answer that can occur on a large number of knowledge (a tag or even the entire knowledge base). Thus, the update of this only complementary answer will be necessary, which turns out to be very useful when you want to inform your users of temporary or evolving information.

Note: in order to better understand the interest and the way to use the complementary answers, it is recommended to reproduce the practical case (below the theoretical part).

**Some examples**

If the user wishes to update an element of his file, it is possible to display at the end of the answer provided for this question, additional information that reminds him that another element of his file is not outdated.

During a period of promotions, in addition, it would be possible to inform the user that a product is on sale or even that a new product is available.

The complementary answer could also be used to highlight an action to be carried out over a certain period, such as updating its situation for job seeking.

To create a complementary answer,

1. Go to **Content > Knowledge**.

<figure><img src="/files/7TNeaBskaUIRxngqeFfJ" alt=""><figcaption></figcaption></figure>

2. Click the **Add** button then click **New knowledge**. Or select a tag and click **... > New knowledge**. This second option allows you to assign a tag directly to your knowledge.

<figure><img src="/files/CXe6wxckZmLLpj08KAAA" alt=""><figcaption></figcaption></figure>

3. Click **Complementary answer**.

![](/files/8Ahw8CawefuttSMpwe3K)

When you select this type of knowledge, here's what appears:

![](/files/Dj8P3lWrNQ4FoZEeARpX)

4. Double-click the blue window or click the **Edit** of the blue bubble (condition on context): ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAYAAAArdgcFAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wcQCBYZyN0ErAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAHeSURBVDjLrZTda9pQGMZ/jWeGhDVusx8otuLWrR0TSgfdxQr777eLMXBlFgq1FTsxVlFJ3M4ayceuzNQkmtqdm8OBvL/znOd5824EQRDwyJWEUNaBdQdjag0T1/NZpm3jocpvOkMuWj0ANrUsZ9UyIqM8XnmtYXLR6iEyCpXdZ9jS4UfzLtEqkQbqej61K5PuaIyhq5weldCygonn0+5bAJwcFCIZKGnAn+stuqMxeUPjrFpGy4oQmDc02n0LSzqRcJcqt6TDt8ufSMeltJ3j5KAwV3zTGTKw/2DoKjldjYQrloG/1Fu4ns+b0haHe1tzxbWGSbtvsfv8Ke9fF2O7JhZ+27M4vzYBOH5VYH8nFxZPbbKlE/uaWWtEXA+fX5uIjMKHoxJ5Qw8/tqTD96sOtnR4V97hZfFFIjgWbo5+ITIKH6vlOR8HtuTrZRvX8yOvSVoRuP37nv3t3Bx4apPIKHw6rsSGt6g60ueu52NLh0rh33OnwWlZwenbvVjwIjRW+cT1AGiaQ+rNLq7nA2Doavibp50WQRBEZ8ttz0LeT8Kzpj6hmN8M50eSytnzdI/Ak5Sl8XhxV9KAV10WB049FdMEGLeLVYrXBa8cXOuCQ1vSBvhQcCTQ/2HF7CV/ASslo4fUp0eOAAAAAElFTkSuQmCC)
5. Fill in the tab fields **Configuration** and **Triggers**.

![](/files/hwAvFnfvlRz5Sm8sLsks)

![](/files/Bt6l1lJ23U5gOafUL8de)

* **Configuration:**
  * Label: add the name you want to give to this knowledge.
  * Activation: here you select the frequency of use of this additional information.
  * Position: choose the position of the add-in before, after, or instead of the answer on which you want to apply this knowledge.
* **Triggers:**
  * Condition: the right arrow displays the list of context conditions created beforehand. Select the context condition that you want to use. This field is required.
  * Tags already used: limits the triggering of the complementary answer according to the tags (associated with the knowledge) used during the dialog. This field is optional.
  * Knowledge already used: you can trigger this answer when the user asked a question about a particular knowledge. This field is optional.
  * Filter by answer type: you can choose to trigger this answer when the bot answers directly, when it is reformatting or when it does not understand. This field is optional.

When you have finished configuring your complementary answer, click **Update**.

6. Then complete the answer window using the tools. Note that you can check out the Answers elements page for an overview of the possibilities offered by the answer window.
7. Select your status and click **Update**. Your knowledge is created.

<figure><img src="/files/OoKVAWIOQpKXK4s37Aen" alt=""><figcaption></figcaption></figure>

### Use case

The goal of this use case you can copy is to create a complementary answer to supplement each question of the user about variables.

In order to achieve the practical case, please follow the following steps:

1. You must first create the correct context condition. To do so, go to **Content > Context conditions**.
2. Click **Add** and fill in the fields like this:

<figure><img src="/files/NbhXLOfyzHZ9xZ9L5vHc" alt=""><figcaption></figcaption></figure>

3. Click the blue tick. Your context condition is created.
4. Go to the **Knowledge** page and create a new knowledge (**Complementary answer**).
5. Edit the blue bubble and fill in the fields on the **Configuration** tab like this:

<figure><img src="/files/Gay4HDXpOxkTcAhI9do3" alt=""><figcaption></figcaption></figure>

6. Then click **Triggers** and fill in the fields like this:

![](/files/IDWeIUWASv6ENakt2pO6)

Note: here you can add the **Livechat** tag in the **Tags already used** but in the context of this example, this filter is not necessary.

7. Click **Update**.
8. Edit the answer window and add the complementary answer:

<figure><img src="/files/t7ugh0GgdSoxgpiMqw0G" alt=""><figcaption></figcaption></figure>

Note: do not hesitate to insert a separation at the beginning of your answer to separate the main answer of the complementary answer into two separate bubbles. To do so, please click on the icon on the toolbar:

<figure><img src="/files/29SXJGV4r4WDAVbNBC2o" alt=""><figcaption></figcaption></figure>

9. Click **Update** then test your bot

<figure><img src="/files/Esetcfvj8hlL4qmuRHed" alt=""><figcaption></figcaption></figure>

The first term "Variables" pronounced by the user will trigger the complementary answer. In order for it to be triggered for each interaction, it would be necessary to change the **Activation** field to **Every time**.

Next step: in order to enrich the content of your answers, you can learn more about the answers elements which will allow you to discover all the possibilities available to you.


# Predefined answer

The predefined answer allows you to prepare some answers to the most frequently asked questions during a Livechat session. This makes it possible for the operator to give answers faster.

Note: To activate predefined answer, you should active "livechat mode" in Preferences > Bot > General

To create a predefined answer:

1. Go to **Content > Knowledge**.

<figure><img src="/files/LlKW88BFQEJ3fbLXYlzW" alt=""><figcaption></figcaption></figure>

2. Click the **Add** button then click **New knowledge**. Or select a tag and click **... > New knowledge**. This second option allows you to assign a tag directly to your knowledge.

<figure><img src="/files/CXe6wxckZmLLpj08KAAA" alt=""><figcaption></figcaption></figure>

3. Click **Predefined Answer**.

<figure><img src="/files/U0KYVuGMqnbRLO4yXxfe" alt="" width="563"><figcaption></figcaption></figure>

When you select this type of knowledge, here's what appears:

![](/files/OSaVZOwmlTM7WfZaxoTj)

When you select this type of knowledge, here's what appears:

4. Enter a name for your predefined knowledge in the **Label** box. You can also associate this predefined answer via a keyboard shortcut. From then on, this shortcut will allow you to display this predefined answer during a Livechat session.
5. Click **Update**.
6. Then complete the answer window using the tools. Note that you can see the Answers elements page to get an overview of what the answer window can do.
7. Select your status and click **Update**. Your knowledge is created.


# Event-triggered knowledge

Want to maximize user engagement with your chatbox? Let the event-triggered knowledge help!

As its name implies, the event-triggered knowledge allows the chatbot to send a specific message to users when a given user action is detected.

For example, when the chatbot detects that the user has been staying on the same page for 5 minutes, it can pop in and ask "How could I help?".

In this article, we will walk you through this feature.

### Getting started: how to create an event-triggered knowledge

1. Go to **Content > Knowledge**.
2. You can either click on the \*\* + New knowledge\*\* button or click on the **...** icon next to a tag and then click **New knowledge** (as the example below shows). The second option allows you to assign a tag directly to your knowledge.

<figure><img src="/files/CXe6wxckZmLLpj08KAAA" alt=""><figcaption></figcaption></figure>

3. Choose **Event-triggered knowledge**.

![](/files/fsKFlpctOKP5Lo8uHZSi)

This is what an even-triggered knowledge looks like:

<img src="/files/0zJP8BniBZ6sQN8GV5zd" alt="" width="560">

* "Label" is where you will name the knowledge.
* The "+" button allows you to add rules. (Yes, you can define several rules! Keep reading.)
* The first box corresponds to the trigger event. The second to the operator (equals, greater/less than, different from... ). The last one to the value - it can be a number, a piece of text or an url.

Note: the BMS provides a few of predefined events (check out [Predefined Events ](#predefined-events)for more details).

4. Click on the ✓ to validate.
5. Finally, edit in the answer box the message you want your users to see when the expected action is detected by your chatbot. (Don't forget to update the knowledge state to "published" so that this knowledge can be used properly by the chatbot. )

<figure><img src="/files/Bjm73ggejBdVE8GjI9Cb" alt=""><figcaption></figcaption></figure>

### Become a Pro: how to combine several rules

#### Combined rules with "AND"

Consider the first use case: we want to send a message to users who have been staying on a particular web page for 10 seconds without any actions.

To do so, we need to create an event-triggered knowledge with more than one rule by using "And".

The knowledge will be triggered only if ALL the defined conditions are met.

How to :

1. Create the first rule "current page contains [www.dydu.ai](http://www.dydu.ai)"
2. Click on the "+ (add element)" button that displays on the right of the first rule when hovering over it.

<figure><img src="/files/hO76kNYxXonUCaiJzkV0" alt=""><figcaption></figcaption></figure>

3. Define the rule as "Inactivity duration greater than 10" and validate. Don't forget to click "save" to save your knowledge. Voilà!

<figure><img src="/files/Up9PEImnCpZqn7lcNn5s" alt="" width="557"><figcaption></figcaption></figure>

#### Combined rules with "OR"

Consider now a second use case: we want to send a message to users who EITHER have been staying on a particular web page for more than 10 seconds without any action, OR have an IP address located in France.

The knowledge will be triggered if one of the defined conditions is met.

How to :

1. Create the first rule "current page contains [www.dydu.ai](http://www.dydu.ai)
2. Click on the "+ (add) " button right below "Conditions" to add an "OR" rule.

<img src="/files/icO5oPmv8AQi9ocJNMwh" alt="" width="557">

3. Define the second rule as "Country equals France" and validate. Don't forget to click on "save" to save your knowledge. Voilà!

<img src="/files/DKqccXOpZ7SvWbCkikol" alt="" width="563">

As you can see visually, "OR" rules are always on the same level whereas "AND" rules are on a hierarchical one. According to your needs, you can freely combine rule types. For example, create 2 "OR" rules each of which is composed of an "AND" rule. (as the image below shows).

<img src="/files/f688XOCXw4EiVUUTaoYQ" alt="" width="537">

#### Use case with Livechat

You can trigger the chatbot even using Livechat. Refer to Knowledge base set up for Livechat escalation for more information.

### Predefined events

Here is a list of event triggers currently provided in the Bot Management System:

* **Inactivity time:** the duration of user inactivity (in seconds);
* **Page visit duration:** the duration of a user's visit on a page (in seconds);
* **Duration since the last visit:** the amount of time between the current visit and the previous one of the same user (in seconds). Visits are logged for 60 days (information stored in the cookie *DYDU\_PUSH\_XXXX*);
* **Total duration of the current visit:** the total amount of time of the current visit of a user(in seconds);
* **Language:** the language used by the web browser (format: en-US);
* **Number of pages viewed:** the total number of pages viewed during a user session ;
* **Number of visits to a page:** the total number of visits to a page by a user;
* **Total visit count:** the total number of visits to the website ;
* **Current page:** here you need to add the URL or part of the URL of the page to which you want your users to receive a particular message when visiting;
* **Previous page:** here you need to add the URL or part of the URL of the page previous to the current one your users are viewing - for example, users receive a call-to-action message after abandoning the payment page on an e-commerce website;
* **Page viewed during a visit:** here you need to add the URL of a particular page on which you want to send a message to your users - for example when the bot detects a user is currently viewing the "contact page, it pops in and asks "Is there anything I can do for you ?";
* **Country:** the country where the user IP is located;
* **City:** the country where the user IP is located.

{% hint style="info" %}
Note: a new visit is counted after 30 minutes of inactivity. Thus, if a user is inactive for more than 30 minutes, two visits will be counted.
{% endhint %}


# Slot filling

### What is Slot Filling?

The goal of Slot Filling is to recover all the parameters matching an intention.

In order to answer correctly to the user, Slot knowledge type is created to capture and save the required parameters.

With this feature, the bot can detect if the user has sent all the information it needs. Otherwise, it automatically asks questions to get them.

<figure><img src="/files/PiDZITbPxnUMfnEADtVK" alt=""><figcaption></figcaption></figure>

### Use case: order a pizza

This case study is based on a pizza order made through the bot. To order a pizza, two parameters are needed:

* the number of slices and
* the type of pizza.

These parameters correspond to the slots that we will create and use throughout this case study.

Our example is divided into three parts:

* in the first part: we will create the first slot: the number of shares;
* in the second part: we will configure the filling slot (i.e. create a knowledge that will use this slot);
* Finally, we will create the second slot (the type of pizza) and add it to the existing filling slot.

**Part 1: Creating the first slot: the number of slices**

In our case, the number of slices is a positive number. The bot therefore expects the end user to enter an "integer".

We will therefore create a "Slot" type of knowledge that will allow us to understand the user's formulation, whatever the integer he enters. In order to be able to re-use the integer filled in by the end user, we will record it in a variable named "part".

In the response of this knowledge of type "Slot" we will display the input of the user thanks to the syntax ${capture.part}

{% embed url="<https://youtu.be/gwh4mWZiTrQ>" %}

**Part 2: Configuring slot filling (using the slot created in a knowledge)**

In this part, we will create a simple knowledge allowing us to understand the end-user's intention "I want to order a pizza". Within this knowledge, we will use the previously created slot (the number of slices) thus configuring our filling slot!

{% embed url="<https://youtu.be/cFZ32PO04hU>" %}

When using a slot in a knowledge, several options are available:

General options (these options will be applied to the whole slot filling)

* **Introductory sentence**: the introductory sentence is the first sentence displayed to the end user when he/she enters the slot filling process. We use this sentence to inform the user that there is missing information in order to process their request. Example: "I need additional information to process your request".
* **Max. garbage count**: This option allows you to determine after how many misunderstood sentences the slot filling process will be abandoned.
* **Confirm before leaving the slot**: this option allows the bot to ask for the end user's confirmation to abandon the slot filling process.
* **End sentence**: the end sentence is the sentence displayed to the end user when he/she abandons the slot filling process.

We use this sentence to inform the user that they are leaving the process. Example: "Are you sure you want to leave your current application? ".

Slot options (these options will only be applied for this slot and in this slot filling)

* **Settings tab**:
  * **Slot**: this is where we select the slot to use;
  * **Variable name**: this is where we define a name for the variable that will record the response of the Slot knowledge (Slot knowledge that we created in the first part)
  * **Required**: this box (checked by default) implies that the information must be captured to continue the process. You can uncheck this box to indicate that the slot is optional (if it is not given by the end user, the bot will still be able to continue the process)
  * **Reset**: this box (checked by default) allows to reset the captured value. This allows you to modify the value of the slot. Here are the different possible behaviours:
* **Case 1**: The user says "I want to order a pizza for 10" and then says "I want to order a pizza for 3".
* If the box is not checked, the bot understands the value 10 and keeps it. If the box is checked, the bot understands the value 3 and overwrites the value 10.
* **Case 2**: The user says "I want to order a pizza for 10" and then says "I want to order a pizza".
* Even if the box is checked, the value is not reset: the first value included is still valid, i.e. the value 10.
* Instructions tab:
* Question that ask the value of the capture: this is where we write the sentence(s) we want to display to the end user to ask for the missing information.

**Part 3: Create a second slot (the type of pizza) and add it to the existing slot filling**

In this last part, we will create the last slot needed to proceed with the pizza order: the pizza type.

As several pizzas exist, we choose to create a group of formulations listing all the available pizzas.

We will then create a "Slot" type of knowledge that will allow us to understand the user's formulation whatever the pizza he/she enters among the available pizzas.

As with the creation of our first slot, in order to be able to re-use the type of pizza entered by the end user, we will record it in a variable named "pizza". In the response to this knowledge of type "Slot" we will display the user's input using the syntax ${capture.pizza}

Finally, we will add this slot to the simple knowledge "I want to order a pizza" (knowledge that we created in part 2)

{% embed url="<https://youtu.be/48LCrzk1OXY>" %}

### Use case: buy a train ticket

In this case, the user declares an intention for which the bot needs two mandatory parameters to satisfy his request. To do so, the bot will successively recover this information from the user and thus to continue the process.

<figure><img src="/files/TL6NygNyygZYkCVWevF8" alt=""><figcaption></figcaption></figure>

In this second case, the user sends to the bot one of the two parameters required to continue the process. Thus, the city parameter is filled in and the bot then only asks for the second parameter, which has not been given (the date). Once this parameter is retrieved, the bot is able to continue the process.

<figure><img src="/files/Dj7uNtR6e0OJjYScQEVg" alt=""><figcaption></figcaption></figure>

In the latter case, the user transmits to the bot all the required parameters. The bot then retrieves all the information and can directly continue the process of the user request.

<figure><img src="/files/LrlTxNWbMeAlHIli6GxH" alt=""><figcaption></figcaption></figure>

### 1 - Configuration of the slots

As a first step, you must create and configure your slots that you can use later in your knowledge. Your slots correspond to the parameters to retrieve to answer the user's question. As part of our train ticket purchase example, the slots are **City** and **Date**).

Please follow these steps:

1. Go to the **Knowledge** page.
2. Click the **New knowledge** button at the top left of your page.
3. Click **Slot**.
4. Specify the type of content you want to retrieve in the user sentence to understand. In our case, we add the matching group allowing to recover a precise date (existing group by default).

<img src="/files/YQ6cvovGSiGSzY5Dpbpm" alt="" width="311">

<figure><img src="/files/Yy9SJ5Ydc18eFlTTJyIz" alt=""><figcaption></figcaption></figure>

5. Click **Create**.
6. You can then configure your answer just like answering a answer to a question. In our example, we decide to recover the day and the month.

<figure><img src="/files/urEP3sNPRBzW1mwyQuJs" alt=""><figcaption></figcaption></figure>

The **Date - Precise Date** group can capture multiple information such as the day of the week, month, month, and year. Of this information, you can return in your answer all or only part of this information. In our example, we want to display only the day of the month and the month. Thus, we exploit the following captures: ${capture.date\_dayofmonth} and ${capture.date\_month}.

6. Repeat the process to create as many slots as you want. As part of our example, we've created a second slot that will retrieve the city whose variable name is **city** (thanks to a matching group consisting of names of city, created in advance):

<br>

<figure><img src="/files/ys2x7tCZkPL5F3Cuty37" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/FIE58kaHKebheHZTa14a" alt="" width="313"><figcaption></figcaption></figure>

<figure><img src="/files/fvQ9NeTmFecv6r7BzXxq" alt="" width="335"><figcaption></figcaption></figure>

<figure><img src="/files/36EVo5m10Xhji2G6Z7KG" alt="" width="343"><figcaption></figcaption></figure>

Your slots are now created and configured. Note that you can add as many slots as you want.

### 2 - Creation of a knowledge using the slots

You will now be able to exploit your previously created slots within your knowledge. To do so, please follow these steps:

1. Create a Answer to a Question to create the knowledge that will use the previously created slots. To do so, click **Create knowledge** then click [**Answer to a question**.](/contents/knowledge/knowledge-types/answer-to-a-question)
2. Enter the user sentence and click **Create**.
3. Edit the user window (blue bubble) and click on the **Slot filling** tab.
4. Fill in the fields.

<figure><img src="/files/1iZyHU9OdGXHSl4IMUHs" alt=""><figcaption></figcaption></figure>

* **Introduction sentence**: enter an introductory sentence to inform the user that information is missing to process the request. Example: "I need more information to treat your request".
* **Leaving sentence**: enter an end sentence to inform the user that the slot filling request is abandoned.
* **Max. garbage count**: this option allows you to determine after how many misunderstood sentences slot filling is dropped.
* **Leaving confirmation sentence**: enabling this option allows you to request confirmation from the user to abandon slot filling.

4. Click **Save**.
5. Now you can use previously created slots and add them as a parameter for your knowledge.
6. Click **Add** (at the bottom of the page) to add a new slot parameter.

Description of fields:

* **Slot**: this item allows you to select a slot;
* **Variable**: this is the name of the variable that will store the result of the knowledge slot.
* **Prompts**: this element allows you to add the sentences (and its alternatives) to asked the user again for missing information.
* **Options**:
  * **Required**: checking this box implies that the information must be captured in order to continue the process. Unchecking this box indicates that the parameter is optional.
  * **Reset**: checking this box allows you to change the variable captured by the slot. Here are the different possible behaviors:
* *Case 1*: the user says "I want to buy a train ticket for **Paris**" and then say "I want to buy a train ticket for **Bordeaux**".

If the box is not checked, the bot captures the value **Paris**. If the box is checked, the bot captures the value **Bordeaux**.

* *Case 2*: the user says "I want to buy a train ticket for **Paris**" and then say "I want to buy a train ticket."

<figure><img src="/files/4VbdJ9yiZLUQZ45yMrds" alt="" width="183"><figcaption></figcaption></figure>

Even if the box is checked, the value is not reset and the first value captured is still valid, which is **Paris**.

Note: To edit **Options** you need to click on the **...** on the right of the line, it will open a new window.

5. Click **Update** independently for each slot parameter to save your changes.

Note: you must click on the cross at the top right to leave the edition mode.

In our example:

<figure><img src="/files/YfvfM0CGXzwW2mwwAHf0" alt=""><figcaption></figcaption></figure>

6. In the answer window, enter the triggered answer when all defined parameters have been completed. We recommended to write a summary sentence of the situation. Then click **Update**.

<figure><img src="/files/KdhzzzYQa8pv0mmoz9g3" alt=""><figcaption></figcaption></figure>

Tip: you can click on the icon at the right of a variable (in the drop-down menu **Configured Slot Filling**) to copy the code to be inserted into your answer to display the variable.

<figure><img src="/files/AXiY1BDDxhQT67DteFBh" alt=""><figcaption></figcaption></figure>

Warning: if a slot is deleted after creating a knowledge exploiting this slot, the knowledge can not be looped if the parameter is mandatory. An error upon interaction will be triggered.

Next step: in order to enrich the content of your answers, you can learn more about [the answers elements](/contents/knowledge/answers-elements) which will allow you to discover all the possibilities available to you.


# Answers elements

### Answers elements

You can use the different formatting offered by the text toolbar: bold, italic, add bullets, and so on. Below you will find more details on the available answer elements.

### Insert a hyperlink[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_elements#insert-a-hyperlink) <a href="#insert-a-hyperlink" id="insert-a-hyperlink"></a>

You can suggest opening a web page in the answer:

1. Select the word or group of words and click the **Insert/edit link** icon: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAIAAABLixI0AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAahJREFUOI1j/P//PwOVABO1DKKyWSwk6/hwZtHkxYfufONSsYzLSDIRJdtdr49Pruvf8UzUMthO6vXevua+Y6+RZP8TD14dm5QbFZk76egrZO7001+g8kSb9eXCdGSDoKZvq42Lqt32HsIj1o8fjm8+/lEloiLXiv/Dh68w0d8MDAwMDKykhhcrAwO/igrD8cklBSXzLkLCrrdjyR1+22BLARLD68vT+1cPIsLr1bEeDC8z/seT7j9cXD5j8aE73wQs08v9vi1unnKcwTg9w+73nUvHt++9zmqRU5trhZQmcJv1+vjk5inHf2s6e1roq7AdnzHzOINFTm0s96bOGcc/cslbRmbEIicu3H6ExncvxDsQ9oGrD57+xBcM2MyCRn8vJCwuTEqJzJ109OnVhbnxTQfe4zELSx76cHzdoY8qEe1FkLDQT+qexiAg8HHTjo8MrL/xRTW2NPGbgQGRaBgYuAUEvh3v7Vh5h9/CDx79WAFuPyLyCmb0YwU44hEeiXZSzw5hiX6sAE+auLhoxrxDD79xydvF5caa4PUcIbNIB4O1jB4JZgEAbTgR0SpHPOgAAAAASUVORK5CYII=)
2. Fill in the following fields:

* In the first **Url** field, enter your link.
* The **Text to display** field allows you to enter the text that will be displayed.
* The **Title** field allows you to add a title to your link. This title will be displayed only in the source code.
* The **Target** field allows you to define how the link will open.

![](/files/RkdD6jTswfLWyYwcxoR7)

3. Click **Ok**.

![](/files/jWMqXa6OstAXsyZO6RYo)

### Make a clickable email address

If you want to make a clickable email, perform the same operation as to add a hyperlink:

1. Select the part you want to make clickable and click **Insert/edit link**: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAIAAABLixI0AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAahJREFUOI1j/P//PwOVABO1DKKyWSwk6/hwZtHkxYfufONSsYzLSDIRJdtdr49Pruvf8UzUMthO6vXevua+Y6+RZP8TD14dm5QbFZk76egrZO7001+g8kSb9eXCdGSDoKZvq42Lqt32HsIj1o8fjm8+/lEloiLXiv/Dh68w0d8MDAwMDKykhhcrAwO/igrD8cklBSXzLkLCrrdjyR1+22BLARLD68vT+1cPIsLr1bEeDC8z/seT7j9cXD5j8aE73wQs08v9vi1unnKcwTg9w+73nUvHt++9zmqRU5trhZQmcJv1+vjk5inHf2s6e1roq7AdnzHzOINFTm0s96bOGcc/cslbRmbEIicu3H6ExncvxDsQ9oGrD57+xBcM2MyCRn8vJCwuTEqJzJ109OnVhbnxTQfe4zELSx76cHzdoY8qEe1FkLDQT+qexiAg8HHTjo8MrL/xRTW2NPGbgQGRaBgYuAUEvh3v7Vh5h9/CDx79WAFuPyLyCmb0YwU44hEeiXZSzw5hiX6sAE+auLhoxrxDD79xydvF5caa4PUcIbNIB4O1jB4JZgEAbTgR0SpHPOgAAAAASUVORK5CYII=)

![](/files/AUQAQT9IlyHL3sfummpt)

2. Add to the URL: mailto:(email address) and click **Ok**.

![](/files/N4gjQn7O9sMi0DGBPbwA)

![](/files/kQeywXe25zw6RoOj6AlW)

### Create a redirection link to a knowledge

You can propose a clickable link that will refer to another knowledge of your bot:

1. Click the **Insert redirection**: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAWCAIAAAAqztkuAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAbFJREFUSIlj/P//PwPtARMd7BhB1vyiuTW/nu3pzEzN6tjzjFp2MWKktF8P9vR3zrv0kYGBgYFfL6m8yEX+2abK+hWPfmPRzqWX3l1hL0DQGjTf/HqwvasFagcDA8PHS/NaOrc/FNDUl+fCqv3b62cfsUqgARYUSy7O61x8/RsDv7w8w8OHH/nl5RgePrq+uHNF+YSmORFoOh8sL6na/JwYO9CtYZM30Vd5+Ns51/dZX9XDj1x6GcUemybvZTWRZyNo0ONnLy5eu4kmKCMpbqCtgW4Ng4BJRpMJAwPDg+VQASn73HZ7otwrKyXBwMCAbBPcDgbq5htZKQl9LXVMOxjQfUMM+HBmRt/a3865HlD+r2cHJ0/eyxpclGEiAPXT2/cfkO0gx5pfD89cvPPo452WZ/IMDAwM3y7Na9786CMD/5mHv0wE2CB+gliGDDDzDQMDnlTEpRJRXqh3Z0rL4uvfkEQ1Y2vKPfGlE+xxIyAliiOfPDx+/aOCZ1lNrCY/VIifoB0MDAwM/8kEP5/u7siIy2zf/fQnEaqxBxqx4BcDA+EcxcCAK26oDga8vhmK1gAAg4H8oQ+d7kcAAAAASUVORK5CYII=) of the toolbar and then click **Reword**.
2. Enter the first terms of the knowledge on the **Reword** field and select it.

![](/files/zJQavY98bGYRrjtxkiuM)

3. Click **Ok** then click **Update**.

![](/files/kw4WBVWCSgRXIvfwMpwE)

### Use the matching groups

You can pick up a word from a matching group in the answer.

<figure><img src="https://dev.docs.dydu.ai/assets/images/er06-82b5da431a3969148a640eaa20d124e9.png" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/M1xpnl6rC9x6YrrXWWMm" alt=""><figcaption></figcaption></figure>

In the answer, once the cursor to where you want to add your formulation, select the **insert variable** button:  then select the variable or group. In our case, we select "dialog\_nb\_rewords" from the **Variable** tab.

<figure><img src="/files/01JS2OR8Mguk8ZsMhx09" alt=""><figcaption></figcaption></figure>

Click **Ok** and the formulation will be represented this way in the answer bubble on edit mode:

<figure><img src="/files/0nMnNjbjuuy9L8cQBVQp" alt="" width="305"><figcaption></figcaption></figure>

### Use advanced options

By clicking **More options** at the bottom of the answer window, you will be able to configure more information.

<figure><img src="/files/hM5ZR9lzjpMLNgYoX50z" alt=""><figcaption></figcaption></figure>

It is therefore possible to perform redirects.

<figure><img src="/files/SK3SFqG2TMbzvVAVSQhO" alt=""><figcaption></figcaption></figure>

The URL redirection is used to automatically redirect the user to a page when the answer from the bot is returned.

It is also possible to redirect to another knowledge. This makes it possible to avoid duplicating its content.

For example, the question "How can I work on a testing environment ?" is using a redirection to knowledge "How can I create a bot ?":

<figure><img src="/files/M5voSLC0zkDn5eyyfQA0" alt=""><figcaption></figcaption></figure>

The **Redirect to another knowledge** box is using predictive typing:

<figure><img src="/files/uyQ0HyuoJSgzMeRPG0kB" alt="" width="436"><figcaption></figcaption></figure>

Just above this field, a checkbox allows you to separate the responses.

If this box is unchecked, both responses will be grouped into a single message, and the user can only provide feedback at the end. For example, if a user asks "How do I work on a test environment?", they will receive the first part of the answer followed immediately by the answer for "How do I create a bot?" in one continuous flow.

If the box is checked, the two knowledge base entries will be separated. This allows the user to provide feedback on the first entry and the second entry independently.

When the user asks the question "How to work on a test environment? It will have the first response element added in the knowledge "How to work on a test environment?" as well as the answer to "How to create a bot?":

![](/files/5IkA2XLbJlcpllFzO5a4)

A gray bubble *Source* appears. It means that the knowledge *Source* "How to create my first knwoledge?" proposes a redirection to the knowledge "How to create a new knowledge?".

<figure><img src="/files/rMvn6UTyUgvwoXwYq3sc" alt=""><figcaption></figcaption></figure>

### Insert a sidebar

If you have extra content to show to your end users that are not adapted to the classic dialog box of the chatbot, you can use a sidebar which is an extra modal placed next to the dialog box. It can be used to show images, videos, tables, or web pages.

<img src="/files/M1WIK6TQMzUcNvRaQsrK" alt="" width="460">

You can add a sidebar via the WYSIWYG editeur by following theses steps:

1. In the answer editor, click **More options -> Sidebar**.
2. Edit the sidebar content as you would do for an answer. If you want to insert a web page, paste the page's URL in the **"Show a web page"** field.

<img src="/files/axxhCea9tAdYObBAwbFN" alt="" width="457">

Tips: if you want to add an image right next to the a (without a line break), you will need to define the format of the text and the image as "Paragraph".

### Other options

The other options are composed of:

<img src="/files/vcibZmO2CISAO9OA0tso" alt="" width="457">

* Define a GUI action: this allows javascript code to be included in the bot answer. This is used, among other things, to define the animation associated with the answer. The GUI action is also used to define Livechat actions.The GUI action is particularly necessary to:
  * Escalate the conversation in livechat, [Create a livechat escalation](https://dev.docs.dydu.ai/docs/Knowledge/Key_concepts/frequent_use_cases/#create-a-livechat-escalation))
  * define callbot actions (hang up, repeat, etc.)
  * allow a file download button to be displayed during a chatbot conversation (link to the new “Use a GUI action > Allow the user to send an attachment to the chatbot” doc

{% hint style="info" %}
When you upload files, you can send up to **five attachments maximum** at one time.&#x20;

Important: the total size of these five combined attachments must **never exceed 10 MB** per upload.
{% endhint %}

* Answer type: this allows you to define an answer type associated with the knowledge. So, you can consider a knowledge as being a social knowledge, a misunderstood sentence or still as a neutral knowledge (not counted in analytics).
* Automatic feedback: this option allows you to set an automatic feedback for the knowledge.
* Survey: this option allows you to associate a [survey](/preferences/bot/survey) with the knowledge that will then be suggested to the user.
* Type of contact provided: this option allows you to add a way of contact for the user. You can make him filling a form, etc.
* Switch consultation space: this option allows you to make the user switch to a consultation space.
* Start Date: you have the option to create a knowledge that you do not want to publish right away but at a future date planned. By choosing a starting date, an alert on that date will indicate that you must pass this knowledge to the *Published* status to make it accessible to users.
* Expiration date: when the date is due, an alert will appear in the **Alerts** tab and the configured answer will be displayed for unpublished knowledge (modifiable answer in [Global sentences](https://dev.docs.dydu.ai/docs/Complementary_items/global_sentences)). You can continue to display the answer you added by checking the **Keep answer after expiration date** option.
* Variable edition before action: this option allows you to define a variable before executing the action. The defined action will then be executed before the answer.
* Variable edition after action: this option allows you to define a variable after the action is executed.
* Keep answer after expiration date: this option allows you to keep the answer after the expiration date.
* Ignore in analytics: check this box allows you to indicate that you do not want this knowledge to be accounted in analytics.
* Keep dialog box minimized: check this box to indicate that you want to keep the dialog box minimized.
* Ask for feedback: you can choose if the answer does or does not require the users feedback. The demand is automatically checked when creating a knowledge. If you want to create a decision tree, this one will be requested at the end of a tree.
* Lock text field: this option allows you to lock the text field.
* Exclusive misunderstood sentence :&#x20;

This option is only available in the failure branch of a decision tree.

<figure><img src="/files/xPMrjEwdZtS92CrZKJfs" alt=""><figcaption></figcaption></figure>

When this option is checked and the user provides a response that does not belong to the success branches of the decision tree, the bot will reply with the content of the failure branch.

When this option is unchecked and the user provides a response that does not belong to the success branches of the decision tree but matches another answer from the knowledge base, the bot will provide the response from that knowledge source.

### Knowledge template[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_elements#knowledge-template) <a href="#knowledge-template" id="knowledge-template"></a>

If you have created [knowledge templates](https://dev.docs.dydu.ai/docs/Complementary_items/predifined_answer_template), a **Template** tab will be available from the options in your answer window.

![](/files/kYZeemroZVQqh7OXRgnN)

You can then select one of your templates and use it to enrich your knowledge.

![](/files/5151SpzijwUsIM8ZVK43)

### Use step actions

You can also use step actions: those allow you to cut multi-step knowledge with the **Previous** and **Next** buttons.

You can use the “step actions” to divide an answer into several steps. This feature is useful for example for knowledge explaining a step by step process.

![](/files/jFn6mvIfPGzGaTg0vajP)

![](/files/Jk0AbsOddBDicvcFkvMt)

First, you need to parameter this feature in your project because it is not by default.

1. Go to **Preferences > Bot > General**.
2. Scroll down to the **Knowledge** section
3. Check the **Allow action steps** box.

![](/files/AwjhSQzLiJ8XkVCImRDL)

4. Click **Update** at the bottom of the page.

Now you can create knowledge with step actions.

When creating a knowledge, you can then add action steps this way:

1. Pull down the menu dedicated to the consultation spaces at the top right of the answer window.
2. Click the step icon in the current consultation space, then click **Add step**.

![](/files/NXLu0P7vMqYQZLO9llYq)

Default = step 1

Default -step 2 = step 2

Default - step 3 = step 3 …

You can create up to 15 steps by clicking on the **“steps”** icon.

<img src="/files/APIeeMD2hIt6gEtlyGx7" alt="" width="548">

For each addition of a step **“update”** the knowledge for saving the corresponding answer.

<img src="/files/2qEHnVhWw6rnA3czlF1X" alt="" width="455">

Click the **"-"** icon to remove a step. You can also delete all steps thanks to the **"Delete all"** option.

**On front side**

The answer is now displayed step by step with the corresponding answer and the possibility to go forward and backward over the steps using the **“previous”** and **“next”** buttons.

### Source code

Note that you can also change the source code for your answer by clicking **Source code**: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAOCAIAAABLkRCkAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAFtJREFUKJFj/P//PwPFgIlyI+hgyuvjk/Oio/ImH3uNjYsG/mMFr45Nyo2KzJ109BUhwf//////j80U3KpxSWGYgscI3AqoE7o08hEe1aSFLlY9eMOL8f9wywEAYKd/5lWkZPEAAAAASUVORK5CYII=)

<img src="/files/VOzNV4c5NGCJLlRQn9dF" alt="" width="480">

Click **Ok** to validate your modifications.

{% hint style="info" %}
**Content Security: Using JavaScript in Knowledge Items**

By default, the system allows the injection of JavaScript scripts within knowledge items to add dynamic interactions. This is the standard behavior of the chatbot.

However, if you wish to restrict this behavior for security reasons, a specific configuration can be implemented:

* Disabling JavaScript: Once activated, this security feature automatically removes any JavaScript script contained in knowledge items before they are displayed.
* Implementation: This option is not enabled by default. It is the client's responsibility to inform Dydu if they want the ability to use JavaScript in knowledge items to be disabled for their bot. Dydu will then handle adding the necessary configuration reference (`bot.allowjsinanswers`).
  {% endhint %}

### Use a GUI action (practical case of changing the placeholder at the query of a knowledge)[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_elements#use-a-gui-action-practical-case-of-changing-the-placeholder-at-the-query-of-a-knowledge) <a href="#use-a-gui-action-practical-case-of-changing-the-placeholder-at-the-query-of-a-knowledge" id="use-a-gui-action-practical-case-of-changing-the-placeholder-at-the-query-of-a-knowledge"></a>

You can use your GUI actions within your knowledge from the answer window. In the practical case below, you will be able to define a GUI action to modify the placeholder of your bot after triggering a specific knowledge. This can be useful if you want to tell the user to enter their email address.

1. From the answer window, click **More options** then click the **Other options** tab.
2. Click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAIAAAB1dKN5AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAM5JREFUOI1j/P//PwNVARN1jRsiJrKg8b///PXs1Ts0QSkxIU52NjJNfPry7bTl29AEsyK9VOQkyTQRAvrKk3ceOXfn0fPsKO+izrkMDAx3Hj0n0iZ0E6XFhbMivdC0SYsLQxjI4pgWYDeRk50NzVo4l0iP0yv1FHXO3Xn0/N3HLyCBSBLAHjNoQUaRie8+fjlz5ZabtRHZJqL7+t3HzzuOnCfbOCwmUg5on68hYNfRc1QzkYuDXVlW4vbD5wR1KstKcHGwY4ozjpbhg9REAGWXQjvbL5bpAAAAAElFTkSuQmCC) icon on the right of **Define a GUI action** then select the action **CustomPlaceHolder**.
3. Click the arrow on the right of the set GUI action and enter the title of the placeholder that you want to display after triggering the knowledge.
4. Click **Update** then click **Update** again to validate the changes. Your placeholder will be edited when this knowledge is called.

   Note: It is not possible to test this GUI action from the test bot. To test and validate the correct operation of changing your placeholder to the call of a knowledge, please test the knowledge on your bot from a URL test (on the configuration page of your bot).

### Use predefined GUI action

1. Callbot :

* BlockDtmf
* Block STT
* DoNotSave
* Dtmf
* Hang up
* Redirect
* Redirect with intro
* Repeat
* Send a SIP header
* Silent user timeout
* WaitForAdress
* WaitForDate
* WaitForEmail
* WaitForName
* WaitForNumber
* WaitForNumberPlate
* WaitForPhoneNumber
* WaitForSpelling
* WaitForTime

Functions:

* Clear history interactions
* CustomPlaceHolder
* File load request

This GUI action allows you to propose to end user to upload a file and send it to the chatbot.

For example, if your bot propose to create a ticket for IT support, you can propose to end user to add a file to the ticket.

Accepted extensions are:

png, jpg, jpeg, gif, webp, svg, doc, docx, odt, ods, pdf, xls, xlsx, ppt, pptx, csv, txt.

Max size cannot exceed 10Mb.

Then, you can use this uploaded file as web service parameter using following keywords:${DialogLastFileUploadedContent()}, ${DialogLastFileUploadedContentType()} and ${DialogLastFileUploadedName()}

Attached documents sent by end users are accessible from conversation via an external secured link.

If you clean, anonymize or encrypt conversations, attached documents will not be longer available.

* Open the dialog box
* ProposeHelp
* Display only the side panel

Livechat:

* Connect to livechat
* Teaser
* Call button triggering a knowledge
* Survey
* Display a survey

## **Options related to the Callbot**

### **Voice Changer ElevenLabs**

This feature improves the quality of the callbot's voice synthesis by integrating a voice changer such as **ElevenLabs**. For each response, the user can record their own voice: this recording is analyzed, and the voice synthesis then generates a new version using the selected synthetic voice, while preserving the original tempo, rhythm, and intonation.

{% hint style="warning" %}
This option is available only in the **WYSIWYG SSML** and requires a callbot configured with an **ElevenLabs** voice.
{% endhint %}

It allows the vocalization of responses to be adapted to the way you say them (intonation, pauses, etc.), for a more natural result.

{% hint style="info" %}

* The synthetic voice is used, but the prosody follows the recording. It is essential to read **exactly** the displayed text; adding or modifying words will prevent the feature from working.&#x20;
* **Dynamic variables** (e.g., `${capture.myvariable}`) are not supported.
  {% endhint %}

***Tip:** Write the responses the way you would like to say them out loud.*


# Accessibility for bot answers

Digital accessibility consists of making online services accessible to people with disabilities. The inter-ministerial digital department (DINUM in France) publishes the Web Content Accessibility Guidelines (WCAG).

In order to offer bot managers the possibility of configuring content that respects the WCAG standards without having to go through the source code, dydu has integrated the WCAG standards applied to the dydu content editor (WYSIWYG) into its Bot Management System. This concerns images, lists, attachments, anchors, bold formatting, iframes, links and tables. More details on the accessibility requirements for these elements and how to meet them with WYSIWYG can be found below.

### Picture

#### Obligation on pictures

A picture can sometimes convey meaning and help to understand the rest of the content. If it doesn’t bring any additional information, it’s a “decorative” picture.

The “informative” pictures that “convey information” must have an alt attribute, as a textual alternative. That textual alternative should replace the picture and bring the same level of understanding.

Conversely the “decorative” picture must have an alt attribute empty.

#### How to integrate an image?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-integrate-an-image) <a href="#how-to-integrate-an-image" id="how-to-integrate-an-image"></a>

* To integrate an image, you need to upload it first in the Gallery section.
* Go to **Content > Gallery**
* Click on **Add**
* If you don't have a folder yet, click on **Create new folder in Root**.
* Choose a folder name and click on **Add**.
* Click on **Add** > **Import a file in&#x20;*****Your folder name***
* Choose a file, click on **Import**, your image is now in the folder.
* Go back to your knowledge answer, click on **File Manager**, select your picture.

![](/files/UNVpXjoAa8me8tdVuaZV)

It appears in the answer.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect) <a href="#how-to-respect" id="how-to-respect"></a>

Once your picture is added to your answer, click on the Insert/Edit image icon of the WYSIWYG.

By default a picture is considered as decorative, so its description/alternative (defined in the “Image description” text field) is empty. If your picture is “decorative” the checkbox “Decorative image” must stay selected and the “Image description” field must remain empty.

Conversely, if you consider that your picture conveys information to the user: unselect the “Decorative image” checkbox and add a clear and precise description in the “Image description” text field.

### Lists[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#lists) <a href="#lists" id="lists"></a>

#### Obligation on lists[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-lists) <a href="#obligation-on-lists" id="obligation-on-lists"></a>

Lists (numbered lists or bulleted lists) and the list items must be identified as such in the html code. To do so, they must have the proper html tags.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-1) <a href="#how-to-respect-1" id="how-to-respect-1"></a>

As soon as you choose a “Numbered list” type formatting or “bulleted list” the correct html elements will be properly set. Do not create lists from numbers and hyphens “-” followed by a blank space, this will only generate a continuation of paragraph without adequate qualification.

<figure><img src="/files/UGz6zzKvancy8rWPgfqt" alt=""><figcaption></figcaption></figure>

### Links[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#links) <a href="#links" id="links"></a>

#### Obligation on links[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-links) <a href="#obligation-on-links" id="obligation-on-links"></a>

Links must be identified as such. When a link opens a new tab or a new window, this information must be observable for the user before he clicks on the link. The user should not be lost in his navigation.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-2) <a href="#how-to-respect-2" id="how-to-respect-2"></a>

When you insert a link via the WYSIWYG (by clicking on the Insert link icon) you can choose if the link will redirect in the current window or in a new one with the “Target” field.

<figure><img src="/files/AupxORNiKqV08Vnf7mKU" alt="" width="221"><figcaption></figcaption></figure>

If the “Target” field is “None”: the link will redirect in the current window. If the “Target” field is registered on “New window”: then the link will open a new window or a new tab. In the second case an icon will be displayed automatically next to the link to inform the user of that behavior.

Besides, when you insert a link, the title will be displayed on mouseover, it must be clear and precise. This title must be added in the “Title” field.

### Attachments[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#attachments) <a href="#attachments" id="attachments"></a>

#### Obligation on attachment[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-attachment) <a href="#obligation-on-attachment" id="obligation-on-attachment"></a>

Downloadable attachments must be identified as such. You can add them from the Content > Gallery menu. Then you can select them directly in the File Manager of the answer.

The user must know the name, the format and the size of the files before starting to download them.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-3) <a href="#how-to-respect-3" id="how-to-respect-3"></a>

Since you choose to add an attachment to your answer, the title, the format and the size of this attachment will then be automatically displayed to the final user. It will be displayed like this:

<img src="/files/cLUlOFquVjPNbSEPYTyC" alt="" width="221">

### Anchors[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#anchors) <a href="#anchors" id="anchors"></a>

#### Obligation on anchors[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-anchors) <a href="#obligation-on-anchors" id="obligation-on-anchors"></a>

The anchors must be identified in the source code with an unique ID automatically generated.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-4) <a href="#how-to-respect-4" id="how-to-respect-4"></a>

The anchors are used here by the reword feature or the redirection towards another knowledge.

Since you add a reword or a redirection towards another knowledge then a unique ID will be generated in the source code and associated to this reword. Be careful not to delete it

### Text formatting “bold”[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#text-formatting-bold) <a href="#text-formatting-bold" id="text-formatting-bold"></a>

#### Obligation on “bold” text format[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-bold-text-format) <a href="#obligation-on-bold-text-format" id="obligation-on-bold-text-format"></a>

The text element with the “bold” formatting must be identified in the html code with the “strong” tags. This makes it possible to identify the items on which this tag is applied as important items.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-5) <a href="#how-to-respect-5" id="how-to-respect-5"></a>

Since you choose the text formatting “bold” **B** the proper html elements will then be automatically and correctly added.

### Iframes[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#iframes) <a href="#iframes" id="iframes"></a>

#### Obligation on iFrames[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-iframes) <a href="#obligation-on-iframes" id="obligation-on-iframes"></a>

Iframes (web page integration especially in the sidebar panel) must have a title.

<figure><img src="/files/nOyeTrTzdffsxr2X9xk4" alt="" width="455"><figcaption></figcaption></figure>

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-6) <a href="#how-to-respect-6" id="how-to-respect-6"></a>

When you add an iframe in the sidebar of your answer, add a concise and relevant title to your side panel.

<figure><img src="/files/LkITW94NIrdcjSBDZb5j" alt=""><figcaption></figcaption></figure>

This title will be displayed to the final user and will be present in the html code.

### Tables[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#tables) <a href="#tables" id="tables"></a>

#### Obligation on tables[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#obligation-on-tables) <a href="#obligation-on-tables" id="obligation-on-tables"></a>

Tables must not be used as text or page formatting. They must respect a precise html structure. There are two kinds of tables: simple table and complex table.

* A simple table is a table in which the header cells consistently apply to all cells in a row or in a column.
* A complex table is a table with merged cells or merged columns.

From the WYSIWYG perspective, we only consider the creation of simple tables, with rows and columns.

#### How to respect?[​](https://dev.docs.dydu.ai/docs/Knowledge/responses_accessibility#how-to-respect-7) <a href="#how-to-respect-7" id="how-to-respect-7"></a>

Do not create tables only for an esthetic or formatting purpose.

When you create a table via the WYSIWYG, make sure you add the correct properties to the cells.

Select the cells you want to set as header cells, then click on the Table icon and finally select > Cell > cell properties

<img src="/files/jWPB6P1rBMX7dNvG05s8" alt="" width="459">

You have now access to the cell properties. Go to the “Cell type” field and select “Header cell”:

![](/files/9vSstyDcRwhktNO3LAHt)

Then select the desired scope depending on whether the heading concerns the column or the row.

If the header is for the column, select the column value in the scope field; if it concerns the row select the row value.

![](/files/Jpab0f1yVZJ2F8Bijm0O)

The cells considered as a header will be well marked and will have the correct html attributes.


# Decision tree

{% embed url="<https://youtu.be/2pS17LW6aqs>" %}

To build a decision tree,

1. Select an existing knowledge or create a new one.
2. Click the **+** button: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAIAAABK/LdUAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA3dJREFUWIW1l01uGzcUx/nIR3JGYy9swFfookA3WWSXHqI36K4XyCl6gex6gxwi6SoFuimQAl0bdowI1kQeezx8/OjiyRQlS9bEkt9CGGo4/PF9kPwTUkri++3DP//l559/+mH8hzimU55Tfogx5LcxRiEEAADAXrw1TNlkRm4CQEqJOzwN3swrh86wbEKI6P2iK0AIAQrjPtuosJa/shljLBlSSh5FSplncE+EAOyulDL34RG451beWsTyTLXW2+KTzXtPRDwbto1ISI9qgWExxpGk0oZhCCEg4jYkbKyFGKOUEnFU9a4ZETnnEFEp9RiJj2EhBKXU82BCCA7JMAwlifMiyvo8CCwjU0qcTkZmnlwrdwDYE8ZmjEkphRDKFSWEWISVnfPeG2P2h7E1TUNEIQReLUseTyHGqJQaM9DHT5///Ovfnd24vL33pYsQH8x7X9f1GN7Zq1+FEF///mNnz5TSfD631iqllFIAILNzY3bb7zVe/jmLKaVlPB/vPQcxpRRvVdxc+vdCPET0PmTksj5fiAcAfFgu1huXLBEdHR1t/ODjp8+//Pb7znHfv3v75vWPG19Np9O6rrXWSqll/vbwYYeV+QMi4qOkaZqRIR2/HoQQRDSbzSaTiTFm4R9bCOGJz55tpfIQuV5ejuecW+exAiCil+D1fc8iY8HLOofIH7xqYozDMPAus3L+MbLv+8lksnOU9+/ejuS17TellJQqIyA8mHOOiE5PTw+1kcYYz8/PrbVcnIgIAMv8SSkBZNt+OwhMCHF5eQkArGLW8yelVEohKu/p9vZ2f9h0OnXOaa15W8lVsuKflBJRd123J7Lruuvra0TMKm1Fn5UuppRixPl8HmM8Pj5+Bmw2a798ueSc5bRxPAFgWZ+Zx1Ln5ubm7u7u7Oxs/LmRUrq6uprNZnVdG2OMsYs9Wi6iKFjvZnHBejCE4L13zjnnvPdN05ycnDxNTSl1XXdxcZFSqqrKWmttZa3RWudg8u9S+uWLSPkPAHRd17atMaaqqrquEbGqKiEEEcUY7+/v+75v2zaEoLWuqsoYY21ljC5Vfa7PrXqevSTyRI4PED5J+G0Wqw9VhoiotbbWam0YtlXPMz/fFvM7fkZURKSUYnGX9VzWzjyu1hoRuUB231eyc6WX7AQL1hCC9yEEX0rm1bW7Uv3b7mP/Aw55y4XV2TCvAAAAAElFTkSuQmCC). A new window appears.
3. Take the classic process of creating knowledge and add as many branches and levels as you want within your decision tree.

{% embed url="<https://youtu.be/Ki3xhfayxm8>" %}

Note that you can also create referral links to the branches of your decision trees,

1.

```
1. Edit the answer window and complete the content of your knowledge:
```

```
<img src="/files/1suZH5l3QSKbIdY0bZnQ" alt="" width="459">

2. Select the term or group of terms that the user can click on.
3. Click **Insert Redirection**: ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAWCAIAAAAqztkuAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAbFJREFUSIlj/P//PwPtARMd7BhB1vyiuTW/nu3pzEzN6tjzjFp2MWKktF8P9vR3zrv0kYGBgYFfL6m8yEX+2abK+hWPfmPRzqWX3l1hL0DQGjTf/HqwvasFagcDA8PHS/NaOrc/FNDUl+fCqv3b62cfsUqgARYUSy7O61x8/RsDv7w8w8OHH/nl5RgePrq+uHNF+YSmORFoOh8sL6na/JwYO9CtYZM30Vd5+Ns51/dZX9XDj1x6GcUemybvZTWRZyNo0ONnLy5eu4kmKCMpbqCtgW4Ng4BJRpMJAwPDg+VQASn73HZ7otwrKyXBwMCAbBPcDgbq5htZKQl9LXVMOxjQfUMM+HBmRt/a3865HlD+r2cHJ0/eyxpclGEiAPXT2/cfkO0gx5pfD89cvPPo452WZ/IMDAwM3y7Na9786CMD/5mHv0wE2CB+gliGDDDzDQMDnlTEpRJRXqh3Z0rL4uvfkEQ1Y2vKPfGlE+xxIyAliiOfPDx+/aOCZ1lNrCY/VIifoB0MDAwM/8kEP5/u7siIy2zf/fQnEaqxBxqx4BcDA+EcxcCAK26oDga8vhmK1gAAg4H8oQ+d7kcAAAAASUVORK5CYII=) then click **Reword**.

<img src="/files/1iH9jtbpYVyYwk9cJYVT" alt="" width="261">
```

4\. Enter the branch name and click **Ok**.
5\. Repeat the operation for the other branches and validate the knowledge by clicking on **Update**.

<figure><img src="https://dev.docs.dydu.ai/assets/images/cad05-94082e6fa103a4a5458a466c927552a5.png" alt=""><figcaption></figcaption></figure>

{% embed url="<https://youtu.be/hT5i7RtP8W8>" %}

Repeat these operations as many times as necessary.

<img src="/files/0ze9egGi7R6dsxIzOjdw" alt="" width="251">

Users do not have the same behavior with a bot. Some will have the reflex to click on one of the proposals while others will write in the text field the proposal. When writing in the text field, they can write "Situation a" or "Situation b", which will also redirect them to corresponding branches but they can also write anything else. This is why you will find an orange icon ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAiCAIAAABeEieWAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA+xJREFUSImll79vHEUUx9+8ebO3t8ZJFMfKRXBBJMiFUbAsIYGQHFEQiT+AKhUCISqEKEhDl4KCEgnR8g8gare2IhAIohiEiINkIDYOic7a0/3Yzez8oHiX8d55b88m32pv5837zHdmduad8N5DrUJAeNj4ZTu0Xr2yBABCCCHEtFY6Zuryz/KwvPdCiPAykMqqYBxN50sCAGsMBwghrLWiJO+9c65sa5JRHqBzrpwXERERAKSUb75yxTkHALkuAMBaGwI4Nffi+DFGefgBIIRQSh2dAe6fxA2Ot9YWReGcQ0TuxaMcBVcCuFkpVQmYkBCCiOI4FkIYY3h8YTJGjKMARDxO9glSo9FQSlljnLVlDE4ArLWISDR1v9VLKfXq8otmHHM4VwyQUv5vAOv0M3MvX75orQ1zPpqrsMJPCWBdOHf27HzinB1tsLIJpdTJkpkemF5ly+rSZeE9u0FG8TqfaJF957Zev67Xr7sHm0dbpcSL588ZY7z3h4yTmnCdOyPYwVZlwKVnW+yDKr/+6oF37+nvPxUmAwBoLtDye2K+7YsBnn+9Mp6kRERrrdBa836NoqiOkO0/3vgIwMtTz7vhI8gPPDWj5XdF+62aTsPh0FqLYTHqTZhfvxImi177TC5/4E0GAMJkxdaX9b2IyFpLAFA+v6YJ29ewfU3MtfTGhzxdnmJh8vpeQojDfTWb0VrD1pr58SZkHQAQ821qvwEA5rtPKvcVSynlvaeJO6dGvnPbHfzOz7Tysc8eYHcHYEZf5xyFp5lWWGK+7Xv37Z/f0soNbK3VB2utIZxXfM8cR/TS+/jcmtvdNHc+nxnM5xUFxrRv0G5/be99M4ZZuWEA3O6mO3UJX3i7hlEUBQAQf31FUcRxXBmHCyvlnyJpMUbvbvqiX+8jy3Ip8ZAR7sgJiYVVubBan6vahDFaP06SBOFJdZRl2YlSeKr2HXR3528p5aiS4JIiz/Nwyx9HjatfyKV3prUaa/+4/4+UUkqJbIJh/f6M+R1T80JN462ft6xzYz4YqLUeDAYnwEzR3Z2//j1IiYiIxnxwqTAYDJ4S86hz8NNv21JKKenQR9kKEfV6vV6v+gadqTRN12/9oEiRUpKIiIQQBACBEarbfr8/HA4XFxePecAAgHPu4cOHaZo2GrGKIqUUqZGPEQMAGAMA/MFrrff29pJk7syZ0/y+Jnu/39/f3weAZrOpokhFEZFClDxJo7OErZR7cvNg0O92U6VUHMfNZpNrTgDg6jbP8zzP0zQ1xkRR1Gg0ohHgyUogAp8l4a8DvyrX+ohojNFad7vdTqdjrS0XY2GnJEmilOJaVCklpUQpw6nxHxEvhIeAtjJnAAAAAElFTkSuQmCC) which allows to manage misunderstood sentences contextually. This allows you to create an answer for everyone who writes a different answer of "Situation a" or "Situation b" proposals.

This answer is optional. You can create it by clicking on the icon ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAiCAIAAABeEieWAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA+xJREFUSImll79vHEUUx9+8ebO3t8ZJFMfKRXBBJMiFUbAsIYGQHFEQiT+AKhUCISqEKEhDl4KCEgnR8g8gare2IhAIohiEiINkIDYOic7a0/3Yzez8oHiX8d55b88m32pv5837zHdmduad8N5DrUJAeNj4ZTu0Xr2yBABCCCHEtFY6Zuryz/KwvPdCiPAykMqqYBxN50sCAGsMBwghrLWiJO+9c65sa5JRHqBzrpwXERERAKSUb75yxTkHALkuAMBaGwI4Nffi+DFGefgBIIRQSh2dAe6fxA2Ot9YWReGcQ0TuxaMcBVcCuFkpVQmYkBCCiOI4FkIYY3h8YTJGjKMARDxO9glSo9FQSlljnLVlDE4ArLWISDR1v9VLKfXq8otmHHM4VwyQUv5vAOv0M3MvX75orQ1zPpqrsMJPCWBdOHf27HzinB1tsLIJpdTJkpkemF5ly+rSZeE9u0FG8TqfaJF957Zev67Xr7sHm0dbpcSL588ZY7z3h4yTmnCdOyPYwVZlwKVnW+yDKr/+6oF37+nvPxUmAwBoLtDye2K+7YsBnn+9Mp6kRERrrdBa836NoqiOkO0/3vgIwMtTz7vhI8gPPDWj5XdF+62aTsPh0FqLYTHqTZhfvxImi177TC5/4E0GAMJkxdaX9b2IyFpLAFA+v6YJ29ewfU3MtfTGhzxdnmJh8vpeQojDfTWb0VrD1pr58SZkHQAQ821qvwEA5rtPKvcVSynlvaeJO6dGvnPbHfzOz7Tysc8eYHcHYEZf5xyFp5lWWGK+7Xv37Z/f0soNbK3VB2utIZxXfM8cR/TS+/jcmtvdNHc+nxnM5xUFxrRv0G5/be99M4ZZuWEA3O6mO3UJX3i7hlEUBQAQf31FUcRxXBmHCyvlnyJpMUbvbvqiX+8jy3Ip8ZAR7sgJiYVVubBan6vahDFaP06SBOFJdZRl2YlSeKr2HXR3528p5aiS4JIiz/Nwyx9HjatfyKV3prUaa/+4/4+UUkqJbIJh/f6M+R1T80JN462ft6xzYz4YqLUeDAYnwEzR3Z2//j1IiYiIxnxwqTAYDJ4S86hz8NNv21JKKenQR9kKEfV6vV6v+gadqTRN12/9oEiRUpKIiIQQBACBEarbfr8/HA4XFxePecAAgHPu4cOHaZo2GrGKIqUUqZGPEQMAGAMA/MFrrff29pJk7syZ0/y+Jnu/39/f3weAZrOpokhFEZFClDxJo7OErZR7cvNg0O92U6VUHMfNZpNrTgDg6jbP8zzP0zQ1xkRR1Gg0ohHgyUogAp8l4a8DvyrX+ohojNFad7vdTqdjrS0XY2GnJEmilOJaVCklpUQpw6nxHxEvhIeAtjJnAAAAAElFTkSuQmCC) .Your decision tree is now complete.

{% embed url="<https://youtu.be/biBbP6lOD7s>" %}

<figure><img src="/files/RnsNb3ljckuLOXO24Rzt" alt="" width="332"><figcaption></figcaption></figure>

There are no technical restrictions on the number of branches and sub-branches.

Depending on the complexity of the answer, there may be several levels but it is advised to avoid exceeding the 3 levels so that the user obtains his answer as quickly as possible.

When creating a sub-branch, the user feedback request is automatically disabled at the previous level so that it is requested only once at the end of the tree. However, if you want to request the current tree feedback, you can reactivate it by editing the answer:

1. Click **More options**.
2. Click the **Other Options** tab.
3. Check **Ask for feedback**.
4. Click **Update**.

Please note that you can make a branch of a tree directly accessible (do not go back to the beginning of the tree if the user's question is accurate and corresponds to a case described in a branch):

1. Edit the user sentence.
2. Click the **Options** and click **Options** again in the dropdown menu.
3. Check **Enable direct access**.
4. Close the knowledge to validate.

Note: you can directly check the **Enable direct access** box when creating your knowledge.

<figure><img src="/files/RSbFiO5EigwxmHdL9vGs" alt="" width="306"><figcaption></figcaption></figure>

This knowledge will have direct access to the answer without needing to ask the question "I want a credit card".

<figure><img src="/files/QEInMJTDymjmKxmGoYKY" alt=""><figcaption></figcaption></figure>

Be careful when performing this action. Make sure that the knowledge does not exist in the knowledge base yet. It may be necessary to suggest knowledge to the users when the bot is not sure that it understands and suggests similar questions from the knowledge base. This implies that the name given to this branch is a well-constructed sentence. This direct access is symbolized by the icon .

In addition, your knowledge can now be redirected from another knowledge:

1. Create a new knowledge.
2. In the answer window, click **More options**.
3. Go to the **Redirect to another knowledge** field.
4. Enter the name of the knowledge to which you want to redirect this answer then click **Update**.

<figure><img src="/files/zErAAy5mUS0hTUiynkaZ" alt=""><figcaption></figcaption></figure>

You also have the option to extract part of a tree to make a separate statement. You have this option only on branches that are in direct access:

1. Click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAYAAABCIB6VAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wcRDgEIG9+7HwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAADYSURBVDjL7ZSxCsIwEIa/ilioUAfFTVwLPkF9B5/Wd6iDs9DV6iTp0EBTqkOcCraN2IpFCx5kyJfjv5/LJZbWWtNBDOgohk2StruwtN/43uccb3yvkeBvtAIgOBxbCVtNpiKWitMlAWAxnzB1nfbCsVTEiaolCpkCMHPHtbPpxKkVq/VYJAohUzSUVhFVLmSKMBgZVt1m+Q3HHjF7cFFwwMiz/EYsVcn1oHxBESq/ovIr+/Bs5MEhesmNrVivlqxXS9yxbeTP8r83x9Xn+y63eve7/YV7LHwHR8N7ycJEDGIAAAAASUVORK5CYII=) icon when you hover over the knowledge.

<figure><img src="/files/Xxe385o8O4VHz6yJYt0B" alt=""><figcaption></figcaption></figure>

2. Confirm the extraction of the branch (a message will appear asking you if you confirm the extraction of the branch).

### Bounce conditions

Bounce conditions allow you to perform a redirection that will be effective from the knowledge on which the user is.

Some knowledge will sometimes require creating very complex trees. To reduce these complexity of decision trees, you can use bounce conditions which allow you to make redirects to other knowledge items based on user answers. These redirects are associated with the decision tree on which you add your bounce conditions. So:

* If the user asks a question matching a reword of the bounce condition after the tree activation, the redirection on the bounce condition is used.
* If the user asks a question matching to a formulation of the bounce condition and the tree has not been activated, the redirection linked to the bounce condition is not used.

Bounce conditions can be accessed when you're aware of it using the **Add bounce condition** button. ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAoCAYAAAB0HkOaAAAA6UlEQVRYhe3VMQuCQBTAcT+0o6OBU242WSBENkQGNUgu5WAYOEiT0BJIOLiKDvnaRMVHp94g9P7wxnv8ODhO+JQlTGUEmFCEwSIMFmGwCINFGCzCYBEG6/8wWV7A8/WG6/0BB+cGcZLywdhuAFleMCNkzQRR0RuD1QtjOR6Iig7z5Z4ZFCcpSKpRQWTN5IOpL2YF+WHUuBVtfeKD6QuqQ1a7M0iqAbYb8MOwguqQzfFSnfPDiC/mF6gLwtKop90FGgoZjWmDZovtYAgXTBs0FMINUwdZjjd4x//9TawRBoswWITBIgwWYbC+bYl6Y/rEuWwAAAAASUVORK5CYII=)

<figure><img src="/files/Q5ZeEsnV6XQsSvjRMw3x" alt="" width="458"><figcaption></figcaption></figure>

To add a bounce condition,

1. Click **Add**.

<figure><img src="/files/VSsg5sSGobRV7mY2RmyJ" alt=""><figcaption></figcaption></figure>

1. Fill in the fields:

* The **Reword** field allows you to enter the formulation of the user who will direct it to the target knowledge.
* The **Redirection** field corresponds to the knowledge to which the user will be redirected.

3. Click **Add** then test your knowledge to check that the bounce condition is correctly taken into account.

Note: the redirection is effective and there is no need for additional manipulation such as "**redirect to**" in the options of your knowledge.


# Comments

You can leave comments on the knowledge. These are visible only to users of the platform.

These comments allow:

* To communicate between the different people working on the basis of knowledge "why not have done this instead...";
* To remember an action to do: "think about adding the link".

When a comment is added, an email is sent to all users of the bot. A user can disable the sending of these mails.

The steps below describe how comments work:

1. To write or read a comment, move your mouse over the comment icon in the reply.

![](/files/lfWEsAb7x1Wat9reG80s)

2. Click **Comments**: an input field opens.
3. Write your comment and click **Add a comment**.

Once registered, the comment is above, with the name of the person who wrote it and its date of creation.

Note: you can also tag a user (@ + drop-down menu). In addition, the user receives an email (unless disabling emails in which the user is mentioned).

![](/files/G8gyOKFLw4LDHOwEKnpv)

4. Cick on the comment icon to read the comment, you can archive it.

![](/files/7EW8srxIVDsujB2K3pal)

When someone adds a comment or answers to one of your comments, you will receive a notification that there is one or more unread comments.

When a comment is not archived, the corresponding knowledge can be found in the *Comments to be processed* list. These comments are the one you may have read but not archived yet.

To use comments properly, it is necessary to archive the comment when the action indicated in the comment is completed rather than after reading the comment.

Click **Archive** on the right of a comment to archive it.

You find all the knowledge on which there was one or more comments in *Knowledge with comment(s)* .

Once back on the initial view, if all the comments associated with knowledge are archived, information about comments disappears.

However, you will know there have been comments on this knowledge because it is in the list *Knowledge with comment(s)*.

[<br>](https://dev.docs.dydu.ai/docs/Knowledge/decision_tree)


# Test the bot

As you build your bot in **Dydu BMS**, you can use the **test bot** to see how the bot responds to user questions, allowing you to detect and correct any unexpected behavior.

## Test a knowledge item with the test bot[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#test-a-knowledge-item-with-the-test-bot) <a href="#test-a-knowledge-item-with-the-test-bot" id="test-a-knowledge-item-with-the-test-bot"></a>

1. Go to the **Knowledge** page and click on the **Test my bot** button at the top of the knowledge list.
2. It's a good idea to select *new dialog* at the top right of the Test bot panel to clear previous conversations. Clearing previous conversations allows to erase any parameters (such as [variables](https://dev.docs.dydu.ai/docs/Complementary_items/variables) or [bounce conditions](https://dev.docs.dydu.ai/docs/Knowledge/decision_tree#bounce-conditions)) used by the bot that will impact the matching results.
3. To start a conversation with the test bot in "production" mode, simply enable the option *dialog for production* ![](https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2F1101559743-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FgMQl4578l4DzuAEhrEii%252Fuploads%252FnHBQZeZbTWdJhJWbL6yW%252Fimage.png%3Falt%3Dmedia%26token%3Dbb20e842-855f-4010-954f-8429b25bf1af\&width=300\&dpr=4\&quality=100\&sign=feeab670\&sv=2).

{% hint style="info" %}
Functioning of the "Dialogue for Production" Option:

* Conversations conducted with this option enabled are recorded as "test" conversations and do not contribute to the statistics, unlike actual production conversations.
* The channel indicated in the conversations is: Qualification.
* It is necessary to delete the current conversation for the option change to take effect (switching the option is not possible during an ongoing conversation).
  {% endhint %}

1. At the *"Type your question here"* prompt at the bottom of the test bot, enter the predefined user question to start the conversaiton.

   It can be written the same as the user question, with intentional misspellings or by replacing certain words with their synonyms.

   This will allow you to detect any weakness in your bot and enrich it.

<figure><img src="/files/PTqa3zQO88GfJ6CRUNfx" alt=""><figcaption></figcaption></figure>

**TIP**

With the *Up* and *Down* arrow key on your keyboard, you can navigate through messages sent previously until you click the "new dialog" button.

4. If you have several consultation spaces that contain different answers to the same user question, use the drop-down list at the bottom of the test to to choose the consultation space in which you want to run your test.

   To know more about the consultation space, read [this article](https://dev.docs.dydu.ai/docs/Complementary_items/consultation_spaces).

## Enrich your knowledge base by improving the matching score with the test bot[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#enrich-your-knowledge-base-by-improving-the-matching-score-with-the-test-bot) <a href="#enrich-your-knowledge-base-by-improving-the-matching-score-with-the-test-bot" id="enrich-your-knowledge-base-by-improving-the-matching-score-with-the-test-bot"></a>

When the test bot does not understand a user query, it will provide a general phrase shown in the orange color. (This general phrase can be personnalized [here](https://dev.docs.dydu.ai/docs/Complementary_items/global_sentences#misunderstood-sentences).)

<figure><img src="/files/Nnbnm9yauKe9ZhVJ4FY8" alt=""><figcaption></figcaption></figure>

In this case, you can train the bot to recongnize the query either by creating a new knowledge item or adding a formulation to the existing knowledge item.

#### Add a new formulation from the test bot[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#add-a-new-formulation-from-the-test-bot) <a href="#add-a-new-formulation-from-the-test-bot" id="add-a-new-formulation-from-the-test-bot"></a>

When the bot does not understand a user query, it implies that after processing the query the bot was not able to identify any knowledge item with a matching score high enough to provide an answer.

Therefore, you can enrich the best-matched knowledge item with the misunderstood query to improve its matching score so that it can be used by the bot as a matched answer.

To do so:

1. Click on the magnifying glass icon (**Search**) above the bot's answer.

   This will open on the right of your screen a list of knowledge items that have been analyzed by the bot for this query sorted from the highest score to the lowest.

   Choose the knowledge item that is the closest to the intention of the misunderstood query and click **Complete this knowledge**.

<figure><img src="/files/TgVPV07xRhqsIRNiQGcX" alt=""><figcaption></figcaption></figure>

2. Confirm (or modify) the user question that you want to associate to this knowledge item and click on the **Associate** button.

<figure><img src="/files/fOigxTj0AxXBOOPKPfME" alt=""><figcaption></figcaption></figure>

3. You will receive a confirmation message that the new formulation is now added to the existing knowledge item. You can test the bot again to check the behavior.

<figure><img src="/files/VQRtAnk8NBv3z4DNgT6L" alt=""><figcaption></figcaption></figure>

#### Create a knowledge item from the test bot[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#create-a-knowledge-item-from-the-test-bot) <a href="#create-a-knowledge-item-from-the-test-bot" id="create-a-knowledge-item-from-the-test-bot"></a>

{% hint style="info" %}
The test bot only allows you to create simple knowledge items. Other knowledge types such as [slot](https://dev.docs.dydu.ai/docs/Knowledge/Types/slot_filling) or [event triggers](https://dev.docs.dydu.ai/docs/Knowledge/Types/internaut_activity) must be created from the **Knowledge** page.
{% endhint %}

1. To create a new knowledge item from the test bot, click on the the **+** button above the bot's answer.

<figure><img src="/files/TsdOy0MbgeL0HxiwHpsa" alt="" width="178"><figcaption></figcaption></figure>

It opens the knowledge edition panel on the right of the screen with the misunderstood user query alrealy pre-filled:

<figure><img src="/files/ZEZ7j8CMVftttVok4Rh9" alt=""><figcaption></figcaption></figure>

2. Edit this knowledge item as you would usually do.
3. Reset the dialog of the test bot and ask it the same question. The bot now should give you the expected answer.

## Use the debug panel to get more details about the bot's behavior[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#use-the-debug-panel-to-get-more-details-about-the-bots-behavior) <a href="#use-the-debug-panel-to-get-more-details-about-the-bots-behavior" id="use-the-debug-panel-to-get-more-details-about-the-bots-behavior"></a>

The **Debug** feature of the test bot allows you to get insights about your bot's behavior such as variables use, conversation log, matching details, etc.

The debug panel is accessible on the top right of the test bot by clicking the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAHdJREFUKJFjFDFMYCAXMJGtkwTNshJCfDycZGqWkRBZP7McTT8JztbTlEfTz4gcYJYGapvmVeI34tL1h4HpnZ++fCfNZph1jNhtxgMgjrp041FgWgfEWtJsRtNJgs2yEkIfv3xH1snAwMBCpLWPX7zDFKRLCsMKAPy8KPwNqHuMAAAAAElFTkSuQmCC) button.

#### Look at the matching details[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#look-at-the-matching-details) <a href="#look-at-the-matching-details" id="look-at-the-matching-details"></a>

After the bot reacts to your query (whether with an expected answer or not), you can open the debug panel to check how the bot has processed the question.

As shown in the image below, in the **Matching** section knowledge items that have been analyzed by the bot are sorted by matching scores et bots.

The item with the highest score is provided as the bot's answer.

Please note that if both the social bot and the business bot have an answer that scores the same, it's the business bot that takes over.

<figure><img src="/files/t3y4T17WUuvpmPhSGOWD" alt=""><figcaption></figcaption></figure>

By clicking on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAVCAIAAABHbRCDAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAPZJREFUSIlj/P//PwONAROtLaCTHSwkqXZycv769Sucy83NvW/fXoK6hktYDRc7SIvzjMyMX79+HTp4kIGBwc7eno2Njfp2hIWGMjAwvHj+nIGBISY6mkhdjHjyeVFR8dGjR0lyhLW1dV9fL5ogAX/k5uViurenp4eBgaGkpARNfMnSpefOnsM0BLsdS5YuZWBgePbsGSMjIwMDg5CgkJeXJwMDw6rVq3/9+nXr1i2IGjY2Nkjobdu2/d37d+fPnX/27BlEL7LLsIeVubkFMldZWXnZsqUMuPN5VFT03bt3kbWcPHkCzh4u+WO42IEvf1ALDJewAgAAVFoUhKAOxQAAAABJRU5ErkJggg==) icon you can look at how the bot has processed each word of the user question. It's useful to look at this panel to find out why sometimes you get unexpected answers from the bot.

<figure><img src="/files/5aIibIa6i3kzp0s7Bf60" alt=""><figcaption></figcaption></figure>

Matching Score with a Knowledge :

The score of each intent in the knowledge ranges from 0 to 100%.

* From 0 to 50%: The intent is considered a failure. If no intent with a higher score is found, the user's phrase is considered as not understood.
* From 50% to 79.98%: The intent is considered a rewording (or reword). If no intent with a higher score is found, alternative intents are suggested to the user.

{% hint style="info" %}
**Note:** Even if a displayed score is below 79.98%, a direct match can still be triggered if the similarity with the target phrasing is deemed sufficient. Our system uses a combination of criteria to assess relevance, rather than relying on a single fixed threshold.
{% endhint %}

* Above 80%: The intent is considered a direct match. A response is provided to the user using the intent with the highest score.

A score of 0 means there is no similarity between the two phrases, while a score of 100% means the two phrases are identical.

## **Matching process**

1. **Matching with Dydu :**
   1. If the direct matching gives a **score ≥ 820**, or a **score ≥ 700** with a **scoreMatch ≥ 820**, it is considered a Dydu match.
   2. If a keyword triggers a mandatory reformulation, a Dydu reword is used.
2. **Otherwise, matching with an LLM :**
   1. If no satisfactory result is found with Dydu, matching is performed using an LLM.
   2. If the LLM returns a result with a score above a certain threshold, this result is selected (**LLM match**).
3. **Score thresholds according to the LLM provider :**

| Provider               | Threshold |
| ---------------------- | --------- |
| OpenAI                 | 0.4       |
| Scaleway               | 0.4       |
| Google                 | 0.6       |
| Mistral                | 0.65      |
| Default for an unknown | 0.5       |

## FAQ : why sometimes the test bot understands my question but does not provide the right answer?[​](https://dev.docs.dydu.ai/docs/Knowledge/test_dialog_box#trouble-shooting-why-sometimes-the-test-bot-understands-my-question-but-does-not-provide-the-right-answer) <a href="#trouble-shooting-why-sometimes-the-test-bot-understands-my-question-but-does-not-provide-the-right-a" id="trouble-shooting-why-sometimes-the-test-bot-understands-my-question-but-does-not-provide-the-right-a"></a>

Sometimes you might get a "wrong" (unwanted) anwser from the test bot. However, when you look at the matching details, the matching algorithm has a 100% match with the "right" answer and somehow the latter was not used by the bot. Why?

There are several reasons for that.

1. **The knowledge item is disabled**:

   when the bot matches with a [disabled knowledge item](https://dev.docs.dydu.ai/docs/Knowledge/#status), the bot behaves as if there is 0 match (meaning that it will not even answer with the second most matched knowledge item).
2. **Matching with a keyword**:

   when the bot matches with a [keyword](https://dev.docs.dydu.ai/docs/Knowledge/Types/answer_to_a_question#simple-add) contained in a knowledge item, the latter will be considered by the bot as a more appropriate answer than any item with a higher matching score.
3. **There is a match after rewording but the "enable reword" option is not activated**:

   when the bot does not find a direct match between the user query and any knowledge item, it can still match with an exsting item whose intention is close to the original query and use its answer as output.

   In this case, the knowledge item is used as a rewording. However, if the option ["enable reword"](https://dev.docs.dydu.ai/docs/Key_concepts/best-practices#questions-and-rewords) is not activated on the rewording knowledge item, it can not be used by the bot.
4. **There is a match after rewording but the item as part of a desicion tree is not directly accessible**:

   if the rewording knowledge item is a sub-item of a decision tree on which [direct access is not allowed](https://dev.docs.dydu.ai/docs/Knowledge/decision_tree), the bot will not use it to answer the user query.
5. **The option "only display published rewords" is activated while the rewording knowledge is not published**:

   the option ["only display published rewords"](https://dev.docs.dydu.ai/docs/Settings/Chatbot/general) allows the bot administrator to only test on finished and published knowledge items.

   Therefore, if a rewording knowledge item is not published, it will not be used by the bot to provide answers.

If none of these explanations help you resolve your issue, please contact our support team.


# Qualities alerts

The knowledge base is constantly monitored through quality verification processes.

Quality alerts check:

* **Answer length:** answers that are too long are not fully read by users because the answer bubble does not display the whole answer without scrolling.
* **Question length:** questions that are too long cannot fully appear when they are displayed just above the text box in the dialog box.
* **Invalid hyperlinks:** if a knowledge contains a link to a page that no longer exists.
* **Knowledge without tag:** a knowledge without tag does not make it possible to determine what subject is talked about by the user.
* **Links to other knowledges:** a bot's answer can have a link to another knowledge, this is useful to redirect the user to a related topic or to get more details. The solution checks that all of these links are valid.
* **Knowledge expiration dates:** when a knowledge has an expiration date, a notification tells you to adapt the answer text, change the status of the knowledge or even delete knowledge when the date is reached.
* **Knowledge starting dates:** when you assign a starting date to a knowledge, you will be notified on that day, that you have to change the knowledge status to *Published* to make it accessible to users.
* **DialogReplayFailure:** the test dialogs you have saved are automatically replayed once a day. If these dialogs do not happen as they did when saved, you will find them under this alert.

### On the knowledge page[​](https://dev.docs.dydu.ai/docs/Knowledge/quality_alerts#on-the-knowledge-page) <a href="#on-the-knowledge-page" id="on-the-knowledge-page"></a>

These alerts are listed in the dashboard or on the **Knowledge** page, in the **Alerts** tab.

<figure><img src="/files/zthlzch6vXUaX8UQmeNt" alt=""><figcaption></figcaption></figure>

We have three levels of alerts: *information, warning, error*. The knowledge whose alert is *error* must be corrected in priority, this is the reason why they appear first in the **Alerts** tab.

As in all the views of the knowledge page, you can export in excel format the knowledge that have quality alerts, using the contextual menu available at the left when hovering a type of quality alert.

### When editing an action

When you validate the content of an action, the quality alerts are verified in real time. When an action is subject to qualification alerts, the list of these alerts is displayed directly in the action.

<figure><img src="/files/LsKeubsDyoJJg7A3aYj3" alt=""><figcaption></figcaption></figure>

### On the dashboard and by email

On the dashboard page, in the *Actions to carry out*, you will find the number of quality alerts with an error status.

<figure><img src="/files/CfIwg9dQ5WZKWNw4gj3c" alt=""><figcaption></figcaption></figure>

You may receive by email, as often as you choose, a report indicating among other things the number of quality alerts.

### Configuring alerts

Some alerts are configurable. The parameters are accessible directly from the icon **...** at the right of the **Alerts** tab. From then on, a new window opens.

<figure><img src="/files/L0WWPGl1DXj2lAvJs69G" alt=""><figcaption></figcaption></figure>

After making your changes, click **Update**.

<figure><img src="/files/oCA02iRs3tzm4V1xHOBR" alt="" width="264"><figcaption></figcaption></figure>

A **Scan alerts** button is available if you want to recover the alerts update immediately.

### Alerts information and resolutions

Note that resolving an alert will not immediately clear the error in your back office. Solved errors should be disappear after a few hours.

#### Errors

* Inaccessible links: this error means that the link you inserted in the knowledge is no longer accessible. It might also be due to an insertion error (adding a character in the link, etc.).

To resolve this error, you must update the link or delete it if it is no longer functional.

* Reword link not available: if a piece of knowledge used as a rewording redirection in another knowledge is no longer available (deleted), an error will show in the latter one. To solve the error, update the redirected knowledge.
* Cyclic reword: this error appears when the knowledge is likely to form a loop, ie the knowledge can be redirecting to itself.

It can be a deliberate manipulation, if you want to go back to the root of knowledge once you have received user information, for example. In this case, you can simply ignore the alert thanks to the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAIAAAB1dKN5AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAZBJREFUOI3F1U9rgmAYAHAbnWoeFsH8ErEufYp26tYW9DXaeV0t6NKQGmoHhZqDReguXRtbQrs5WonQoVFR8UpmpO0gi8gX+yfsOT1/8OfzCqpnOp0irsaZu9y/iu32dzx+E4vFJOnLBdE0TRzHh8MhAGoul1utVqeKPM93Op2/Zdv1ev0kUVVVkqQ2O8Xio67rx4sMw0wmk83OYDDgOO5Isdfrcdyzvc+y7Hg8PkYkCGK5XFp5qURnsxkrn800iqIPFkVRbDTe1iWGYcFgcF0KAi/L8gGiYRj5/IPD/QzDLBQKB4i1Wk1RFAcRQZD39w9RFPcSAQAkSTpzVhAEYZrmbpGmSwCo+4jdriwIrztERVGq1Zd9OCsoitI0bV167N/HVOrO/nScI5G4TSaT8B2bzSaU8/l8mQyeTt97vV77tFyujEYjuFipPEG3wLDLUCgUiURQFLVPdV1nGNbKt08djV4vFgsoGg5fzee6JEnQKYqeWy/79hECgYt+/wd6Tav1Ce1b4ff74TueHu7/Z34BpXO7Q5bsiMMAAAAASUVORK5CYII=) button when you hover your mouse over the knowledge. You will then find the ignored alerts in a new category.

However, if it was not voluntary, an error can be forming loop inside your knowledge. In order to solve this error, we recommend to test your entire knowledge through the bot.

* Not activable knowledge: this error means that the knowledge or one of the rewords cannot be triggered. By clicking on the knowledge, you will get more information on the not activable knowledge.

In order to resolve the error, please test the knowledge from the test bot. If the knowledge matches with another knowledge, you must exclude the reword from the knowledge you do not it to be associated with anymore.

If the formulation works correctly, you can simply click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAIAAAB1dKN5AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAZBJREFUOI3F1U9rgmAYAHAbnWoeFsH8ErEufYp26tYW9DXaeV0t6NKQGmoHhZqDReguXRtbQrs5WonQoVFR8UpmpO0gi8gX+yfsOT1/8OfzCqpnOp0irsaZu9y/iu32dzx+E4vFJOnLBdE0TRzHh8MhAGoul1utVqeKPM93Op2/Zdv1ev0kUVVVkqQ2O8Xio67rx4sMw0wmk83OYDDgOO5Isdfrcdyzvc+y7Hg8PkYkCGK5XFp5qURnsxkrn800iqIPFkVRbDTe1iWGYcFgcF0KAi/L8gGiYRj5/IPD/QzDLBQKB4i1Wk1RFAcRQZD39w9RFPcSAQAkSTpzVhAEYZrmbpGmSwCo+4jdriwIrztERVGq1Zd9OCsoitI0bV167N/HVOrO/nScI5G4TSaT8B2bzSaU8/l8mQyeTt97vV77tFyujEYjuFipPEG3wLDLUCgUiURQFLVPdV1nGNbKt08djV4vFgsoGg5fzee6JEnQKYqeWy/79hECgYt+/wd6Tav1Ce1b4ff74TueHu7/Z34BpXO7Q5bsiMMAAAAASUVORK5CYII=) button to ignore the alert.

A knowledge that matches a single word is all the more so likely to be inactive if the word is integrated to a matching group.

* DialogReplayFailure: this error means a test dialog does not work properly.

To solve it, identify the changes that have impacted the dialog and apply the required corrections.

#### Warning[​](https://dev.docs.dydu.ai/docs/Knowledge/quality_alerts#warning) <a href="#warning" id="warning"></a>

* Knowledge without tag: this alert informs you that your knowledge is not linked to any tag.
* ActionNotTranslated, ConditionNotTranslated, QuestionNotTranslated: alerts about the translation of elements mean that your knowledge has not yet been translated into another language offered by your bot.

Even after performing the translation, the alert will not be deleted immediately. It may take a few hours before the alerts system considers the alert as resolved.

#### Information

* Answer too long (info): this alert means that the answer of your knowledge is too long. Indeed, best practices for the creation of a knowledge recommend short answers.

You can now edit your knowledge or ignore the alert if you do not want to edit the answer.

Note that this information may turn into a warning if the answer is really too long.

* Question is too long (info): this alert means that the question (user sentence) is too long.

As previously, you can choose to edit the knowledge or to ignore the alert.


# Knowledge map

The knowledge map gives you an overview of your knowledge in cartography. This visual mapping tool will allow you, among other things, to visualize the links and dependencies between your knowledge items.

To access the knowledge map, go to **Content > Knowledge map**.

<figure><img src="/files/P1YsvNocR58VCYS00ayb" alt=""><figcaption></figcaption></figure>

The arrows represent the 4 types of links modeled by the knowledge map:

* Redirections;
* Rewords;
* Bounce conditions;
* Template.

In order to customize the display of your knowledge map, you can use the filters tool at the top right of the page.

<figure><img src="/files/16qG4GrqCMFlGJICVyZg" alt=""><figcaption></figcaption></figure>

You can then enter the knowledge on which the map will focus with its level of remoteness.

You can also filter by tag and / or consultation space.

The option **Include isolated knowledge** allows you to include knowledge that have no redirection and are not targeted for any redirection.

The **Include sub tags** option allows you to include subtags.

When you select a knowledge from your map, you can focus on knowledge or directly access it.

<figure><img src="/files/hyEQQknTVy4RfjAsadFV" alt=""><figcaption></figcaption></figure>


# Matching groups

## Simplify bot knowledge base creation with matching groups

A matching group is a collection of words or terms with similar intention or signification. Using matching groups simplifies the knowledge base creation for your bot.

### The concept

#### Definition and advantage of matching groups[​](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#definition-and-advantage-of-matching-groups)

A matching group is a collection of words and terms that have similar meaning or intention.

When you have a question that can be worded in different ways, instead of creating separate questions for each variation, you can use matching groups to represent them.

For example, instead of creating separate questions for "What is the procedure to activate my account?", "How do I activate my account?", and "How does it go to activate my account?", you can create a matching group called "How to activate" with phrases like "What is the procedure to activate", "How to activate", and "What do I need to do to activate".

<figure><img src="/files/GE3qCdlCp9v1xcZNYQJo" alt=""><figcaption></figcaption></figure>

As shown in the image, you can make your matching group more powerful by using various matching groups inside a parent matching group. It will expand the comprehension capacity of the parent group.

Matching groups are useful for gathering synonyms and simplifying the process of creating questions for your bot.

#### Matching group types

There are two types of matching groups in the BMS:

* **Generic matching groups**: Dydu provides a large portion of "generic" matching groups (160) through its social base. These groups facilitate enrichment work and ensure better understanding of your bot. The words and terms that make up these groups have the same meaning or sense, regardless of your sector or the scope of your bot. Examples include "Yes", "No", "How to", "email address", "login", and "password". Dydu has created these generic matching groups over 10 years of research and development, as well as support for clients with various issues from many sectors. These groups are shared among all Dydu customers.
* **Domain-specific matching groups**: this type of group refers to specific domains that are relevant to the bot's expertise, such as HR, e-commerce, and IT help desk. A formulation can have different significations depending on the sector and context of the bot. For example, the word "ticket" may mean "a transport ticket" for a transport company’s customer service bot, while for an IT helpdesk bot it means "a support request".

To facilitate the creation of domain-specific matching groups, Dydu offers **templates** in various verticals such as e-commerce, HR, IT, and citizen relations. These templates come with **pre-packaged questions, responses, and matching groups** that you can further tailor to your needs and context.

To visually distinguish these two types of matching groups, Dydu displays them in different colors in the Bot Management System:

* Blue: generic matching groups.
* Green: domain-specific matching groups.

<figure><img src="/files/nKHeONqTsa2GM83BcVnW" alt=""><figcaption></figcaption></figure>

### How to create a matching group?

There are two ways to create a matching group:

* In the **Content > Matching Groups** section.
* In the knowledge item editing zone as you edit your knowledge base.

#### Create a matching group from the "Matching Groups" section[​](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#create-a-matching-group-from-the-matching-groups-section) <a href="#create-a-matching-group-from-the-matching-groups-section" id="create-a-matching-group-from-the-matching-groups-section"></a>

1. Go to **Content > Matching Groups**.
2. Choose the language in which you want to create the matching group. It can be translated into other languages of your bot later (refer to [this section](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#translate-your-matching-groups-into-other-languages-supported-by-your-bot) for more details).
3. Click **Add**. You can choose to add a new matching group or a new category that allows you to organize different matching groups.

<figure><img src="/files/9n73nXcX2P5Q4SBWrEZv" alt=""><figcaption></figcaption></figure>

4. If you choose to create a new **category**, a window will pop up where you can enter the name of the category. Then, click on “Add”.&#x20;

<figure><img src="/files/aBZmRICoflcFXqlMW6aU" alt=""><figcaption></figcaption></figure>

If you choose to create a new **matching group**, click on "**Add a new matching group**" and a window will pop up as follows:

<figure><img src="/files/5IdqprXIR1VgqKjqrJnQ" alt=""><figcaption></figcaption></figure>

Enter the name of your matching group and determine the following parameters:

* **Multilingual**: activating this option allows you to create a matching group in all languages and consultation spaces in your bot. This option is useful if you have generic matching groups that share the same name across different languages (e.g. brands' names).

  Multilingual matching groups are symbolized by the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAjCAYAAACD1LrRAAAAAXNSR0IArs4c6QAAAGJlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJKGAAcAAAASAAAAUKABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAIwAAAABBU0NJSQAAAFNjcmVlbnNob3Qo3ssBAAAB1GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo4lLSQAAACMUlEQVRYCe1XvS9DURQ/TyhCfFTiMzpoSCiDpEJCpzIwIB0kJh+T2eKPkLDa2GyCxdSJgbC1CMJQQUkQImkxcH+n7suLuPe9NKWDnuT1ndzz8bvnd869LzU+hFAWJC8LmAyZA/4z5nNU56j+NQb+4XBFj09/jU5d4nyd0Wp7eHqhnYNDOo/d0PXdA5vqq93k9dRRn99H7vJSq7utbkSOTj7aW1u0jhvhXQF6pPUJCPDhYLfWx2q0Ha6F5XUTtKKshGN9zR5qaqxlXa5tCzYWha9T0QKj0htBa1FhAU2EgpR8feeq6qurmGJUiDXY4IMWIMaJKIFTPU3ROxnqp0TyjZODUinQAQgbfCBoCWLtRNlju75WimHCQAHk8RtQn7+NRoI9WmzlVJ/H4hwIOjG9S6tbXzS7aT9yxraujmamdzO8RzPjg6Z+8RWrQ1YCo7cQK7Xy+MhN4ShJgY4Hm5DHTdp+eit7/JNzJteUFdcJelE1jklDTRVjohLDMOjxOTU8F5dxszroV7f37IdYO0l7uHSJnQyXkuqAv93MjcHBkGGS5+emaaC3kx/ouEDGhgI8XDLAGivXvr+VwDgq2DlkZS3MoInkK1Mvk6ANkOIiF/tAR4yTe1tJNZJAcGXKCUfFOLNeT624OFx0eBbjDclzjN7OTo2mAm1+DSd/YewuE2A46at1L46AEYAbavsgKj6LcZMBVIjq0VMn9KYFbA3KhK4crkwk1+XIAevYyagta1R/An7f6hu5AH+GAAAAAElFTkSuQmCC) icon.
* **Include the name of the matching group in its formulations**: check the box only if you want the name of the matching group to be part of its formulations.

5. Click on "Add and open". You can now add formulations inside the matching group you just created.

<figure><img src="/files/C8f97qWtiXgWYGXmLejM" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
To add formulations, you can either add them **one by one** from the "formulation" field or add several at once by using the **bulk addition** feature in the "Options" tab.
{% endhint %}

{% hint style="success" %} <mark style="color:green;">Bulk addition :</mark>

Click on "Options > Bulk Addition". Enter several formulations (separated by line breaks), then click on "Add".&#x20;
{% endhint %}

<figure><img src="/files/oOoPgrDMs0I1Cm9by4cu" alt=""><figcaption></figcaption></figure>

{% hint style="success" %} <mark style="color:green;">One by one :</mark>&#x20;

1. Enter one formulation at a time in the "formulation" field. You can either enter a text or an existing matching group. Then, choose the type of the formulation from the dropdown list:&#x20;

![](/files/8qSGd5N7lFBv6EbBKzgN)

* **Formulation** : it's the default type without any special options. Most of the formulations will be created with this type.
* **Keyword:** the formulations will be created as Keyword. The keyword has greater weight on our matching system. This means that if the bot matches both a group of formulations A which contains a keyword and another group B which contains only a simple formulation, group A will be considered by the bot as more relevant in the matching results, even if B would have had a higher matching score. Keywords added as wording are symbolized by the icon ![](/files/dusnSE07oytOTXTpzJNg).&#x20;
* **Exclusion:** it allows you to exclude a wording from the group, which means that the bot will ignore this wording in its matching system. Therefore, the formulation group will never be triggered by this formulation. Excluded formulations are symbolized by the icon ![](/files/fHwu9c1rgdegtLDkMd0j).

After choosing the wording type, click "**Add"**.&#x20;

2. At this stage, the bot may suggest replacing certain words/terms in your formulation with existing formulation groups in your bot (such as generic formulation groups, default variables, action verbs...). This allows you to enrich the understanding capacity of your bot. With the suggested wording groups, you can perform the following actions:&#x20;

   * See the formulations contained in each group by hovering over them with your cursor.

   <figure><img src="/files/3n0UDJWKsE6MeLt7Ciul" alt=""><figcaption></figcaption></figure>

   * Identify the type of each group suggested by its color. (For details, refer to the explanation on[ Formulation Group](/contents/matching-groups) Types.)&#x20;
   * Make the group optional:&#x20;
   * Normally, when a group of formulations matches the user question, the knowledge that contains this group will be considered more relevant than that which does not contain it. However, when a formulation group is optional, it will not affect the matching result. This feature is useful if your knowledge contains a group of wordings with generic wording (like "how to", "how can I do" or "how to") that is likely to match a large number of user questions and therefore can bias the matching.&#x20;

   To do this, click on the arrow in the formulation group bubble, then check the “optional group” box.

![](/files/cbL8FYivWGLSYoViwpbG)

3. Choose the suggestion that suits you best. You can also ignore the suggestion by clicking "Add" once more.
   {% endhint %}

4. Once formulations are added, they can be edited, deleted individually or massively by clicking on the corresponding icon:

<figure><img src="/files/Gm2oiJ8xKAr3Zi5ieXBK" alt=""><figcaption></figcaption></figure>

> Note: the mass deletion option will only appear when you have more than 1 formulation within a matching group. You will need to choose one formulation to conserve while deleting all others.

Once created, matching groups can be immediately used in your knowledge items.

#### Create a matching group from the knowledge item editing zone

When editing your knowledge items, you may find it beneficial to transform a term into a matching group.

Our solution enables you to do this when creating a user's question or editing formulations inside a user's question after creating it.

**Create a matching group while editing a user’s question**

1. To create a matching group while editing a user’s question, switch to the **Selection** mode by clicking on the **T icon** then click on "Selection".

<figure><img src="/files/fjJdaFiCCb0X9PxrcDly" alt=""><figcaption></figcaption></figure>

2. Locate the term you want to transform into matching group and double-click on it. Then click on the **+ icon** that appears on the right. A panel will open.

<figure><img src="/files/DFxF6RfGQK1SQGJBkzuJ" alt=""><figcaption></figcaption></figure>

3. In the panel, enter the name of the matching group you are about to create.
4. Click on "Update" and you will see that the term has now turned into a matching group.

<figure><img src="/files/fQwc5899tZQGP4vqWn1b" alt=""><figcaption></figcaption></figure>

**Create a matching group while editing a formulation**

To create a matching group while editing a formulation, open the formulation list panel and start editing one existing formulation by clicking on the 3 dot icon. And repeat the steps above-mentioned.

<figure><img src="/files/LJycLNN81MV9sx9ZO28M" alt=""><figcaption></figcaption></figure>

### Use matching groups in a knowledge item

When creating a knowledge item or adding a formulation to a user's question, the Dydu BMS automatically suggests matching groups to use. You are free to accept or reject these suggestions.

<figure><img src="/files/gXFmWvWHCuZ18OHvoGIP" alt=""><figcaption></figcaption></figure>

You can also use the dedicated button in the user's question panel to search for a matching group and manually add it to a formulation.

<figure><img src="/files/9T0hiIvoLN9I0ajoEBNb" alt=""><figcaption></figcaption></figure>

For more details about how to edit a user’s question, refer to [this article](https://dev.docs.dydu.ai/docs/Knowledge/Types/answer_to_a_question).

### Enrich your matchings groups

Once matching groups are created, as you learn more about your end users you may want to enrich the existing matching groups with new formulations.

You can do this from the knowledge item editing page or directly in the **Matching groups** tab.

#### Enrich a matching group from the knowledge item editing page <a href="#enrich-a-matching-group-from-the-knowledge-item-editing-page" id="enrich-a-matching-group-from-the-knowledge-item-editing-page"></a>

1. After you create a user's question or a new formulation, switch from Edition to **Selection** mode by clicking on the **T icon**.

<figure><img src="/files/bNK7L4113lTqwKHrcmx4" alt=""><figcaption></figcaption></figure>

2. Locate the term you want to add and double-click on it. Then click on the + icon that appears on the right. A panel will pop up.

<figure><img src="/files/QIbyWvvwHXxEzfgDTAmC" alt=""><figcaption></figcaption></figure>

3. Start typing the matching group’s name in the field. An auto-suggestion will be made based on what you type.

<figure><img src="/files/ejQrHU6cABJgL6j0So4U" alt=""><figcaption></figcaption></figure>

4. Select the group you want to enrich from the auto-suggestion list and you will see all the formulations contained in that group. The "formulation(s) to add" section is already pre-filled with your selected term. You can also add more formulations if you wish.

<figure><img src="/files/RgA6gAcP0JdXCXLns3rZ" alt=""><figcaption></figcaption></figure>

5. Click "Update" and you will see that the term is now replaced by its belonging matching group.

<figure><img src="/files/tH3gEgPRARrX5xCS2oCD" alt=""><figcaption></figcaption></figure>

#### Enrich a matching group from the “matching groups” tab

The steps to follow are the same as creating [the first formulations for a matching group.](/contents/matching-groups)

You can either add them one by one from the "formulation" zone or add several at once by using the "Bulk Addition" feature in the "Options" tab.

#### Translate your matching groups into other languages supported by your bot

To translate your matching groups, go to the "Matching groups" tab and select the target language from the dropdown list. This will refresh the language setting of the page.

<figure><img src="/files/6l2VSgy068R5iwWebpAW" alt=""><figcaption></figcaption></figure>

Matching groups that were created in the original language will be shown with a suffix indicating the original language.

Firstly, translate the matching group's name. Then, to add formulations in the target language, open the editing panel of a matching group and start adding them one by one or in bulk.

### Monitor the usage of matching groups[​](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#monitor-the-usage-of-matching-groups) <a href="#monitor-the-usage-of-matching-groups" id="monitor-the-usage-of-matching-groups"></a>

You can gain insight into how a matching group is used across your knowledge base by analyzing its usage and dependency.

<figure><img src="/files/X85cfF4NH7L8Li2oKcL2" alt=""><figcaption></figcaption></figure>

#### Dependency

This feature is especially useful if some of your matching groups are used as formulations in other matching groups. It enables you to see the dependency between them in a graphical format.

Click on **dependency** and a new tab will open showing a graphic.

Here's how to interpret the graphic:

The arrow always starts from the parent group and points to the child group. The number indicates how many times the child matching group is used as a formulation.

<figure><img src="/files/XPJ9VFu88jYZDoMhCLC1" alt=""><figcaption></figcaption></figure>

#### Usage[​](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#usage) <a href="#usage" id="usage"></a>

This feature allows you to view which knowledge items and matching groups are currently using this matching group.

To access this feature, click on **usage**. A new tab will open, displaying the following information:

* The number of knowledge items that use this matching group
* The number of matching groups that use this matching group

Clicking on an item from the list will redirect you to the corresponding content page in a new tab.

<figure><img src="/files/6LtnMx8tNzW1byC6do7o" alt=""><figcaption></figcaption></figure>

### Import/Export of matching groups

#### Import

The matching groups page allow you to import or export all of your matching groups.

To import your matching groups, please follow these steps:

1. Click **Import** at the top of the page. A new window opens.
2. Click **Template** to download the template to follow. Note that you can import your matching groups in Excel or XML format.

Note : In an Excel cell, the limit is 2672 lines. If you wish to import more than 2672 formulations into a matching group, you need to set up several lines for the same group and repet the category and group name on each line.

<figure><img src="/files/dmRapU8V0p4URvjWzAYh" alt=""><figcaption></figcaption></figure>

3. Click **Choose a file** then select your .xslx or .xml file.
4. Click **Import**. Your matching groups are then imported.

> Important: The massive import of matching groups is limited to 99. It does not work for 100 groups or more.

#### Export all the matching groups

To export your matching groups, please follow these steps:

1. Click the **Export** button.
2. Choose the format of your export (XML or Excel) and click on it

The download of your matching groups in the selected format will start immediately.

#### Export one matching group

This option allows you to export 1 matching group and its formulations in the *txt.* or *xml.* format.

It is accessible via the **Option** tab in the matching group editing pannel:

<figure><img src="/files/xBgQyxoIhTsuU4gjPQIc" alt=""><figcaption></figcaption></figure>

### More advanced options about matching groups[​](https://dev.docs.dydu.ai/docs/Complementary_items/matching_groups#more-advanced-options-about-matching-groups) <a href="#more-advanced-options-about-matching-groups" id="more-advanced-options-about-matching-groups"></a>

<figure><img src="/files/Omd5bfJ9bDmBhTbG9pqI" alt=""><figcaption></figcaption></figure>

1. **Search**

This option allows you to see the matching details of a given phrase regarding the existing formulations inside a matching group.

Enter a phrase and click **Search**. You will see to which extend this sentence matches the formulations you have already added. This will give you a better idea on the relevance of your formulations.

This option is accessible via the **matching group editing panel > Search**.

<figure><img src="/files/6daUTgQBvdQUqJIJrNJU" alt=""><figcaption></figcaption></figure>

By clicking on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAVCAIAAABHbRCDAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAPZJREFUSIlj/P//PwONAROtLaCTHSwkqXZycv769Sucy83NvW/fXoK6hktYDRc7SIvzjMyMX79+HTp4kIGBwc7eno2Njfp2hIWGMjAwvHj+nIGBISY6mkhdjHjyeVFR8dGjR0lyhLW1dV9fL5ogAX/k5uViurenp4eBgaGkpARNfMnSpefOnsM0BLsdS5YuZWBgePbsGSMjIwMDg5CgkJeXJwMDw6rVq3/9+nXr1i2IGjY2Nkjobdu2/d37d+fPnX/27BlEL7LLsIeVubkFMldZWXnZsqUMuPN5VFT03bt3kbWcPHkCzh4u+WO42IEvf1ALDJewAgAAVFoUhKAOxQAAAABJRU5ErkJggg==) icon, you can get more details about the matching process.

<figure><img src="/files/Nz9IyeNaazli4dh0KAjC" alt=""><figcaption></figcaption></figure>

2. **Edition of the variables**

This feature allows you to define a formulation as a variable or modify a variable's value. This feature is effective When the user's question matches the matching group's formulation that contains this parameter.

It is accessible via the **matching group editing panel > Options > Options**.

<figure><img src="/files/F8tRW4zsfq3VeEJW73kG" alt=""><figcaption></figcaption></figure>

3. &#x20;**Strict matching with formulations**

When the option is activated, user questions must contain exactly the same formulation as the one in the matching group.

For exemple, “Bordeaux” is one of the formulations of the matching group “City”. If the user’s question contains “brodeaux”, the matching group will not match the user’s question.

This option is accessible via the **matching group editing panel > Options > Options**.

4. &#x20;**Can be suggested when adding rewords**

When the option is activated, the matching group can be suggested to replace similar words or phrases in knowledge items.

This option is accessible via the **matching group editing panel > Options > Options**.

5. **Optional or Mandatory Group**

When one of the options is enabled, the formulation group becomes either:

* **Optional**, which means it will not affect the result of the matching.
* **Mandatory**, which means the presence of this group is essential for the matching to be performed.

These options are accessible via the **formulation group editing panel > Options > Options**.

6. **Set update url**

This option allows you to add matching groups in bulk from an url.

Paste the URL that contains your matching group formulations in the designated zone and they will be added immediately in the matcning group.

This option is accessible via the **matching group editing panel > Options**.

7. **Solver**

The solvers have the following goals:

* Define a value to be saved when matching a matching group and define the capture to store this value (either at the group level or at the group formulation level);
* Perform javascript treatments during a matching groups of multilevel formulations.

Adding a solver can be made on a matching group.

To add a solver to a group level, go to Content > Matching groups, select a group, click the **Solver** tab and enter the solver value. Then click **Update**.

<figure><img src="/files/Y6RHLgSkHEkOhklnNHFF" alt=""><figcaption></figcaption></figure>

If you want to add a solver to a term in your matching group, add it directly to the formulation addition as follows: fill in the fields **Add this formulation** and **Resolved value** then click **Add**.

<figure><img src="/files/8kbDSkM39YM1MCS9hPuc" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/rjoxQ8y1i80ECRtb7AoB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/VYFhuXjBIxzW3QTIZQrO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/QZg2kWESbEiIA5vkcMnX" alt=""><figcaption></figcaption></figure>

Note: you can also add a solver to a term later by editing your term.

Example (matching group **Computer**):"I want to buy a \[Computer]" Go to Content > Knowledge, Add a New Knowledge, write the user sentence to understand, click on the **T**, repeat the steps of the previous paragraph.

<figure><img src="/files/e2lYL0CQRdWpVHWNWOAq" alt=""><figcaption></figcaption></figure>

With variable capture:

<figure><img src="/files/258W2knSGQRWMBKSSjR2" alt=""><figcaption></figcaption></figure>

Note: the variable can also be in JSON format to allow use of type $ {capture.MaVariable.Champ1}.

* **Case 1: no configured solver**

Shown value here is the word identified by the matching group.

<figure><img src="/files/Pw0vIAVSObejUqtWEIQQ" alt=""><figcaption></figcaption></figure>

* **Case 2: solver configured on the matching group&#x20;*****Computer***

The value displayed here corresponds to the value of the solver defined on the group. This value will appear for all terms in the matching group. In this example, the solver value of the group is: **machine**.

<figure><img src="/files/kJkKIJz78FTJ2cCDqEAv" alt=""><figcaption></figcaption></figure>

* **Case 3: solver configured on the matching group&#x20;*****Computer*****&#x20;and solver configured on the term "laptop computer"**

The value displayed here corresponds to the value of the solver defined on the term and not on the group because it is considered more specific. In this example, the solver value of the group is: **machine**. The solver value of the term "portable pc" is: **laptop**.

<figure><img src="/files/5N6C6zoIzGUkPeui8oa8" alt=""><figcaption></figcaption></figure>

It is also possible to capture a constant as a solver value or to make a call to a server-side Javascript function.

1. In this example, the goal will be to take into account the **groupTokens** parameter that represents a keyword in the solver configuration. To use its content (object table) in your matching groups, first insert a function that returns its value (JS server-side):

<figure><img src="/files/ggsAvQ1Z3AxvIrLqbliw" alt=""><figcaption></figcaption></figure>

In practical terms, the goal of this example is to count the amount of people in a knowledge item from information such as "My wife and I", "My friend and two children", and so on.

2. Create matching groups of number and type of people (cousin, son, niece, etc.).

<figure><img src="/files/UoFPSpdzC9Car9n4afim" alt=""><figcaption></figcaption></figure>

3. Go to the bottom of the page and click on the **Solver** tab.
4. Specify **getNbPersons(groupTokens)** (for the purpose of the example) in the **Resolved value** field.

<figure><img src="/files/R2FoSnFrbIhscuBpIC5s" alt=""><figcaption></figcaption></figure>

5. Click **Update**.
6. Test your solver through a knowledge with capture (see [Variables](https://dev.docs.dydu.ai/docs/Complementary_items/variables)). You then obtain:

<figure><img src="/files/QFsGMx4whACT2jChwNJM" alt=""><figcaption></figcaption></figure>

**Behavior of the solvers**

* If no solver is defined, the group returns the formulation that was matched;
* If only one solver is defined, for a given formulation (at the level of the group or the formulation), this one is used;
* If the solver is defined for the group and the formulation, the solver of the formulation is used because it is more specific.

**8. Synchronization information for matching groups**

This page aims to present the technical elements related to the synchronization of matching groups with the social bot.

The synchronization of the matching groups (and their structures) is carried out from the UUID in priority. Thus, if a group has the same UUID, it will be updated: labels, adding and deleting formulations.

In the case where a formulation has been added manually to the synchronizing server, it will not be deleted.

<figure><img src="/files/hDVlqRRp17gTOYekc7t1" alt=""><figcaption></figcaption></figure>

| Situation                                                                     | Synchronization action                                  |
| ----------------------------------------------------------------------------- | ------------------------------------------------------- |
| Adding additional formulation on the destination server (added manually)      | No deletion                                             |
| Adding additional formulation on the destination server (added automatically) | Deleting the formulation on the destination server only |

The content of the formulation matters to synchronize groups. If the content is different, then the formulation is different.

The synchronization of the matching groups is carried out once an hour.


# Global sentences

Global sentences represent bot answers during a dialog that are not handled directly by the knowledge base and that can be used to handle particular situations.

Go to **Content > Global sentences** to handle global sentences in your bot.

### Misunderstood sentences

* **Answer for misunderstood sentences**

This sentence is provided by the bot when it has not been able to understand the user's request.

* **Too many misunderstood sentences**

This response is provided by the bot when it has failed to understand several questions from the user during the same conversation. By default, this phrase is disabled, so you must enable it to make it operational. Once activated, you must specify the number of misunderstandings necessary for it to be triggered then click on "Update".

You can leave this general phrase disabled in case, for example, you use a [complementary answer](/contents/knowledge/knowledge-types/complementary-answer) type knowledge to trigger a Livechat escalation after 3 misunderstood phrases.

### Invalid questions

* **Default answer for too long questions**

When a user question is too long (more than 1,000 characters), the bot will give this answer.

* **Answer for empty sentences**

The bot will provide this answer when the user sends an empty request.

### Links

* **Click on links**

When the user clicks on a link (redirection to an external URL for example), the bot will provide this response.

* **Links open in new tabs**

The bot tells the user that the link they just clicked has opened in a new window.

### Livechat

* **Automatic welcome sentence when a livechat is accepted by an operator**

You can activate this phrase so that it is sent automatically when the operator picks up the conversation. This saves your operators from having to manually enter a greeting phrase.

**Note**: after defining the welcome sentence, you need to click on **"Enable this answer"** to make it effective.

{% hint style="info" %}
You can display the Livechat operator's first name using the following syntax: **${account.firstname}**.

Make sure that a first name is correctly entered for each Livechat operator on the BMS.
{% endhint %}

* **Automatic sentence at the end of the Livechat dialog**

You can add a phrase like “The conversation ended”.

* **Sentence sent to reengage the user**

This message is automatically sent to the user when there is a [period of inactivity](/livechat/dydu-livechat/dydu-livechat-setup/general-settings). The length of this period is configurable in the live chat settings, and it starts from the moment the user last sent information.\
The goal is to re-engage the user and ensure they are still present, in order to avoid an automatic closure of the conversation ([conversation timeout](/livechat/dydu-livechat/dydu-livechat-setup/general-settings)).\
If the operator's status is "searching for information," the message is not sent.\
*Example: "Are you still online?"*

* **Reengage sentence sent to the livechat user**&#x20;

This message is automatically sent to the user when the operator they are chatting with sets their status to one of the following: "searching for information," "consulting with supervisor," or "on the phone." The length of this period is configurable in the live chat settings, and it starts from the moment the user last sent information.\
The purpose is to ask the user to wait, keep them informed about the situation, and ensure they are still present to avoid an automatic closure of the conversation ([conversation timeout](/livechat/dydu-livechat/dydu-livechat-setup/general-settings)).\
*Example: "Please wait a moment while I gather the necessary information."*

{% hint style="info" %}
The durations before sending the sentence to reengage the user and the re-engagement message can both be configured in the Preferences menu -> Livechat parameters -> General -> Timeouts.
{% endhint %}

* **Sentence when the livechat automatically ends**

This phrase is sent to the user when the Livechat session has reached a defined [period of inactivity](/livechat/dydu-livechat/dydu-livechat-setup/general-settings). Its purpose is to notify the user when the Livechat session has ended and provide them with instructions on what to do next.

* **Sentence to welcome users to the livechat on the debug mode**

This phrase is only sent when a user requests a Livechat escalation using the keyword **#livechatconnectiondebug#** and an operator is available with status **'debug'**.

This allows you to debug or perform Livechat tests without disrupting the production service. The operator logs in with the status **'debug'** and the end user sends the keyword, which ensures that escalation is only done to the operator in debug mode. The greeting phrase confirms that the connection is established for debugging.

* **Sentence when no operator is available**

This is a phrase that appears when the user asks to speak to an operator and there are none available.

* **Sentence when the Livechat service is closed**

This is a phrase that appears when the user asks to speak to an operator while [Livechat is closed](/livechat/dydu-livechat/dydu-livechat-setup/general-settings).

### Inaccessible answer

* **Default answer for disabled knowledges**

When a knowledge is not published, your bot explains to the user that he has been able to understand it but can not provide an answer.

* **Default answer when action is empty**

When a knowledge answer is empty, your bot explains to the user that he has been able to understand it but can not provide an answer.

### Various

* **Refocus sentence**

This sentence is added at the end of the non-business bot's answers to refocus the dialog.

* **Answer in case of internal errors**

When an internal error occurs, the bot will provide this answer.

* **Rewords introduction**

Sentence to introduce reword when the bot isn't sure.

* **Global suggestion for rewords**

This global sentence allows you to add a reword sentence (when the bot did not understand the user sentence) and allows you to redirect the user to another knowledge. To do so:

1. Activate the answer with the **Enable this answer** button.
2. Select the knowledge to which the reword will redirect the user and fill in the title (via the text editor > **Edit**) which will be displayed from the dialog box.

<figure><img src="/files/0QHRjbjJq3BXfqFzLpj4" alt=""><figcaption></figcaption></figure>

3. Click **Update**.

Thus, when the bot does not understand a reword, it will propose to the user (in this example) to click on **No suggestions can answer my question.** which will return it to the knowledge **Other** (in this example) created previously.

Note: consider disabling satisfaction surveys on knowledge items to which the global suggestion redirects.

### Livechat waiting queue

* **Sentence when leaving Livechat queue**

Sentence when the user enters the queue but decides to close the window.

* **Sentence when no operator is available for queuing users**

### Livechat operators

These are sentences describing the status of the operator and the user when he is writing his answer.

### Mail

These are sentences related to email options.


# Language / Spaces

### Consultation spaces

Within the same knowledge base, it is possible to define several different answers to the same question, depending on the consultation spaces.

For example, the question "How to change my password?" may have a different answer if the user is logged in or not on the site.

To configure your consultation spaces, go to **Content > Languages / spaces**.

### Configuration

You can first manage the languages of your bot to divide the spaces by language. It allows you to determine the languages that your bot must handle.

<figure><img src="/files/TJGIb6R8OlwfQlFxudd0" alt=""><figcaption></figcaption></figure>

Click **Add** to add a new language to your bot. Select the language and valide your choice.

The next section allows you to more concretely define the consultation spaces within the same language.

<figure><img src="/files/JBzSYya7ohjrPeHIsYus" alt=""><figcaption></figcaption></figure>

You can change the name of a consultation space.

However, you can not delete a consultation space that is used by knowledge items. You must first delete all answers defined in this space.

In the box under the list of consultation spaces, you have the ability to define a default consultation space:

* **Bot default consultation space**: when an answer is not defined for a consultation space, the bot will give the answer defined for the space. This way, you do not have to copy the answer content for each space if only a few knowledge items require specific answers.
* **Bot default consultation space used when editing an action**: for convenience, you can choose the consultation space you want to use by default when you are working on the knowledge base.

### Usage in answers

When you have created multiple consultation spaces, in the knowledge actions, you will find them within answer bubbles in the following form:

<figure><img src="/files/brOApVaTYW9Rz6kJbALO" alt=""><figcaption></figcaption></figure>

When you create a knowledge, the default consultation space defined is enabled.

To add a new one, open the drop-down menu and choose a consultation space. If you do not specify a default answer in a knowledge, this knowledge will only be accessible in consultation spaces for which an answer has been defined.

To delete an answer from a consultation space, click the **-** icon of the consultation space for which you want to delete the answer (requires to be in edit mode).

Note: to use the consultation spaces in the dialog box, you must integrate the dialog box by specifying which space it should use. Not specifying a consultation space is equivalent to using the default space.

In this case, the bot responds to the sentence defined in *Global sentences*, in the section entitled: Question has an answer in another consultation space.

### Virtual hierarchy of consultation spaces

This section allows you to establish the hierarchy of your consultation spaces, which allows you to determine, among other things, from which consultation spaces the other consultation spaces are accessible.

Inside a consultation space, click on the **+** button, you can add another consultation space.&#x20;

<figure><img src="/files/vQXmOr7S4dx4gxHccLAB" alt=""><figcaption></figcaption></figure>

Note: you can not delete a consultation space if it is used in a knowledge.

Note 2: to find the knowledge using the consultation spaces, go to **Contents > Knowledge** then filter your knowledge by the concerned consultation space

### Virtual consultation spaces

This section allows you to add virtual consultation spaces to merge analytics from multiple consultation spaces.

To do so, click on **Add** and name your virtual space. Validate.

<figure><img src="/files/CZeHQM2mmuuapQ16DlQM" alt=""><figcaption></figcaption></figure>

Click on the spaces you want to add to your virtual space and click **Add**.

<figure><img src="/files/qE1MQ1ZBWv2AgmvhJvVM" alt=""><figcaption></figcaption></figure>

### Specific rewords

Specific rewords allow you to define formulations based on the consultation space used by the customer.

To do so, go to your **Knowledge** page and select an existing knowledge.

When you edit the question window (blue bubble), click on the contextual menu and then click **Options**.

<figure><img src="/files/h7smdJ1eZcdfsH01Yr3a" alt=""><figcaption></figcaption></figure>

So, to perform a specific reword, position yourself on the **Specific reword sentence** then select the consultation space for which you wish to modify the specific reword sentence.

<figure><img src="/files/eynytQUKn5Ax9LCYkni6" alt=""><figcaption></figcaption></figure>

Then click the **Edit** button and enter the desired reword.

Click **Update**.

You can now navigate between the various consultation spaces to check your changes have been taken into account.

Then click **Update** to validate your options and close the user sentence window.


# Context conditions

### Context Conditions

Context conditions are used to store information during the dialog, which can then be used to provide different answers.

Take the example of a site that offers several products. If the question of the user does not specify what type of product is concerned by his question, we will ask him. Once he has responded, the bot retains the information and will be able to give him the answer directly for the product concerned. The information is then stored in such a way that the question is not asked if the user asks more questions about the product.

### Practical case

In this practical case, the user declares an intention for which the bot needs to adjust its response according to a condition to be met. Here, the condition to be met is to be 18 years old. The bot will therefore detect whether the user is of age or not by means of a context condition based on a mathematical expression. It will adjust its response according to Success or Failure in relation to the implemented context condition.

{% embed url="<https://youtu.be/HiO5T7ufKzw>" %}

### Creating a context condition

1. Go to **Content > Context conditions**.
2. To create a new condition, click **Add condition**.
3. Fill in the fields:
   * **Condition name**: enter the name of the condition that will appear in the branches.
   * **Condition**: select the name of the variable that will determine the condition.
   * **Operation and value**: select a combination between an operation (*is defined, is, is contained or contains*) and a value.
   * **Usage**: displays the knowledge that uses this context condition.
4. Click **+** to confirm the addition of a context condition.

Note that you can create priority groups by clicking **...** located at the right of the context condition: **Move in a group**.

<figure><img src="/files/cDuITYlkP4Hio6E7Pu2G" alt=""><figcaption></figcaption></figure>

You can then create a priority group or select an existing one to associate it with the condition you selected.

You can then easily manage the hierarchy of your groups/conditions using the small arrows at the left of the context condition.

### Usage of a condition

You can then use these conditions in a decision tree and different answer in each case:

<figure><img src="/files/UCWkVuemn5D4kSwB1c2j" alt=""><figcaption></figcaption></figure>

1. To add a context condition to a knowledge, click on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAiCAIAAABeEieWAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAA4ZJREFUSIm1l81uFEcQx7v6a3o9cpBX8gvkYp8igWQJIaFceAgOXBGI5+HkXJJ34MDRRgIk7JxygBBELsbeNcY7OzvWZPqjOoeaNJPd9bLC6/+pp93dv/67urtqIcbIZpQ6qdH9fPHHn2nYzz9tA0D6BIDuZ5JcsHoCJDHG0Pu0ZAgBOqIxsySY2jIJEbvrcs5pJuc8Uf9xTgIgIg1IY2gFGvk/RpeUAACglJr1PiXvvXOOdkCawkDabAIg4pKrd9U0TQhBSjmLac12AZxzKafjtIycc9ZaKaUQoouRXUAIQQjxfQDGGFlvmqZrIsYoVwVImBgjhYcwMUaezg8AXBFA0lrHGEMIX48lmfDea62vDiDlee6cCyG0J5sYQohlJj98/Orh41ffHEbH0ntPVlrGCk2QjDHkAxE53YbVAhhjdCUpKjzG2L33K5QQgp4MTpfuOhhSSu8DIl6jDwBADIzO1TUx6D4iopybo+aqnLjBaU2NH9aXejHbeFBrGcCjJ6/HEz+e+EdPXpcT980pzrVjOGMshHDZuoe/f0mAT4N69+nt3ae3Pw3qhDk4PLuM93XrZVnWdR3n6c3B51t3no1Le//B/t17z9++K6j/7bvi7r3n9x/sj0t7686zNwef504vy3I4HE4mEw4AydRcJQfbWzeoZ3vrRnKzYGJd15SAieEXRP79x8nOzf7+i0G3c29/sHOz//7j5LJZiNg0TZuAKdHXdb1gR3svT3d//dDt+eW3D3svTxdMKYqxEIJzwRiDuq6ttc65fr+/qocLEY+OjrIsW1tb01pzsgPAi2K8EgBj7OTkBAAoq7f/LiGElMJ7d3FxcXXA2dmZtVYppZQSQrQxp2pFSlVV1RUxVVWdn59LKVN1wjmXxBBCxBgRZVmWiLi+vv4dgNGoGAxOKAZaayllW6RSGkFEysBN01hrhRCbm5vLv5UxxuFwOBqNer1elmXG9IzJqJ4DAEiVp/c+hOC9t9Zaa733eZ5vbGwsJsUYq6o6Pj6OMRpjsizLMpNlWimVCkbJGKMj2y0byGJVVUVRaK2NMb1eT0ppjGGMOecQsayq4FxRFCEEpZQxRmudZUZr1a1IWx9pR5TiyY1z3jlL9bJzzntPfz38628qxjjwna0fKbxKKa211hkBpmtR+t3A/svyyQfnXErhnBNCUCFDjCwz5BsA8jznnCulCEON2Zr6X52D0sNW16HaAAAAAElFTkSuQmCC) button.

<figure><img src="/files/niEr9luiDy8AV331y9Lc" alt="" width="264"><figcaption></figcaption></figure>

The **current action** option will allow you to create the success of the condition on the current window.

The **empty action** option will allow you to create the success of the condition on a new window.

The left branch represents the success of applying the condition while the branch on the right represents its failure.

2. Select the context condition via the drop-down list.

In our example, we have determined that if the user did not order product B, we check if he ordered the product A. If it did not order the product A, then it is necessary to recover the information on the product which it ordered.

3. In order to retrieve the information, make a redirection to the condition tree (in our example, it is choice\_products) which will allow the user to choose the type of product that concerns him if he does not have already been informed in his question.
4. Create the decision tree that will allow you to retrieve the information:
5. To create the "Product A" and "Product B" knowledge, click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAIAAADNQonCAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAMdJREFUOI1j/P//PwNlgIlC/YPGCBY469vPX89evkWTlhIX5mJnI9aIpy/eTF++FU06M9JbVV6KWCMgoK8idfvhs3cfPc+J9inqmM3AwHD74TP8RiOMkJYQyYz0RlMnLSECYSCLo5mIMIKLnQ3NzXAufr/QIFKLOmbvPnru3uPnkIAgBqAHJ5q3STPi7cfPpy/f8rAxJtUIhEfeffi868g5UvUzDL48AgE7jpwl3wguDnYlWck7D58T1KMkK8nFwQ7nMg6XUgsA1ZhCPvMNPoIAAAAASUVORK5CYII=) icon and choose **Constant**.

<figure><img src="/files/WVVsMk4ohMuybDr1wsdf" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/vbscb7h6MOkFubsd2nrN" alt=""><figcaption></figcaption></figure>

6. Click the small arrow at the right of **Constant**.
7. Enter the name you have defined for your variable (please repeat exactly the variable name you created in your context conditions beforehand) and enter **Ok** as the value (or the value you previously determined).
8. Click **Update**.

The registration of your variable is done.

9. You must now indicate that you want to eliminate the other variable. To do so, place your cursor following product\_A:=ok then click on the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAIAAADNQonCAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAMdJREFUOI1j/P//PwNlgIlC/YPGCBY469vPX89evkWTlhIX5mJnI9aIpy/eTF++FU06M9JbVV6KWCMgoK8idfvhs3cfPc+J9inqmM3AwHD74TP8RiOMkJYQyYz0RlMnLSECYSCLo5mIMIKLnQ3NzXAufr/QIFKLOmbvPnru3uPnkIAgBqAHJ5q3STPi7cfPpy/f8rAxJtUIhEfeffi868g5UvUzDL48AgE7jpwl3wguDnYlWck7D58T1KMkK8nFwQ7nMg6XUgsA1ZhCPvMNPoIAAAAASUVORK5CYII=) icon.
10. Choose *Empty* and enter the name of the capture to be dumped. In our example, it is product\_B. Click **Update**.
11. Repeat the operation to create the product choice B.
12. Once all the variables are saved, you have to replay the previous interaction that accessed the knowledge "Product question". You can now access this knowledge, knowing that the user has ordered product A or product B and will be given the answer "Product A" or "Product B". In order to replay the previous interaction, click **More options** and fill in the field **Redirect to another knowledge** ${replay\_interaction:-1}
13. Click **Update**.

Here is a summary of the user's path:

1. The user asks his question "Question product" without specifying the type of product, it is then redirected to the tree "choice\_product".
2. The selected product is registered and returns to the "Question product" knowledge to direct it to the branch of the chosen product.
3. The user asks another question which knowledge also uses the two conditions on the type of product, it is now directed directly in the branch corresponding to the previously registered product.

### Using context conditions with the LLM

Using an LLM context condition allows the bot to analyze a situation automatically using a prompt. Everything is configured simply in a dedicated tab.

For this evaluation to work, the classic trigger tab must remain empty.

1. Create a new knowledge.
2. Validate and close this knowledge.
3. Click on the add context condition button.
4. Once the success or failure branch is selected, the context condition appears. Then click on the "LLM" tab.

<figure><img src="/files/cgWktVrwDiRgZsLbNRYe" alt="" width="458"><figcaption></figcaption></figure>

5. Give a name to the condition bubble.
6. Add the prompt containing the instructions to validate or invalidate the condition.

<figure><img src="/files/1uy6ukCXc8NCNxzD0GpM" alt="" width="366"><figcaption></figcaption></figure>

{% hint style="warning" %}
The prompt must precisely indicate the format of the response that the artificial intelligence must formulate, such as the word TRUE or FALSE.
{% endhint %}

7. Select the type of operation to use as well as the expected validation value in case of success.

This success value must be strictly identical to the word returned by the prompt for the condition to work.

Once the configuration is validated, the system automatically handles the evaluation of the condition in the background.

### Mathematical expression

Here is a simple case of the use of mathematical expressions within a context condition.

1. Go to the **Knowledge** page and create a **Simple** knowledge "I want X meters" by adding the group **Number** in order to capture the number and assign a variable name that will be used in the context condition.

<figure><img src="/files/tf8KvSPq1GmvG14GUAiE" alt=""><figcaption></figcaption></figure>

1. Then go to **Content >Context conditions** then click **Add a condition**. Set up your context condition (with mathematical expression) like this:

<figure><img src="/files/XWclRWx8v2YH9cIinuzY" alt=""><figcaption></figcaption></figure>

3. Click **+** to confirm the creation of your condition and return to the initially created knowledge.
4. Add the newly created context condition and build your knowledge as follows:

<figure><img src="/files/HoUONHvoB3jPADwzMll9" alt=""><figcaption></figcaption></figure>

### Schedule management[​](https://dev.docs.dydu.ai/docs/Complementary_items/context_conditions#schedule-management) <a href="#schedule-management" id="schedule-management"></a>

You can manage the schedules of Livechat operators via the context conditions. This option allows you to manage time slots in a different way compared to the Livechat parameters option.

To do this, go to **Content > Context conditions**.

Click the **Add Condition** button and then, in the first field, select the condition **IsDateDayAndHour (...)**. A window opens with the possibility to easily manage the time slots.

<figure><img src="/files/ddsTqAXHwSw91ewYxcLO" alt=""><figcaption></figcaption></figure>

Fill in the other fields and click **Ok**to validate the creation of your context condition.


# External Contents

As a Dydu bot manager, you have the ability to centralize and organize your external content sources directly from an intuitive interface in the BMS, allowing you to generate instant responses based on these sources and thereby improve the quality of responses provided to end users. Through the BMS navigation menu, you can access the External Content page: Content > External Content.

## **Create a collection**

Via the BMS navigation menu, you can access the External Content page : **Content > External Content.**

You will then arrive at your collections page, where you will find one collection created by default.

<figure><img src="/files/a0uY7GSbpVevgTcBZrSw" alt=""><figcaption></figcaption></figure>

By clicking on this collection, you will enter the collection's edition page.

<figure><img src="/files/5wQTxx7Mm0wT9a5w0XpI" alt=""><figcaption></figcaption></figure>

## **Feed the collection**

### Importing your documents

<figure><img src="/files/g1h1u9YkO0CIhoa0Pyj0" alt=""><figcaption></figcaption></figure>

It is possible to import one or more documents of the following types: PDF, DOCX, PPTX, TXT. Each document must be 10MB maximum.

<figure><img src="/files/CNfCPn4ZfIDFmbtFzubP" alt=""><figcaption></figcaption></figure>

### Adding SharePoint sources

<figure><img src="/files/XHu7wwEQClqQ1oLIrLbr" alt=""><figcaption></figcaption></figure>

The SharePoint indexing tool allows you to add your pages and files to your knowledge base.&#x20;

To authorize this access, a new application with read permissions must be registered in your Microsoft environment. The complete process is explained in [this official tutorial](https://learn.microsoft.com/en-us/azure/healthcare-apis/register-application).

{% hint style="info" %}
During configuration, at the API permissions stage, two authorizations are required for the Dydu application. In "Microsoft Graph," then "Application Permissions," you must select the following rights and validate with administrator consent (Grant Admin Consent):

* Files.ReadAll
* Sites.Selected
  {% endhint %}

To finalize the application link, four technical elements must then be collected and saved:

* The clientId (client identifier)
* The client Secret (secret value)
* The tenant Id (environment identifier)
* The SharePoint site ID

<figure><img src="/files/n0icpwSQoKNlRWtSs8Wh" alt="" width="563"><figcaption></figcaption></figure>

#### Details of the steps required to retrieve the necessary values from Azure for the Dydu LLM configuration:

Go to the [Azure portal](https://portal.azure.com/#home) :

1. Click on App registrations.

<figure><img src="/files/DCSEYfKvQFQ7RMmAfQkZ" alt="" width="563"><figcaption></figcaption></figure>

2. Click on New registration.

<figure><img src="/files/SJ4yHpQNPkqg9hk7Q0bl" alt="" width="375"><figcaption></figcaption></figure>

3. Provide a name and click "Register".

<figure><img src="/files/Our43wlIxsgPHTEJAnxC" alt="" width="563"><figcaption></figcaption></figure>

4. The Application (client) ID is the client\_id.

<figure><img src="/files/3kBXmg89qtXH0k1d4t4O" alt=""><figcaption></figcaption></figure>

5. Click on Certificates & secrets. Then, under the "Client secrets" tab, click on New client secret.

<figure><img src="/files/KpU3FGNaM807M6E3ZwRs" alt=""><figcaption></figcaption></figure>

6. Click on Certificates & secrets.

<figure><img src="/files/9ZOUa1SyGLl42zmmqiMy" alt="" width="375"><figcaption></figcaption></figure>

7. Copy the generated Secret Value (client\_secret).

<figure><img src="/files/snTtVZPDuiGiQtAK5HuR" alt=""><figcaption></figcaption></figure>

8. Click on API permissions. Then click on Add a permission.

<figure><img src="/files/Dkqae7YTxaWqSAoBhntb" alt=""><figcaption></figcaption></figure>

9. Click on Microsoft Graph.

<figure><img src="/files/aWTM1bXvEe8G4fbunjfx" alt="" width="563"><figcaption></figcaption></figure>

10. Then click on "Application permissions". Add the Sites.Selected and Files.Read.All permissions.

<figure><img src="/files/NVY6phfBrkGKOvDbHMnv" alt="" width="563"><figcaption></figcaption></figure>

11. Click on Grant admin consent for XXXX.

<figure><img src="/files/EWvOPOvRXZJnxO2cYlV8" alt=""><figcaption></figcaption></figure>

12. To find the Tenant ID:

Go to the site: <https://entra.microsoft.com/>

Click on "Overview".

<figure><img src="/files/prS4qZEX3CFqVt8g59qq" alt="" width="563"><figcaption></figcaption></figure>

**The client ID** corresponds to the tenant ID.

13. To find the SharePoint ID:

Compose the following URL: `https://<tenant>.sharepoint.com/sites/<site-url>/_api/site/id`

The SharePoint ID is found within the result:

```
<d:Id
  xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"  
  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"  
  xmlns:georss="http://www.georss.org/georss"
  xmlns:gml="http://www.opengis.net/gml"  
  m:type="Edm.Guid">
67a90b63-3384-495d-9456-66141cf4ac28
</d:Id>
```

The tool offers the following features:

* Indexing of pages and files from an entire SharePoint site.
* Standard RAG usage, with the source URL of the SharePoint document displayed in the provided response.
* Optional authentication linking (SAML). In this case, the user must log in; the system retrieves their group memberships and filters responses according to their document access rights.

{% hint style="info" %}
Items that are not indexed:

* Files directly embedded within pages.
* Videos and certain specific formats (Excel, WMF, etc.).

Currently, the document retrieval and indexing process takes time (several minutes); the most frequent refresh rate is once per day.
{% endhint %}

### Adding a personalized FAQ

<figure><img src="/files/Xbql6b62Thzh1w8lqmK5" alt=""><figcaption></figcaption></figure>

To set up a personalized FAQ, simply provide the following information :

<figure><img src="/files/bEvMfj7JnL8nahEYhDcn" alt="" width="563"><figcaption></figcaption></figure>

* Name: Corresponds to the API address (URL) to be used.
* API Key.
* API Secret.
* List of IDs for the knowledge bases to be retrieved.

A single combination of API Key and API Secret allows access to multiple knowledge bases simultaneously.

Based on this information, all documents within the specified knowledge bases are automatically retrieved via the FAQ channel.

### Adding a Salesforce configuration

<figure><img src="/files/G8HCExMaNHk0FeFrHGhJ" alt=""><figcaption></figcaption></figure>

To set up a Salesforce configuration, simply provide the following information:

<figure><img src="/files/FgdBDKKaVT0FPMYuOnOL" alt="" width="563"><figcaption></figcaption></figure>

* **Name** : Name of the integration
* **Client ID** : Client key from the Salesforce configuration
* **Client Secret** : Secret key from the Salesforce configuration
* **Content Access URL** : URL used to retrieve documents from your configuration

#### Salesforce Metadata Extraction

To refine your RAG results and fully leverage data from Salesforce, you can filter and extract specific metadata when indexing your content.

**Configuration in External Content**

When setting up your Salesforce source in the interface, the **Metadata to extract** field allows you to define which information associated with your Salesforce articles should be retrieved and made available to the Dydu engine.

* **How to use it**: Enter the exact technical name of the Salesforce metadata you want to import into Dydu.
* **Example**: If you want to condition the response based on the article's visibility in your application, add the metadata `IsVisibleInApp` to this field.

Once this metadata is declared and extracted, it can be manipulated to dynamically filter responses, notably via server scripts or when integrating into a Web Service.

**Filtering Knowledge with a Server Script**

Server scripts allow you to apply precise sorting rules before the search engine generates its response. This ensures that the chatbot only uses content that meets your criteria.

Below is a simplified script template. In this example, the tool is instructed to restrict the search exclusively to Salesforce articles where the `IsVisibleInApp` metadata value is `true`.

**Script Template:**

```
function generateMetadataFilters() {
    var metadataFilter = {
        "condition": "AND",
        "filters": [
            {
                "key": "IsVisibleInApp",
                "operator": "EQUAL",
                "value": "true"
            }
        ]
    };
    return metadataFilter;
}
```

**How to adapt this script:**

You can easily modify this template to fit your needs by changing the values inside the quotation marks:

* `key`: Indicates the exact technical name of the metadata you want to check (the one declared in the "Metadata to extract" field).
* `value`: Indicates the value the content must possess to be used by the chatbot.
* `operator`: Defines the comparison rule. Three options are available:
  * `EQUAL`: Specifies that the article's metadata must exactly match your defined value.
  * `NOT_EQUAL`: Specifies that the article's metadata must not match your defined value.
  * `SUB_STRING`: Specifies that your defined value must be contained within the article's metadata (it does not have to be a strict match).
* `condition`: If you define multiple filters, this determines how they are combined:
  * `AND`: All conditions must be met simultaneously for the article to be selected.
  * `OR`: At least one of the conditions must be met for the article to be selected.

It is also possible to combine both conditions together:

```
function generateMetadataFilters() {
    var metadataFilter = {
        "condition": "AND",
        "filters": [
            {
                "key": "IsVisibleInApp",
                "operator": "EQUAL",
                "value": "true"
            },
            {
                "condition": "OR",
                "filters": [
                    {
                        "key": "Category",
                        "operator": "NOT_EQUAL",
                        "value": "Archive"
                    },
                    {
                        "key": "Tags",
                        "operator": "SUB_STRING",
                        "value": "Public"
                    }
                ]
            }
        ]
    };
    return metadataFilter;
}
```

**Using Filters in the Dydu\_RAG Web Service**

To apply these filters when querying your knowledge base, you must configure the `Dydu_RAG` Web Service.

Within the configuration of this Web Service, navigate to the parameters section and add a new parameter named `metadataFilters`. To define the value of this parameter, choose one of two options:

* **Option 1**: Use the server script

  Connect this parameter to the server script created in the previous step. The Web Service will call the script and automatically apply the filtering rules defined within it.
* **Option 2**: Define the filter directly

  Enter the filtering rule directly into the parameter's value field without using a script. The syntax must strictly follow an array structure containing the key, operator, and value.

> Example:
>
> `["url", "EQUAL", "[https://www.dydu.ai/produits/chatbot/relation-clients/](https://www.dydu.ai/produits/chatbot/relation-clients/)"]`

### Adding Website sources

<figure><img src="/files/c6NQcIId6unywOC6ga36" alt=""><figcaption></figcaption></figure>

There are three types of Websites that can be indexed:

#### Domain&#x20;

When you provide a web address to crawl, the tool prioritizes looking for the site map (called a sitemap) to identify pages.&#x20;

If no sitemap is found, the crawl starts directly from the address you entered.&#x20;

{% hint style="info" %}
If this address corresponds to a specific folder on your site, the search will only take place from that precise location.
{% endhint %}

<figure><img src="/files/CJ158syqTuNyxanwNI2a" alt="" width="563"><figcaption></figcaption></figure>

#### Sitemap&#x20;

A sitemap acts like a map of a website. This file lists all the important pages of a site. If you select a sitemap, the tool will only crawl the addresses listed within it.

<figure><img src="/files/OJ3hnuxR1hDsktNvcWXZ" alt="" width="563"><figcaption></figcaption></figure>

#### Specific URLs&#x20;

By providing a list of web addresses (URLs), you precisely define the exact pages the tool should analyze.

<figure><img src="/files/ear2oGnJM21avsr77C3w" alt="" width="563"><figcaption></figcaption></figure>

#### Link Tracking

This feature allows the tool to navigate beyond the initially configured pages to enrich your knowledge base.

* Track links: By checking this box, the robot will crawl and index every direct link (level 1 depth, or N+1) found on all the pages you submitted.

<figure><img src="/files/L2ZrNhDQJvILvnSsRb7S" alt="" width="563"><figcaption></figcaption></figure>

* Restrict link tracking to specific domains: This checkbox becomes available only when the "Track links" option is enabled. It allows you to target the crawl by entering a list of specific domains. The robot will then only follow level 1 links if they belong to the configured domains.

<figure><img src="/files/SemtCaFy2rpjmZbnNHHU" alt="" width="563"><figcaption></figcaption></figure>

### Collection Details

Information regarding the addition of your source to your collection will be displayed as follows :

<figure><img src="/files/ed6rBiZaYTX15CsiFh5z" alt=""><figcaption></figcaption></figure>

* **Name** : The name of your source.
* **Added by** : The bot manager's ID.
* **Creation date** : The date you added your source.
* **Preparation** : Status and actions related to source preparation.
* **Indexing** : Status and actions related to source indexing.
* **Last indexed on** : The date of the most recent indexing.
* **Actions** : Available actions for sources (edit, delete, and view details).

{% hint style="info" %}
Preparation is the individual data retrieval stage, during which the tool downloads and reads the content of each added source.

Indexing is the global stage that gathers and integrates all these sources into the knowledge base to allow the bot to generate responses. Any modification to a source requires restarting this global indexing.
{% endhint %}

Several statuses are available to track the progress of your content :

* **Waiting for action** : No action has been initiated on this source yet.
* **Scheduled** : Preparation or indexing of the source is scheduled and will run soon.
* **Canceled** : The preparation or indexing process was interrupted.
* **Preparing** : Downloading and reading the source data is in progress.
* **Ready** : Data has been successfully retrieved; the source is now awaiting indexing.
* **Preparation failed** : An error prevented data retrieval for this source.
* **Indexing in progress** : Data integration into the knowledge base is being processed.
* **Indexed** : The source is fully integrated into the base, and the bot can use it to generate responses.
* **Partial indexing** : The base requires an update. For example, a new source was added but has not yet been indexed with the rest.
* **LLM config test failed** : The process stopped due to an error in the language model configuration.
* **Configuration file not found** : A technical server error prevented the operation from completing correctly.

### Suggestions and Indexing

<figure><img src="/files/ZhyM0QyTj4VQ1XLNACno" alt=""><figcaption></figcaption></figure>

#### Prepare and index the collection&#x20;

This main button allows you to simultaneously launch the preparation and indexing of your entire collection (including all configured sources).&#x20;

By clicking the small adjacent arrow, you can access two specific options:

* Prepare collection only (without launching indexing).
* Index only items that have already been prepared.

It is also possible to act on an individual source: simply click directly on that source's status button to prepare or index it in isolation.

#### Suggest knowledge from the collection

This button allows you to prepare your collection in order to extract an Excel knowledge file, which you can then import directly into your bot.

Important points:

* No indexing: This action does not index the collection.
* No RAG: It does not allow the bot to use these documents to generate responses autonomously.

The sole purpose of this button is the creation of this export file.

### Details for collection items with "Completed with errors" status

Once indexing or suggestion is completed, you may see a "Completed with errors" status.&#x20;

By clicking on the status, a report is displayed with the error details.

* Details of errors from Websites:&#x20;

The report details show a percentage of successes and errors. A breakdown of HTTP error codes is provided.&#x20;

<figure><img src="/files/IaLxFpSxB4CsAX5PsZHy" alt="" width="563"><figcaption></figcaption></figure>

Errors may be classified into different categories, such as server-side issues or others.

<figure><img src="/files/dH0bfeYdA4upU6HnTsTu" alt="" width="563"><figcaption></figcaption></figure>

* Details of errors from SharePoint:&#x20;

The report details also show a percentage of successes and errors. The report provides full details on all pages that could not be retrieved, as well as the folders involved.&#x20;

<figure><img src="/files/ZQMQCPKa7gGFbcAVIHcJ" alt=""><figcaption></figcaption></figure>

For each folder, it also specifies the particular files that could not be retrieved, allowing for clear identification of missing items.

<figure><img src="/files/NAVZPou4lSBNbaoZjjeR" alt="" width="563"><figcaption></figcaption></figure>

## **Collection configuration**

### Customizing responses

<figure><img src="/files/tVHuRdooEcLHU5viWRlv" alt=""><figcaption></figcaption></figure>

**Configuring the indexing parameters of a collection** allows you to precisely adapt the bot’s behavior to your business needs and the desired user experience. Each collection has a **dedicated card** where you can adjust several options to optimize the **relevance**, **length**, and **style** of generated answers, as well as the **selection of information sources**.

* **Temperature** defines the style of the bot’s answers: the higher the temperature, the more creative the answers can be; conversely, a low temperature favors strictly factual answers. This setting is especially useful to ensure that the tone and level of creativity of the bot match your usage context.
* **Number of output tokens** refers to the length of generated answers. You can choose between short, medium, or detailed answers depending on the complexity of the topics covered or your users’ preferences. Adjusting this parameter helps deliver more concise or, on the contrary, more in-depth information.
* **Minimum score required for answer sources** lets you filter the documents used by the bot: only sources with a score equal to or higher than the defined value will be considered in generating answers and displaying cited sources. This setting ensures that only sources deemed sufficiently relevant or reliable are used to build the answer.
* **Additional prompt** gives you the possibility to add specific context or an instruction that will always be considered when generating answers for the relevant collection. This free-text field allows you, for example, to impose a tone, specify a business instruction, or guide the bot on a sensitive topic.
* The **flexible management of the additional prompt** feature provides better control over the final prompt sent to the model. It allows users to view the complete final prompt and choose the precise placement of their additional prompt: at the beginning, in the middle, or at the end.

{% hint style="info" %}
You cannot modify the content of the final prompt itself; you can only insert the additional prompt and define its position to optimize the model's response.
{% endhint %}

<figure><img src="/files/92TY3QZflR7iwVfBUA6X" alt=""><figcaption></figcaption></figure>

#### Advanced Mode: Response Customization

By enabling advanced mode, new configuration options appear to control how the system selects information.

**Minimum score required for response sources**&#x20;

In this block, you will find a new checkbox: **Enable/Disable score filtering before response generation**.

* **Disabled (default)** : All retrieved sources are used to generate the response, regardless of their relevance score.
* **Enabled** : The system applies a strict upstream filter. Only sources with a score greater than or equal to your defined minimum will be kept and used to draft the response.

<figure><img src="/files/GJNBZAOrJwlBNVPxucSz" alt="" width="563"><figcaption></figcaption></figure>

**Response Generation**&#x20;

This new block allows you to configure the amount of information sent to the model to build its response. You will find the following options:

* **Number of direct sources (Top K)** : This parameter is set on a scale of 1 to 10 and defines the number of text extracts (chunks) sent directly to the LLM. It is strongly advised to keep this value low (between 2 and 4). If set too high, the model may be overwhelmed by less relevant information, increasing the risk of hallucinations.
* **Enable/Disable LLM Rerank to improve response accuracy** : This option activates a second review of the extracts to keep only the most relevant ones. While this slightly slows down response generation, it greatly improves the quality and accuracy of the final result.

<figure><img src="/files/18ezHFONscxYvghm2bau" alt="" width="560"><figcaption></figcaption></figure>

**Specific Rerank Parameters**

When you check the LLM Rerank activation box, the interface adapts and new configuration options appear in the response generation block:

* **Pre-selection range (Top K)** : The initial parameter ("Number of direct sources") changes its name and behavior. The model will first scan these K extracts to identify the most relevant ones before keeping only the best (N) to answer. Unlike the classic mode, you can set a higher value here (between 10 and 30). This parameter is adjustable on a scale of 1 to 50.
* **Number of chunks to use (Top N)** : This new parameter (adjustable from 1 to 10) corresponds to the final number of extracts that will actually be used to write the response. The Rerank chooses these N best items from the pre-selection (K). It is recommended to keep this value low (between 2 and 4).
* **Processing power (Batch size)** : This setting defines the number of extracts processed at once from the Top K. A higher value speeds up the response processing time but requires more system resources. Note: The scale of this parameter automatically adapts to your Top K configuration (for example, if your Pre-selection range is set to 35, the Batch size can be configured from 1 to 35).

<figure><img src="/files/JnIB0fOF9uizn365UTDj" alt="" width="562"><figcaption></figcaption></figure>

### Dynamic variables

**Dynamic variables** can be used in the additional prompt of each collection. For example, **`${capture.user_name}`** is automatically replaced by the actual value retrieved during the conversation or from a web service.

If a variable is not available, it is ignored or replaced by an empty string.\
This makes it possible to **personalize the instructions** sent to the RAG engine, resulting in answers tailored to each user’s context.

In order for the capture variables to be correctly replaced in the prompt, they need to be added to the parameters of the Web service: Dydu\_RAG.\
Here is an example with the capture variable `user_name`:

<figure><img src="/files/vO54Mri8q07AJvysIYne" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6QRtQyzkbYpm0gyIpGZp" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When the prompt is sent to the **RAG engine**, it no longer contains the variable in the form **`${capture.XXXX}`**, but directly its value.

For example, a prompt like:

* "*Give me the value contained in ${capture.city}*"

Will be sent to the engine as:

* "*Give me the value contained in Paris*"

If the variable **`${capture.city}`** contains "Paris".
{% endhint %}

### Contextualizing RAG with metadata

It is possible to precisely target the documents used by the RAG to generate a response. To do this, you can filter content using the metadata associated with each document (such as a URL or a category). All metadata can be used for this filtering, with the exception of the score.

Example of metadata:

<figure><img src="/files/ZbROKBx3dZz8MKEiQ1r4" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
It is possible to view the metadata of your documents by clicking the button  ![](/files/RMGpDMVP7KcQVdEsynno) of an indexed collection.&#x20;
{% endhint %}

The configuration is done directly in the webservice named Dydu\_RAG. Simply add a new parameter titled metadataFilters. The value of this parameter must be entered in this format: \[{"key": "key", "operator": "operator", "value": "value"}].

<figure><img src="/files/7tjVRDb48FH8BY9dA3Nu" alt="" width="563"><figcaption></figcaption></figure>

Three operators are available to define your filter:

* EQUALS: keeps only the content exactly matching the value.
* NOT\_EQUAL: excludes content exactly matching the value.
* SUB\_STRING: keeps content that includes all or part of the value.

For example, to limit the bot exclusively to Dydu product pages, use the SUB\_STRING operator on the URL as follows: \[{"key": "url", "operator": "SUB\_STRING", "value": "<https://www.dydu.ai/produits/>"}].

### Displaying the RAG Score in Responses

To display the **metadata score** attributed by the RAG (Retrieval-Augmented Generation) model for each response provided, it is necessary to modify the `Dydu_RAG` **webservice** and integrate the information into the **response format**.

To retrieve the **RAG score**, the variable must be extracted from the webservice's return JSON.

Add the following line **inside the JSON** structure to **extract the score value**:

```
var score = returnedJson.metadata[i]["score"];
```

After extracting the value, you must define the **display variable** and format how the score will be presented.

This code checks for the existence of the score and formats it for display, for example, by adding a line break and the label:

```
var scoreDisplay = "";

// Formatting the score for display (e.g.: "Score : [value]")
if (score != undefined && score != null) {
    scoreDisplay = "<br/> Score : <br/>" + score;
}
```

This completes the configuration; the response score will now be displayed with every answer generated by the RAG.

***

**Properly configuring these parameters** allows you to obtain **relevant, reliable, and tailored answers**, while maintaining control over how the bot interacts with your users for each indexed data collection.

## **Content management**

### **Automatic reindexing**

<figure><img src="/files/u7qDn9cWjKRPnwXCveo2" alt="" width="563"><figcaption></figcaption></figure>

You can configure the **reindexing frequency** of collections using four modes: **none**, **daily**, **weekly**, or **monthly**.

* **None**: no reindexing is scheduled, data remains unchanged.
* **Daily**: reindexing is performed automatically every day at midnight.
* **Weekly**: reindexing takes place every Monday at midnight.
* **Monthly**: reindexing is performed on the first Monday of each month at midnight.

The day and time of reindexing are predefined and cannot be changed.\
This configuration allows you to adjust the **data update frequency** to your needs, while keeping the process simple and automatic.

### Content access optimization

<figure><img src="/files/dg2RRLt5uvmbmIeyBns5" alt="" width="563"><figcaption></figcaption></figure>

This option provides fast responses while maintaining high accuracy. It is essential when processing a large volume of data.

However, it may be less effective if your knowledge base is small. It is therefore recommended to test it first to verify its effectiveness on your content using the "Test the RAG" feature.

{% hint style="warning" %}
This option is not enabled by default.
{% endhint %}


# LLM: how to configure each type of model ?

Once one or more collections have been created in the External Content menu, it is possible to configure an LLM model.

## Summary of my LLM settings

The “**Summary of my LLM settings**” modal allows you to configure the parameters needed for the operation of the LLM that will be used.

<figure><img src="/files/zmkKm9oPzjzy4fg1ulFD" alt=""><figcaption></figcaption></figure>

In the modal above, you can enter the following parameters depending on the chosen LLM type by clicking the **Edit** button:

1. **LLM model type** :&#x20;
   * Azure OpenAI Dydu
   * OpenAI
   * Azure OpenAI
   * MistralAI
   * GoogleAI Gemini
   * VertexAI Gemini
   * Scaleway
2. **API authentication key** : Enter the API authentication key associated with the LLM model you will use.
3. **LLM and embedding model :**
   1. LLM model: An LLM is an artificial intelligence model trained on large amounts of text to understand and generate natural language.\
      It can translate, summarize, answer questions, etc., using context and word meaning.
   2. Embedding model: An embedding model transforms words or phrases into numeric vectors so that the AI can compare their meanings.\
      Similar texts will have close vectors, which helps process and retrieve information more intelligently.
4. **Additional options :** Depending on the LLM model you use, there may be additional options to fill in.

Once the parameters are entered, simply click Apply and the model is ready to use.

## Types of LLM models

From the dropdown list in “**Summary of my LLM settings**”, you can choose the one you want to use :

### Azure OpenAI Dydu

<figure><img src="/files/RLCGeuhOhOzihJbKJmE6" alt=""><figcaption></figcaption></figure>

The Azure OpenAI Dydu model is used by default, without the need to adjust any settings.

### **OpenAI** <a href="#openai" id="openai"></a>

<figure><img src="/files/3TpXeFtXx6MBcJU9trs6" alt=""><figcaption></figcaption></figure>

* Here is the [link to the LLM and embedding models](https://platform.openai.com/docs/models) you can use.
* API version: v1 is the default version used by OpenAI for the endpoints, so you can leave it as v1 or use another version.

### **Azure OpenAI** <a href="#azure-openai" id="azure-openai"></a>

<figure><img src="/files/gXUz4TB9i1NHSepUv3kw" alt=""><figcaption></figcaption></figure>

* If you want to use an Azure configuration, you will need to create two deployments:
  * The first for the LLM model to use, for example: gpt-4o-mini
  * The second for embedding, for example: text-embedding-3-large
* The example above is for illustration purposes only. However, the different LLM models and indexing methods are constantly evolving. Here is the [link to the LLM and embedding models](https://platform.openai.com/docs/models).
* You need to log in to your Azure portal: <https://portal.azure.com> to fill in the required fields:
  * In your Azure OpenAI resource, you will find:
    * **API authentication key:**\
      Go to: Keys and endpoints.\
      You will see two keys, `Key1` and `Key2` , copy one of them.
    * **Azure OpenAI endpoint:**\
      In the same section, you will also see the endpoint URL, such as : \
      `https://your-resource-name.openai.azure.com/`
    * **Deployment names:**\
      This is the name you gave to the model deployment, for example: `gpt-4`, `chat`, `embedding-model`, etc. \
      Go to the “Deployments” tab to find it.
    * **API version:**\
      You can see this in the [official Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/api-version-deprecation#latest-ga-api-release) or in the portal.

### MistralAI <a href="#mistralai" id="mistralai"></a>

<figure><img src="/files/WkOuIQAQV5Qv1GO7oNnr" alt=""><figcaption></figcaption></figure>

Example of LLM and embedding model:

* LLM model : **ministral-8b-latest**
* Embedding model : **mistral-embed**

The example above is for illustration purposes only. However, LLM models and indexing methods are constantly evolving. Here is the [link to the LLM models](https://docs.mistral.ai/getting-started/models/models_overview/) and the [link to the embedding models](https://docs.mistral.ai/capabilities/embeddings/).

### GoogleAI Gemini <a href="#googleai-gemini" id="googleai-gemini"></a>

<figure><img src="/files/syhtmAZ5oj96Z1GRegxo" alt=""><figcaption></figcaption></figure>

Example of LLM and embedding model:

* LLM model: **gemini-1.5-flash-latest**
* Embedding model: **models/text-embedding-004**

The example above is for illustration purposes only. However, LLM models and indexing methods are constantly evolving. Here is the [link to the LLM and embedding models](https://cloud.google.com/vertex-ai/generative-ai/docs/models).

### VertexAI Gemini <a href="#vertexai-gemini" id="vertexai-gemini"></a>

<figure><img src="/files/BU7NkRCjFLch6iksmIfD" alt=""><figcaption></figcaption></figure>

To configure the VertexAI Gemini settings, please refer to the following page: [VertexAI Gemini](#vertexai-gemini)

### Scaleway <a href="#scaleway" id="scaleway"></a>

<figure><img src="/files/KzxMvtS4tWP68Ue8VJ30" alt=""><figcaption></figcaption></figure>

Here is the [link to the LLM and embedding models](https://www.scaleway.com/en/docs/generative-apis/reference-content/supported-models/).

### Custom LLM <a href="#custom-llm" id="custom-llm"></a>

If you want to use your own custom LLM, which does not match any of the types mentioned above, you can manually configure your instance.

This configuration requires a few prerequisites:

* Have a URL exposing the routes specified in the table below (e.g.: <https://my-api.test.fr/openai>, allowing access to the /openai/chat/completion or /openai/embeddings endpoints)
* Provide an API key via the Authorization header (format: Bearer)
* Specify the LLM and embedding models you want to use (this information is required on our side)

| API                | Method + URL relative                             | Documentation                                                      |
| ------------------ | ------------------------------------------------- | ------------------------------------------------------------------ |
| Embedding creation | POST <https://api.openai.com/v1/embeddings>       | <https://platform.openai.com/docs/api-reference/embeddings/create> |
| Question/Answer    | POST <https://api.openai.com/v1/chat/completions> | <https://platform.openai.com/docs/api-reference/chat/create>       |


# VertexAI Gemini

Compared to other types of LLMs supported by Dydu, \*\*VertexAI\*\* requires specific configuration to operate.

## **Introduction**

Google provides several types of authentication to interact with VertexAI:

* **Private key exchange** (not recommended)
* **Using the Google Cloud CLI**
* **Configuring a Workload Identity Federation (WIF)**

The solution we recommend is the third option.\
However, this configuration requires certain prerequisites that will not be covered in this documentation, namely:

* [Creating a **service account**](https://cloud.google.com/iam/docs/service-accounts-create) with the necessary permissions to access the LLM
* Creating an **OIDC**, which will be configured in the WIF provider

## **Creating a Workload Identity Federation (WIF)**

To begin, go to the **IAM & Admin > Workload Identity Federation** menu :&#x20;

<figure><img src="/files/TDwr7RWEJww9hfXDC0uv" alt=""><figcaption></figcaption></figure>

You will arrive on an interface listing the **Workload Identity Pools**.\
You need to add one by clicking the **Create Pool** button at the top of the screen.

<figure><img src="/files/X6lCRfu7bdFW1ln8Rklo" alt=""><figcaption></figcaption></figure>

Then fill in the **name** and **description**.\
Keep the name aside; it will be used for the configuration on the BMS External Content side.

<figure><img src="/files/KxGwFWAwZibEQrIn6ixu" alt="" width="285"><figcaption></figcaption></figure>

Click **Continue**. You will then access the settings for the provider to add to the identity pool. **Dydu supports providers of type OIDC**.\
Select **OpenID Connect (OIDC)** from the list, then give it a **name** that will be needed for configuration on the BMS side.

Now, you need to configure the OIDC with the one you previously set up.\
Fill in the **provider ID** (clientId), **issuer**, and the **JWK file** in JSON format if you have configured it on your side.\
Use the URL “<https://.../.well-known/openid-configuration”> to configure this part more easily.

Then, you must choose the value for the **audience**, which will be required in the token issued by your OIDC. This value must be present in the **aud** claim of the issued token. For example :

<figure><img src="/files/Mn9HEJBaAGqJ07dPpFLN" alt=""><figcaption></figcaption></figure>

Finally, complete the **attribute mapping** to finish configuring the provider for your identity pool.\
Save your changes, then go to the **Information** page for the newly created pool (**\<pool\_name>**).

Click the **Grant Access** button, then select **Grant access via service account impersonation**.\
Select your **service account** from the list, then complete the mapping.

<figure><img src="/files/suww32VLoPfSdlacvofa" alt=""><figcaption></figcaption></figure>

Click **Save**. A new window will open to configure your application.\
Select the **provider** from the list, fill in the required information, then click **Hide**.\
Downloading the configuration is not necessary for the next steps.

<figure><img src="/files/PZtakuDkSIScR1FuDnde" alt="" width="308"><figcaption></figcaption></figure>

The configuration on the **Google Cloud side** is now complete.

## **WIF configuration on the BMS side**

Once on the **BMS**, click on **Content > External Content**.\
In the configuration area **LLM Parameter Summary**, click **Edit**, then select **VertexAI Gemini** from the list of LLM model types.

<figure><img src="/files/wYVJE6imOmtI5cFnMy2J" alt=""><figcaption></figcaption></figure>

Then click on **Configure** in the **Provider configuration** section.\
A new window will open as a popup.\
You will need to configure the call to your OIDC's **/token endpoint**.\
This call must be a **POST** and should contain only **headers** and **URL-encoded parameters**.

<figure><img src="/files/O37YiTQdXKLiDVh6bUnz" alt=""><figcaption></figcaption></figure>

You have two options:

* **Fill in all the information manually**
* **Paste a CURL request in the lower area**: the entire configuration will be set up automatically

<figure><img src="/files/Am43hwZnNUB346wRUui8" alt=""><figcaption></figcaption></figure>

Once the configuration is complete, you can click outside this window.\
The configuration button has been renamed, and you will see the CURL request when you hover over it.\
Fill in the models from step 3 according to the ones you want to use.\
You are now at the final step.

<figure><img src="/files/G4WLV5Mh2STToBzKa991" alt=""><figcaption></figcaption></figure>

Here is where to find the required information on **Google Cloud**:

* **Project number:** Click the three horizontal bars at the top left, then go to **Cloud Overview > Dashboard**. Take note of the project number.

<figure><img src="/files/dqsNPVS6N8zx86Jg7zO3" alt=""><figcaption></figcaption></figure>

* **Region to use:** Refer to the Google Cloud documentation.
* **WIF pool ID:** This is the value in the **Identifier** column next to the pool you created in the initial steps.

<figure><img src="/files/b70yok1knWhT3LuZYPyt" alt=""><figcaption></figcaption></figure>

* **Provider ID:** From your pool, click **Edit** on your provider’s row, then take the value from the **Identifier** field.

<figure><img src="/files/dZzRFxtWgaHDzDOGscMb" alt="" width="414"><figcaption></figcaption></figure>

* **Service account email:** This information is found on the service accounts screen. Copy the email of the one with permissions to access VertexAI, then enter it in the field.

The configuration is complete!


# Gallery

You can add images (in png, jpg, gif formats), videos (in swf format) or files (all formats: doc, pdf, xlsx, etc.) in your answers.

Note: file formats of type .exe can not be imported.

To do so, you must first add these elements in the gallery. To access the gallery, go to **Content > Gallery**.

You can organize your gallery in folders. To add a new folder, click **Add** > **Create new folder in Root**.

A new window appears. Type the name of your folder, then click **Add**.

You can repeat the operation to add more folders and sub-folders.

To add an item to a folder, click the folder name and then **Add** > **Import a file in (folder name)**. Then click **Choose file**.

Select the file(s) you want to upload and confirm the operation by clicking **Import**. You will see your file(s) in column on the right.

<figure><img src="/files/tuLjnAkK4L0ZiP6bPjd8" alt=""><figcaption></figcaption></figure>

When you click on this file, you can preview the content, its size and a direct link to the file.

Once the item is saved in the gallery, you can use it in a reply. To do so, when editing an answer, place your cursor where you want to insert the item and then on the toolbar, click the **File manager** from the toolbar: ![](/files/dlCcbjD1uKxJpTHKwhkK)

Select your file: it will appear on your answer window.

Note that you will have the ability to change the size of images easily by clicking on the image.

For word, excel, pdf, etc. files, a download link is displayed.

### Insert videos (Youtube, etc.)

It is impossible at this time to host videos from the platform. However, it is possible to embed videos from platforms like YouTube, Dailymotion, etc.

To do so, you must use the code provided by these platforms and insert it directly into the HTML code of the answer (or sidebar).

YouTube example:

1. Go to the page of your YouTube video;
2. Click **Share**;

<figure><img src="/files/RFIiG8jMEHq3pJWuYYO4" alt=""><figcaption></figcaption></figure>

3. Click **Embed**;

<figure><img src="/files/6ybEzJLaoNULG1z18Uev" alt=""><figcaption></figcaption></figure>

4. Then copy the entire code

<figure><img src="/files/VZ0YYXej11KDY1NGJvbn" alt=""><figcaption></figcaption></figure>

5. Finally, paste all the code in the source code of your knowledge (HTML editor).

For google drive, be sure to take the given link when you click **Embed this video** (See <https://descary.com/integrez-video-google-drive-site-web-blogue/>).


# Web services


# Web Services

{% hint style="warning" %}
**Note**: Only users with *Administrator* or *Super User* rights can access this page.
{% endhint %}

You can configure web services to be called during conversations. Go to **Contents > Web services** to access the configuration page. This page allows you to create a **REST** or **SOAP web service from a WSDL**. You can choose between the two methods by clicking the **Add** button and then selecting the type of web service.

<figure><img src="/files/qi03v46BNhBSpSMrGQVh" alt=""><figcaption></figcaption></figure>

The configuration / modification of a web service is divided into several parts:

* Configuration;
* Webservice authentication;
* Webservice headers;
* Parameters
* Result variables;
* Action buttons.

### Configuration of a web service

{% hint style="info" %}
**Note :** once the service is created, it is not possible to change the type of the web service (REST or SOAP). However, all other fields are editable.
{% endhint %}

* The **Name** field allows you to configure the name of the web service, which will be used to call it in the knowledge base.
* The **URL** field allows you to configure the URL of the web service. It must always be a constant.
* The **Cache** field allows you to configure the duration of the web service cache. The value 0 deletes the cache mechanism.
* The **Timeout** field allows you to configure the duration of the web service timeout. The value 0 leaves a standard timeout of an HTTP request.
* The **HTTP Method** field allows you to configure the type of request: GET / POST / PUT / DELETE. This is especially useful for REST calls.
* The **Response Type** field allows you to configure the type of answer: XML / text / JSON.

### Configuring a certificate for a web service

Configuring a certificate for a webservice is required if you want to ensure the security of online communications between the user/client and the server.

To associate a certificate with a web service, you must first encrypt the certificate key. To do this, go to Preferences > Bot > General. At the bottom of the page you'll find the section "Set a password to encrypt webservice certificates".

{% hint style="warning" %}
The password you choose is final. It cannot be changed or cancelled.
{% endhint %}

The certificate format must be in PFX (a file format used to encrypt the server certificate, any intermediate certificates and the private key). Once the certificate has been downloaded and the certificate password entered, click on "**Save**".

{% hint style="warning" %}
Only REST-type web services can be configured with a certificate in the BMS. This feature will not be developed for SOAP web services.
{% endhint %}

### Web service authentication

Here you can choose the type of authentication for your web service (OAUTH\_2 / HTTP\_BASIC). Once selected, you can fill in the fields **User name for authentication** and **Password for authentication**. However, these fields may remain empty. They should only be configured if it is really necessary.

### Web service headers

This section allows you to add HTTP headers in the call to a service. This is often used for authentication.

### Parameters

* The **Name** field allows you to configure the parameter name.
* The **Value** field allows you to configure the value of the parameter. If this value is to be retrieved in a dialog, indicate \*\*${capture.\*\*Xxx} with Xxx which is the name of the variable in the dialog.
* The **Test Value** field allows you to configure a value for the parameter only used when testing the web service on the configuration page (see action buttons). This value is not saved when you leave the page.

For example: In a knowledge, if the question asked by the user is "*What's the weather like in Paris?*", it is possible to capture the city in indicating in the knowledge "*What's the weather like in ${capture.city}?*". More complete examples are listed at the bottom of [this page](https://docs-en.dydu.ai/contents/web-services/rest-web-service-configuration).

The parameters are encoded according to the HTTP method: in the URL in GET and in the body of the request in POST / PUT / DELETE.

### Result variables

It is possible to configure variables that can be displayed in a dialog with the user. This part will depend on the **Response type** field.

It is important to note that:

* Variables retrieved from the web service are structured as follows: ${callapi.WebServiceName.variableName};
* Variables retrieved from the dialogue are structured as follows: \
  ${capture.VariableName};

With an XML answer: it is possible to retrieve values from the result by applying XPath or XSLT functions.

{% hint style="info" %}
Important: XPath or XSLT functions should only return text and never XML to be displayed in dialogs.
{% endhint %}

With a response of the JSON type: it is possible to recover values from the result by executing javascript.

{% hint style="info" %}
Important: it is necessary to create at least one javascript function named "dyduParseJSON" which returns a character string or an array of character strings, and whose parameter is the JSON returned by the query (see the REST example at the bottom of the page).
{% endhint %}

Note that you can also return a general message if the JSON result is invalid. The JSON function should be:

```
function dyduParseJSON (json, text) {

return {result: json}

}
```


# Configuration examples (REST)

## Example 1: Weather Web Service Configuration

This section describes the steps to configure a REST weather web service to automatically respond to user requests. You can use the openweathermap service (<https://openweathermap.org/api>) for this purpose. **You will need to create an account to obtain an API key.**

To carry out this configuration, you must perform the following steps:

### Creating and configuring a web service

1 - Go to **Contents > Web Services**.

2 - Click on **Add** and then select **Rest Web Service**.

<figure><img src="/files/SLCJUi4delxroIdbxYzs" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/02I0vTsDC0zCYkzxufJF" alt=""><figcaption></figcaption></figure>

3 - Fill in the following fields in "Web Service Configuration".

* Name : "Meteo"
* URL : "<http://api.openweathermap.org/data/2.5/weather>"
* HTTP Method : GET
* Type de réponse : JSON

<figure><img src="/files/JuUobB2Szzl1YXB31tjo" alt=""><figcaption></figcaption></figure>

4 - Fill in the following fields in "Parameters".

* APPID: The parameter is provided by WorldWeatherOnline after creating an account.
* lang: fr
* q: ${capture.ville meteo}

<figure><img src="/files/W9BdtXYdbdzPCbdneM7J" alt=""><figcaption></figcaption></figure>

5 - Click on "Add" in the "Result Variables" category and add the following two variables:

<figure><img src="/files/Q5FujyuRC6tq7KAb0nf8" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Attention: variable names are free to choose but must be consistent with what is indicated in the knowledge. Variable names must consist of alphanumeric characters or underscore characters and start with a letter. They are also case-sensitive.
{% endhint %}

6 - Change the JSON output format with the following values:

```
function dyduParseJSON(json) {
 // returns a map return {
     "name" : json.name, 
     "description" : json.weather[0].description, 
     "temperature" : parseInt(json.main.temp / 10)
      } 
      }
```

<figure><img src="/files/K2nNI7fCiSXmgbRtcOdH" alt=""><figcaption></figcaption></figure>

7 - Test the configuration of your web service.

<figure><img src="/files/QqluPisW7gFihM53yaQ1" alt=""><figcaption></figcaption></figure>

with the test value 'Paris' in the parameters:

<figure><img src="/files/VBlZHrV6Uw9REFG5CUs7" alt=""><figcaption></figcaption></figure>

### Creation of the associated knowledge

The objective now is to create knowledge to provide data to the web service and deliver it to users.

#### Configure the query:

**User's phrase :** The sentence should resemble a request to know the weather in a given city. The crucial point in this sentence is not to forget the variable. In our example, the variable is called "**ville"** and it is **Alphanumeric** type.

1 - Create a knowledge "What is the weather in" and then click on "T".

<figure><img src="/files/kjCjp0J1dbJviY6pn76A" alt="" width="237"><figcaption></figcaption></figure>

2 - Search for the variable "Ville"

<figure><img src="/files/y89sLpb5R00WkMRBVu8c" alt="" width="274"><figcaption></figcaption></figure>

3 - Click on the city group and name the variable "villemeteo"

4 - Click on "**update**"

<figure><img src="/files/yDEiwszpbBjyGut937ah" alt="" width="327"><figcaption></figcaption></figure>

5 - Click on "**Create**" to create the knowledge

<figure><img src="/files/x83Byt7hS9b4z9SpCE2H" alt="" width="375"><figcaption></figcaption></figure>

#### Configure the response

The response given to the user will display the temperature and the city understood by the system to identify any discrepancies.

<figure><img src="/files/UOBIz0JEwJllIYt5JHwE" alt="" width="353"><figcaption></figcaption></figure>

{% hint style="info" %}
It is important to note that:

* Variables retrieved from the web service are structured as follows: ${callapi.WebServiceName.variableName}
* Variables retrieved from the dialogue box are structured as follows: ${capture.VariableName}
  {% endhint %}

For more detail :

{% embed url="<https://youtu.be/O5V8kwSW4_U>" %}

## Example 2: Use the web service in a condition

Web services can be used in knowledge but also in conditions. Reuse the weather service to find out if it's hot or cold in a city. In our example, it is considered that it is hot at more than 20 degrees and cold in the opposite case.

1 - Create a new knowledge to answer.

<figure><img src="/files/HXc3unJVT394ReRiVKl8" alt=""><figcaption></figcaption></figure>

2 - Then create the two possible answer with a new condition that you leave blank for now:

<figure><img src="/files/40kU0R0L2ZmisjPFM9sd" alt="" width="340"><figcaption></figcaption></figure>

Once the knowledge part is prepared, you have to create a new condition that will use the web service. To do so, visit the **Knowledge > Advanced > Context conditions** page.

1 - Click **Add a condition** and create the associated condition:

<figure><img src="/files/ABtVNU7qlEuEdYoK7cSE" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Note that the operation is of **Math expression** type and the value must be a correct expression with **x** the variable returned by the expression in **Condition**. Here, we must check that **callapi.TestWeather.Temperture > 20**.
{% endhint %}

Finally, we must use this new condition in the knowledge we have created. To do so:

1 - Edit the condition, select **IsTempertureGreaterThan20**

2 - Click **Update**.

<figure><img src="/files/u9QlFAnYy7Liji7z3v0E" alt="" width="344"><figcaption></figcaption></figure>

You can now test your knowledge with the bot.

## Example 3: Web service configuration - IP address

Here we will use the httpbin web services: <http://httpbin.org/> and specifically the IP web service that returns the IP of the requesting user.

### Creation and configuration of the web service

1 - Create a web service in REST mode.

<figure><img src="/files/yIO1FR3vG9w6r1ymJVbo" alt=""><figcaption></figcaption></figure>

2 - Enter the JSON code in the **Result Variables** section :&#x20;

```
function dyduParseJSON(json) {
	 return {'ip' : json.origin};
}
```

3 - Enter the variable "IP" by clicking on "add". You can add as many variables as you want.

<figure><img src="/files/gomlEMzuzoPPimrE3DMB" alt=""><figcaption></figcaption></figure>

4 - Then click on **Save**.

5 - Click the **Test** button to verify that the web service is operational.

<figure><img src="/files/ZyQ3cVkczATmjWn9ka52" alt="" width="262"><figcaption></figcaption></figure>

If there are no errors, the IP will be returned to you; otherwise, an ERROR element may appear. It's important to note that HTTPS web services may not work. If that's the case, simply remove the "S" to use HTTP protocol only.

### Creation of the associated knowledge

Next, go to the **Content > Knowledge** page and create a new knowledge entry like the example below:

<figure><img src="/files/DM6GY9LQtIdbhKUwLSIy" alt="" width="274"><figcaption></figcaption></figure>

You can then test your knowledge by asking your bot through the test dialogue box. Ask it the question "What is my IP?" and the bot will return your IP address.

<figure><img src="/files/iD3qbumFmteze7DyK95E" alt="" width="268"><figcaption></figcaption></figure>

## Example 4: Sending multiple attachments

For example, if your bot offers to create an IT support ticket, you can allow the user to add one or more attachments during the ticket creation process.

There are two different ways to configure your webservice for sending multiple attachments:

### Configuration via the request Body (JSON Format)&#x20;

In the Body of your POST request, use the `${DialogAllLastFilesUploaded()}` function. The three parameters you pass in parentheses define the key names that will appear in the final JSON.

* Parameter 1: Key name for the file name.
* Parameter 2: Key name for the content type.
* Parameter 3: Key name for the base64 content.

Example of your Web Service Body:

```
{
  "summary": "Nouveau ticket",
  "project": {
    "id": "81-276"
  },
  "files": ${DialogAllLastFilesUploaded("fileName", "fileContentType", "base64Data")}
}
```

At runtime, the engine replaces the variable with an array of objects. Here is what the JSON stream sent to your server looks like if the user uploaded two files:&#x20;

```
{
  "summary": "New ticket",
  "project": {
    "id": "81-276"
  },
  "files": [
    {
      "fileName": "File1.txt",
      "fileContentType": "text/plain; charset=UTF-8",
      "base64Data": "VGVzdAo="
    },
    {
      "fileName": "File2.txt",
      "fileContentType": "text/plain; charset=UTF-8",
      "base64Data": "VGVzdDIK"
    }
  ]
}
```

### Configuration via a parameter (Multipart Format)&#x20;

This second approach is ideal if the destination server expects a request in standard file upload format (multipart/form-data) rather than a JSON stream. It has the advantage of being automatically generated by the system.

How to configure this method? Instead of manually building the Body of your request, simply use the function directly in your Web Service parameters.

* The function to use: Simply enter `${DialogAllLastFilesUploaded()}`.
* Please note: Unlike the Body method, the parentheses must remain empty. It is not necessary to define key names.

What happens during execution? The tool takes over and formats the request for you. It automatically generates a multipart/form-data body, the web standard for transferring attachments.&#x20;

To structure this transfer, the system creates its own unique separation identifier (called a boundary) allowing the destination server to clearly distinguish each sent file.

The generated request Header will look like this:&#x20;

```
Content-Type: multipart/form-data; boundary=fpzDzOf56Xecd3EcRuwZwVNnC8S5Ln0k
```

***

Attachments sent by users are accessible from the relevant conversation via a token-secured link.&#x20;

In the event of conversation purging, anonymization, or encryption, transmitted attachments are included: they will no longer be accessible according to the defined purging, anonymization, or encryption criteria.

## Example 5: Sending a single attachment

Sending an attachment to a web service assumes that an attachment has been uploaded by the user during the conversation.

If multiple attachments are uploaded during the same conversation, the attachment uploaded during the most recent interaction will be the one sent to the web service (this allows the user to change the attachment in case of a selection error from the chatbox).

The data of the attachment to be sent is accessible using the following three keys:

* `${DialogLastFileUploadedContent()}`
* `${DialogLastFileUploadedContentType()}`
* `${DialogLastFileUploadedName()}`

{% hint style="warning" %}
Before the **edge\_2025-12-09** version, the system used different variables.&#x20;

These variables are still functional but only retrieve the first file sent and are no longer updated. It is recommended to use the new function to handle multiple uploads.
{% endhint %}

The first keyword refers to the file content, the second to its type, and the third to its name.

In the "**Body**" area, these three keys can be used as part of JSON content; the value of `DialogLastFileUploadedContent` will be Base64 encoded.

<figure><img src="/files/YLsymPezZonYfT1IPR79" alt=""><figcaption></figcaption></figure>

In the "**Parameters**" area, only the `${DialogLastFileUploadedContent()}` key is required.&#x20;

When present, the corresponding file will be sent to the web service as multipart/form-data, along with its associated metadata (file name and content type).

<figure><img src="/files/AE0hLGRecxFvqgsCystl" alt=""><figcaption></figcaption></figure>

If the "**Body**" area is used to send a file to a web service, it does not make sense to also use the "**Parameters**" area for this purpose, and vice versa.


# Configure OIDC on Keycloak for a Web Service

This section will guide you in configuring authentication via OIDC with Keycloak.

## Client Configuration

1. Go to the "Clients" page and click on the "Create" button :&#x20;

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXe9a2pi_LxpcglWT41sxYZ3ROj_Wf5cskXibw86_BwCHsC7TukpRunrd1wyy0lrLjCBzzl5_RbjG4eQx-rrCsZuKnXSZmlOL1kF81cO6FflmRgyzuBhupI7y3Xki1zXzqs3PEBRm6yMv9tUvmYOcx9kDPE%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=95e571f7&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

2. Assign a name to the “Client ID” (necessary for the configuration on the BMS).
3. Set the “Access Type” to “confidential”.
4. Set “Service Accounts Enabled” to “true”.

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXceD1tGfXSSDh9C9o1AsoPtJSZjw62g7zoW_tBa_xL9VM9woW1exjymRsnFtjDk0cuVuC2Up8bHPNbT0xN7JCDsCaxFAxpylbdb9q283kUATnILcgtorKSsLJkpVixaY5eV3k2x59JCw4VlAE72io0o0pbw%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=30f89591&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

5. Add “Root URL”, “Valid Redirect URLs”, “Admin URL”, and “Web Origins” with the address of the BMS where the Web Service is located. In the example below, dev.mars :&#x20;

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXexInzhoHAblJAHL7U5s3DcxArbyoB7-eX8aZTIoFBO9kNuSkRHUHQiXcUdp4ORJ0B7f_4C7oBj9xyjbuzDEmflXaZSOpcY4UeBzh4uUKa4W19Ss22zYxIaN0oyuWIxgNW9Cnwakand__x6Nn4ErdniHuBZ%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=4d07eb83&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

6. Click on “Save” at the bottom of the page.

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXfyrCJa-7LziPfuRNvfQ5acng3PZsI9nC_yoSVNaUda366b9J2nmztNULl_jGiEmgi2ZpXq-oEo4-gT6BsNMJywSDNRke4c75mmEpAiTsZaNNhnR4tFLUo6G7FKq3TwFTGLmUjTs862CC1TyFEKys8NWNch%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=eeef00d1&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

## Configuration of the Web Service Authentication for BMS

### Retrieve the Client Secret

Go to the “Credentials” tab of the client and retrieve the secret (necessary for configuration in the BMS).

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXfdW3OBIYRR5lpcsbmZ3pLlZVGLHDBIOwLFmiO7gNcDz5Sv28UPEEsvE_YSLI7ma0tZjDmATaE1mxyjPfXBCDgD5SoctVYdTTBXFVjuHNH_yISW4FpJjtHKyxPYwG51HlZNfRUj5BWYezxpw7q0542Bs7Dd%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=97372aa2&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

### Retrieve the token URL

1. Go to “Realm Settings.”

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXf11fGkTEpM_VmC9dZJVjWVaqQ-YEgq6xq7AhtNZ_PGDcO3gTYqn5ucdauXcDDDPQLoFNEZ4i76akLr0mMrvl4_oPGzTQ42EAj0EEasD51U2dZepT6-7zc_Yq70AEBkP5o-I-Y19ed9HDDSiSXNNKsVEtXc%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=87a8d952&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

2. Click on “OpenID Endpoint Configuration.”

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXdXo7UdLWltBlJeqC1xe_1ZCD8_N5IY0U3cIcyFwM7DY1UU6nmM9WExoREmiGuJK25au-VaaN9Wr6DOu36OqjBDhfNBEZnphIl-81MpVI9UbI5j8EBo_NjHric_p6jwy9e954pXGfZS7jt_nBofNGnxlX7P%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=dab80e09&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

3. At the bottom of the file, locate “token\_endpoint.”
4. Copy the value to configure it in the BMS.

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXcYz5JGn1W1__OnKm0vOx9IWfO60cSOYEZoawNIk5wHQAsbqOD77h6HrgtAMqiqxuh5T6XO8qEcCWRJLAOhRz3-HsME0qlSNduUfi2nwj9x0mRw0ZXX9Y5QBFId7mwpth7I7U-EqyBSsV_d3qrjJmpLzdb9%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=80b6f2bd&#x26;sv=1" alt=""><figcaption></figcaption></figure>

### Configuration of the web service in the BMS

All that remains is to go to the BMS and fill in the following fields :&#x20;

<figure><img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2Flh7-qw.googleusercontent.com%2Fdocsz%2FAD_4nXe7tm2tJhB7mY2KWEkULB4eUbaOXPtXNseE2mjW1yhC__dq2FASIv8r3IMoZRogTlYv_tUOJkBdtqtr_ZHWewkdICtQ5qiwY0Vp8qXmYh6_O0y18iZDNPVlGyUBsu7FR-1QxBW6w7_eUp4H7oqc8M8yIsgq%3Fkey%3D_7omhS_ZQ-TvWJo5H9s0Bg&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=3e32f2a5&#x26;sv=1" alt="" width="563"><figcaption></figcaption></figure>

* **Token URL**: To retrieve it, simply follow these [steps](#retrieve-the-token-url).
* **Client ID**: Configured during the creation of the [Client](#client-configuration).
* **Client Secret**: To retrieve it, simply follow this [step](#retrieve-the-client-secret).


# Frequently asked questions

Here is the list of the most common questions about using web services.

## Is it possible to automatically create a ticket after a dialog (trigger to be identified) and to export the whole dialog?

Yes, this is possible through two ways:

* End-of-dialog Triggers: this requires defining the web service and initiating the type of trigger. You can get more information about triggers on this page;
* Calling a web service in a knowledge.

## Is it possible to customize the dialog based on user data?

Yes, this is possible. To do so you can:

* Either define a customer journey via the creation of a decision tree or several trees in the knowledge;
* Either perform a contextual answer through creating conditions in the knowledge.

## Is it possible to retrieve information from a ticketing tool?

Yes. The web service will be requested for a knowledge:

1. Querying a knowledge: "What is the status of ticket 123456? ";
2. You must then capture "123456" in a dedicated variable and use it in a web service solution;
3. Finally, you must indicate the result by performing a callapi.WebService.Result in an answer from the database knowledge.

## How do I authenticate?

To perform authentication, you can:

* Save contextual variables (dydu.chatbox.registerContext (VariableName, ValueVariable) in Javascript, so the person can execute this code by replacing it with the value he wants.
* Perform a SAML 2 authentication whose information about this page can be found.


# Advanced


# Server scripts

Go to **Content > Knowledge > Advanced > Server scripts**

Here you can add javascript functions that can be used when configuring a knowledge, as for example.

<figure><img src="/files/6pF3W8YaTBktrfnGr7tF" alt=""><figcaption></figcaption></figure>

In server scripts, you can add elements to retrieve information from the server: getHostType, getHostName, getServerType.

## Console

The **console** object is used to feed the logs present in the [BMS console page](/other/console-logs) for the different log levels

```
function logs() {
    console.debug("un message debug");
    console.info("un message info");
    console.warn("un message warn");
    console.error("un message error");            
}
```

## CallApi

To trigger the call to an API from a server script, you must use the following syntax.&#x20;

{% hint style="info" %}
For the moment this needs to be framed in a **JSON.parse()**, but this will no longer be necessary later.
{% endhint %}

```
var result = JSON.parse(callApi.process(apiName, params));
```

with apiName containing the name of the defined web service and params containing a JSON object containing a mapping between the keys used by the web service and the values ​​to use. Example params below :

```
{
    'capture.latitude': latitude,
    'capture.longitude': longitude,
    'capture.zoom': '2'
}
```

## Capture

The server script can read variables from the current conversation via the capture object. For example to know the caller's number for the callbot this can be done as in the example below:

```
function logNumero() {
    console.info('Appel reçu du numéro ' + capture.callbot_client_phone);
}
```

## Dialog

The **dialog** object allows us to retrieve a lot of information, among which we could find:

* The name of the consultation space currently in use in the conversation:

```
function logSpace() {
    var space = dialog.currentConsultationSpace();
    console.info('current space ' + space);
}
```

* The language used : **dialog.language()**

```
function getDialoglanguage() {
    var language = dialog.language();
    console.info('current language ' + language);
}
```

* The current URL: **dialog.userURL()**

```
function getDialogUrl() {
    var url = dialog.userURL();
    console.info('current Url ' + Url);
}
```

* The user ID (IP adress, ..) : **dialog.userIdentification()**

```
function getDialogId() {
    var id = dialog.userIdentification();
    console.info('current ID ' + ID);
}
```

* The operating system (OS) used : **dialog.userOs()**

```
function getDialogOs() {
    var Os = dialog.userOs();
    console.info('current Os ' + Os);
}
```

* The browser used : **dialog.userBrowser()**

```
function getDialogBrowser() {
    var Browser = dialog.userBrowser();
    console.info('current Browser ' + Browser);
}
```

* The different user queries: **dialog.currentUserSentence()**

```
function userSentenceFromScript() {
   return dialog.currentUserSentence()
}
```

* The bot’s response for the current interaction: **dialog.currentAnswer()**

```
function getCurrentAnswer() {
    return dialog.currentAnswer();
}
```


# Predefined answer templates

## Introduction: what are anwser templates and what are they used for?

You can make your content more attractive by using the appropriate answer template.

According to the message you want to deliver to your audience, you can choose between:

* Quick reply
* Product card
* Carousel

#### Quick reply

Quick replies are pre-defined responses that chatbots offer to their users. They offer users simple, guided ways to reply to a message.

These buttons can be used to redirect the audience to a new piece of knowledge or an external URL.

<figure><img src="/files/Ig4xp93pe2Tn03MfEV83" alt=""><figcaption></figcaption></figure>

#### Product card

A product card allows you to show off a product or a service in a visual way.

It allows to include:

* an image or a gif
* a title
* an integer
* a subtitle that can be used as a description
* up to 3 buttons

Note: when there is more than 1 button, the first one will always have a different color (the same one as the chatbot's primary color).

<figure><img src="/files/3qbZGbIx6NltTNZa3vCL" alt=""><figcaption></figcaption></figure>

#### Carousel

A product card template displays only one card, while a carousel template consists of as many product cards as you want.

<figure><img src="/files/9NG6yMGfhnxvTABTpxnT" alt=""><figcaption></figcaption></figure>

## How to create anwser templates in the BMS?

1. Go to Content > Advanced > Templates
2. Click on Import
3. Choose the template you want to use in your answer

<figure><img src="/files/lHhbvi0hp8emxb2kcyC6" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The imported model offers 9 buttons by default, but you can manually add more depending on your needs.
{% endhint %}

* Go back to the answer edition page and click "more options"
* In the "Template" section, choose the template you want to use

<figure><img src="/files/MUGGPKtnZtK4VU8sMcar" alt="" width="299"><figcaption></figcaption></figure>

For  **Quick Reply** template, fill out the button box you want to show by creating a personalized text that must contain a redirection link (to an external URL or a piece of knowledge).

<figure><img src="/files/Jct0V3lFgOZAfkBN6GbK" alt="" width="390"><figcaption></figcaption></figure>

For **Product card / Carousel** template, fill out the fields you want to show in the edition box of each card (title, description, buttons...).

Buttons should always contain a redirection link (to an external URL or a piece of knowledge).

Empty fields will not show in your card(s).

<figure><img src="/files/YWMe2ANTiQFxts8FEbVr" alt="" width="392"><figcaption></figcaption></figure>

## Best practices

#### Quick reply

* Use quick replies to prompt for specific next steps.
* Be brief — long quick replies will be truncated.
* If you want to add an image in a button, make sure it is a square image up to 18 x 18px.
* Each button can contain up to 15 characters.
* Each button must contain a redirection to a URL or a piece of knowledge.

#### Product Card & Carousel

For this type of template, consistency of design elements is essential to deliver quality messages.

**You need to pay attention to the image ratio**

As one of the most eye-catching components of the carousel, images should be chosen with an appropriate aspect ratio to ensure overall aesthetics.

An aspect ratio of an image is the proportional relationship between its width and height. The first number represents the width and the second represents the height. Essentially, the ratio defines the shape of an image.

For example, a square image has a ratio of 1:1, whether its dimensions are 50 x 50px or 1500 x 1500px.

Another example, a horizontal image (landscape style) might have a ratio of 16:9. It could be 1920 x 1080px or 1280 x 720px.

In the Carousel model, since images can be scaled up or down to fit different content and chatbox widths, they may not always have the same dimensions but will always maintain the same shape. This is why you should pay attention to the shape rather than the size

**Don't forget the "Safe Area"**[**​**](https://dev.docs.dydu.ai/docs/Complementary_items/predifined_answer_template#dont-forget-the-safe-area)

In addition to the shape, you need to take into account the "safe area" when choosing an image.

A safe area of an image is the part that will always show regardless of the shape or size of the screen.

Images inside the carousel cards may have their aspect ratio modified depending on the content. That's why the most important detail must be kept in the "safe area" to avoid it being cut off.

For example, if you want to use an image with two people chatting, we recommend having them at the center of the image. Just keep in mind: the more centered the subject of your image is, the better!

**Our recommendations on card elements and image ratio**[**​**](https://dev.docs.dydu.ai/docs/Complementary_items/predifined_answer_template#our-recommendations-on-card-elements-and-image-ratio)

**General tips:**

* We recommend using up to 3 buttons per card.
* No more than 35 characters for the text corresponding to each button.
* Buttons must contain a redirection to a URL or a piece of knowledge.
* The text zone only shows up to 85 characters (including spaces). Beyond that limit, the rest of the text will be reduced with "...read more".

[<br>](https://dev.docs.dydu.ai/docs/Complementary_items/answer_template)


# Variables

## Definition of a variable

Whenever a user provides information that needs to be stored somewhere, the BMS saves it in a named **variable** as its *value*. The *value* can be reused later in the conversation or sent to an external API.

To put it simply, a variable is a box that can store things inside.

### Different types of variables provided by the Dydu BMS

The BMS provides basically two types of variables according to the use of Dydu’s in-house Natural Language Processing algorithm:

1. **Free input variables**. They capture and save a piece of information provided directly by the user during the conversation no matter the data format (number, date, text, etc.).

   The NLP algorithm will not match this user input with any item of your knowledge base. One of the common use cases is to capture and send the value to an external API.
2. **Predefined default variables**. They must be used according to their predefined formats (number, date, text, etc.).

   The NLP algorithm will analyze user information (personal or event data) that is captured in this type of variable to provide the most appropriate answers chosen from your knowledge base.

## **1. Free input variables**

### **How to use free input variables?**

Consider the following example: A user wants to declare a sick leave on the RH chatbot. To handle the request, the latter asks for the user’s personal information.

<figure><img src="/files/iFJHUUG2XiA2ctB7oCTx" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6HbEJqPETxxOStndtDhL" alt=""><figcaption></figcaption></figure>

**Steps to follow:**

1. Create a knowledge item as you would usually do. In the answer, guide the user to provide the information you want the bot to capture. Publish and save the knowledge item.

<figure><img src="/files/La5WK34JaEubaAD2yQXI" alt=""><figcaption></figcaption></figure>

2. Click on the + (“add an intention”) button under the answer edition box and choose the “capture user input” option.

<figure><img src="/files/NMijpMtO6YBXbm19cP3Q" alt=""><figcaption></figcaption></figure>

3. Give a name to the free input variable you just created according to the type of information that needs to be captured.

<figure><img src="/files/xRLMhb6X7bBatbqtpqt3" alt=""><figcaption></figcaption></figure>

4. Since we also want to know the social security number of the user, we are going to add another free input variable that we will call “num\_secu”.

<figure><img src="/files/1XQUrbDwHVrsIMvsJJcP" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
For this type of variable, there is no format validation on the captured value.

If users make a mistake or intentionally provide incorrect information, the data will be recorded in the BMS.

If you need to validate the format of the data, we recommend using default variables combined with a context condition.
{% endhint %}

{% hint style="info" %}
When entering data, if the user types a "+" at the beginning of their input, the "+" is not kept when the variable content is returned.

To preserve the "+" used at the start of the entry, the variable storing the input must contain the term "phone".

Example :

If the variable storing the free-form entry contains the term "phone"

Then when the user goes through this branch and enters "+33679305151", the value returned by the variable will be "+33679305151".\
Otherwise (if the variable does not contain the term "phone"), the returned content will be "33679305151" (the "+" is removed during output).
{% endhint %}

5. Lastly, to reassure the user that his/her information has been saved, the bot will summarize the information gathered by displaying the value of the variable in the last interaction.

   To display a captured variable value in an answer, use the syntax **`${capture.NameoftheVariable}`**.

<figure><img src="/files/maiAV6rKqnWljNLieYTO" alt=""><figcaption></figcaption></figure>

## 2. Default predefined variables

When you edit a knowledge item, you can use predefined variables to capture user information such as name, phone number, age, or date.

The BMS provides the following basic variable types:

* **Integer**: this variable captures only integer numbers (no decimals). Note that integers written in full words will be understood as numbers (eg: "twenty" will be understood as "20").
* **Number**: this variable captures numbers. Integers written in full words will be understood as numbers.
* **Alphanumeric**: this variable captures letters and integer numbers (no decimals).
* **Mail**: this variable capture an email address according to this format: {address}**@**{domain}**.**{com}
* **URL**: this variable can capture a URL with the following formats: <http://url.com> / <http://www.url.com> / [www.url.com](http://www.url.com).
* **Date**: this variable capture a date with the following formats: 28/07/21 or 28/07/2021.

  You can also capture precise dates thanks to the **Date - Precise date** group that will let you retrieve the day, month, year... To do so, display captures this way: ${capture.date\_dayofmonth} / ${capture.date\_month} / ${capture.date\_year}
* **Phone number**: this variable allows to capture the phone number with the following formats: 0601020304 / 06.01.02.03.04. If a figure is missing, the number will not be captured.

### How to use predefined variables ?

These variables can be accessed via the WYSIWYG (the editing area) of the user question by clicking on ![](/files/3CNHJPkTFNHD0sWdgsba) and scrolling down to the end of the list until you see the "special" group.

#### Example of using predefined variables:

A bank offers its customers a chatbot that answers questions about their bank account such as the account balance at a specific date.The chatbot then fetches this information from the bank’s database and returns the information to the user.In this case, the bot manager can use a variable to capture the date and send it to the bank’s API.

<figure><img src="/files/RD39gd6PIsYW79gDcu0f" alt="" width="210"><figcaption></figcaption></figure>

The screenshots below show you how this conversation is configured in the BMS : (To simplify, we do not explain how the API works to fetch the balance data.)

<figure><img src="/files/ZEgtCJyUDrNMswYHXugM" alt="" width="215"><figcaption></figcaption></figure>

<figure><img src="/files/lhRl7SAAzhGp1Ai0WzGp" alt="" width="314"><figcaption></figcaption></figure>

<figure><img src="/files/sSTGZTaROmqCrGRFUbon" alt="" width="305"><figcaption></figcaption></figure>

<figure><img src="/files/N7C7661wX9nEP5IrckV9" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**TIPS**

* Using a script function on the server side::

  ```
    	${displaySlots(capture.filtered_slots)}
  ```

In this example we make **a js function call** that takes a parameter a capture. The ${...} are not needed for the capture.

* For a variable assignment:

  ```
    ${mavariable:=....}
  ```

  * To assign the value of a variable to another or a constant value the ${...} are not necessary:

    ```
      ${mavariable:=capture.autrevariable}

      ${mavariable:=valeur constante}
    ```
* A variable assignment from a web service return:

  ```
    ${service_staff:=${callapi.service_staff.staff}}
  ```

We must put ${...} in the call to the web service.

* Variable assignment that uses a server-side javascript function call requiring parameter capture:

  ```
    no_tel:=${formatPhoneNumberWS(capture.phone_number)}}
  ```

{% endhint %}

## 3. Becoming expert on variables

### Functions

Besides variables, the Dydu BMS also provides several default functions.

{% hint style="success" %}
**Definition**

A function is a named piece of computer code that performs a specific task.

Functions usually receive data as input and return the result of the processing performed by the function as output.
{% endhint %}

Functions can be used as a context condition or directly in an answer. In this case, the syntax to use is slightly different from using variables: **`${NameoftheVariable}`**.

#### **Example**:

To use the function **`UserOS`** that can retrive user's operating system directly in an anwser, the syntax to use is:

<figure><img src="/files/hkvJxokvAukaPuOk8JKd" alt=""><figcaption></figcaption></figure>

Here is the list of default functions provided by the BMS:

* **ComputeDate(date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam]):** is used to calculate the date;
* \*\*ComputeDateGetDays(date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam]):\*\*calculate the number of days
* **ComputeTime (date\_daypart, date\_hour, date\_minute):** allows you to calculate the exact date and time;
* **DialogCurrentAnswer ():** current bot answer;
* **DialogCurrentConsultationSpace():** consultation space of the current dialog;
* **DialogCurrentDate():** date of the current dialog;
* **DialogCurrentMatches():**
* **DialogFinished():** dialog completed;
* **DialogHistory():** dialog history;
* **DialogLastFileUploadedContentType():** Allows you to retrieve the Content-Type of an uploaded file;
* **IsDateBetween('YYYY-MM-DD','YYYY-MM-DD'\[, dateToTest]):**
* **IsDateDayAndHour ('XXXXX--', '----- XXXXXXXXXXXX ----'):** means (in this example) from monday to friday, from 8AM to 9PM;
* **KnowledgeAskFeedback():** indicates whether satisfaction on a knowledge is requested (true, false);
* **UserBrowser():** retrieves the browser used by the user;
* **UserBrowserVersion():** retrieves the user's browser version;
* **UserLocalization ('AreaCode' | 'City' | 'CountryCode' | 'CountryName' | 'Latitude' | 'Longitude' | 'MetroCode' | 'RegionCode' | 'RegionName' | 'TimeZone' | 'ZipCode'):** retrieves one of the following user localization data according to the IP adress: the area code, the city name, the country code or name, the latitude or longitude, the metro code, the region code or name, the time zone and the zip code.

  > **Use case 1**: you can use this variable directly in an answer to tell users their country of residence for example. To do so, use the following syntax in the WYSIWYG `${UserLocalization ('Country')}`.

  > **Use case 2**: if you want to send a personalized message to users living in France, create a context condition `UserLocalization ('Country') equals France` and use it in your knowledge item.
* **UserOs():** retrieves the user's operating system AND its version (eg.macOS 10.15);
* **UserOsFamily():** retrieves the user's operating system without the version (eg. macOS);
* **UserURL():** captures the URL that the user is currently on.

### Choice Suites

You can create choice suites, which may be necessary when you want to save several information in a row. You can ask the user for their first choice, their second choice, their third choice, and so on.

When you ask a question that you expect a yes or no answer, you can use the information by inserting a variable and a context condition that you can use later.

1. Create a context condition to use information. Go to **Content** > **Context conditions**

<figure><img src="/files/NkkATBq0VNc4gO93OZPr" alt=""><figcaption></figcaption></figure>

2. Edit a knowledge (blue window - user sentence).
3. Click **Options** then **Options** again.
4. In the **Edition of variables** field, insert ${Principle\_ok:=yes} for the knowledge "yes" and ${Principle\_ok:=no} for the "no" knowledge.

<figure><img src="https://dev.docs.dydu.ai/assets/images/vu06-f1f27afe2f051b985bc24f79bc15bada.png" alt=""><figcaption></figcaption></figure>

Thus, a first part of the selection sequence is completed.

You can also create multiple-choice knowledge while linking various questions using, for example, GUI actions where you can insert JavaScript code.

### "Date" variables

| Function           | Default parameters                                                                                                                                            | Type           | Result                                                                                                                                                                                                                                    |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComputeDate        | ComputeDate (date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam])        | Interval       | \[\[2013-03-23 00: 00: 00,2013-03-24 23:59:59]]                                                                                                                                                                                           |
|                    |                                                                                                                                                               |                | \[\[2013-04-02 00: 00: 00,2013-04-02 23:59:59], \[2013-04-09 00: 00: 00,2013- 04-09 23:59:59], \[2013-04-16 00: 00: 00,2013-04-16 23:59:59], \[2013-04-23 00: 00: 00,2013-04- 23 23:59:59], \[2013-04-30 00: 00: 00,2013-04-30 23:59:59]] |
| ComputeDateGetDays | ComputeDateGetDays (date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam]) | Number of days | 7                                                                                                                                                                                                                                         |
| ComputeDateJP      | ComputeDateJP (date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam])      | Date           | 2013-03-18 20:30:00                                                                                                                                                                                                                       |
| ComputeDateJPF     | ComputeDateJPF (date\_dayofmonth, date\_month, date\_year, date\_dayofweek, date\_period, date\_daypart, date\_hour, date\_minute \[, date\_periodparam])     | Date           | Wednesday 6th November at 23:30                                                                                                                                                                                                           |
| ComputeTime        | ComputeTime (date\_daypart, date\_hour, date\_minute)                                                                                                         | Range          | \[\[20: 30: 00,23: 59: 59]]                                                                                                                                                                                                               |

Thus, the calculation engine uses the specified parameters and calculates the output.

To retrieve the date of the day, insert ${ComputeDateJPF()}

### Variables and matching groups

It is possible to insert matching groups as variables. In our example, the goal will be to recover the innovation field the user's idea refers to in order to get this type of knowledge:

To do so, please go through the following steps:

1. Create your matching group. In our example, the matching group is Innovation field.
2. Head to the Knowledge page and create your knowledge like the decision tree in our example.

&#x20;The knowledge “robotics” is actually just a default label to which you must add a formulation that will integrate your group of formulations.&#x20;

3. Edit the user phrase for which you wish to add your group of formulations then position yourself on the field for adding a new formulation.
4. Click on the icon ![](/files/BpuV5vQjrHb1v3pfioxp) and select your previously created group of formulations.
5. &#x20;Then click on the small white arrow located to the right of your group of formulations

<figure><img src="/files/8EAE8rNfVwkBpWYCuFns" alt=""><figcaption></figcaption></figure>

6. Fill in the Variable Name field then click Update. This is the name of this capture that you will then use to retrieve the information in the response window.&#x20;
7. Complete the response window with the name of the capture corresponding to your formulation group (See previous step).

<figure><img src="/files/PPKQLf5ormvnuHIhE47N" alt=""><figcaption></figcaption></figure>

8. Click Update.

Thus, if the user answers one of the domains integrated into the formulation group, the capture will recover the precise term. Furthermore, if you wish to suggest areas and make clickable links to the “robotics” knowledge, you will first need to modify this knowledge and configure it for direct access. You can also create clickable links to the same knowledge “robotics”. In order to personalize each link and retrieve the correct information, click on the HTML editor button then modify all the titles so that it matches the domain you wish to display.

{% hint style="info" %}
It is possible to have a variable in a formulation group that is constrained to be between two integers :&#x20;

![](/files/rCUW6TAuHHniLeiWEIME)
{% endhint %}

### Variables for web services

This part will cover general information. If you would like to access more concrete cases of using variables for web services, please go to this page.&#x20;

* **Insert a variable into the URL of a web service**

&#x20;You can insert a variable into the URL of your web service like this: <http://mon-domaine/abc/${}capture.mavariable/xyz&#x20>;

* **Use a web service return as an argument for a server-side script**&#x20;

${arg2:=${callapi.myWS.json}}&#x20;

${myscript(capture.myvariable,arg2)}&#x20;

* **Calling a server-side script from a web service page**&#x20;

On certain fields, it is possible to enter variables using a server-side script. Go to **Contents > Advanced > Variables > Add** new Global Variable Configurations&#x20;

Note that variable assignments with web functions or services do not work. For example: ${myvariable:=JSServerSideFunction(callapi.WebService.Variable)}&#x20;

In this case, the code will not be executed and the variable will have the value of the character string behind it.&#x20;

* Insert a variable from a web service into knowledge templates&#x20;

Variables from web services can also be used in knowledge templates. If a variable returns JSON in the template, you will need to use the JSON.stringify() method otherwise the template will not be applied.

<figure><img src="/files/v4kNDwwww3suC1cTCogf" alt=""><figcaption></figcaption></figure>

### Internet user events&#x20;

Internet user events allow a variable - typically the occurrence of an event - to be memorized for a duration greater than that of the dialogue (this duration is configurable at the bot level, and is subject to the GDPR).&#x20;

An event is identified by its name and contains, in addition to its value, the identifiers of the client and the bot as well as its creation date.&#x20;

To create an internet event, go to **Contents > Context conditions > Add**

To create an internet event, you can:&#x20;

* Insert a value directly: ${internaut.myEvent:=eventValue}
* Call another expression: ${internaut.myEvent:=callapi.ws.var} ${internaut.myEvent:=capture.myValue}&#x20;
* Reading an internet event type variable ${internaut.myEvent}&#x20;
* Use a user event in a context condition. To use a user event as a context condition, insert it like this: user. myEvent. For example :

  <figure><img src="/files/tOV0UmRGDNOzzZJEKceV" alt=""><figcaption></figcaption></figure>
* Use user events in the chatbox: dydu.chatbox.addInternautEvent('InternautEventName', 'InternautEventValue')&#x20;

### Using server-side JS functions as a parameter:&#x20;

When using a JS function, it is possible to use character strings, integers, captures or json as parameters.&#x20;

* Character strings are delimited by double quotes: "example". If a quote is contained in the character string, it must be escaped in this way: ""example"".&#x20;
* Integers do not need delimiting: 10 or -10 for example. On the other hand, when passing to the JS function, the integers are transformed into a character string: "10" or "-10" will be transformed into the function argument.&#x20;
* Objects and arrays defined in a valid json format are used as is, as an object. If the json object is not decryptable, it will be considered and used as a character string.
* &#x20;Captures can be used with the syntax capture.VariableName or just VariableName, without double quotes delimiting the capture name. The capture value will then be used. The rules described previously will be applied to define the type of the variable.

### &#x20;Chatbox variables

Internet users events allow you to keep in memory a variable - typically the occurrence of an event - for a duration greater than the time of the conversation (this duration can be configured at the assistant level, and is subject to the GDPR regulation):&#x20;

* DYDU\_LANGUAGE: corresponds to the language (fr, en, etc.);&#x20;
* DYDU\_CONSULTATION\_SPACE: corresponds to the consultation space;&#x20;
* DYDU\_BOT\_ID: corresponds to the bot ID;&#x20;
* DYDU\_SERVLET\_URL: corresponds to the server with which the bot communicates;
* DYDU\_BACKUP\_SERVLET\_URL: corresponds to the backup server with which the bot communicates;
* &#x20;DYDU\_QUALIFICATION\_MODE: corresponds to the qualification mode (true, false) to mark conversations as testing.

### Other use cases and general information&#x20;

* Array variables&#x20;

${myboard:=\["white","black"]}&#x20;

${capture.mytable\[0]} → this displays white&#x20;

* Alpha variables&#x20;

This allows you to capture:

* &#x20;Accents (e.g. tested, haste, etc.);&#x20;
* Dashes (eg: Jean-Paul);&#x20;
* Points (eg: jean.paul).&#x20;

{% hint style="warning" %}
**Warning:** it is impossible to capture apostrophes (eg: water) as well as spaces (Jean Paul).&#x20;
{% endhint %}

* SAML&#x20;

Variables During SAML authentication, it is possible to save variables on the user. These variables start with “auth\_”.


# Web services triggers

This section allows you to configure web service triggers through different actions.

1. Go to **Content > Advanced > Web services triggers**.
2. Click **Add**. A new window opens.
3. Enter the name of the trigger.
4. Select the type of trigger.
5. Select the web service that will be triggered by the trigger action. New elements appear.
6. Then click **Add** to confirm the trigger configuration.


# Top knowledge

This feature allows you to add top knowledge to your bot, your bot will offer the user knowledge when he opens the dialog box.To configure the **Top knowledge module**. Below an example of top3 to the DYDU chatbot:

<figure><img src="/files/ifU1fUx00fmjFwfRvWry" alt="" width="375"><figcaption></figcaption></figure>

### Integration to chatbot

To integrate the top knowledge to your chatbot, go to **channels > configuration List** and select the integration you want. then go to **part 2 - advanced** and select " Top 3 most requested knowledge" on Knowledge highlighting.

<figure><img src="/files/wJit5MGr8vzS0mjNzRu7" alt=""><figcaption></figcaption></figure>

If you would like to change this top. You have to go to **content > Advanced > Top knowledge**.

### Manual top knowledge

In the **Manual top knowledge** section, you can add top knowledge manually. To do so, simply click on a tag and find the knowledge you are looking for via the field at the right of the window.

<figure><img src="/files/lsB9vkToT9i4itLbo4MB" alt=""><figcaption></figcaption></figure>

Then select the knowledge you want to add and click **Add**.

To check that the action has been taken into account, please refresh the page.

If you wish to remove knowledge of the top manual knowledge, select the tag for which you want to remove a knowledge from the top then select it from the knowledge displayed on the right.

Click on the cross to remove the knowledge.

To check that the action has been taken into account, please refresh the page.

### Tests Top Knowlegde API

Determine the parameters of your top knowledge by defining all the proposed criteria. After selecting your parameters, click the **Test** button. If you want to reset the parameters, please click on the **Reset cache** button.

### Exclusion of the top of the knowledge

You also have the possibility to exclude knowledge. You will find all of this knowledge in **Excluded knowledge articles** from **Content > Advanced > Top Knowledge**

First, note that some knowledge is automatically excluded from top knowledge. This is all knowledge for which you turned off the reword option.

So, still in the knowledge options, you can check the **Exclude from top knowledge** box. Your knowledge will not be automatically integrated into the top.


# Tools

### Audit

Audits allow you to manually measure, on a sample of conversations, the relevance of the answers given by your bot by evaluating the quality of the matching. As a result of your audit you obtain an index which is in fact a point of comparison.

Performing this regularly allows you to measure the bot's progress through your knowledge base improvement process.

For example, the audit will allow the bot's manager to confirm or not the answers given by the bot, to validate that the bot has chosen the right knowledge and thus to detect false positives.

We recommend carrying out an audit on average once a quarter. To carry out an audit:

1. Go to the Contents > Tools > Audit
2. Click on the "Add" button to create a new audit
3. Give it a title
4. Select:
   * the sample size of conversations to be measured
   * the period of your audit
   * if necessary, a specific consultation space

<figure><img src="/files/aOLw9UkeDr8EIvxJKpZa" alt=""><figcaption></figcaption></figure>

A summary line of your audit is then available:

* Period: corresponds to the start date of the audit period;
* Creator: corresponds to the name of the audit creator;
* Title : corresponds to the title you gave;
* Consultation space: corresponds to the viewing area you have selected;
* Size: the size of the sample you have selected;
* Direct answers: the chatbot has directly answered the user's question;
* Reword: the chatbot was not sure it understood the user's question, so it proposed 1 to 3 questions that could correspond to the user's question;
* Misunderstood sentences: the chatbot did not understand the user's question;
* Completed: this is the progress of your audit (when you start an audit, it is already partly completed because there are duplicate questions and these are already grouped together;
* Note: depending on the results of the audit, a score between 0 and 100% is given;
* Incorrect answers: this part will be filled in when you have finished the audit. This is the number of incorrect answers defined through the audit.

Hover over the audit line. You can modify or delete it. To start your audit click on the Edit button.

<figure><img src="/files/eThaJ7BdnoLiNCcCaeLY" alt=""><figcaption></figcaption></figure>

Three filters for your audit are then displayed:

* Action state
* To correct
* Summary

<figure><img src="/files/1h2kBzlJi1dphdIhgmwe" alt=""><figcaption></figcaption></figure>

### Action state[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#action-state) <a href="#action-state" id="action-state"></a>

In this section, you will find all the interactions in your sample. As you process them, the interactions will be organised according to the classification you give them.

*Not yet processed*

These are interactions that you have not yet checked. The check to be made will depend on the matching of the interaction:

* Direct answer: check that the answers provided by the chatbot are correct. You have the question asked by the user and the knowledge used by the chatbot to provide the answer. You then have to decide if
  * the knowledge used by the chatbot was the right knowledge, choose: **OK**
  * it should have matched with another knowledge, choose: **Another knowledge**
  * the user's question does not fit in the chatbot's scope, choose: **Out of scope**

<figure><img src="/files/oH2RYyLmzylD9xQciF03" alt=""><figcaption></figcaption></figure>

* Reword: check whether the rewords proposed by the chatbot are relevant or not. You have to decide if:
  * the reword proposal was necessary, choose: **OK**
  * one of the proposals was the right one, choose: **MatchOneOfRewordedKnowledges**
  * none of the proposals correspond to the user's question, choose: **Another knowledge**
  * the user's question contained superfluous information, choose: **LongSentenceWithNoise**
  * the user's question contained several questions, choose: **LongSentenceWithMultipleKnowledge**
  * the user's question was outside the scope of the sculpin, choose: **OutOfScope**

<figure><img src="/files/EJgElchMyQk278SOcaEg" alt=""><figcaption></figcaption></figure>

* Misunderstood sentence: check whether a sentence that was misunderstood by the chatbot could have been understood. You have to choose if:
  * you validate that it is an incomprehensible sentence by the chatbot and to which there is no knowledge, choose: **Ok**
  * the user's question contained superfluous information, choose: **LongSentenceWithNoise**
  * the user's question contained several questions, choose: **LongSentenceWithMultipleKnowledge**
  * If the user's question did not fit into the scope of the scab, choose: **OutOfScope**

<figure><img src="/files/FnEwLLI6qQkofvk9eFsr" alt=""><figcaption></figcaption></figure>

Note: For each interaction to be processed, you can click on Show dialog to place the user's question in the context of the conversation.

Once the interactions are processed, they are organised according to the classification choice that was made. You can cancel the classification.

### To correct[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#to-correct) <a href="#to-correct" id="to-correct"></a>

In this section, you will find all the interactions of your sample to be corrected. These are organised according to the classification choice made in the "Action status" step.

For each interaction, you will see :

* the user's question
* the knowledge that the chatbot provided as an answer
* the consultation space that was queried

When you click in the field **Choose correct knowledge**, the list of knowledge close to the user's question is displayed. Then click on the correct knowledge to which to associate this question and click on **Apply correction**. Clicking this button will add the user's question as the knowledge formulation.

Alternatively, you can choose to ignore the correction or cancel the classification initially made.

<figure><img src="/files/zKhXJjDDNRscmiUWPKru" alt=""><figcaption></figcaption></figure>

### Summary[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#summary) <a href="#summary" id="summary"></a>

Once the audit is complete, click on the Summary tab to access the audit summary tables.

The first table shows you the status of your audit.

<figure><img src="/files/d2AyUTsUDCECBASFLQGo" alt=""><figcaption></figcaption></figure>

The second table gives you a numerical summary of your Audit and a final score.

<figure><img src="/files/pjwyJYkRB5dZm4pTuUiM" alt=""><figcaption></figcaption></figure>

When you have performed several audits, a graph will appear on the **Contents > Tools > Audits** page.

This graph shows the evolution of the relevance of the answers given according to the different audits carried out.

<figure><img src="/files/wwVkGbYKEglqTIpddx0S" alt=""><figcaption></figcaption></figure>

Here is the legend:

* **Green:** proportion of direct answers
* **Black:** proportion of rewords
* **Orange:** proportion of misunderstood sentences
* **Blue:** note
* **Red:** proportion of incorrect answers

### Test dialogs[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#test-dialogs) <a href="#test-dialogs" id="test-dialogs"></a>

When you have quite complex dialog paths, you can save a dialog that went well in the test dialogs as a template (from the **Dialogs** page) Go to Learning > Dialogs

1. Click on a dialog
2. Click the "copy dialog" icon when you are on a dialog you want to save.
3. Click **Copy**.

<figure><img src="/files/6Sxh1K92b0M5Ahs830w8" alt="" width="375"><figcaption></figcaption></figure>

4. Then return to the **Test dialogs** menu where you can replay the dialogs to make sure the bot is still responding as expected. Go to Content > Tools > Test dialogs

<figure><img src="/files/VGJ7cDdRvydeTrnC9vsI" alt="" width="375"><figcaption></figcaption></figure>

Find more information about dialogs on this [page](https://dev.docs.dydu.ai/docs/Learning/dialogs).

### Close knowledge[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#close-knowledge) <a href="#close-knowledge" id="close-knowledge"></a>

This menu lets you locate the knowledge items with similar question formulations. For example, it makes it possible to see if two knowledge items could be gathered in one.

This menu also allows you to view the latest changes that were made and by whom they were made, over the selected period, under a different view than the **History** menu.

This allows you to be able to directly make changes if you notice an error while editing This can be particularly useful for a proofreader when he has to validate the last changes made on the database.

Go to **Content > Tools > Close knowledge**

<figure><img src="/files/2WY1kbTaEZAW0vptdRR4" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3JqOjP7FRueTDy7NMOR9" alt=""><figcaption></figcaption></figure>

### History[​](https://dev.docs.dydu.ai/docs/Complementary_items/knowledge_tools#history) <a href="#history" id="history"></a>

The history allows you to view all the changes that have been made to the knowledge base. You can filter these changes by action type and by user.

<figure><img src="/files/qGSpMyJ2j5DQQHxPPauR" alt=""><figcaption></figcaption></figure>


# Import/Export of knowledge

You can import and export knowledge from your back office. To do so, visit the **Content > Import/Export** page.

<figure><img src="/files/SRJwmW55qCM4ABBk3xvz" alt=""><figcaption></figcaption></figure>

You can navigate through this menu to see the status of your knowledge items and then import/export them.

### Massive import

Perform a massive import of knowledge in excel format. A template is available.

For mass imports, click **Choose file** and select the file you want to import. Click **Import** to confirm import.

<figure><img src="/files/7xbfEKpG2wImDqcsxIuC" alt=""><figcaption></figcaption></figure>

### Quick export

Perform an export of data associated with your knowledge base. To do so, select the data and click **Export**.


# Advancement state

<figure><img src="/files/BAJBoPqh9MPKk88SIxNr" alt=""><figcaption></figcaption></figure>

The **progress status** allows you to get an **overview** of your **knowledge base** (**distribution of knowledge**, **thematic view**). You can **export** this data to Excel by clicking the **Export to Excel** button.


# Predefined answers

<figure><img src="/files/IEMVe2UYem0a2M73rJNf" alt=""><figcaption></figcaption></figure>

You have the option to **import predefined answers**. A **template** is available to you.\
To import your predefined answers (using the template), click on **Upload a file** and then select your file. Then click on **Import** to confirm the import of your predefined answers.


# Translation

<figure><img src="/files/k2iAEuYbBMG3eO5zvHiX" alt=""><figcaption></figcaption></figure>

This page allows you to **export untranslated knowledge** and **import knowledge to be translated**.


# Urls

<figure><img src="/files/tcfyki5wcUOSraCXAoQZ" alt=""><figcaption></figcaption></figure>

**This feature allows you to massively edit the URLs used in your knowledge base.**\
Two types of URLs can be replaced using this feature:

* **URLs inserted as hyperlinks** in the text of your answers
* **URLs used as redirections** via the "redirections" option field in the answers

As a result, URLs used directly in an answer (neither as a hyperlink nor as a redirection option) cannot be replaced in bulk with this feature.

**Steps to follow**

1. Click on **Export** and an **Excel file** will be downloaded to your computer.
2. Several columns are listed in the file, including:

* **urlType**: this column indicates the type of URL used per answer: **ACTION\_TEXT** if the URL is inserted as a hyperlink; **REDIRECT\_URL** if it is used as a redirection.
* **urlOld**: this column shows the URLs currently used in your knowledge base.
* **urlNew** (column to fill in): in this column, enter the new URLs you want to use in your knowledge base. If some URLs do not need to be replaced, leave those cells empty; these URLs will remain unchanged after import.\
  **Note:** Your URL must always start with the https prefix.

<figure><img src="/files/ihzK5z7jiKnPIs0lHn8m" alt=""><figcaption></figcaption></figure>

3. Fill in the **urlNew** column with your target URLs. Save your Excel file and click on **Choose file** then **Import**.
4. Once finished, you will be notified by the automatic download of an **XML file** to your computer confirming the type of changes made to your knowledge base.

**Keep in mind:**

* Deleting rows from the Excel file will not affect the import or your knowledge base.
* However, deleting columns from the file will make the URL bulk-edit feature ineffective. You will not be notified of any errors during import, but the URLs will remain unchanged.


# Model import

Creating a conversational bot from scratch can require several weeks of work. By choosing to start from a **model**, you can reduce this timeframe to just a few hours or days.&#x20;

The available models already include a selection of **frequently asked questions** as well as **default answers**. Once the model is imported, you are completely free to **customize your bot**: edit the existing answers and expand the knowledge base as needed.

## **For employees**

<figure><img src="/files/BSBBuuT5kqQvHRcxFwrs" alt=""><figcaption></figcaption></figure>

### **Human Resources**

This model is specially designed to address the main questions employees may have about human resources. It includes **327 pieces of knowledge** covering the most common requests, such as **remaining leave balances** or the **procedure for reporting sick leave**. With this model, you have a comprehensive base to automate the processing of the most frequent HR requests and simplify the daily lives of your employees.

### **IT**

This model is dedicated to IT support for employees and covers the most frequent requests. It contains **216 pieces of knowledge** to efficiently answer common questions, such as **adding formulas in Excel**, **connecting to Chrome**, or **accessing Windows settings**. This model helps quickly resolve incidents and supports employees in their daily use of IT tools.

## **For customers/users**

<figure><img src="/files/RZ6JdAajiyEnnvCXWOwg" alt=""><figcaption></figcaption></figure>

### **City Hall**

This model brings together the knowledge needed to answer recurring requests related to citizen relationship management at city hall. It includes **246 pieces of knowledge** to provide quick and accurate answers on topics such as **enrolling a child in school**, **requesting a passport**, or **obtaining a civil status document**. This model thus facilitates the efficient handling of the main administrative procedures for citizens.

### **E-commerce**

This model brings together the essential knowledge to answer the most frequent requests on an e-commerce site. It offers **213 pieces of knowledge** to provide clear answers about, for example, **order tracking**, **product return procedures**, or **accepted payment methods**. This model helps improve the customer experience by making it easier to handle the main online sales questions.

## **APIs**

<figure><img src="/files/ZEcqMWyeE163bzExUJAT" alt=""><figcaption></figcaption></figure>

### **Connecting to external content**

This feature allows you to create a connector with the Dydu RAG to generate answers from external content when the bot does not understand the user's request. With this connection, the bot can query additional information sources to provide a relevant answer, even in case of misunderstanding or a question outside the scope of its knowledge base.

### **Mailjet**

This module allows you to send emails via the Mailjet platform.\
For more information, see: <https://www.mailjet.com/>

### **SMS Mode**

This module allows you to send SMS with the SMS Mode platform.\
For more information, see: <https://www.smsmode.com/>

### **Twilio**

This module allows you to send SMS via the Twilio platform.\
For more information, see: <https://www.twilio.com/>

### **ServiceNow**

This module allows you to import APIs from the ServiceNow platform.\
For more information, see: <https://www.servicenow.com/docs/bundle/xanadu-api-reference>

### **Jira**

This module allows you to import APIs from the Jira platform.\
For more information, see: <https://developer.atlassian.com/>

### **Zendesk**

This module allows you to import APIs from the Zendesk platform.\
For more information, see: <https://developer.zendesk.com/api-reference>

### **Salesforce**

This module allows you to import APIs from the Salesforce platform.\
For more information, see: <https://developer.salesforce.com/>

## **Other**

<figure><img src="/files/8louSyQhef8TEDHYoYpi" alt=""><figcaption></figcaption></figure>

### **Social interactions**

This module allows you to import a micro social base to enrich the bot with knowledge and answers related to social interactions. Thanks to this feature, you can easily integrate examples of conversations or language elements suited to typical exchanges between users.

### **Callbot**

This module allows you to import the minimum configuration required for a callbot to operate. You can thus quickly deploy a working callbot by integrating the essential parameters from the start.


# Learning

Conversations between the bot and end users are recorded and viewable from the “Conversations” page of the BMS. The latter therefore allows knowledge base managers to read all the conversations that took place with the bot and accordingly complete or improve the knowledge base. This is what we call conversation correction.

<figure><img src="/files/hnwkhcNTNcJgocsNpOM0" alt=""><figcaption></figcaption></figure>

#### Knowledge Base Update Summary

**Follow a regular process to maintain and improve the bot's interactions:**

1. Review the chats on the “Conversations” page of the BMS.
2. Identify and read conversations that require improvements.
3. Access the knowledge base and update the information.
4. Save the changes to optimize the bot's responses.

By repeating this process regularly, you will maintain the quality and relevance of the responses provided by the bot, thus ensuring a better user experience.

**Tips for Effective Conversation Correction**

1. Understanding: Ensure you thoroughly comprehend the user’s intention during the interaction with the bot.
2. Context: Take into account the context of the conversation to avoid modifications that could alter the meaning.
3. Accuracy: Check that the information added or modified is correct and up-to-date.
4. Consistency: Maintain consistency in the tone and style of the bot’s communication.
5. Monitoring: After making changes, closely monitor the interactions to ensure the changes have the desired effect.

These practices will help strengthen the effectiveness of corrections and ensure continuous improvement of the knowledge base.


# Dialogs

## Interface

Dialogs for automatic chat , Livechat or search sessions for the fieldbox and Static FAQ can be consulted from the back office.

To access the dialogs, go to **Learning > Dialogs**.&#x20;

<figure><img src="/files/yS2BhNyhifstF2NsAelo" alt=""><figcaption></figcaption></figure>

### List of dialogs

The list contains dialogs made by the bot. For each dialog, the number of interactions and the date are displayed. You have to click on the line to display the dialog.

Unread dialogs are presented in **bold**.

If the user has provided feedback during the dialog, it is present in the list as ![](/files/1w6lerK2r8NpCchpBRgV) or ![](/files/E9LPMoqyrGgHhARAK4Ds)

A color is assigned according to the qualification of the dialog:

* Light green: the dialog contains misunderstood questions but ends with a direct answer;
* Dark green: the dialog is composed of direct answers only;
* Orange: the conversation ends with a user's question that the bot could not understand.
* No color: there aere 3 cases where a dialog does not have any color:
  * **The dialog has not been processed by the server yet**. When a conversation is finished, it takes a few minutes for the server to update the qualification data. During this time, the conversation does not have a color, but it will be updated as soon as the server has finished calculating.
  * **The dialog does not contain any interaction**. If users have opened the chatbot but did not interact with it, there were no matches involved and therefore no qualification.
  * **When there is a Livechat escalation**. If the user has started an automatic chat and then escalated to chat with a Livechat agent, the conversation will have no color. However, if a Livechat escalation was made but the user has quit the conversation without chatting with the Livechat agent, a color will be shown.

### Filtering

Filtering allows to only show dialogs that match a set of criteria.

#### **Qualification**

This filter allows you to display only dialogs with a certain typology, so it is possible to focus, for example, on failed dialogs to find solutions to enrich your knowledge base and improve the functioning of your bot.

#### **Status**

This filter allows you to see:

* unread dialogs: none of the users has read it
* read: at least one of the user has already read it
* corrected: at least one of the user has already applied a correction on it
* non corrected: dialogue has been read but not corrected yet

Note: When a dialogue is read by the current user, a book symbol appears:&#x20;

<figure><img src="/files/bwS8aLTlq7zc6rhXFttx" alt=""><figcaption></figcaption></figure>

In case of collaborative use, you should use the markers provided for this purpose (dialog processed) inside the dialog itself ![](/files/mgYb3K7hhsx0AzTGS7Hz)

This allows other contributors to filter out dialogs that have already been processed.

#### **Period**

Period selection makes it possible to read the dialogs of the day, the current month, etc.

Note that it is also possible to filter by hour, which proves very practical if you have hundreds or even thousands of dialogs a day. To do so, you must select the **Specific date** option and select the time from **Hour (optional)**.

#### **User feedback**

As users can give their feedback on the bot's answer, this filter will display the dialogs based on user feedback.

You can also access additional filters by clicking the ![](/files/Y8YiSCoF2yBksUR7jCJF) button:

#### **Spaces**

This filter is used to display only dialogs that have taken place in one of the consultation spaces. If the bot handles multiple languages, the consultation spaces can be translated by language.

#### **Tag**

This filter allows you to show only dialogs as important, untreated, unread or commented by clicking the activation button.

<figure><img src="/files/tFabsNhCBF1BfmqYnO4x" alt=""><figcaption></figcaption></figure>

#### **Dialogs**

Solution: this filter is used to display dialogs that have been conducted according to a type of solution (Automatic Chat, Livechat, etc.).

#### **Knowledge**

<figure><img src="/files/HrgdSwhaSbs3bm1RbiRr" alt=""><figcaption></figcaption></figure>

Tag filtering: this filter allows you to display only the dialogs about the chosen tag.

Knowledge filtering: this filter allows you to display only dialogs using the chosen knowledge. Enter the knowledge, click on it in the drop-down list and select it.

When you click in the input field when it is empty, the list of knowledge that appears corresponds to the type of knowledge *Complementary answer* and *Internaut activity*.

You can also enable the **Show entire dialogs**button that lets you view the entire dialog and not not just the interactions concerning the selected knowledge.

Search: this search bar allows you to search for a word in the title of the knowledge, the questions entered by the user, the answers of the knowledge base, the operator answers, in all answers or in all questions and answers.

#### **Variables and groups**

Variable name: this filter is used to display only the dialogs whose selected variables were used in them.

Variable value: this filter is used to display only dialogs whose value of the determined variable is effective.

Matching group: this filter allows you to view dialogs that use the terms of the selected matching group.

* **Dialogs** You can filter your dialogs to display only test dialogs. These represents all the dialogs that did not take place in production. These dialogs are divided into different types:
  * with tests
  * without tests
  * tests only

After refining your filtering, you must click on **Filter** at the right side of the page to validate your filters.

Once you've done your filtering, you can mark all filtered dialogs as read by clicking the **Mark as read** button at the top right of the page.

You can reset your filters at any time by clicking the **Reset** button.

### Several Export Types

#### **Excel**

Allows you to export the dialogs matching the selected filters to an Excel file. Excel exports can be made for period up to **95 days**. Any request beyond this limit will result in an error.

The exports made correspond to the period for which you performed a filter.

The export contains an **Interactions** tab (column D: User). By default, this field will be empty. In order to enter username, mail, etc., follow the following process:

1. Go to **Integration > Dialog box** and edit your configuration.
2. Click **Modules and resources**, activate **Advanced view**.
3. Go to the **context (common)** module.
4. Fill in the field **common.context.userId** like this:&#x20;

<figure><img src="/files/3O4q7sGF1L2NoDlO2XPD" alt=""><figcaption></figcaption></figure>

5. Click **Update**.

Note that the content of this field can change. You can write down different types of content:

* Simple text or available variables:**${nameOfVariable}**
* Multiple variables: **${firstName}** **{lastName}**
* Text and variables: **user ID: ${userID}**

Important: capturing these variables requires that a registerContext be configured at the chatbox level to retrieve the information.

The **Replay dialogs** option allows you to restart dialogs and view their behavior (for example, after your edits to improve matching).

#### **Dialogs V2**

One row per interaction, in column:

* Context UUID
* Date
* Start time
* End time
* Duration of the conversation
* Language
* Consultation space
* Bot ID
* Conversation variables
* User ID
* User IP
* Channel
* Browser
* User's URL
* Total number of interactions
* Number of business interactions
* Number of social interactions
* Qualification of the conversation
* Number of times feedback was requested
* Positive feedback
* Negative feedback
* Type of conversation: production or test

#### **Interactions** **V2**

One row per interaction, in column:

* Context UUID
* Date
* Time
* Language
* Consultation space
* Question
* Position of the question in the conversation
* Type of matching
* Bot UUID
* Knowledge that was matched
* Knowledge ID
* Knowledge path (knowledge hierarchy in the database)
* Was satisfaction requested?
* Satisfaction
* Reasons for dissatisfaction
* Comment due to dissatisfaction
* User ID

### Other

The **Misunderstood sentences** (from Learning menu) allows you to display sentences the chatbot did not understand by grouping them by occurrence, knowledge or order of appearance.

The **Suggestions** (from Learning menu) suggests matches between misunderstood sentences and knowledge items (See section Suggestions).

## Reading and Correction

### Information

The upper field provides different information about the dialog:

* The name of the user if identified;
* The date and time of the dialog;
* The consultation space from which the dialog took place;
* Show extra information: the URL of the page the user is on, their browser, their operating system and the geolocation of their IP.

The data on the user can be: his name, his identifier, the date of his last order, etc. This data can be retrieved by a cookie or web service connected to the customer information system.

### Original dialog / corrected dialog

This link displays the original dialog instead of the dialog on which modifications were applied. This is useful when several people work on the same bot.

The  button lets you set a dialog as "Important". You can then retrieve these dialogs using the "Important or not" filter.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAaVJREFUOI1j/P//PwNlgIlC/SPIiIyi2vrOieQbsWPfoS/fvt29/+j8let4lLHgkduwZXdMmD8DA8OSVRsMdTRJdgXECR5Odh5Odi9fvdmx7xAulYzISev8leuXr9548erNy9dv7j541NNQoaIkz8DAcOfew5KGDnFREQkxEWUFOXExEXdHWyxG3Ln3MLu83s/ThYeLS09HU0VRnpebC67u89dvd+4/vHv/4cvXbzZt39NRXw73GsIjKkryirKyr16/DfL1MNTRRNbPwMDAy81lqKPp7mR36epNZzsrlKD5jwo6J81MK6r59OXrfwzw6cvXtKKazkkz0cTRg7MsN01cVHjd5h2YwbZu8w5xUeGy3DQ0cSwxEujjfvHqDUzxi1dvBPq4Y4pjMeLu/Yc8qAEBARJiIpewpTEsSevl6zfKCnIMDAw79h3afeAoAwODm6ONu6OtkoLcvQePiDLi7v1HKory6cW1X79+iwnz5+HmXrdl55JVGy1NDV+8ekOUEcqKcsdOnYsJ8/dwsoOI2Jgbn79yfea8ZUqKspjqUVIneWBwFDkAVJLTujvzXaMAAAAASUVORK5CYII=) button lets you set a dialog as "Important". You can then retrieve these dialogs using the "Important or not" filter.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAXCAIAAACeQxh6AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAVFJREFUOI1j/P//PwM1ABNVTBmUBrFgFb1w5ToDA6OEqLCEuCguWWVFOV5uLpwGTZu3ZM+BY9++f4NwxURE0hIibcyNIfpnzl92/9FjuGJzE8PG8nwImxEt1jxCEzCd4OfpysPNtWzNRkypHasX4PMaGti0fTcyV1tD7eqNW2hqSA7sgsyk3uYqc2MDigwqyEzycLK7c+/h5WsUuAhuSllDJzw2CBskKixMvCk4DTI3Nlg8o9fJzopIUxhwxdrla7fu3HtYlpvGwMCgp61B0BQGPOmIi5Orq6FcRUmegYEBjynwdIQzjL59/1bW0Hnn3kOCboEAfAkSYhaEgd8UnAZpa6gxMDC8ev329du3aFKcnJxK8rIMDAz3Hj5GFkcPozv3HkLCBQJevHy9aNX6fYeOQUyPDQ800NHEaje6QVjBi5evv3z9hmwBmQYRAwZfUQsAwCapJSx/1NQAAAAASUVORK5CYII=) button displays the dialog has being processed.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAXNJREFUOI3NlL9PwkAUxw9pvXIgZ6AgkIYEQRYGf20OLsa/2cXF1cSBgUEjEDUpldDqFXr0oAWHIpQ2vRBh8Lv1ey+ffN+714vN53Owtfa2R+yMInDOHHfWUY2BaS0dMS5kceK4mAlUxjhzeWh2p46LJNFvEouVc7hROdooC6HMpOz6tIIR9Psd1Wi99QOUyLlgBK8a5QACAIBTUrg4mEXThyZly0+dUACAkscIiiBaaxQvbRpBUVhlpPa03TNuL2tCPDL4GkX7Gio5fF4r+k3Hnd09vgy+rUL2IIoSxIeTexHIb5uaPgyH4u1LQO990mz3AAB1Rf47BaekuiLLGGXTiEdpVArJ6LvACIYv3tOqQ0LZeDwJ9+y4Mw/BiSksSzuqYVp2OiUhKLa6n4TaC7rFEvuCfJjkUBb/0f3T63jieNbNRdUc2cS3e9VShrMsKwpl0+ePgWnZZyclfnheRwiK5Twmo8j58cV7GTbXf3oxd0P5Adx9jUpGNvDIAAAAAElFTkSuQmCC) button saves the dialog as a test dialog.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAbCAYAAACEP1QvAAAACXBIWXMAABYlAAAWJQFJUiTwAAABHklEQVRIiWP8////f4YBAkwDZfGo5SPTchZqG/j95y+G56/eoYgJ8vEwCPLz0N7yZy/fMsxYvh1FzNXakMHNxhBDLdWDXYifl8HV2pCBg52NoFqSfP7+4xeG95++YIgjB6sgPw/D+49fGH78/MXAwc7G8OPnL+pYfvrybYbdR89jiCMH68qthxnOXLnNICUmxOBqY8iwcN1e6lgOA93lSVjFkS3OiPJiYGBgYMiI9GQQ4uelnuXEWMwJjXNlOUmceqia2k10VBnCvW2JVk81y5Et3XXkPIOynAReXzMw0KiE2330PMPdRy8Iqhst20kC9x4TDlKaWT592TaqWM5IShvu/ccvDO8+fiZKrRA/L9aajGzLqQ1GbmoftXxAAABVtlmuxq17agAAAABJRU5ErkJggg==) button opens the dialog in a new tab with a dedicated URL.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAVCAIAAAA8SdJPAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAASdJREFUOI3N1M1PgzAUAPC3DcTWpF0CIzEZ7qQe9OJ1//929YIH5wlHYrJBMkhGreXDA5uZsx8j2cF3Apr3e+/RQq9pGjhT9M8F/WPLOryZv0SdkqcPE6WV5gxdWPjSNirFp2Bfpa4vAAj84X3gGa3XZbKIE4O1K8sF40K6hBwbO/LG5dZylf0t28bd2FM1Lrc8igHkCR7F0udKyyXYJcqcbtb7KovXG+nSeDS88WkHi3GR5ky65JKrbn0FPlW9F6TYRKWF1RuviWMrXm/SfNte2wPr6fbaGvQBoKzq57cPUe3OuvT0/fq2XYIOR0jy7SyMyqouq3oWRsm+BgAgx3YJOrJ6mn9hVvB5GLXDFlxMHycUO5oZddYPBwBGyGy1HAAYoZOs0+MbRhNu7dkNpu4AAAAASUVORK5CYII=) button is used to add a comment to the dialog (see next section for more details).

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAUCAIAAADp3DFZAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAT1JREFUOI1j/P//PwPFgIlyI6hmCgsy5879h1+/fSdSJzcXp4qiPITNiBwuXuFJJDlh28p5WNzCwMDAycmZFh/h7miLR/PO/YdnLVzx/TvC1ejh0llfNmvhip37D+M3orO+DEX0PxLwDEv8////7XsPguKzduw79B8D7Nh3KCg+6/a9B3DFEIDFFFwGIRtBlCmYBqEZgaYYPXThQEVRvrO+rLyx6/K1mwwMDMdPn++sL4NHLRrAnuo+f/2WVVr/8tXbqZ0NYiLCYiLCC6Z2v3z1Nqu0/vPXb0SZ8vnrt/KGTkV5GWtzIwlx0bjwwLjwQF5uLmtzI0V5mZyy+jv3HxI25dKVG4ryMqU5qZhSpTmpFiYGx06dQ5fAFboEAb7QJTUTQABKPnrx8vWL12+I1CkhKiIhLorFFLLBYCqlAGCMUkstABt1AAAAAElFTkSuQmCC) button allows to send the dialog by mail.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAIAAABr4HqSAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAATdJREFUOI3NlEFLw0AQhaeaNk0CSSE1p0YvQoUePdmzV3+tv6H16KWBgCAxDQoJkW5gNxk3Nh6tZDeNGCFzfG/324E3s4OqqqC7OumQ1XucIjMY8igmDTdnjqWrw7a4bUye394tQxW6hGIFMHenbXEAYBnqcnEhtNbei1DvdxT/nyxhWJafDDkv92nGhNd4uWfI04wpyqmlf8c1qC/Z/YP/q47ubq6augOA5eLcNvWjoDRjay88VKSDEsYkSnYNrNnZxBi3HuMcOSu460yE7jbe5cjb4ggtGHJ9PJy703oatqmnGWXICS2O47SR4gUxANimBgCPT6/5R3no3l5fAkCUkCgBbfSTUEnKD5PVJpC5q03gh0ldb9pZQlG2m4SibRp1XYpzHavhJds0hAcEY/yX6vcX0DHuCydtwsIt2HhrAAAAAElFTkSuQmCC) button allows to print the dialog.

Note: automatic interaction (such as internaut activity), satisfaction and comments are not shown.

The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAZCAYAAAA14t7uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAqElEQVRIiWP8////fwYaACZaGDpq8CAyeNPekwyb9p4kyWAWYhQ9ffmWJEMZGAY6KEaGwYz4yoqVWw8znLlyG0VMSkyIISPKi4GTnQ2vwXhdHO5ty2Cio0qyoQwMRCS3cG9bBgYGBoZnr94SbSgDA4GgQAbff/4i2lAGBjwu3nXkPAMjI26NrtaG5Bn87NVbhu8/fmGV4+Qg7HKig4JUMPQyyKjBtDcYAGASMJWtOEb8AAAAAElFTkSuQmCC) button is used to export the dialog in XML format.

### Comments / Notifications

For each dialogs, you can insert comments and notify users who have access to your bot's knowledge base. To do so, please use the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAVCAIAAAA8SdJPAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAASdJREFUOI3N1M1PgzAUAPC3DcTWpF0CIzEZ7qQe9OJ1//929YIH5wlHYrJBMkhGreXDA5uZsx8j2cF3Apr3e+/RQq9pGjhT9M8F/WPLOryZv0SdkqcPE6WV5gxdWPjSNirFp2Bfpa4vAAj84X3gGa3XZbKIE4O1K8sF40K6hBwbO/LG5dZylf0t28bd2FM1Lrc8igHkCR7F0udKyyXYJcqcbtb7KovXG+nSeDS88WkHi3GR5ky65JKrbn0FPlW9F6TYRKWF1RuviWMrXm/SfNte2wPr6fbaGvQBoKzq57cPUe3OuvT0/fq2XYIOR0jy7SyMyqouq3oWRsm+BgAgx3YJOrJ6mn9hVvB5GLXDFlxMHycUO5oZddYPBwBGyGy1HAAYoZOs0+MbRhNu7dkNpu4AAAAASUVORK5CYII=) button at the top of the page when you are on a dialog.&#x20;

<figure><img src="/files/9LZ1yrmE5FFMzEALlm0M" alt=""><figcaption></figcaption></figure>

When you click on a dialog, a comment box appears at the bottom of the dialog.&#x20;

<figure><img src="/files/xsQWYZagOwVxQ2c8n9fj" alt=""><figcaption></figcaption></figure>

You will be able to add comments to the dialog while notifying another user of the platform. To do so, simply insert the **@** character that will open the list of users you can mention. Click the user you want to notify.

Note 1: enter the first letter of a user's ID to find it more easily.

Note 2: you can notify as many people as you want.

Write your comment and click **Post Comment**.

Once your comment is added, the user(s) mentioned will be notified immediately. They will receive an email for each comment on which they were mentioned (except if they disabled the email notification in the account preferences).

A comment thread is then created. Each user can add / remove comments in the dialog flow. To delete a comment, click the  icon at the right of the comment.

The comments are displayed when hovering over the corresponding icon in the Learning > Dialogs menu.

The comments appear with the names of their authors.

<figure><img src="/files/DYg6qFcbHzA2pLPIjFKk" alt=""><figcaption></figcaption></figure>

### Possible actions

For each interaction, it is possible to perform different actions:

* Association with existing knowledge;
* Creation of new knowledge;
* Display of knowledge used.

#### **Association with existing knowledge**

Click the **Search** button ![](/files/dtN4CCuecJ4Hak4u6IG0)  to initiate the association with existing knowledge.&#x20;

<figure><img src="/files/TX7RuFQ2UaYlGMmzBo4e" alt=""><figcaption></figcaption></figure>

Following a knowledge search, this screen presents the knowledge close to the user's sentence. If the searched for knowledge is not directly in the list, you can enter a new search.

By checking the **Search in protocols** box, you will also search in the bot's social knowledge.

Once the knowledge is identified, simply click on the link **Complete this knowledge**. Once the formulation is associated with the knowledge, as soon as a user asks a question close to the one added, the bot will provide the answer of the corresponding knowledge.

#### **Creating a new knowledge**

Click the **Create** button ![](/files/hgpnXtPlhwxkJCtHPAd7) to initiate the creation of a new knowledge.

You can then, on the right side of the window, create a knowledge as if you had done it from the **Knowledge** page.

You can now follow the usual process to create a knowledge.

#### **Display of knowledge used**

Click **Show** ![](/files/g8gc2uQHHSJaHmHxjRvV)to display the knowledge that was used in the steps of a redirection.

You can then, on the left side of the window, edit the knowledge as if you had done it from the **Knowledge** page.


# Suggestions

The dydu engine makes suggestions based on misunderstood user sentences. These suggestions are proposals for formulations suggested automatically by the engine according to multiple criteria: proximity to existing knowledge, collective intelligence, mutual proximity to misunderstood sentences and emerging grammar.

Go to the **Learning > Suggestions** page.

For each suggestion, you can:

* **Associate** the formulation if you consider it is consistent with the suggested content;
* **Invalidate** the formulation if you believe it is inconsistent with the suggested content;
* **Ignore** the formulation.

In the summary tab you will find a summary of the number of suggestions that have been associated, invalidated and ignored. From this summary you can also activate automatic learning.

To find out more about the summary of suggestions and automatic learning click here.

It is possible to filter the suggestions according to certain criteria. Filters are different techniques for making suggestions:

* adding a formulation to a knowledge or
* adding a group of formulations to a formulation

## Suggestion filters available:

### Covers 10 out of 10 matches

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the matching results to the question: the first 10 formulations that have been matched come from the same knowledge.
* The engine therefore suggests that you add this question as a formulation of the knowledge.

### Covers 9 out of 10 matches

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the matching results for the question: the first 9 formulations that have been matched come from the same knowledge.
* The engine therefore suggests that you add this question as a formulation of the knowledge.

### Covers 8 out of 10 matches

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been rephrased by the bot.
* Meaning of the filter: Among the matching results to the question: the first 9 formulations that have been matched come from the same knowledge.
  * The engine therefore suggests that you add this question as a formulation of the knowledge.

### Clicked reformulations

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the reformulations proposed by the bot to the user's question, the user has clicked on this knowledge. The user's original question is therefore relevant to be added as a formulation of the clicked knowledge.

### Group

* The software suggests adding one or more groups of formulations to complete the knowledge formulations.

### Group reformulation

* The software suggests adding groups of formulations to the main knowledge reformulation sentence.
* These suggestions are made only on the main reformulation sentence of the knowledge.

### Covers 10 out of 10 matches and clicked reformulation

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the reformulations proposed by the bot to the user's question, the user has clicked on this knowledge AND among the matching results to the user's question: the first 10 formulations that have been matched come from this knowledge.
* The engine therefore suggests that you add this question as a formulation of the knowledge.

### Covers 9 out of 10 matches and clicked reformulations

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the reformulations proposed by the bot to the user's question, the user has clicked on this knowledge AND among the matching results to the user's question: the first 9 formulations that have been matched come from this knowledge.
* The engine therefore suggests that you add this question as a formulation of the knowledge.

### Covers 8 out of 10 matches and clicked reformulations

* The software suggests adding formulations to existing knowledge.
* These suggestions are only based on questions that have been reformulated by the bot.
* Meaning of the filter: among the reformulations proposed by the bot to the user's question, the user has clicked on this knowledge AND among the matching results to the user's question: the first 8 formulations that have been matched come from this knowledge.
* The engine therefore suggests that you add this question as a formulation of the knowledge.

### **Dydu LLM**

On the suggestions page, different sources can propose formulations to add.\
A new source appears when **dydu-llm** matches a user query with an existing piece of knowledge.

This source is then displayed in the list of suggestions, making it easier to add relevant formulations to the knowledge base.

<figure><img src="/files/RDACr6Dgg37FWbThEEEu" alt=""><figcaption></figcaption></figure>

## Display

It is possible to display the list of suggestions:

* By source :
  * The suggestions are displayed according to the source. This source corresponds to the selected filter. The suggestions are displayed in the following order: first the selected filter then the knowledge.
* By knowledge :
  * The suggestions are displayed by knowledge. The suggestions are displayed in the following order: first the knowledge then the source (the source corresponds to the selected filter).

## Summary

The summary is a table showing you, by filter :

* the number of suggestions to be validated,
* the % and number of suggestions that have been associated,
* the % and number of suggestions that have been invalidated,
* the number of suggestions that were ignored,
* the total number of suggestions.

The summary allows you to judge the performance of the suggestions made by the dydu engine. You can choose to activate the automatic learning of the bot for suggestions made on the basis of the following filters:

* Covers 10 matches out of 10 and reformulation clicked,
* Covers 9 out of 10 matches and rephrasing clicked,
* Covers 8 out of 10 matches and rephrase clicked.

Enabling machine learning will allow the engine to automatically add to your knowledge formulations that meet the criteria of the filters for which machine learning is enabled.


# Misundestood sentences

## Improve your chatbot’s understanding capacity with misunderstood sentences

Our solution provides the possibility to analyze user questions that the bot has failed to understand.

By analysing those misunderstood sentences, you can improve your bot's performance.

### How to use misunderstood sentences to improve your bot’s performance

#### The concept

In a nutshell, the “Misunderstood sentences” section allows you to quickly review misunderstood user questions and enrich your knowledge base from there.

By analyzing the occurence of these misunderstood topics, you can also gain insight into what your end users are thinking.

Misunderstood sentences are presented in the "Learning > Misunderstood sentences" section through 3 views:

* **“By occurrences”** (the default view): It’s the number of times that users used an expression that the bot failed to understand.
* **“By knowledge”**: misunderstood expressions are pre-associated with knowledge items with which they can be matched. The bot automatically suggests the association, and you can confirm or discard the proposition.
* **“Last used”**: misunderstood expressions are listed chronologically from newest to oldest.

Regardless of the view, clicking on one of those misunderstood sentences shows a list of suggested knowledge items (sorted by the matching score) that can match the user's question. You can decide whether to make the association or not.

#### An example

Go to **Learning - Misunderstood sentences** and let's say you have the following misunderstood question:

<figure><img src="/files/xJO4RtiU0Xnjj8nReQG1" alt=""><figcaption></figcaption></figure>

1. Click on it and a list of suggested knowledge items will appear. By hovering over the “eye” icon you can see the associated answer to each item:

<figure><img src="/files/cSLd1oZ5WVyfoZ8go6zv" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/7KeZw9ToTbdv8g91Zt2b" alt=""><figcaption></figcaption></figure>

2. If a knowledge item matches the misunderstood expression, you can add the expression as a new formulation to that item by clicking directly on the expression. Then, confirm by clicking on “Associate”.

<figure><img src="/files/iO0PIu0hMZfkQ5H5Po7W" alt=""><figcaption></figcaption></figure>

3. If the misunderstood expression is not relevant, you can simply delete it and it will disappear from the list.

{% hint style="info" %}
Misunderstood sentences are updated every night. This means that any misunderstood sentences that are saved during the day will only be visible the following morning.

Please note that a misunderstood sentence will not disappear until it is associated with a knowledge item or voluntarily deleted.
{% endhint %}


# Analytics

What do users think of the bot? Are they satisfied with the answers he provides? Does the bot meet these objectives? So many questions that need to be answered to justify the success of the bot and optimize its quality. Within the DYDU BMS, it is possible to immediately and simply view the key indicators of the bot's performance through the Statistics menu. It is also possible to configure these own reports as needed using the Custom Statistics menu.

<figure><img src="/files/uTyTFeE0RhptaYqTwlra" alt=""><figcaption></figcaption></figure>

## Statistics calculation system:

&#x20;There is an "absolute" calculation system and a "relative or weighted" one. If the statistics page does not offer the option of filtering by sum then the statistics are calculated as a weighted sum. For example the option is available for example for "knowledge" statistics:

<figure><img src="/files/DPnTAkF4ZY3ZsAjMU61o" alt=""><figcaption></figcaption></figure>

The distinction between the two systems is important:

* &#x20;Absolute: if a conversation calls on an acquaintance N times, this will increase the absolute statistic by N.&#x20;
* Relative or weighted: will take the absolute per conversation and divide by the number of interactions in the conversation. If the conversation is long, this greatly reduces the value. In fact, it does not count 1 per conversation, but 1 / (number of conversation interactions). For example, 8 conversations of 4 interactions each can result in 8 \* (1/4) = 2


# Exploitation

This part of the BMS allows you to consult pre-generated reports. We find in particular statistics on:&#x20;

* &#x20;the number of visitors and the number of conversations,&#x20;
* the number of interactions per conversation,&#x20;
* the qualification of these interactions and conversations, that is to say the level of understanding of the bot's questions and its ability to provide an answer,&#x20;
* user satisfaction with the response provided, the most discussed themes,&#x20;
* the most used knowledge.
* Statistics are updated through production conversations with the bot. This means that test conversations carried out with the bot are not taken into account in the various statistical calculations. Each indicator can be displayed according to the period, language or even the consultation space. The objective being to be able to constantly analyze and control the performance of the bot.


# Important

Statistics are updated thanks to production conversations with the bot. This means that test conversations with the chatbot are not taken into account in the different statistics calculations.

This page gives you an overview of the most important and relevant analytics to quickly evaluate the performance of your bot.

By browsing the different pages of the statistics menu, you can find more details about:

* the conversations conducted with your chatbot: volume and distribution
* the topics most discussed with your bot
* the most used knowledge allowing you to identify the 20% of knowledge constituting the 80% of exchanges
* the qualification of the conversations conducted with the bot: how many were successful, how many were unsuccessful
* the satisfaction of the bot's users: what percentage of satisfaction each bot response brings.

<figure><img src="/files/cDFCNrzMINtQqMVkagV9" alt=""><figcaption></figcaption></figure>

<figure><img src="https://dev.docs.dydu.ai/assets/images/i01-87fea3eb5f27a497ad8eb75f66d0360f.png" alt=""><figcaption></figcaption></figure>


# Dialogs

### Dialogs analytics

The **Dialogs** section lets you track how users' dialogs with the bot are changing.

### Volume

This graph allows you to evaluate the dialog evolution of your bot:

* **The blue curve ("conversations")** shows the evolution of the conversation volume of your bot at a given period.
* **The gray curve ("previous period")** shows in parallel the evolution of the conversation volume of your bot during the previous period.

You can edit the period at any time thanks to the menu on the left: **Period selection**.

<figure><img src="/files/lcSPAsZt1krxG5jQMSrD" alt=""><figcaption></figcaption></figure>

Note: we do not recommend comparing the gray curve of period N with the blue curve of period N-1. Even if they are ultimately based on the same data, the 2 curves will not always have the same form since the reference dates are not the same.

### Distribution

The distribution allows you to see the distribution of dialogs by:

* Consultation space;
* Browser;
* Operating system.

<figure><img src="/files/2Nv5h7bZ3dk3uFo11K0d" alt=""><figcaption></figcaption></figure>

Clicking on each item displays the graph representing evolution.

* **Space distribution:** this block allows you to get the analytics on the distribution of dialogs according to the consultation spaces used.
* **Browser distribution:** this block allows you to get the analytics on the distribution of dialogs according to browsers used.
* **Operating system distribution:** this block allows you to get the analytics on the distribution of dialogs according to the operating systems used.


# Visitors

This page provides statistics about visitors. The bot manager can thus know:

* The number of visitors
* How many of these visitors had a conversation with the bot
* How many of these visitors had already interacted with the bot before

Each time a page with the chatbot is visited, the system checks whether the visitor has already accessed this page before (this verification is usually based on a cookie). If not, the visitor is considered new.

## Visitors

A visitor is counted when they access the chatbox. When the chatbox is opened, a series of requests is sent to the server to retrieve information such as the context, top knowledge, welcome message, etc., as well as to log the visit. However, these requests are only triggered if the chatbox is fully loaded and opened by the user.

* **Without GDPR disclaimer and/or onboarding enabled**: A simple chatbox load (if it is open) is enough to count a visit.
* **With GDPR disclaimer and/or onboarding enabled**: The user must complete these steps before the visit is recorded. A simple chatbox load is not sufficient in this case.

The visit information is stored for one day in the user's local storage. If the same user returns the next day, a new visit is added (the count increments when the conversation is opened).

<figure><img src="/files/0LCcnQdKnXU9slfQHzVn" alt=""><figcaption></figcaption></figure>

## Visitors with conversation (Conversion)

This metric indicates how many times a page visitor has engaged in a conversation with the bot.

* This statistic is only incremented if the visitor interacts with the bot.
* It is recorded when the conversation ends and is counted for each conversation, regardless of whether it occurs on the same day or not.

<figure><img src="/files/OXe2PCtT5fJbDMpt1MCL" alt=""><figcaption></figcaption></figure>

## Returning Users

Using a cookie, it is possible to recognize visitors who have previously interacted with the bot.

Among the **"Visitors with Conversation"**, this statistic distinguishes two categories:

* **Unique users**: Those who engage in a conversation for the first time on a given day.
* **Returning users**: Those who start a new conversation within the same day.

<figure><img src="/files/rr0XTPeuU1D4ABHWVHHi" alt=""><figcaption></figcaption></figure>

## Visitor Statistics Recording Behavior

### Behavior Based on Cookie Disclaimer Activation

#### 1. Cookie Disclaimer Activated

When the cookie disclaimer is activated:

* **The recording of the visitor statistics will only be triggered after the disclaimer has been validated**.
* As long as the user has not validated the cookies, no recording request will be made.

#### 2. Cookie Disclaimer Deactivated

When the cookie disclaimer is deactivated:

* **The recording of the visitor statistics is automatically triggered as soon as the page is opened**, even if the chatbox is closed.

### Effect of the Additional Option

An additional option, **`restrictedOnChatboxAccessInsteadOfSiteAccess`**, can be activated to further modify the behavior of the visitor statistics recording. This option can be configured in the **Channels** menu, under the **Debug** section.

* **If `restrictedOnChatboxAccessInsteadOfSiteAccess` is enabled (`true`)**, then the recording will only happen after the chatbox is opened. If the user does not click on the teaser, nothing will be recorded.
  * More specifically, the recording of the visitor statistics is triggered after the GDPR validation (or after the disclaimer acceptance if no GDPR is involved).

### Behavior Summary

| Cookie Disclaimer State | `restrictedOnChatboxAccessInsteadOfSiteAccess` Enabled | Welcomecall Trigger Moment                                                  |
| ----------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------- |
| Deactivated             | `false`                                                | On page load                                                                |
| Deactivated             | `true`                                                 | <p>When the chatbox is opened</p><p>After GDPR validation (if enabled)</p>  |
| Activated               | `false`                                                | After disclaimer validation                                                 |
| Activated               | `true`                                                 | <p>After disclaimer acceptance</p><p>After GDPR validation (if enabled)</p> |

This management ensures precise control over the triggering of visitor statistics recording based on compliance and user experience needs.


# Themes

The knowledge base can be organized by theme. This categorization also allows for the establishment of statistics on the most frequently addressed/utilized themes.

For each theme, the usage volume and distribution percentage are indicated.&#x20;

The calculation of topics is performed in a weighted manner, following the same principle as the statistics for knowledge. For each knowledge within a topic, the number of conversations in which it appears is considered, but in proportion to the number of interactions in each conversation. Specifically, each occurrence of the knowledge in a conversation is weighted by the number of interactions in that conversation. For example, if a knowledge appears in a conversation with 8 interactions, another with 2 interactions, and another with 4 interactions, the calculation would be:

$$
1/8​+1/2​+1/4​=0,875
$$

It is also possible to obtain details for each knowledge entry that comprises the themes. All data can be exported in Excel format.

Tags are organized in a tree structure.The following chart allows you to observe the distribution discussed in conversations. Hovering over each section displays the corresponding percentage.

<figure><img src="/files/IboIUg9a8Mz64Vr8kdG3" alt=""><figcaption></figcaption></figure>

The themes are organized in a hierarchical structure. You can click on "**Export to Excel**" to obtain analytical data about the chart, which is also displayed just below.

<figure><img src="/files/bGnsCQEtmTHY6L9fOBIS" alt=""><figcaption></figcaption></figure>


# Knowledge

Analyzing statistics specific to knowledge helps identify the most used knowledge and the user satisfaction level about them. From this page, the manager can notably identify the 20% of knowledge covering 80% of bot usage (Pareto principle) and capitalize on them.

{% hint style="info" %}
Note: Push knowledge corresponds to [complementary answer](https://docs-en.dydu.ai/contents/knowledge/knowledge-types/complementary-answer)
{% endhint %}

### Knowledge filtering[​](https://dev.docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge#knowledge-filtering) <a href="#knowledge-filtering" id="knowledge-filtering"></a>

* **Weighted count:** is equal to the absolute sum divided by the number of interactions per dialog.
* **Absolute count:** number of interactions related to a tag / knowledge.

  The **Popularity** parameter that you find below is the number of uses (**use count**) when doing analytics-related exports (For example, from **Content > Import / Export > Quick Export > Timeline**).

  Note: over the same period, you can see a difference between the results displayed on the analytics page and exports related to analytics. When analytics are measured on over more than 100 days, they are agglomerated monthly from the **Analytics** page. Therefore, the selection of a period from 01/01/2022 to 17/06/2022 will use the period from 01/01/2022 to 30/06/2022. However, the analytics-related exports will display the exact result on the exact selected period.

<figure><img src="/files/cj6dIbkTpbnsQTlox5Cz" alt=""><figcaption></figcaption></figure>

### Knowledge cloud[​](https://dev.docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge#knowledge-cloud) <a href="#knowledge-cloud" id="knowledge-cloud"></a>

The knowledge cloud gives you an overview of how knowledge is used. The bigger the bubbles, the more the knowledge is solicited and the more the color tends towards the green, the more the satisfaction is positive.

<figure><img src="/files/D9HQdlNw6BCD2Os0L4VC" alt=""><figcaption></figcaption></figure>

### Summary[​](https://dev.docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge#summary) <a href="#summary" id="summary"></a>

You can see the number of knowledge of your knowledge base that is used by users.

### Show only disabled knowledge[​](https://dev.docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge#show-only-disabled-knowledge) <a href="#show-only-disabled-knowledge" id="show-only-disabled-knowledge"></a>

If you want to display only knowledge that does not have the "Published" status (status indicating that the knowledge is used in production), click on the **Show only disabled knowledge** link.

Knowledge is ranked in order of popularity, ie the number of times it has been used.

### Show extra information[​](https://dev.docs.dydu.ai/docs/Analytics/Analytics_v1/Exploitation/knowledge#show-extra-information) <a href="#show-extra-information" id="show-extra-information"></a>

<figure><img src="/files/KUANXKuRqMywbBnCOib9" alt=""><figcaption></figcaption></figure>

The table above shows extra information about knowledge usage:

* **Popularity** : the number of times the knowledge has been requested by end users within a given timeframe.
* **Positive feedback (in %)** : the ratio of positive reviews compared to the total number of reviews left on a chatbox response.
* **Evolution** : graphical information on the changes over a certain period of time for the following data: popularity, relative popularity, and number of reviews left on responses.

<figure><img src="/files/TARYrYarKyWNrBDWVSYt" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/0MQQIzS2E9FF3Dgt0dEq" alt=""><figcaption></figcaption></figure>

* Details on user dissatisfaction: When users are allowed to specify the reason for their dissatisfaction after giving negative feedback, a table will appear upon clicking on the number of reviews.

<figure><img src="/files/hGqDy9ldhmZMg3vqt25v" alt=""><figcaption></figcaption></figure>

By clicking on the icon ![](https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2F1101559743-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FgMQl4578l4DzuAEhrEii%252Fuploads%252FxOfe1DtnTFr3wJVGfhnh%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-12-15%2520a%25CC%2580%252015.20.11.png%3Falt%3Dmedia%26token%3D47d21eb4-5997-4883-afe1-36ded7da0646\&width=300\&dpr=4\&quality=100\&sign=32788358\&sv=1), you can view the conversation that generated this dissatisfaction.

<figure><img src="/files/LLPlwiZdFXo22tkDlwg0" alt=""><figcaption></figcaption></figure>


# Qualification

This section allows you to analyze the rate of failed conversations by categorizing conversations, as well as the rate of misunderstandings by categorizing interactions. You will find several graphs here to help you observe the categorization of your conversations and interactions.

<figure><img src="/files/uXa684NjFJAgZlL8CoBf" alt=""><figcaption></figcaption></figure>

## Conversation qualification

### Conversation qualification

Conversations and their constituent interactions are classified into 3 categories based on their qualification. The 3 qualification categories are as follows:

* **Only direct answers:** the dialog consists only of direct questions / answers. This means that the bot has been able to understand all the questions and provide the answers;
* **Ending with direct answer:** during the dialog, the question or an incomprehension can be reworded, but the dialog ends with an answer;
* **Failed:** the dialog ends with an incomplete question or a suggestion for formulations and the user has not clicked on any of them.

The first two categories are considered successful dialogs. The evolution of the dialogs distribution over time reflects the training of the bot.

The qualification statistics page presents the distribution of conversations and interactions by qualification type. Clicking on any of the statistics displays details for that specific qualification type.

<figure><img src="/files/KO1Nb3jDgdLl5nE1EQxT" alt=""><figcaption></figcaption></figure>

### Qualification of conversations with provided contacts

During the creation of a knowledge entry, if the response includes an external contact provided by the bot, it's possible to specify the type of contact provided. This helps to understand the alternative solution offered to users based on their qualification. Therefore, it's possible to know, among the percentage of failures, what was proposed to users who did not initially receive their answer through the bot and were therefore redirected to another type of contact that could assist them.

<figure><img src="/files/dMl6N6BNUHI4HeccXLJq" alt=""><figcaption></figcaption></figure>

### Qualification of conversations based on the number of interactions

<figure><img src="/files/OXu14OTjYsri4vnRL90Y" alt=""><figcaption></figcaption></figure>

### Qualification of conversations based on the number of interactions (in %)

<figure><img src="/files/zYVVJgsHqbi3yMmrxuft" alt=""><figcaption></figcaption></figure>

### Qualification of conversations by browser

<figure><img src="/files/fgq6aJWXbFTaefL9V4cO" alt=""><figcaption></figcaption></figure>

## Qualification of interactions

For the **qualification of interactions**, it is possible to obtain several details in the **BMS**:\
the **type of interactions** with the **probability of the next interaction**, the **qualification of interactions** based on **sentence length**, as well as the **qualification according to the number of words per question**.

**Qualification by interactions** is based on the analysis of all recorded interactions, except those from **test or qualification conversations**, which are systematically ignored.

Some interactions are also **excluded from the calculation**, especially those that correspond to **knowledge ignored in statistics**. All other interactions are then distributed into **14 categories**, each corresponding to a specific type of event or processing:

* CHART\_BUSINESS\_MATCH (0)
* CHART\_PROTOCOL\_MATCH (1)
* CHART\_DISABLED\_KNOWLEDGE (2)
* CHART\_REWORD (3)
* CHART\_OUT\_OF\_SCOPE (4)
* CHART\_GARBAGE (5)
* CHART\_CLICKED\_REWORD (6)
* CHART\_NO\_INTERACTION (7)
* CHART\_OPERATOR (8)
* CHART\_OTHERS (9)
* CHART\_CLICKED\_REDIRECTION\_LINK (10)
* CHART\_PUSH (11)
* CHART\_CLICKED\_REWORD\_AUTO (12)
* CHART\_CLICKED\_JAVASCRIPT\_LINK (13)

Only **production interactions** (excluding tests, qualifications, and ignored knowledge) are therefore taken into account and allocated to these categories, which can be viewed in the **BMS statistics**.

For the calculation of the **failure rate** in **V1 statistics**, only the category **`CHART_GARBAGE (5)`** is considered a failure. The other categories are **not** counted as failures.

### Qualification of responses

<figure><img src="/files/hEk014fVNRWwS8KZlgm6" alt=""><figcaption></figcaption></figure>

### Qualification of interactions based on sentence length

<figure><img src="/files/DW91ZLBYPl2eWJjvtkgg" alt=""><figcaption></figcaption></figure>

### Qualification of interactions based on the number of words per question (%)

<figure><img src="/files/ak7ZIRGdWI1U72418iOS" alt=""><figcaption></figcaption></figure>


# Users feedbacks

This section allows you to obtain the proportion of negative and positive feedback given by users on the answers given by the bot as well as the graphical evolution of this data.

<figure><img src="/files/h0eoDP8orIjpWtuDe418" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/CNDGcn0hbnP0XODuYqCc" alt=""><figcaption></figcaption></figure>

* The upper part of the page presents the general satisfaction of the conversations.
* The lower part of the page focuses on the reasons for dissatisfaction by interaction.

## Overall feedback on the conversations

The overall satisfaction of a conversation is calculated according to the weight of each type of feedback.

For example, let's say the number of positive feedback = A and the number of negative feedback = B.

* If A > B, then the global feedback is POSITIVE
* If A < B, then the global feedback is NEGATIVE.
* If A = B, then the global feedback takes the value of the last feedback left in the conversation.

{% hint style="info" %}
Feedback marked as “no opinion” is counted along with positive feedback in the calculation of overall satisfaction.
{% endhint %}

The global satisfaction is also represented in the conversation list by a thumb.

At the top right of the page, a button **Show user comments** is available. By clicking on it, another tab opens and lists user comments of each knowledge.

## Reasons for dissatisfaction

When the user gives negative feedback, he/she has the option to specify or not the reason for his dissatisfaction by selecting one of the 3 predefined answers.

This section helps you to identify the most common reasons for dissatisfaction.


# Clicked links

The statistics menu allows you to determine if the redirects or links suggested in the bot's responses have been clicked by the user. For this statistic, it indicates the number of times a bot response suggested clicking on a link and the number of times this link was clicked. The click-to-suggest ratio measures the user's willingness to click on a suggested link.

These are classified based on the type of contact provided in the response, if any. Those responses without any registered contact are categorized under "None".

* Suggested: number of times the answer given by the bot suggests clicking on a link;
* Clicked: number of times the user clicked on the link;
* Ratio: this is the clicked to suggested ratio, measuring how willing users are to click on a suggested link.

<figure><img src="/files/UkLD7pzjmzdpJh1VbJl9" alt=""><figcaption></figcaption></figure>

When you click the arrow ![](https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2F1101559743-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FgMQl4578l4DzuAEhrEii%252Fuploads%252F295SQ1Y396Zix31ImCWS%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-12-15%2520a%25CC%2580%252016.01.37.png%3Falt%3Dmedia%26token%3Da3d729f7-0ae7-4797-95fe-d30b1747a73b\&width=300\&dpr=4\&quality=100\&sign=bfddc25c\&sv=1) for the first time, the detailed list of links is displayed.

<figure><img src="/files/bDpCuJBFa3D9ZQUPvfd3" alt=""><figcaption></figcaption></figure>

When you click the arrow ![](https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2F1101559743-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FgMQl4578l4DzuAEhrEii%252Fuploads%252F295SQ1Y396Zix31ImCWS%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-12-15%2520a%25CC%2580%252016.01.37.png%3Falt%3Dmedia%26token%3Da3d729f7-0ae7-4797-95fe-d30b1747a73b\&width=300\&dpr=4\&quality=100\&sign=bfddc25c\&sv=1) a second time, the list of knowledge entries where the link is used is displayed. If you click on a knowledge entry, it opens in a new tab.

<figure><img src="/files/3FIcfgw3tmWdM87pUtxE" alt=""><figcaption></figcaption></figure>

You can export this list by clicking on "**Export to Excel**".

<figure><img src="/files/kOcKW5eOkhfSWYNZJEFc" alt=""><figcaption></figcaption></figure>


# Rewords

When the bot is not sure if it understands the question, it offers 1 to 3 formulations that can match the user's question.

<figure><img src="/files/RjOgTqlB8ynnnhhGLJ8d" alt=""><figcaption></figcaption></figure>

This graph makes it possible to know the number of reword proposed by the bot for a knowledge. Thus, it allows to know the percentage of rewords proposed by the bot when it does not understand as well as the percentage of the number of users having clicked on this or that proposal.

Below the graph, you have the list of knowledge:

* Count: number of times knowledge has been proposed;
* Click rate: the ratio between the number of times it was suggested and the number of times users clicked on it (and that it matched to the question of the user).
* Knowledge content: when you click on one of the knowledge items, it is displayed in a new tab.


# Performance

The average processing time of the engine makes it possible to know if the users' questions take a long time to process by the dialog engine.

* **Average duration :**
  * Web service: the average response time (without taking network delays into account).
  * Dialog Engine: this is the average processing time of a question by the dialog engine.
* **Max duration:**
  * Web service: the maximum response time (without taking network delays into account).
  * Dialog Engine: this is the maximum processing time of the dialog engine for a question.
* **Requests with significant processing time:**

  If responding to a request takes longer than 1 second, the response time is considered long (response time of the web service).

<figure><img src="/files/nlTuGGE1wVEE7jZTUpvY" alt="" width="375"><figcaption></figcaption></figure>


# Other

* **Clicked rewords:** when the bot is not sure if it understands a question, it offers 1 to 3 related knowledge. We can thus obtain the percentage of proposals that have been clicked.

<figure><img src="/files/dg5D9ElgruWXOI71V3OR" alt=""><figcaption></figcaption></figure>

* **Interactions by dialog:** here you can see the distribution of dialogs according to the amount of interactions. The average length of a dialog is often linked to the way your bot answers.

<figure><img src="/files/UW9YBPVuwTBdvF3YSSHL" alt=""><figcaption></figcaption></figure>

* **Knowledge distribution:** this metric allows you to find out how much knowledge covers a percentage of all dialogs with the bot.
* **Different knowledge:** different knowledge used during a dialog. On the graph, it is possible to find the sum of these knowledge.

<figure><img src="/files/hzPB2Y1tASLf1NCnp6Gz" alt=""><figcaption></figcaption></figure>


# Livechat


# Dialogs

* **Volume:** this refers to the total number of conversations that have been assigned;
* **Duration:** average duration of a dialog;
* **Picked up chats:** this refers to the number of conversations that have been assigned AND accepted by the operator.
* **Successful opportunities :** number of times it was determined that a Livechat connection should be established and conversations were directly assigned to an operator without going through the waiting queue.

All these data are represented by graphs to visualize the evolution.

<figure><img src="/files/xPiMNCSPivSS3cJMzw87" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The opportunity statistics work with external live chats.
{% endhint %}


# Knowledge

For the knowledge that suggests connecting to Livechat, this page allows you to see the number of requests they triggered and the number of times they have allowed to establish a connection to the Livechat.

<figure><img src="/files/2EhSXWdRGwvCLUQ34xj4" alt=""><figcaption></figcaption></figure>


# Operators

The statistics related to livechat operators can be global for all operators or specific to each one.

<figure><img src="/files/RvM1eEX32TBHuhtRa2iN" alt=""><figcaption></figcaption></figure>

## Global data

<figure><img src="/files/OzYyvtoHoKqgCUjlPHdR" alt=""><figcaption></figcaption></figure>

* **Average response time:** average wait time for a user to get an answer from an operator;
* **Average occupancy rate:** allows to see, when an operator is online, how long they spend in discussion. It is thus possible to determine the required number of operators. An operator is at 100% usage when they handle 3 dialogs at the same time;
* **Max connected operator:** allows to know the maximum number of operators that were connected at the same time at a given time.

## Data per operator

You can find various global analytics for each of the operators.

### Simultaneity Rate

The **simultaneity rate** corresponds to the proportion of time, over a given period (for example, **one hour of work**), during which an **operator** handles one or more conversations at the same time. This rate is used to analyze the **level of activity** and **workload** on the livechat.

#### **Definition**

For each operator, the **simultaneity rate** is calculated based on the **number of conversations** handled simultaneously and their **duration** over the considered period.\
Several situations may arise:

* **0%:** No conversation was handled during the period.
* **50%:** Only one conversation was handled, for a duration corresponding to half of the period.
* **100%:** One conversation occupied the entire period without interruption.
* **200%:** Two conversations were handled simultaneously throughout the entire period.

This rate can **exceed 100%** when an operator manages multiple conversations at the same time during a given period.

#### **Points to Note**

* The **duration taken into account** does not always correspond only to the time spent in livechat, since part of the conversation time may include moments when the operator has **not yet intervened** (for example, when the **bot is active** or the conversation is on hold).
* It is possible for several conversations to be displayed during the same period, but **not all of them are necessarily assigned to the operator continuously**. Some parts of the conversation may be handled by a **bot** or by **another operator**.


# Satisfaction

At the end of a livechat conversation, it is possible to trigger a satisfaction survey for end users as well as a satisfaction survey for the operators.

Thus, from the livechat statistics, the bot manager can obtain the results following the completion of these surveys. Operator satisfaction can be displayed by each operator individually.

<figure><img src="/files/grvUClZN2HTNiTBNGAM7" alt=""><figcaption></figcaption></figure>


# Waiting queues

If you have implemented a queue for the Livechat, this page allows you to know:

* The average waiting time in this queue;
* Occupancy rate;
* The number of users who left the queue (you can also obtain this data by competency).

All this data can be obtained by skill and represented through graphs to visualize the evolution.

<figure><img src="/files/PMNxAQpnI5Z2UIuRDncs" alt=""><figcaption></figcaption></figure>


# Knowledge base


# Formulations

Here you can see the number of formulations in your database according to different tags in which they are classified.

It is possible to observe the evolution of the number of these formulations in the graph on the right.

<figure><img src="/files/woPZekTWbr6sthGSanQe" alt=""><figcaption></figcaption></figure>


# Users

This statistic pertains to BMS users (bot managers and content managers). For each of them, it is possible to identify:

* The time spent on each BMS page,
* The number of knowledge creations,
* The number of content updates performed.

<figure><img src="/files/yEdVm1iuA8KOuTqX3jVR" alt=""><figcaption></figcaption></figure>


# Matches

In **analytics > Knowledge base > Matches**, you find analytics on the use of associations (between formulations and knowledge). You can refine your search by filtering by languages ​​consultation spaces and/or by date.

<figure><img src="/files/tipY3VxAx6RWvNAX40qa" alt=""><figcaption></figcaption></figure>

* Ranking: indicates the classification of the formulation
* Formulation: the formulation used (the one that matched)
* Usage: the number of times the formulation has matched
* Rate: the representation of the use of the formulation
* Rate sum: Sum of previous rates + Current rate (ST-1 + T1)


# Export

* **Dialogs and Interactions (excel)**: this allows you to edit an excel data export on the volume of dialogs and interactions.
* **Knowledge usage (excel):**: this allows you to edit an excel export of the data about the use of knowledge: knowledge is ranked according to popularity and it shows the percentage of satisfaction for each.
* **Activity Report (PDF)**: this is a pdf export of the data on the volume, qualification, the most widely used knowledge, satisfaction and technical indicators.
* **Dialogs and Interactions (PDF)**: this pdf export allows you to find the volume of dialogs, those in failing, top 10 questions, satisfaction and the number of Livechat escalations (following a click on a link).

<figure><img src="/files/g0sQeg07HuGu6nEaowi9" alt=""><figcaption></figcaption></figure>

The period used for export matches the period you selected in **Filtering**.

You can also choose to receive a report by mail at the frequency of your choice: one per day, per week or per month.


# Configuration

### Configuration

This section explains how to configure the URLs in the knowledge and goals. You can access this configuration space from the **Analytics** menu.

### Configuring URLs

You can configure URLs here:

Click **Add**. Fill in the fields and click the blue tick to validate the creation of your URL prefix.


# Custom analytics

The predefined statistical reports (detailed in the previous section) cannot be modified or customized. However, statistical needs during a bot project can be very specific. For this reason, the DYDU BMS offers bot managers a tool to independently configure custom statistical reports.

Custom statistics allow BMS users to create their own statistical reports by selecting the data they want to include.

The reports can be exported automatically, and their data can be monitored through alerts.

<figure><img src="/files/HSlKYBBbjH7HxOkuAeze" alt=""><figcaption></figcaption></figure>


# Reports

To configure your first report, go to **Custom Statistics > Configuration > Reports**.&#x20;

Once created, custom analytics reports are available directly from the left menu in the BMS.

<figure><img src="/files/XhX95pB317W0PuiTowNG" alt=""><figcaption></figcaption></figure>

This allows quick access to existing reports and enables configuration if needed.

<figure><img src="/files/eqdjEfblsbxu3DtMLSG1" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Hourly statistical data** (example model: **conversations per hour report**) is available for a period of **30 days**.

An **informational message** is displayed above the associated charts.

![](/files/ntUW32H73z4xq28Yaw95)
{% endhint %}


# Alerts

Custom statistics provide an alert feature to identify potential anomalies. The bot manager can configure alerts by specifying:

* The data source to monitor
* The conditions for the alert: trigger threshold, period, etc.

To configure alerts, go to **Custom Statistics > Configuration > Alerts**.

Once your alert is configured, the values are visible in the **Custom Statistics > Alerts** section :&#x20;

<figure><img src="/files/5T9qnFBpUvycmL7XRq8d" alt=""><figcaption></figcaption></figure>


# Configuration


# Reports

## Custom report configuration

Customized reports use components of different types. These components allow displaying the data of your choice in a specific format.

It is thus possible to display data in the form of tables or graphs. The type of graph can also be customized. For example, it can be a column chart, a pie chart, or a matrix.

For each component of a report, it is possible to use one or more data sources or to restrict this data to a specific criterion. This criterion can be a conversation variable.

For example, for a bot that retrieves (through conversations) the department in which the end user works, it is possible to restrict the values of the graph to this department.

### Create a report

1. To create your custom statistical reports, go to Custom Statistics > Configuration > Report and click on Add Report. Give it a name and click Create.

<figure><img src="/files/AhgoVrCuqqhOD6XUXcC6" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/A02JRQMqGEfxVjYD35MI" alt=""><figcaption></figcaption></figure>

As you can see in the screenshot above, you can also create a report by importing an existing report. Click on **Choose File** and then **Import**.

> You can apply filters such as consultation space, language, and time period. The data will be automatically adjusted in the report.

2. Once the report is created, you can start adding elements to it (which we call "components"). To do this, click on **Add New Component**.\
   Choose the one that suits you by clicking on it, which will take you to the component configuration panel.

<figure><img src="/files/Lp8SBSDTZYjjCX0BNdvC" alt=""><figcaption></figcaption></figure>

Let's take a closer look at the **Table** and **Graph** components, which are a bit more complex.

They both contain the following three sections: data sources, loops, and restrictions.

<figure><img src="/files/RJ8CWuQW6bwU3NxE9hlL" alt=""><figcaption></figcaption></figure>

**Sources**: This section allows you to select and configure the data to be displayed.

* **Indicators**: An indicator corresponds to a type of data to monitor. Our solution offers a wide variety of indicators that you can track. You can refer to the Appendix section for the complete list of indicators.
* **Inner Loop**: An inner loop allows for breaking down displayed data according to a selected criterion (e.g., by language, consultation space, solution used, etc.). If an inner loop is applied, the indicator will be segmented according to the selected criterion.
* **Restrictions**: A restriction is a filter that can be applied to the indicator. Only data that meets the restriction criteria will be displayed
  * **Dimension**: A dimension is a restriction criterion. You can only use one dimension per restriction.

> Note: An indicator can have only one **inner loop** but can have **multiple restrictions**.

**Loops**: A loop serves the same function as the aforementioned inner loop. The main difference is that an inner loop is applied to an indicator within a data source, whereas a loop is applied to all indicators within the component.

**Restrictions**: This section serves the same function as the one in the Data Sources section. The main difference is that here, restrictions will be applied to all indicators within the component.

3. Once you have configured your report, if the relevant data is available on your bot, you will immediately see the results in the Preview section below.

<figure><img src="/files/b3CijS50HAsNqgCxC4Ok" alt=""><figcaption></figcaption></figure>


# Exports

Each custom statistical report can be exported. The administrator can also configure email delivery of selected reports at the frequency they prefer.

## Export a report

Once you have created a report, you can export it in a few simple steps.

First, go to **Custom Statistics > Reports** and select the report you want to export at the top of the page.

Next, you will see two export options - one to export the entire report and another to export **individual components** of the report.

<figure><img src="/files/NtiqZffslucDpwUpyQTN" alt=""><figcaption></figcaption></figure>

> It is important to note that you can export the entire report in Excel or XML format, while components can be exported in Excel, XML, or JSON format.

## Receive a copy of your report by email

After creating a report, you can receive regular copies of it in your email inbox.

To do this :

1. Create an email export in **Custom Statistics > Configuration > Exports** :
   * Click on **Add Export**.
   * Give the export a **name**.
   * Define the sending frequency (daily, weekly, on a specific day of the week, etc.).
   * The copy format sent will always be **Excel**.
   * Finally, choose the **report** from which you want to receive the copy, then click on **Add**.

<figure><img src="/files/493bQDjmFu4QdTk2nlQe" alt=""><figcaption></figcaption></figure>

2. Subscribe to the export you just created by going to your **Account settings**.

<figure><img src="/files/4h3oVX9BHmv7uWmd2Pyd" alt=""><figcaption></figcaption></figure>

3. Then select the email export:

<figure><img src="/files/Eu42jfoqlH8JazBYQ9WE" alt=""><figcaption></figcaption></figure>

The selected email exports will also appear in **Custom Statistics > Configuration > Exports**. The **Unsubscribe** option allows you to cancel the report delivery to your inbox.

<figure><img src="/files/6dHw1uFZPHNv2r0Ft5Tl" alt=""><figcaption></figcaption></figure>


# Predefined sources

A predefined source corresponds to the type of data that your alert should track.

## Create a predefined source

1. Click on the <mark style="background-color:purple;">+</mark> button to add a new source.

<figure><img src="/files/BhQ3TGMKTJ1Ppd0wy8Y7" alt=""><figcaption></figcaption></figure>

2. Fill in the following fields :

* **Nom (optional)**: If left blank, it will be automatically filled with the name of the indicator you choose.
* **Unit (optional)**
* **Max items (optional)**: Sets the maximum number of items (from 3 to infinity) to be displayed in your report.
* **Indicator (mandatory)**: Select from the dropdown the type of data you wish to track.
* **Inner loop (optional)**: Allows you to categorize the data source (indicator) into different categories such as language, consultation space, or Livechat operator skills.
* **Restriction (optional)**: Allows you to restrict the data source based on a predefined dimension.

> Note: An indicator can use only **one** **loop** but can have **multiple restrictions**.

<figure><img src="/files/SACIITgHOW24rqjIrTVL" alt=""><figcaption></figcaption></figure>

3. Once completed, your predefined source is automatically saved and can now be used to create your alert.

## Delete a predefined source

{% hint style="warning" %}
You cannot delete a source that is being used in an alert.
{% endhint %}


# Alerts

## Create a custom alert

Use alerts to track key data changes for your bot.

{% hint style="info" %}
Note: alerts can only be applied to metrics available in custom statistics. Refer to the **Annex** section to see all available metrics.
{% endhint %}

### First step: create a predefined source

Before creating an alert, you must first create a **predefined source**, which corresponds to the type of data your alert needs to track.

To do this, go to **Custom Statistics > Configuration > Predefined Sources**.

### Second step: configure your alert

1. Go to **Custom Statistics > Configuration > Alerts** and click on the "Add an alert" button.

<figure><img src="/files/EQk2NJQ2RfHJoiNaD3YA" alt=""><figcaption></figcaption></figure>

2. Fill in the following fields:

<figure><img src="/files/mrkIT9jLjY7m61sa4J7M" alt=""><figcaption></figcaption></figure>

* **Label (required)** : This is the name of your alert.
* **Predefined Source** : Choose the predefined source you created from the dropdown list.
* **Trigger Type** : This corresponds to how the data will be displayed. You can choose between **Absolute** (data will be displayed as a number) and **Relative** (data will be displayed as a percentage).
* **Threshold** :

  * **Is less than** : The alert will trigger when the indicator is **below** the threshold.
  * **Is greater than** : The alert will trigger when the indicator is **above** the threshold.

  *For example, if you set an absolute minimum threshold of 10 on the number of conversations during a given period, you will receive an alert when the bot has fewer than 10 conversations during that period.*
* **Comparison Period** : This is a timeframe during which the threshold will be calculated. *For instance, if you set the period to "week," the alert will trigger if the total number of conversations during the week is below/above the defined threshold.*
* **Comparison To** (*available only when using a relative threshold*) : This allows you to specify the timeframe against which the comparison period will be compared.\
  *For example, if you set the comparison period as "day" with a relative minimum threshold of 10%, choosing "previous day" means the alert will trigger if there are fewer than 10% new conversations compared to the previous day. This feature is useful for monitoring the rate of change in a data source.*

3. Save your alert by clicking on "**Add**".
4. Your alert will appear in the top left corner of your screen.
5. You can delete your alert by clicking on the trash bin icon.

<figure><img src="/files/kpqCj4aAC0jZYqVWnkFc" alt=""><figcaption></figcaption></figure>

To view the results of your alerts, go to **Custom Statistics > Alerts**.


# Preferences

## Dimensions

A dimension is used in custom statistical reports to filter data based on a specific criterion.

For example, you can use the "consultation area" dimension to filter conversation data from a specific consultation area of your bot. Another example is "Livechat skill," which allows you to filter data belonging to a skill area of your Livechat operators.

The BMS provides several **default dimensions** that can be directly used when creating your custom statistical reports, but you can also create **custom dimensions**.

{% hint style="info" %}
Please note that custom dimensions must be variables derived from your conversations. You can find them in Learning > Conversations.
{% endhint %}

<figure><img src="/files/q0aLaj6aJwzeSxkUBr76" alt=""><figcaption></figcaption></figure>

### How to create a custom dimension?

1. To create a custom dimension, go to **Custom Statistics > Configuration > Preferences**, and click on "**Add a dimension**". Then select "**External variable**".
2. In the "**Optional configuration**" field, enter the variable you want to use as the dimension. For example, use the variable "**name**" that we saw above.

<figure><img src="/files/mVy8gBaBg1ry8tSTu5BZ" alt=""><figcaption></figcaption></figure>

3. Save it by clicking on the "checkmark" icon.

Your new dimension can now be immediately used in your custom reports (Customization > Custom Reports > Customization > Dimensions). It can be used either as an internal loop or as a restriction. Please note that custom dimensions only apply to statistics collected after the dimension was created, not before.

*Example (1) Dimension used as an internal loop :*

<figure><img src="/files/qzf4M1LSMoedUrYytgxy" alt=""><figcaption></figcaption></figure>

*Example (2) Dimension used as a restriction :*

<figure><img src="/files/UIQiL1DVnxrFEugJoxqO" alt=""><figcaption></figcaption></figure>

## Calculation period

This section allows you to determine the time period during which your statistics will be calculated.

<figure><img src="/files/BL4H8tOK5pijJGCNdK5p" alt=""><figcaption></figcaption></figure>

## Reset

By clicking on "**Recalculate Statistics**," all statistics of your chatbot will be erased and recalculated.

<figure><img src="/files/MUwiQhiopvQiIOEAHqgq" alt=""><figcaption></figcaption></figure>

## Transfer the statistics to the URL endpoint

This feature allows you to generate automatic statistics on all dialogue data associated with your chatbot. In this section, you can configure automatic exports of dialogue data in XML format.

For a configured chatbot, the system retrieves all completed dialogue data every minute and sends it all in a POST request to the listening URL (see schema below).

<figure><img src="/files/LTvSkdzXrLZmFUFbNvYA" alt=""><figcaption></figcaption></figure>

Concretely, please enter the URL endpoint where you want to export the conversation data for your chatbot into the field labeled "**The calculated statistics will be periodically sent to this URL**," and then click on "**Save**." A POST request will be sent for each recorded dialogue, allowing you to automatically obtain the data without needing to perform new exports.

{% hint style="info" %}
Note: You can press the "**Test**" button below the field to conduct a test and verify that the export functionality is working correctly.
{% endhint %}


# Annex: List of indicators

Indicators represent all the data that you can use in your statistical reports. This section presents the complete list of indicators available in the BMS.

## **Indicators**

### Conversation

* **Number of conversations:** This is the number of conversations. Can be displayed in a table and in charts (except pie charts and matrices).
* **Average duration of auto chat conversations without qualification:** The average duration of a conversation with the chatbot (excluding qualification). Can be displayed in a table and in charts (except pie charts and matrices).
* **Average duration of auto chat conversations with qualification:** The average duration of a conversation with the chatbot (including qualification). Can be displayed in a table and in charts (except pie charts and matrices).
* **Average number of interactions per conversation:** The average number of interactions per conversation. Can be displayed in a table and in charts (except pie charts and matrices).
* **Breakdown of conversations by qualification:** Distribution of conversations according to their qualification (direct response, livechat, failed, etc.). Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of completed questionnaires:** The number of questionnaires completed at the end of a conversation. Can be displayed in a table and in charts (except pie charts and matrices).
* **Operator questionnaire completion duration:** The average time to complete the questionnaire sent by the operator at the end of a Livechat conversation. Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of abandoned conversations:** Number of conversations where the user leaves the site (closes the tab or browser) while still waiting for an operator’s reply (before the operator has sent any message). This indicator does not include users leaving the waiting queue, which are counted separately. Calculation starts at the beginning of the livechat escalation—when the conversation appears on the operator’s dashboard—and abandons are distributed in 10-second intervals, from 0 to 90 seconds, and beyond. If the operator has sent a message, the user’s departure is **not** considered as an abandonment in this statistic. Can be displayed in a table and all types of charts.
* **Automatic conversation satisfaction:** Satisfaction data for conversations with the automatic chatbot.
* **DialogsCallbackRequestsCount:** Number of callback requests.
* **DialogsCallbackDurationBeforeOperatorAnswersThePhone:** Average time before the operator answers the callback.
* **DialogsCallbackDurationEndCallAndRemoveDialog:** Average time between the end of a call and the deletion of the conversation.
* **DialogsCallbackDurationBetweenConnectedAndCompeted:** Average duration of a call.
* **DialogsCallbackRatioRequestsAnswer:** Ratio of handled callback requests to total callback requests.

### Interaction

* **Number of interactions:** Total number of interactions. Can be displayed in a table and in charts (except pie charts and matrices).
* **EndUserInteractionsCount:** Number of user interactions. Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of business interactions:** Total number of business interactions. Can be displayed in a table and in charts (except pie charts and matrices).
* **Breakdown of interactions by response type:** Distribution of interactions by type of response. Can be displayed in a table and in charts (except matrices).
* **Number of interactions per LLM category:** this section displays the number of interactions classified by the [LLM's automated categorization](/preferences/bot/automated-interaction-categorization). This data can be presented in a table or in various charts (excluding matrices).

### Questionnaire

* **Number of completed questionnaires:** Total number of completed questionnaires. Can be displayed in a table and all types of charts.
* **Number of completed questionnaire fields:** Total number of completed questionnaire fields. Can be displayed in a table and only in matrices.

### Satisfaction

* **Conversation satisfaction:** Types of satisfaction collected from conversations. Can be displayed in a table and in charts (except matrices).
* **Total number of feedback:** Total number of feedback submitted by users. Can be displayed in a table and in charts (except matrices).
* **Number of knowledge feedback per conversation:** Number of feedback items on knowledge per conversation. Can only be displayed in a table.
* **Number of negative knowledge feedback per conversation:** Number of negative feedback items on knowledge per conversation. Can be displayed in a table and only in matrices.
* **TagsFeedback:** Types of satisfaction collected from conversations for each Channels configuration. Can only be displayed in a table.

### Knowledge

* **Number of conversations using a knowledge (linked to the entry point):** Total number of conversations for each knowledge. Can only be displayed in a table.

### Topics

* **Number of conversations using a tag:** Can be displayed in a table and in charts (except matrices).

### Actions

* **Number of actions:** Number of times knowledge was used. Can be displayed in a table and in charts (except matrices).

### Links

* **Number of clicked links:** Number of clicked links. Can be displayed in a table and only in matrices.
* **Number of suggested links:** Number of links suggested in knowledge. Can be displayed in a table and only in matrices.

### Visitors

* **Number of visitors:** Number of visitors (a visitor is identified as such for 24 hours via a cookie). Can be displayed in a table and in charts (except pie charts and matrices).

### Livechat

{% hint style="info" %}
How Livechat Indicators Work

The behavior of indicators varies depending on the option: "If checked, allows the conversation not to close at the end of the livechat, and if there is a re-escalation, redirects to the previous operator if available" located in your Livechat settings.

Triggering of Indicators:

* If the option is checked: Indicators are triggered only once per conversation, regardless of the number of interactions with Livechat.
* If the option is unchecked: Indicators are triggered for every new Livechat escalation within the same conversation.
  {% endhint %}

{% hint style="info" %}
Conversation Duration Management:

It is important to note that durations are not cumulative. In the case of a conversation containing multiple Livechat sessions, only the duration of the final escalation is included in the statistics.
{% endhint %}

* **Number of conversations with Livechat:** Number of Livechat conversations. Can be displayed in a table and in charts (except pie charts and matrices).
* **Average duration of Livechat conversations (without questionnaire completed):** Average duration of a Livechat conversation (excluding questionnaire completion by the user). Can be displayed in a table and in charts (except pie charts and matrices).
* **Duration of Livechat conversations (with questionnaire completed):** Average duration of a Livechat conversation (including questionnaire completion). Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of answered Livechat conversations:** Number of successful Livechat escalations. Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of answered conversations with at least one manual operator reply:** Number of successful Livechat escalations where the operator provided at least one manual reply (i.e., did not use only predefined responses). Can be displayed in a table and in charts (except pie charts and matrices).
* **Duration between escalation and first reply:** Average time between escalation and the operator’s first reply. This includes queue time and the number of times the previous operator waited for a transferred dialog. The Livechat automatic welcome message counts as a reply. Can be displayed in a table and in charts (except pie charts and matrices).
* **Breakdown of duration between escalation and first reply:** Indicator for distributing the time needed for Livechat escalation and the operator’s first reply. Can be displayed in a table and in all types of charts.
* **Duration between escalation and conversation opening (operator answered):** Average time between escalation and opening of the Livechat conversation. Can be displayed in a table and in charts (except pie charts and matrices).
* **Distribution of Livechat opportunities:** Number of Livechat opportunities triggered via knowledge. Can be displayed in a table and in charts (except matrices).

{% hint style="warning" %}
Only the latest opportunity is taken into account in the statistics when the re-escalation parameter is enabled.
{% endhint %}

* **Duration in seconds with at least one operator available:** Time during which at least one operator was available (in seconds). Can be displayed in a table and in charts (except pie charts).

### Livechat Operator

* **Duration between receiving the conversation and first reply:** Average time between the operator receiving the conversation and their first reply (Livechat automatic welcome message counts as a reply). Can be displayed in a table and in charts (except pie charts and matrices).
* **Duration between receiving the conversation and first manual reply:** Average time between receiving the conversation and the first manual reply from the operator (the Livechat automatic welcome message is ignored). Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of operator replies immediately following the user's question:** Number of replies provided by the operator right after a user's message. Can be displayed in a table and in charts (except pie charts and matrices).
* **Average response time:** Average time between each user's question and the operator's reply (in seconds). Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of supervisor help requests:** Total number of help requests sent to the supervisor. Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of manual transfers:** Number of manual transfers during Livechat conversations. Can be displayed in a table and only in matrices.
* **Number of conversations automatically transferred after the operator did not answer:** Average time between when a user asks a question and when the operator responds (in seconds). Can be displayed in a table and in all types of charts.
* **Duration by operator status:** Duration spent by an operator in a particular status (On the phone, Busy, etc.). Can be displayed in a table and in all types of charts.
* **Max number of connected operators:** Maximum number of connected operators. Can be displayed in a table and in charts (except pie charts).
* **Connection time (available):** Operator's connection time. Can be displayed in a table and in charts (except pie charts).
* **Operator occupancy rate:** Operator’s occupancy rate (duration with at least one conversation / duration connected as available). Can be displayed in a table and in charts (except pie charts and matrices).
* **Simultaneity rate:** Average simultaneity rate of conversations handled by the operator. Can be displayed in a table and in charts (except pie charts and matrices).
* **Breakdown of simultaneity rate:** Distribution of the simultaneity rate by number of conversations. Can be displayed in a table and in charts (except pie charts and matrices).
* **Operator productivity rate:** Operator’s productivity rate. Calculated as: the number of conversations opened by the operator, divided by their connection time (in seconds), multiplied by 3600 to get a value per hour. Can be displayed in a table and in charts (except pie charts and matrices).

### Waiting Queues

* **Number of conversations that went through the waiting queue:** Number of conversations that were preceded by a waiting queue before being assigned. Can be displayed in a table and in charts (except pie charts and matrices).
* **Time spent in the waiting queue:** Average time a user spends in the waiting queue (in seconds). Can be displayed in a table and in charts (except pie charts and matrices).
* **Number of people who left the waiting queue:** Number of people who left the waiting queue. Can be displayed in a table and in charts (except pie charts and matrices).
* **Waiting queue capacity:** Total capacity of the waiting queue. Can be displayed in a table and in charts (except pie charts).
* **Waiting queue occupancy rate:** Waiting queue occupancy rate. Can be displayed in a table and in charts (except pie charts and matrices).

### InternautEvent

* **TeaserClickCount:** Number of teaser clicks. Can be displayed in a table and in charts (except pie charts).

### ExternalMatcher

* **ExternalMatcherCallCount** : counts the number of times the matcher is called (per interaction). Can be displayed in a table and in graphs (excluding pie charts and matrices).
* **ExternalMatcherUsageCount** : counts the results of matcher calls that are effectively used to provide the answer. Can be displayed in a table and only in matrices.

{% hint style="info" %}
**Clarification of the None value in ExternalMatcherUsageCount**

The **None** value in the results of this indicator corresponds to a matcher call result that was neither selected nor used to generate the final response.

To align the results more strictly with the definition and exclude the **None** status, it is possible to apply two restrictions on the **ExternalMatcherResultUsage** variable: one on **DirectMatch** and one on `Reword`.
{% endhint %}

* **ExternalMatcherPotentialUsageCount** : counts the results of all matcher calls. Can be displayed in a table and only in matrices.
* **ExternalMatcherTopScoreDistribution** : distribution of matcher call results based on the score obtained. Can be displayed in a table and only in matrices.
* **ExternalMatcherTopKnowledgeCount** : number of times the matcher returned a top knowledge item. Can be displayed in a table and only in matrices.
* **ExternalMatcherProcessDuration** : average time in milliseconds spent by the matcher to provide an answer. Can be displayed in a table and in graphs (excluding pie charts and matrices).
* **ExternalMatcherResponseCodeDistribution** : distribution of matcher call results based on the HTTP return code. Can be displayed in a table and only in matrices.

{% hint style="info" %}
**Volume Measured by Indicators**

The **ExternalMatcher** indicators measure the volume of **interactions**. They do not represent the volume of conversations. A single conversation can encompass multiple interactions.
{% endhint %}

### Technical indicators

* **Average dialogue engine calculation time:** Average calculation time of the dialogue engine (in milliseconds). Can be displayed in a table and in charts (except pie charts and matrices).
* **Average servlet calculation time:** Average calculation time of the servlet (in milliseconds). Can be displayed in a table and in charts (except pie charts and matrices).

{% hint style="info" %}
**Servlet**: time elapsed between the arrival of a request on the Dydu API and its response, excluding any network delays upstream or downstream.
{% endhint %}

* **Maximum dialogue engine calculation time:** Maximum execution time of the dialogue engine (in milliseconds). Can be displayed in a table and in charts (except pie charts and matrices).
* **Maximum servlet calculation time:** Maximum response time of the servlet. Can be displayed in a table and in charts (except pie charts and matrices).

### **Duration**

* **Average duration between escalation and conversation opening (operator answered):** Average duration between escalation and opening of the conversation (when the operator takes charge).

### **Cobrowsing**

* **Number of conversations with cobrowsing:** Number of initiated cobrowsing conversations.
* **Number of cobrowsing errors:** Number of errors encountered during the initialization of a cobrowsing conversation.
* **Number of cobrowsing requests sent:** Number of cobrowsing requests sent.
* **Number of cobrowsing requests accepted:** Number of cobrowsing requests accepted.
* **Number of cobrowsing requests refused:** Number of cobrowsing requests refused.

## Codes corresponding to converters

```
 // dialogs
    DialogsCount (Dialogs, Chart1D, Number of dialogs, Dialog, Count),
    DialogsChatDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCount), "Average chat duration of dialog in seconds (with automatic chat) (without survey completion)", DurationS, Dialog, Duration),
    DialogsDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCount), "Average duration of dialog in seconds (with automatic chat) (with survey completion)", DurationS, Dialog, Duration),
    DialogsWithLivechatCount (Dialogs, Chart1D, Number of dialogs with livechat, Dialog, Count),
    DialogsLivechatDurationWithoutChatAutoWithoutSurvey (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsWithLivechatCount), "Average duration of dialog in seconds (without automatic chat)", DurationS, Dialog, Duration),
    DialogsLivechatDurationWithoutChatAutoWithSurvey (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsWithLivechatCount), "Average duration of dialogue in seconds (without automatic chat) (with survey completion)", DurationS, Dialog, Duration),
    DialogsEscalationToDialogOpeningCount (Dialogs, Chart1D, Number of dialogs picked, Dialog, Count),
    DialogsEscalationToDialogOpeningWithOperatorAnswerCount (Dialogs, Chart1D, Dialog, Count, Dialog, Count),
    DialogsEscalationToFirstOperatorDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", DialogsEscalationToDialogOpeningCount), "Average duration between escalation and first operator answer." It considers AutoHello as an answer. ", DurationS, Dialog, Duration),
    DialogsEscalationToFirstOperatorDurationDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EMDLabelPickupDurationDistribution.values()), "TO BE REIMPLEMENTED", Dialog, Distribution, Duration),
    DialogsEscalationToDialogOpeningDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsEscalationToDialogOpeningCount), "Average Duration between escalation and dialog opening", DurationS, Dialog, Duration),
    DialogsWaitingQueueCount (Dialogs, Chart1D, Dialog, WaitingQueue, Count)
    DialogsWaitingQueueDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsWaitingQueueCount), "Average duration in the waiting queue in seconds", DurationS, Dialog, WaitingQueue, Duration),
    DialogsWaitingQueueDropOutCount (Dialogs, Chart1D, Dialog, WaitingQueue, Count)
    DialogsFeedback (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EMDLabelFeedbackDistribution.values ()), "Last interaction feedback provided", Dialog, Feedback),
    DialogsLengthDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EMDLabelDialogsLengthDistribution.values ()), "Distribution depending on the number of interactions in the dialog", Dialog, Distribution),
    DialogsQualificationDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EDialogType.values ()), "Distribution depending on the dialog qualification", Dialog, Distribution),
    DialogsSurveyFillingCount (Dialogs, Chart1D, "(INTERNAL) Dialog, Count, Dialog, Count),
    DialogsSurveyFillingDuration (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", DialogsSurveyFillingCount), "Average duration to fill survey for operators. ,
    DialogsOperatorResponseTime (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", DialogsEscalationToDialogOpeningCount), "Average duration between the time and the operator. present. ", Dialog, Duration),
    DialogsOperatorManualResponseTime (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", DialogsEscalationToDialogOpeningCount), "Auto Hello is ignored.", Dialog , Duration),
    InteractionsOperatorAnswerDirectlyAfterInternautQuestionCount (Dialogs, Chart1D, "(INTERNAL) Number of interactions from the operator that are directly after an internaut question", Interaction, Count),
    DialogsOperatorResponseTimeBetweenInteractions (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("(C0 / C1 [LiveChatOperator]) / 1000", InteractionsOperatorAnswerDirectlyAfterInternautQuestionCount), "Average duration between the time and the time the operator answers in seconds", Dialog, Duration) ,
    DialogsFastAbandonDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EMDLabelFastAbandonDistribution.values ()), "Distribution of dialogs abandoned by the internaut before 90 seconds", Dialog, Distribution, Duration),

    DialogsCallbackRequestsCount (Dialogs, Chart1D, Number of callback request, Dialog, Count),
    DialogsCallbackDurationBeforeOperatorAnswersThePhone (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCallbackRequestsCount), "Average duration before the operator answers the phone", DurationS, Dialog, Duration),
    DialogsCallbackDurationEndCallAndRemoveDialog (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCallbackRequestsCount), "Average duration before dialog is removed after the end of the call", DurationS, Dialog, Duration),
    DialogsCallbackDurationBetweenConnectedAndCompleted (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCallbackRequestsCount), "Average duration of a call", DurationS, Dialog, Duration),
    DialogsCallbackRatioRequestsAnswer (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", DialogsCallbackRequestsCount), "Ratio between callback answered and total callback requests", Percent, Dialog),

    // Livechat
    LiveChatOpportunitiesDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EDialogOpportunityType.values ()), "Livechat opportunities distribution of the dialogs", Dialog, Distribution, LiveChat),
    OperatorHelpRequestCount (Dialogs, Chart1D, "Amount of help requested to the supervisor", Operator, Count, LiveChat),
    ManualTransfersCount (Dialogs, Chart3D, new MDLabelSupplierForOperators (), new MDLabelSupplierForDistribution (EDialogTransferType.values ()), "Number of manual transfers made towards an operator or a competency.", Operator, Count, LiveChat),
    LiveChatAvailability (TimelineOperators, Chart1D, "Duration in seconds with at least one available operator", LiveChat, Duration),
    OperatorNotPickedDialogsCount (Dialogs, Chart2D, new MDLabelSupplierForOperators (), "Number of dialogs automatically transferred from the operator did not pick them.", Operator, Count),

    // interactions
    InteractionsCount (Dialogs, Chart1D, Number of Interactions, Interaction, Count),
    EndUserInteractionsCount (Dialogs, Chart1D, Number of End User Interactions, Interaction, Count),
    BusinessInteractionsCount (Dialogs, Chart1D, Number of Business Interactions, Interaction, Count),
    InteractionsFeedback (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EMDLabelFeedbackDistribution.values ()), "All interaction feedbacks count", Interaction, Feedback),
    InteractionsDurationRuntime (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", InteractionsCount), "Average runtime duration in milliseconds", DurationMS, Interaction, Duration),
    InteractionsDurationExtern (Dialogs, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1", InteractionsCount), "Average servlet duration in milliseconds", DurationMS, Interaction, Duration),
    InteractionsMaxDurationRuntime (Dialogs, Chart1D, Max, "Max runtime duration in milliseconds", DurationMS, Interaction, Duration),
    InteractionsMaxDurationExtern (Dialogs, Chart1D, Max, "Max servlet duration in milliseconds", DurationMS, Interaction, Duration),
    InteractionsResponseDistribution (Dialogs, Chart2D, new MDLabelSupplierForDistribution (EResponse.values ()), new EResponseMDDataTreeSupplier (), "Interaction distribution depending on the EResponse", Interaction, Response),

    // cobrowsing
    CobrowsingSessionCount (Dialogs, Chart1D, Number of Cobrowsing Session Successfully Initialized, Cobrowsing),
    CobrowsingErrorCount (Dialogs, Chart1D, "Number of failed cobrowing session due to initialization error", Cobrowsing),
    CobrowsingSentRequestCount (Dialogs, Chart1D, Number of Cobrowsing Request Sent, Cobrowsing),
    CobrowsingAcceptedRequestCount (Dialogs, Chart1D, Number of cobrowsing request accepted, Cobrowsing),
    CobrowsingDeclinedRequestCount (Dialogs, Chart1D, Number of cobrowsing request declined, Cobrowsing),

    // surveys
    / **
     * instanceid=the survey ID completed
     * /
    SurveyAnswersCount (SurveyAnswers, Chart2D, MDLabelSupplierForSurveyAnswers (), Number of Survey Completed, Survey, Count),

    // Knowledge articles
    KnowledgeCount (Dialogs, Chart3D, new MDLabelSupplierForDistribution (EConditionType.values ()),
            new MDLabelSupplierForKnowledges (), "Number of dialogs using a knowledge article (associated with the entry point)", Knowledge, Count),
    KnowledgeFeedback (Dialogs, Chart3D, new MDLabelSupplierForKnowledges (),
            new MDLabelSupplierForDistribution (EMDLabelFeedbackDistribution.values ()),
            "Knowledge articles feedback by dialog (associated with the entry point)", Feedback, Count),
    KnowledgeNegativeFeedbackChoice (Dialogs, Chart3D, new MDLabelSupplierForKnowledges (),
            new MDLabelSupplierForDistribution (EMDLabelNegativeFeedbackChoiceDistribution.values ()),
            "Knowledge articles negative feedback choice by dialog (associated with the entry point)", Feedback, Count),

    // Tags
    TagsCount (Dialogs, Chart2D, new MDLabelSupplierForTags (), new TagsMDDataTreeSupplier (), "Number of dialogs using a tag", Tag, Count),

    // Actions
    ActionsCount (Dialogs, Chart2D, new MDLabelSupplierForActions (), "Action uses", Action, Count),

    // Links
    / **
     * instanceid1 = predefinedurlid
     * instanceid2 = actionid
     * /
    ClickedLinksCount (Dialogs, Chart3D, new MDLabelSupplierForPredefinedLinks (), new MDLabelSupplierForClickActions (), Number of links clicked, Link, Count)
    SuggestedLinksCount (Dialogs, Chart3D, new MDLabelSupplierForPredefinedLinks (), new MDLabelSupplierForClickActions (), "Number of links suggested", Link, Count),

    / **
     * instanceid1 = root field id
     * instanceid2 = child field id
     * /
    SurveyAnswersFieldsCount (SurveyAnswers, Chart3D, new MDLabelSupplierForSurveyFieldAnswers (), new MDLabelSupplierForSurveyFieldAnswers (), "Number of survey answers completed", Survey, Count),

    // status
    / **
     * instanceid=the status.ordinal ()
     * /
    OperatorStatusDuration (TimelineOperators, Chart2D, new MDLabelSupplierForDistribution (ELiveChatOperatorStatus.values ()), "Duration distribution on statuses in seconds", DurationS, Operator, Duration),
    OperatorConnectedMax (TimelineOperators, Chart1D, Max, "Maximum number of operators connected", Operator),
    OperatorConnectedDuration (TimelineOperators, Chart1D, new MDLabelSupplierForOperators (), "Operator connected duration with an available status", DurationS, Operator, Duration),
    OperatorOccupancyRate (TimelineOperators, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", OperatorConnectedDuration), "Operator occupancy rate: [duration with at least one dialog] / [duration connected with an available status]", Operator),
    OperatorSimultaneityRate (TimelineOperators, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", OperatorConnectedDuration), "OperatorConnectedDuration,"
    OperatorSimultaneityRateDistribution (TimelineOperators, Chart2D, new MDLabelSupplierForDialogsByOperatorCount (), new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatOperator]", OperatorConnectedDuration), "OperatorConnectedDuration,"
    OperatorProductivityRate (TimelineOperators, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C1 / C2 * 3600", DialogsEscalationToDialogOpeningCount, OperatorConnectedDuration), "Operator productivity rate", Operator),

    // Waiting queue
    WaitingQueueCapacity (TimelineWaitingQueues, Chart1D, "Capacity of waiting queue", WaitingQueue, Count),
    WaitingQueueOccupancyRate (TimelineWaitingQueues, Chart1D, new ChartableMultiDimensionsConverterAutoCompute ("C0 / C1 [LiveChatCompetency]", WaitingQueueCapacity), "Waiting queue occupancy rate", WaitingQueue, Count),

    // welcomecall
    WelcomeCallCount (WelcomeCalls, Chart1D, "Number of visitors, 24 hour via a cookie.", WelcomeCall, Count),

    // Internaut events
    TeaserClickCount (InternautEvents, Chart1D, Number of clicks on teaser, InternautEvent, Count);
```


# Livechat

During a chat with the chatbot, the end user may need to escalate to live chat under certain conditions. These must be defined by the bot manager in the knowledge base. This could be, for example, when:

* the end user explicitly requests it,
* the end user has provided negative feedback, or a specific reason for dissatisfaction,
* too many sentences have been misunderstood by the chatbot,
* a response requires clarification,
* a thematic question is addressed;

Live chat escalation and its conditions can be managed through contextual conditions and GUI actions. In the event of an escalation, the end user remains in the same chat window (the chatbox), and the history of conversations with the chatbot is preserved. This history is also transmitted to the operator.


# Enable livechat

## From chatbot to human operator

Dydu offers a livechat solution where the chatbot can switch to a human operator. When creating your bot, Livechat mode is not enabled. You can activate it by following the steps below.

{% hint style="warning" %}
Activation of livechat mode is subject to additional billing. If you want to activate this option, please contact your dydu contact
{% endhint %}

<figure><img src="/files/bNx7auKT05igKKL9gI6a" alt=""><figcaption></figcaption></figure>

Add Livechat to the sidebar :

a. Go to Preferences > bot > general

b. Select the livechat escalation type

C. Scroll down and select "Update"

Now you can see "Livechat" on your sidebar.

<figure><img src="/files/HxPfNEjQXH3Po2kuhaxF" alt=""><figcaption></figcaption></figure>


# Knowledge base setup

## Configuration when explicitly requested by the end user:

1. Create your **context condition** to check operator availability. To do this, go to the **Contents > Context Conditions page**.
2. Fill in the fields as shown in the example below:

<figure><img src="/files/0O0pHXLr3YyrsFOMhwJF" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
It is also possible to check if the Livechat is open by following the operating hours configured in **Preferences** > **Livechat Settings** > **General**.

To do this, you can use the **LiveChatOpen()** condition, which only checks if the Livechat is open.

On the other hand, the **LiveChatAvailable()** condition checks both if the Livechat is open and if an operator is available.
{% endhint %}

3. Go to **Contents > Knowledge** and create a knowledge of the type "answer to a question".

Example: "I want to speak to an advisor."

<figure><img src="/files/aJcN9nnD7DKsWgjl7K6k" alt="" width="407"><figcaption></figcaption></figure>

4. Insert a context condition between the user's question and the response, and select the condition you created in step 1.

<figure><img src="/files/uNSWDsTnxLRdr1rEZsUF" alt="" width="272"><figcaption></figcaption></figure>

5. Click on Update.
6. Complete the success and failure responses:

Example of success: "I'll connect you with an advisor."\
Example of failure: "Unfortunately, no advisors are available."

<figure><img src="/files/ug8CmcHFsXg0FzLgaKl4" alt="" width="563"><figcaption></figcaption></figure>

7. Edit the response to display when an operator is available (the branch on the left), then click on **More options > Other options > Set GUI action** and select **Connect Livechat**.

<figure><img src="/files/vO4nQSj1ndCSTx9vkfVd" alt="" width="307"><figcaption></figcaption></figure>

<figure><img src="/files/Sjm2J58BlrAhgeQhiKJu" alt="" width="315"><figcaption></figcaption></figure>

<figure><img src="/files/nx50fyL1q9lobnwqRuxY" alt="" width="305"><figcaption></figcaption></figure>

8. Click on **Update** to save the response. Your Livechat escalation is now effective.

If an operator is available, the user is directed to the branch on the left and connected with an operator. Otherwise, the user will receive the response provided in the branch on the right.

It's also possible to redirect the user to an operator with specific expertise. Once you have defined skills for each operator, you can choose to assign each skill to a knowledge item. The skills will appear in the list of context conditions when you create your responses.

{% hint style="info" %}
Note: you have the ability to create predefined answers for your Livechat sessions. To learn more, click [here](https://dev.docs.dydu.ai/docs/Knowledge/Types/predefined_answer).
{% endhint %}


# DYDU Livechat


# Overview of interfaces

## Mark the escalation to Livechat on the chatbox from the Channels menu.

It is possible to discern within the chatbox whether the user is conversing with a human operator or your bot.&#x20;

To enable this functionality, simply navigate to the "**Channels**" section, then access the "**Display options for dialog bubbles**" interface of your bot, and activate the "**Livechat**" option.&#x20;

From this option, **you can also modify the displayed avatar**.

<figure><img src="/files/HXWRZFFUuHKun9ABvFiR" alt=""><figcaption></figcaption></figure>

Once this functionality is implemented, during the user's transition to Livechat, they will see a distinct avatar appear for each operator response, different from that of the bot.

<figure><img src="/files/BvgpSDJJOCfQlslggWng" alt=""><figcaption></figcaption></figure>

## **Leave the Livechat from the chatbox**

* When a user is engaged in a livechat conversation and wants to end it, they simply need to click the **"Leave Livechat"** button at the top of the chatbox.

<figure><img src="/files/MFnxkdJNZubyljOYNljr" alt="" width="384"><figcaption></figcaption></figure>

* A **message** will then be displayed, informing the user that they have **left the Livechat conversation**.

<figure><img src="/files/BTxJoeCcVYSpWsOtQenR" alt="" width="384"><figcaption></figcaption></figure>

* If, during a livechat conversation, the user decides to close the chatbox by clicking the cross, a **pop-up window** will appear to inform them that the livechat conversation will end.

<figure><img src="/files/0rbLdI7Vhpo9y632ZY0Z" alt="" width="385"><figcaption></figcaption></figure>


# Operator Interface

## Operator Interface:

Each livechat operator has an interface allowing him to manage his availability (via his status) and the conversations he receives.

<figure><img src="/files/pgRXXox7SWU2TtEzewK7" alt=""><figcaption></figcaption></figure>

### **1-Operator statuses:**

<figure><img src="/files/ccbasXBH6z1kyx5LuwCA" alt=""><figcaption></figcaption></figure>

Operators have the ability to configure their status. Depending on the latter, new conversations may or may not be transmitted to them. Here is the list of available articles:

* **Connected:** allows you to receive new dialogs;
* **On break:** no assignment of new dialogs;
* **Training:** no assignment of new dialogs;
* **Phone:** no assignment of new dialogs;
* **Talking with supervisor:** no assignment of new dialogs;
* **No new dialog:** when the operator is running a complicated dialog, he can set this status to not be assigned new dialogs;
* **Looking for information:** when the operator switches to this status, the user sees that they are looking for information. If the operator takes time to get back to the dialog, the user is sent a notification to indicate that the operator is still looking for information.

### **2-Livechat Interface Manager:**

* This icon <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAmCAIAAADfv4UOAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAABMxJREFUWIXtmF9MWlccx38X5I9w8Q8dUsXOfwPUbawpVbdq3JI1UYzrEqNocI9mf3zQZGZLnD5g5oNJX7eXpiZkOqksYWvMsmi1dYptMcO2Tqd0ijZ1KlNRAfHKH9nDdQa53gtXTebDvk/n/M73nPPhcH/3nHOR/Px8OAdi/NcABzovHDEn61ZYWKhUKuVyOYqi2dnZeHB2dtbtdlutVovFMjY2RmtAhNbzgaKoWq3WaDQCgYDa6XK5enp6DAaD2+0+Yw6VStXU1BSRIIxGq9WaTKaITqZEIolmxIaGhoaGBg6HEz0EAHA4nJKSEh6PZzabz4CjpaWlqqqKFkGoFAqFWCweHR09FUdjY2NlZeWJIXDJ5XI+n0+xKhHyRaVSaTQaCoN9B7veMzz199bxzQH/1Cdlr4uFAKDRaCwWC9mzQvX+QFG0qamJwmBZcaR0DpBCBPfBsYxD4Gpra0NRlDaHWq2myA791OLV74b2XR6S9iCsLwOLFRrC0542B9k/EggGm4eeau4+Bn+AtPPmKvi9YsKvr62tpcdRVFR07GJsYb4Pe0c6Hs+SEgDA9gZguwAgE8aHtaAoWlRURINDqVQSg7Prziu6ez/Pr1BB7DjBs40XZaKEKEcmzZfDXeNQv8wtl/30CPZ8VBB7u+BcP6xdThUTLQqFggZHampqaPXmw5kvHzyjIgCAgA8cR5bqWnoy0SUUColBUo6kpKTQ6hfXcp5an/c8s1JxsHlHqgzkskSEF/cC++NLG7YtF+YPCNgsYlca+37ZW9k91mW8nJfyysf5uVwW0zhl+3HmxYGDxYSQLP7+o3IGggDAo5frt57MlUtTckUJF3hsh8d7Oo6cDODEQjB4KRH99bOKJadnE/Maldk1d+73/vECAK7wkYnNA3Pre0pN/psAsOTydE0t3P6ggIkgeFPmMc8ueb44HJthkcRYdsGrYohhXc+UxLKYqh9GC3T37DtYqTwNYlgQw9r27OLOPM7+p++8gZdvPpz5+l3FIQQArK2tEacjXQ+7fVUoTAwLqrIk5pXNB385AsHgrRLl4rY7ic/9bXUDGAwAmHc4AeBGbpY8Iy1OlAQAf2644jmsC7wjpwWXy0WcjnQ9JicnicHS1ySAIIubrlL9MAAokhK/Gnry7cQ8IAgwAPyBgksX9XUV78vSbk/MP99wto3+/vnbOWGDTE9PE0cmXY/x8fHq6uqw4FWJEGI5sOsdXLAPLtj/DSMAcDE2hi+Mv1uv5rFZJVnJe/7A/QX7N6V5Cdzw7BgeHqbBYTKZMAzjcrmhQSaC1KSL78y8JPozuCxdfY1YcLCh3JCnEj0A4PV6j936qfKlu7u7rq4uLKivKNRT9Imk3t7eY+NU+61er8cw7BSThsvr9ep0Otocbre7o6PjDDm0Wi3ZNSLC+XRubk4kEhH3vBPIaDR2dXWRtUY+J5tMJqlUmp6efhoIs9nc2tpKYYjq3jA4OJicnCyTyU4G0dfX19zcTO2J9h41MjKyuLhYXFzMZDKjJ/D7/e3t7Z2dnRGd0XIAgM1mMxgMgrg4qVTKYET4UBAIBPr7++vr6499exJF7559qPLycpVKlZmZhaJ8NpuNB30+n8fjsdlsAwMDRqOR1oAn5DhznZfvMP9zHNU/lqKrzcOYNjgAAAAASUVORK5CYII=" alt="" data-size="line"> allows you to access the Livechat manager interface. Note: this interface is only accessible to users with Livechat manager rights.
* This icon <img src="https://docs.dydu.ai/~gitbook/image?url=https%3A%2F%2F1101559743-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FgMQl4578l4DzuAEhrEii%252Fuploads%252F4abSjrTEw83vFjipbrqb%252Fio02.png%3Falt%3Dmedia%26token%3D508906bb-328c-4a44-83b8-d03722864b61&#x26;width=300&#x26;dpr=4&#x26;quality=100&#x26;sign=565fe2e&#x26;sv=1" alt="" data-size="line"> indicates when a new conversation is opened.

## Dialogs tabs:

<figure><img src="/files/W5J14om2HGbmIQBPg9y2" alt=""><figcaption></figcaption></figure>

* When the operator is able to receive a new conversation, a notification is sent to his screen and the conversation is displayed directly on his console as a new tab.
* A time is displayed in this tab. This indicates how long the user has been waiting for their conversation to be supported. To start the conversation, the operator clicks on the tab: the conversation is considered to be off-loaded. A welcome phrase can be sent automatically, if configured in **general sentences**. Until the conversation is unhooked, the representative tab continues to flash at the top of the bar. The white cross closes the dialog.
* Once the conversation is unlocked, the operator accesses the entire end-user chat with the chatbot.
* The operator has the ability to see how many tabs the livechat interface is open on simultaneously thanks to the icon displayed at the top right next to their name (see image below).

<figure><img src="/files/lJoeu34YwoFuHtg2XhbH" alt=""><figcaption></figcaption></figure>

* The operator is notified when the user has read their messages through a checkmark that appears on the message sent from the operator's console.

<figure><img src="/files/h4dLSqdpHO8nBGCxZsrK" alt=""><figcaption></figcaption></figure>

* If the operator manages multiple conversations on their interface, a specific color is assigned to its border to distinguish each conversation.

<figure><img src="/files/wD6yWICFa82YhkSXrxHO" alt=""><figcaption></figcaption></figure>

* In the operator's interface, the response bubble takes on the color of the interface's border when the user is typing.

<figure><img src="/files/RvXZL40tlEVsmqgUNJwH" alt=""><figcaption></figcaption></figure>

### **1-Knowledge search:**

From its console, the operator can automatically search for a response in the bot’s knowledge base via the “Search for knowledge” tab. He can consult the answer for each knowledge before deciding to send it. With a simple click on the desired knowledge, the response is auto-completed in the operator’s response field.

<figure><img src="/files/JF149qQcNbnfMqSf9dwa" alt=""><figcaption></figcaption></figure>

It is also possible to automatically search for a knowledge from a user’s question by clicking on the magnifying glass next to the user’s question. From the console, predefined answers from the knowledge base are available directly (without having to search for them). The operator can use them by clicking on them or using the keyboard shortcut that may be programmed.

The operator can share knowledge along with a sidebar and has the option to customize the display settings of the sidebar via the dialog window.

<figure><img src="/files/KGxdG9I5UbOQUFpKtGn6" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fkJXaUQOTG6sOsAFyFpB" alt=""><figcaption></figcaption></figure>

### **2-Connected operators:**

From its console, the operator can view the other connected operators. For each connected operator it is possible to: know their status, Know your occupancy rate: that is, how many conversations you are having compared to your total conversation capacity to know his competence, to transfer a conversation to him: when for example the end-user request requires a skill that another operator has.

### **3-User's information**

<figure><img src="/files/ui5SVcWmrVXubpiQq9zu" alt=""><figcaption></figcaption></figure>

For each livechat conversation, a sheet containing information about the end user is available from the console. The user information to be displayed is configurable. By default, the sheet shows the browser, the OS and the location of the end user. If the user is identified, it is possible to set the record to display the user’s first and last name. Ultimately, all the information retrieved about the user can be displayed in this sheet.

### 4-Dialog window

<figure><img src="/files/10HSWoEbkEQjjvWRO2kD" alt=""><figcaption></figcaption></figure>

The operator can request help via Internal message, which allows him to get in touch with a manager if they need help with a complex problem:

The operator can print the dialog, send the dialog by email, ark the dialog as "Important" <img src="/files/D7TQINuYuA7Md9zCUeco" alt="" data-size="line"> . The ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAdCAIAAACrPpLuAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAxdJREFUSIm1lk1ME0EUx9/OzrC7hVI+NAoxJgZ60AShpIGEGBPAM17EgwkmeGn0KgcTMUFPJhpPeAHDVTlgggc5a/RAqzQxKYjEEFJLAklbcGE329nZ8bD9oF/bD/WdZt/s+//2zbw3OwLnHP6z4X+ism/w17up4AFLpHgrEQZaxJudpFNG9qxQTR6UUkqpZVmWZdkehBBCiBBCCPl6yJ78MDSWp6OIwrRXGmgRKzA454ZhpFIpB/xeCu5vY51xABhuxx8SppXRkxDMXVY6ZYTKBZumqaqqMwAAluNIz2RAEDzySlJG0rDgzS4FgNIMwzA0TXNWty18LGTH336zK2342SXFQ9LO4AErzaCUGoZRDQAAEjQ3jlMOABeb0IMuKT2b4lBcV4wxXdeLtYLB0NLSUiQS0TTN7XaPjAwHAgFZltsI7GeWs5UIAPD9yHr6M/2JpxqEEnmUy2BhYSEUCtkLqKrq8vK72dmXANDfmCuZvmbxc4JNreuHNO30F9cV51xV1ZKMcDi8trY2OnqNc2tm5nE0GpUkaWXl/V4KpraxXbhX2/GnUnWVt1aU0mJ123w+n8/ns8eDgwPRaNTO+EwDTJ1jz3+JGuMf42b2fbs/7DaslnEy10hkHQA6Os7ant5G/uKC+TYuhI9RkkIrgf4muHVezvZ5HoMxVpGxuLi4sbEBAGNj17PO0w0Q6OAAufBmObfTZXuwpIXD4fn5VwAwNDQ0Pn6jyqjaGHNz85xzr9c7Pf0QlT8j6mckk8nNzU0AuHfvrizL1Qfm7YcgOB2RjLHu7i4A6OnpcRYtSDFPVNM00zSLQmo2jLHL5cohC+YcImOx2OTknYmJ21tbWxUZJx9rYIRCX3Z2dmKx2OrqqjODEJInmwdECGNcbrn6+no9Ho9lWX6/3wGAMRYE4aSncJMtyzo6OnL+TGdzu90FjMLaRQgpilI3QFGUAkAJBgAQQiRJqgMgSVLBTthWtiFM06zyd2uby+UqVzIV7iW6rlfsGIxxySWqimEbY8w0TcZY8f1KFEWMsSiKzgpV3eH+0mo7d+uzP9KiZo/VMGMnAAAAAElFTkSuQmCC) icon allows you to send a survey to the user during the dialog. This survey will open on the user side in a sidebar. The operator can choose from a drop-down list the survey they want to send. The operator has also access to a toolbar to format its answers. It is also possible for him to add hyperlinks via the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAIAAAAigOL8AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAnJJREFUOI1jfPLxKwPFgIlyI0gy5fPNNVVZ7nb+7mENy65+IcuUzzdn55dNO/LbIjzciv38nMzKGRe/IUkzEhEuny9Pza9Ze0cmbPriMlPOP+/PTc3KWnxbNXNBR6gSC3Fu+flkGcIIjl8/X39jl06c0OLCc3vu/BcMTIxEmfLrzvLld1htuxaX6X19+OzZj7//GBgYGH59/c7AwMDGwsbKTpxbGNgY2LQdpW92x/sE52x6wgjxYPvRL8opaTrsUDWEw+X9nevP9vVWrbglEzZ9cZnaxY7EgjWPlGLmzi3Q5/j549XPf7hM+XxzTfvEhUeeMhjE9der7SytWXtHNqyrVPnR0SNrVh5+oRQ2fW6ZKcevH29+/PvHwMDAwMCCaQQkRsRtw7OsrZX2lZWsvSMTNn22/9Xi9ClXGeRtCuY2x+gjG8HAwMDw5ONXJPRie1u4sbGxf+epT/8/neyKMDY2Dujce+nG618/f7z48uvnv/////398eP7MxRdX5FDFyVSOW+vbF15WyZseofmyvTciSe+/Pvz9/frz9+efv7x5ieSK9B99Ova8oV3uG275pSZcv76+Vo8uHWFj6IK9/HCy79+2fNzsbL/+vUTRwygxPRvBgZGDia2Pz/f/Pj7j4FdUIzxWEd8xeFfynFp6uw4DEA3hU0rIl7ly+6SjP5zn6HBnFm55pFS2PQ5SYpMv/7gcggDRkx/vj4jq2LVQwnbMLN/hzYdfQFNF78griPWFAYGhs/3Vzd3zj3xnE3eJqW+OUYPPVKJM4WBgYGBnZ1dgI2ZheHfz1+/3mHECCbATHUMDAwMP3/+fIknGDAAdUpMACTqVl+Agd0vAAAAAElFTkSuQmCC) icon, to access the gallery (![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAIAAACkFJBSAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAYRJREFUOI3VlL9LAmEYx59HLHBwanBpa2wMh8YaamlpaHHpP5AObKiGFm9wSNoikDYRI5LjsB/+KIVqO4QKdDEu5eiH9mbYXRKcT8PRLd2pnRD08A4vD9/3w/d53y8v3r++w9DlGh4xEGUnEl6an11eXLg4EhxSTvbj2WxW1/V2ux2NbrdqVScUWZa/ZS4AUBTFCcXv95t7j8cz6Z+2lLl7IDrPytTMHKdp+Xze6/UGAgFwj1gq0faluzq/troRifY2a5TtROlkvFQqdT8GSpMtRRRFXdcLp8fOKTeXhUajgYi5XM5sqg+126uipd76dgVBICJErFQqny9Po2M+7bHOcZyqqrHYhMc33t/LW/1OkiREJCIAKJyfMbkaDK40m6zT6YTD4YEmEgQBEU2BKKZDoRBjDACIqFwuH+zt9qdkMhkAFxGaeW21WgCAaHRciURSvpZ6UYrioaZpP9GGEcMjEfE834uSSqUQEaBruYgIoItIjLGtzXXzlH12f1N/9Uv9N8oXo7my9MzARksAAAAASUVORK5CYII=)) or to import files via the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAASpJREFUOI3N1CFvhTAQAOAWlhAIeGZBTDDPAn5mfwD4IVgChv6AeZIZfsHM9Eg2jZipeQkkDHOIhYml7QTLyybo2+OZd6Lmrl/umvTwDj7QyaGcTpyZcrGW+HzvyrIcx1HX9TRNL6+utyiEkCiKwjCklGZZdv9QS5TViQAgCAIhhOu6juPAjm5RNE3r+55SijE2DIMx9vb6fLSCkNK2bdM0nHOMsRCiqqoNyk8sxHJuVxZIXnBA2d+XNHJA+T2FosgqZTkhxF7Z3gv6O5HkdWSKaZoAwDnvus6yLM750QpjX77vD8OQJInnebZtS5TVfySEmOeZEIIQwhgDgKTr1V7iOM7zfJomhBAAFEURRdFaMZZszJenx7quGWOqqsZxfHN7t0X5f5zTxvwGsxaJA75lCO0AAAAASUVORK5CYII=) icon. An operator can transfer a dialog if other operators are connected. Once these conditions are met, an ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAAAGXRFWHRTb2Z0d2FyZQBnbm9tZS1zY3JlZW5zaG907wO/PgAAAsNJREFUSInlVk9PE0EUfzO70+6ka0PkQlJFJA0eiPELaMA/gbvhoDfFGIKYwAkP8gnk5NUQExM9+gFEjeBB03goRk3ENKAGko2JpJRtt7OzO+Nht9uyXXYL1ZPv9ObNzO/33ps3bwZJKeFfitrlfoPJpe36q7KzacsBgq70qDdyqZOaEixA3UTwfte5vW79dPchnFDQoyF6vkdNJhBCcM4dx5FSCiE8I8YYIaSq6i+hjH+ytlwJANO95MkOrzWQ+jC8Ppfx4sAHQVuWZZomY8x13QDdm3JdlzG29KO21fA9heHZEO1rgBkCHm/bvkPt6Jxz0zQ553HZAXhbbervKs7l4+T5cOYMQZ7lZdmJJrBt27KseGhPNnirLgHgrK48zFPP8tWWEQS2bdfr9U7QAWCQNPVTBAHAZ9OdLfnODadQmEAI0Tk6AIxkmvqFrPpmx7n6pbrOfccvNaqoScAY6xwdAK71yn7Fd9MScP1bzWiUQh+GyVzK0/0yFUKYpnkoAgD4YMLsFuroHjDGEiNYW/tYKBQmJ28S0ky/weTT37BaRd85DBC4eAzf6qcRN7larbquG09QLBbn5+/l8/mFhfu5XC5yjaIomUym1eKfQetVipdSqTQ9fefF8nLkbHtf8COoVCqRG6ampgK9VrMMwwiGo6Mjc3NzIX8BIJvNtg4TuunGxuZBUysrq+Xy7uLig3iEBILBwdOBHhlB/HYIUrS3t5fYt71DBgBK6czdmfGxsfY1GGNd11stajCRWEWexFcRQihk8QlUVU0kQAhPTEyE7kEYTg3nvKub3C66rmO8r4H6A4xxjF8dCiEkhA6tzS6dTndJEInQJMAYU0qPjE4pbXcfQg8OIUTTtCOga5p2UIYjfhWc8w5fTU8opTHnF/1tEUIwxhLffUJIOp2OzEwCQUAT8y+KrJnDEfwVSXbhvyf4AwdQVFHKnTYqAAAAAElFTkSuQmCC) icon appears.

Click this button to transfer the current dialog. Then select the operator to whom the dialog will be transferred then leave him eventually a message if you wish. Click **Ok**.

The second operator, who recovers the dialog, will see a new tab with the symbol of an arrow to indicate that it is a transferred dialog.

## Access to the BMS from the operator interface

The livechat operator can access their account settings on the BMS by clicking on the icon ![](/files/JUJIPNkBaVslMRQHaO28).

<figure><img src="/files/m4m01bhKnnfJhg8OVAXh" alt=""><figcaption></figcaption></figure>

The displayed page contains only the [livechat settings](https://docs-en.dydu.ai/livechat/dydu-livechat/dydu-livechat-setup/account-parameters#livechat-parameters) that can be modified by an operator.

<figure><img src="/files/AsWqlJcranFODvDDKFys" alt=""><figcaption></figcaption></figure>


# Manager interface

Dydu Livechat offers the ability to define livechat managers. They have a dedicated interface that allows them to:

* See which operators are connected.
* View the number of connected operators.
* See the number of dialogs.
* View the total number of dialogs conducted throughout the day.
* Display the current conversations for each operator.
* Send messages directly to the operator.
* Send messages to the end user instead of the operator.

<figure><img src="/files/iFkLcU89uVYxaspC9Bvz" alt=""><figcaption></figcaption></figure>

* Sending a message to the operator is internal, meaning only the operator will receive it and can respond directly.
* A message can be sent to the operator by clicking on the "Internal Message" tab, ensuring that only the operator receives it and can reply directly. This also allows the operator to respond to the manager through the same tab available on their interface.

<figure><img src="/files/anPpnbtgwwgkm6xxk8MQ" alt=""><figcaption></figcaption></figure>

* When the livechat manager sends a message to the end user instead of the operator, it is done directly through the chat window. This action remains visible to the operator.

<figure><img src="/files/1WnjmMoXOXvT7Sq7xOJP" alt=""><figcaption></figcaption></figure>

* The operator also has the option to call the livechat manager, especially when needing assistance with a complex conversation. In this case, the supervisor sees the operator's conversation flashing in orange and can initiate an internal conversation with the operator.

<figure><img src="/files/KPo1hNcuDjyn75oc4bXu" alt=""><figcaption></figcaption></figure>

* By clicking on the icon <img src="/files/6K83FHxdq9yM5nFmyiyz" alt="" data-size="line">, the supervisor can expand the list of an operator's Livechat conversations and display one of them on the right side of the screen by selecting it.

<figure><img src="/files/adk8Ke3s2j3sJtzfQt8p" alt=""><figcaption></figcaption></figure>

* When a **waiting queue** is set up, the **manager** has the ability to **view the number of users waiting**.

<figure><img src="/files/2bHNulDI99HEeUN3Wxil" alt=""><figcaption></figcaption></figure>


# Dydu livechat setup

You can access Livechat parameters from the menu : **Preferences > Livechat parameters.**

<figure><img src="/files/LKiJVMnQx82qR324youJ" alt=""><figcaption></figcaption></figure>

Here, the settings are split into 5 categories :

* General
* Competencies
* Waiting queues
* Operator capacity
* Account parameters


# General settings

Here, you can configure your **livechat** through the options below:

## Capacity

* **Number of conversations per operator :**&#x20;
  * This option defines the maximum number of conversations an operator can manage simultaneously.
* **Number of conversations that can enter the queue for each connected operator :**&#x20;
  * If you intend to use the queue, you can also define an additional number of people per operator to determine how many individuals can enter the waiting queue.

## Timeouts

* **Livechat timeout (in minutes) :**&#x20;
  * The livechat timeout is configurable based on the user's period of inactivity.
* **Timeout when the conversation is not picked up :**&#x20;
  * The livechat conversation timeout can be managed if the operator fails to take charge of the conversation.
* **Reminder before timeout is reached (in seconds) :**&#x20;
  * The timeout is configurable according to a duration to warn that this delay will soon be reached.
* **Duration before sending the follow-up phrase (in minutes, inactive if 0) :**&#x20;
  * This configuration defines the duration (in minutes) after which a follow-up phrase is sent to the user.
* **Duration before sending the re-engagement phrase. Sending depends on the operator's status (in minutes, inactive if 0) :**
  * This duration triggers the sending of a re-engagement phrase to the user, particularly when the operator is in the process of searching for information.
* **Automatic conversation transfer (in seconds) :**&#x20;
  * If the operator is inactive, the conversation can be automatically transferred to another operator. An option is available to choose whether or not to display a notification of automatic operator transfer to the end-user.
* **Operator disconnection information to the user after (in seconds) :**&#x20;
  * This value specifies the delay after which the user receives the phrase notifying them of the operator's disconnection.
* **Display time for the waiting questionnaire (in minutes) :**&#x20;
  * This configuration determines the display duration of the questionnaire for the user.
* **Queue closing before end of service (in minutes) :**&#x20;
  * This configuration specifies the queue closing preceding the deactivation of the livechat service.

## Console Options&#x20;

This section allows you to grant various permissions to the operator:

* **Print the conversation :**&#x20;
  * Allows the operator to obtain a printable version of the exchange with the user.
* **Email the conversation to self :**&#x20;
  * Authorizes the operator to receive a copy of the conversation by email.
* **Mark the conversation as "important" :**&#x20;
  * Offers the operator the possibility to flag a conversation to facilitate tracking or archiving.
* **Request manager assistance :**&#x20;
  * Allows the operator to request the intervention or advice of their manager during a conversation.
* **Display the list of online operators :**&#x20;
  * Makes the list of currently connected operators visible on the operator console.
* **Display the "Search Knowledge" tab :**&#x20;
  * Adds a tab to the livechat interface for performing a quick search for useful information.
* **Display predefined responses published with their theme :**&#x20;
  * Provides the operator with a list of standard responses categorized by theme to facilitate and speed up request processing.
* **Ask the user to upload a file :**&#x20;
  * Authorizes the operator to send a request to the user to download a file during the conversation.
* **Send a file :**&#x20;
  * When this option is activated, a dedicated button appears on the operator console, allowing them to send a file to the user during the discussion.
* **Augmented livechat operator :**&#x20;
  * Allows the operator to display a chatbox on the operator console.

## Optional Statuses

This section allows you to define the different statuses that the operator can display :

* **In Training :**&#x20;
  * This status means the operator is unavailable to handle new requests because they are in a training session.
* **On the Phone :**&#x20;
  * This status indicates the operator is on a phone call and is therefore unavailable for new assignments.
* **Discussion with Supervisor :**&#x20;
  * This status indicates the operator is in discussion with their supervisor and is therefore unavailable to take a new conversation.
* **No New Conversation :**&#x20;
  * This status means the operator will not take any new conversations.
* **Searching for Information :**&#x20;
  * This status indicates the operator is searching for information, a status that can be used during active conversations.

## Operator Survey

* **Operator survey at the end of the conversation :**&#x20;
  * This option allows you to select a survey to be addressed to the operator at the end of the conversation.
* **Display the "Complete Survey" button below the operator's input area :**&#x20;
  * This configuration displays a button below the operator's input area, allowing them to complete their survey.
* **Display the "Cancel" button on the operator survey :**&#x20;
  * This option displays a "Cancel" button, which allows the operator to close the survey interface.
* **Possibility to close the operator survey without answering it :**&#x20;
  * This option allows the operator to close a conversation without having previously filled out their survey.

## User Survey

* **End-user survey at the end of the conversation :**&#x20;
  * This option allows you to select a survey to be addressed to the user at the end of the conversation.
* **Operator can send a survey to the user :**&#x20;
  * This option allows the operator to send a survey to the user at any time.

## Miscellaneous

* **Responses following a knowledge redirection are indicated as coming from the operator :**&#x20;
  * This configuration allows responses resulting from a redirection to a knowledge item to be displayed as sent by the operator rather than by the bot.
* **If checked, prevents closing the conversation at the end of livechat, and if there is a re-escalation, redirects to the previous operator if available :**&#x20;
  * This option, when checked, keeps the conversation open at the end of the livechat and ensures that any re-escalation redirects to the previous operator if available, even if it is outside their normal assignment cycle.
* **Transfer the conversation to another operator if the operator currently handling the conversation is disconnected :**&#x20;
  * This option, when checked, transfers the conversation to another available operator in the event the current operator disconnects, thereby preventing the conversation from closing.

## **Opening hours**

Here you can choose the opening hours of the Livechat by days of the week. These hours can be set by skill.

Conversations are automatically assigned to operators based on their availability. If an operator finishes their shift at 6 p.m. and after 6 p.m. they are still in a conversation, no new conversations will be assigned to them.

In general phrases, it is possible to configure a specific message in case the user tries to start a Livechat conversation but no operator is available. You can indicate, for example, that they are currently outside opening hours.

Example :&#x20;

<figure><img src="/files/cMkD1jg0rIvEfWXldbnE" alt=""><figcaption></figcaption></figure>

## **User profile**

This section presents the information that the operator can obtain and see displayed about the user during a conversation.




---

[Next Page](/llms-full.txt/1)

