# Rule Cells

![Rule Cell creation](https://2823722678-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbxg2yyDvzRj7kRFSv7T0%2Fuploads%2FxAFtr2mQAUXhs25qUYr0%2Fimage.png?alt=media\&token=0406a291-8354-4499-99db-b8c8b3b746c4)

**The Rule Cell allows you to manage and customize the flows according to the variations of the business rule.** It’s a resource to make your dialog more assertive and much more precise, as the virtual agent will respond to any changeable scenario.

In a flow, you will often encounter scenarios where the if-then-else conditionals are applicable. For each possibility, you will predict a Rule Cell, always foregrounding the main rule.&#x20;

**Summarizing, Rule Cell is fundamental in flows that need any kind of rules.**

Below, there are some examples of use cases, with respective codes to base the creation of your Rule cells :wink:&#x20;

* If the user informs that is over 18, will be directed by the Rule Cell to a dialog to open his account. Minors will be directed to a dialog informing how to open an account with an adult guardian. In that case, you should write the following code in the Rule Cell:

```
hiddenContext.age < 18
```

* Use different responses according to channels:

```
info.channelName == 'Homepage'
```

* To check if user is logged in:

```
hiddenContext.logged == true
```

* To check if the shopping cart has items:

```
visibleContext.shoppingCart != null && 
visibleContext.shoppingCart.items != null &&
!visibleContext.shoppingCart.items.isEmpty()
```

* To validate confidence level of intent:

```
intents[0].name == 'MY_INTENT' && intents[0].confidence > 0.8
```

* For single-variable validation:

```
hiddenContext.myvar == 5
```

* If the user wants to create an "escape", a way to execute a flow in which no other scenario fits:

```
true
```

* To disambiguate, as an alternative to the use of entities *(although the recommended and simplest way to build flows is, actually, using entities*). For example: if you want to differentiate a user who wants to check his bank account balance from another user who wants to check his credit card balance, you can predict two *(2)* Rules Cells:

```
//First Rule Cell code:
if(!intents.isEmpty())     
    intents[0].name =="BANK_BALANCE" 
else   
    false;

//Second Rule Cell code:
if(intent.isEmpty())     
    intents[0].name =="CREDITCARD_BALANCE" 
else   
    false;
```

### **How can you create a Rule Cell?**

![](https://2823722678-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbxg2yyDvzRj7kRFSv7T0%2Fuploads%2F44Xb3YZlcPqvNK1XO85U%2Fimage.png?alt=media\&token=7713a6a4-9c0d-4a98-99bf-08cb23bc4117)

In the Rule’s Cell value field you can insert the code snippet in JavaScript’s variables (if you wanna know more about this language, [access this page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide)) and program any code in it, as long as it’s executable within 100 milliseconds.

**The Rule Cell will always be accompanied by a Not Expected Cell**, which acts to predict all user interactions outside the guidelines.

The variables below can be used in eva on the Insert code field. Just copy-paste the formula in the table according your scenario:

| Predict responses  according to:    | Function                                                                      | Formula                                                                                                                                                                    |
| ----------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text                                | to use the last user's writing in the response                                | text                                                                                                                                                                       |
| Information about the virtual agent | to use the name of the virtual agent in the answer                            | info.bot                                                                                                                                                                   |
| Information about the channel       | to use the channel's name in the answer                                       | info.channelName                                                                                                                                                           |
| Information about the channel type  | to use the channel's type in the answer (if it's web, Facebook, Alexa, etc..) | info.channelType                                                                                                                                                           |
| Session Code                        | to inform the UUID/GUID in the answer                                         | sessionCode                                                                                                                                                                |
| Code                                | to use in the response the Code of the last user's writing                    | code                                                                                                                                                                       |
| Parameter                           | to use in the response the parameters' value                                  | parameters\['parameter's\_name']                                                                                                                                           |
| Open Context                        | to use in the response the Open Context's value                               | opencontext.information's\_name *(*[*Learn more*](https://docs.eva.bot/user-guide/for-technicians/api-guidelines/webhooks#basic-request-body)*)*                           |
| Visible Context                     | to use in the response the Visible Context's value                            | visiblecontext.information's\_name *(*[*Learn more*](https://docs.eva.bot/user-guide/for-technicians/api-guidelines/webhooks#basic-request-body)*)*                        |
| Hidden Context                      | to use in the response the Hidden Context's value                             | hiddencontext.information's\_name *(*[*Learn more*](https://docs.conversational-ai.syntphony.com/user-guide/_eva-3.4.1_1/experience/base-architecture#3-hidden-context)*)* |

{% hint style="info" %}
**Important:** The variables within the contexts are created by the user, not by the eva platform
{% endhint %}

### **How to test the assertiveness of the Rule Cell?**

You can test the assertiveness of the Rule Cell and also predict responses with the last user input by using in the Answer Cell a Dynamic Answer (to get more information about [Dynamic Answers](https://docs.conversational-ai.syntphony.com/user-guide/_eva-3.4.1_1/using-eva/develop-your-bot/answer-cells#d-dynamic-answer))

**If you’re not familiar with codes, you can copy paste the following shortcuts and put it in the Answer Cell, as a Dynamic Answer:**

| Predict responses  according to:    | Function                                                                      | Formula                                                                                               |
| ----------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Intents                             | to use in the response the main Intent of a conversation                      | <p>$intents\[0].name <em>(OBS: this formula stays the same, no matter the Intent's name)</em><br></p> |
| Entities                            | to use in the response the main Entity of a conversation                      | $entities\['entity's\_name']                                                                          |
| Text                                | to use the last user's writing in the response                                | $text                                                                                                 |
| Information about the virtual agent | to use the name of the virtual agent in the answer                            | $info.bot                                                                                             |
| Information about the channel       | to use the channel's name in the answer                                       | $info.channelName                                                                                     |
| Information about the channel type  | to use the channel's type in the answer (if it's web, Facebook, Alexa, etc..) | $info.channelType                                                                                     |
| Session Code                        | to inform the UUID/GUID in the answer                                         | $sessionCode                                                                                          |
| Code                                | to use in the response the Code of the last user's writing                    | $code                                                                                                 |
| Parameter                           | to use in the response the parameters' value                                  | $parameters\['parameter's\_name']                                                                     |
| Open Context                        | to use in the response the Open Context's value                               | $opencontext.information's\_name *(registered in the code cell)*                                      |
| Visible Context                     | to use in the response the Visible Context's value                            | $visiblecontext.information's\_name *(registered in the code cell)*                                   |
| Hidden Context                      | to use in the response the Hidden Context's value                             | $hiddencontext.information's\_name *(registered in the code cell*                                     |
