# Variáveis

Há três categorias de variáveis que podem ser usadas no builder: variáveis do **contato**, de **contexto** e de **sistema** (especiais). Para utilizar variáveis no editor de código (json), é necessário utilizar a [notação](https://docs.altu.d1.cx/mais/glossario) `<? ?>`&#x20;

Por exemplo, para exibir o nome do contato em uma mensagem, pode-se usar:&#x20;

```
[
    {
        "default": {
            "text": "Seja bem-vindo, <? contact.name ?>",
            "type": "text"
        }
    }
]
```

Para usar variáveis em pontos de entrada, ou na condicional de nó de destino, não é preciso colocar a notação `<? ?>`Exemplo de condição de saída:

![](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MCMU3cHRe9K8qGESLcf%2F-MCPSgOqQF0xb_Sj6b_9%2FCaptura%20de%20Tela%202020-07-16%20a%CC%80s%2022.47.36.png?alt=media\&token=b3145038-f866-4acd-8a40-af9ef6ed406d)

{% tabs %}
{% tab title="Variáveis do contato" %}
São dados armazenados na ficha do atendimento. Podem ser acessados através da notação `contact.atributo`Por exemplo:

* `contact.name`
* `contact.email`
* `contact.extra.identification_number` (atributo extra)

Exemplo de armazenamento de variável do contato:

```
{
    "contact": {
        "name": "<? input.text ?>",
        "extra": {
            "identification_number": "123456"
        }
    }
}
```

Exemplo de uso:

```
[
    {
        "default": {
            "text": "Seja bem-vindo, <? contact.name ?>",
            "type": "text"
        }
    }
]
```

{% endtab %}

{% tab title="Variáveis de contexto" %}
São dados armazenados na sessão do atendimento. Podem ser acessados através da notação `$var`ou pela `context.var` Exemplo de armazenamento de variável de contexto:

```
{
    "context": {
        "status_pagamento": "concluido"
    }
}
```

Exemplo de uso:

```
[
    {
        "default": {
            "text": "Status do pagamento: <? $status_pagamento ?>",
            "type": "text"
        }
    }
]
```

{% hint style="info" %}
O acesso às variáveis de contexto ocorre pela sintaxe iniciada com `$` .Caso você queira usar literalmente esse caractere, é necessário realizar um escape com `\\`.
{% endhint %}

**Exemplo:**

```
{
    "context": {
        "valid": "<? (/^[0-9]+\\$/).test(input.text)) ?>"
    }
}
```

{% endtab %}

{% tab title="Variáveis de sistema (especiais)" %}
Há um conjunto de variáveis especiais (ou de sistema) que podem ser usadas para acessar o input do usuário, intenção reconhecida, entidades, nível de confiança, etc.

#### Input

A interação do usuário com o assistente fica armazenada na variável `input`Uma resposta de texto por exemplo fica armazenada na variável `input.text`.Exemplo de uso:

```
[
    {
        "default": {
            "text": "Você digitou '<? input.text ?>'",
            "type": "text"
        }
    }
]
```

#### Intenção

Para toda interação do usuário que passa pelo [cognitivo](https://docs.altu.d1.cx/mais/glossario), as variáveis `intent`, `intents`, `confidence` e `score_level` são preenchidas. Exemplo 1:

&#x20;O usuário digita "Bom dia" e a `#saudacao` é reconhecida, aos valores das variáveis são :

```
"intent": "saudacao",
"intents": [
    {
        "intent": "saudacao",
        "confidence": 1
    }
],
"confidence": 1,
"score_level": "high",
```

O `score_level` pode conter os seguintes valores: `low`, `medium` e `high`. Ele é calculado a partir do confidence e da configuração de intervalo de confiança setada no assistente. Também é possível verificar se uma intenção foi detectada através do prefixo `#`

Para uma intenção chamada `saudacao`,  ativada pelo "Bom dia!" do usuário, é necessária que exista um nó com o ponto de entrada `#saudacao`contendo uma também uma resposta específica para o cenário:

![](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MCItVA6TtxYDHfjJmzZ%2F-MCIwqE2xqKh8lqC0TtE%2FCaptura%20de%20Tela%202020-07-15%20a%CC%80s%2016.26.39.png?alt=media\&token=83779ac5-10bb-444b-9740-0ae0704c31ca)

Sempre que a intenção `#saudacao` for identificada, o fluxo de conversação passará para esse nó.

{% hint style="warning" %}
**Importante:** Desde que o usuário não esteja em nó em condição obrigatória ou a intent não tenha sido identificada. &#x20;
{% endhint %}

A mesma abordagem pode ser utilizada na hora de definir o nó de destino na seção `então ir para` até mesmo combinando com outras variáveis.&#x20;

Por exemplo:

![](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MCKHo8tG4Qi6AiAhyD3%2F-MCKIKUh6HLoHhJeCQmT%2FCaptura%20de%20Tela%202020-07-15%20a%CC%80s%2022.45.50.png?alt=media\&token=bf487cf2-de29-4d42-91cb-b3f19f73a440)

#### Entidades

Assim como para intenções, o NLU pode reconhecer entidades na interação do usuário. Nesse caso a variável `entities` é preenchida.

Considerando que o usuário digitou a frase **"Quero comprar um tênis da Adidas"**, suponhamos que as entidades `@produto` e `@marca` foram reconhecidas. A variável `entities` teria a seguinte estrutura:

```
"entities": [
    {
        "value": "tenis",
        "entity": "produto",
        "location": [
            17,
            22
        ],
        "confidence": 1
    },
    {
        "value": "adidas",
        "entity": "marca",
        "location": [
            26,
            32
        ],
        "confidence": 1
    }
]
```

Exemplos de como essa variável poderia ser usada:

* `entities.length`
* `entities[0].value`
* `entities[0].entity`
* `entities[1].confidence`

De forma similar a intenções, para verificar se uma entidade foi reconhecida basta utilizar o `@`. Por exemplo:

* `@marca`
* `@marca:adidas`
* `@marca:(adidas)`

Por exemplo, se você quisesse direcionar o usuário para um nó específico caso ele tenha digitado um produto e uma marca, poderia ser colocada a condição de saída `@produto && @marca`.

#### Canais (source)

Uma outra possibilidade é usar a origem do contato como regra para o assistente tomar uma decisão. Lembrando que o valor é baseado na integração, por exemplo:

* `contact.source == 'debugger'`
* `contact.source == 'liveperson'`
* `contact.source == 'zenvia'`
* `contact.source == 'widget'`
* `contact.source == 'api'`
* `contact.source == 'rcs'`
* `contact.source == 'whatsapp'`

## Variável base\_has\_answers

Após o uso de base de conhecimento no Builder, é possível acrescentar uma variável especial chamada `base_has_answers` que poderá ser utilizada para o direcionamento do fluxo. Como o próprio nome indica, essa variável poderá conter os valores `true` ou `false` e determina se foi encontrada uma resposta na base de conhecimento ou não.

Além de poder ser usada nas condições, por exemplo, de saída do nó, pode também ser utilizada no armazenamento de variáveis, conforme exemplo:&#x20;

```
[
    {
        "extra1": "<? base_has_answers ? 'tem answers' : 'não tem' ?>",
        "extra2": "extra2",
        "details": {
            "field1": "value1",
            "field2": "value2"
        },
        "event_name": "saudacoes"
    }
]
```

ou

```
{
    "contact": {
        "atributo": "valor"
    },
    "context": {
        "var_contexto": "<? base_has_answers ? 'tem answers' : 'não tem' ?>"
    }
}
```

{% endtab %}
{% endtabs %}
