# Variáveis

## Como usar variáveis

Vamos explorar o que são variáveis e como usá-las de forma eficaz ao criar chatbots no MaviBot.

{% hint style="danger" %}
**Observe os seguintes limites do sistema para variáveis e constantes em um único projeto:**

**Variáveis de modelo:**

* **Quantidade máxima:** 100 variáveis
* **Comprimento máximo do nome:** 100 caracteres

**Constantes do projeto:**

* **Quantidade máxima:** 50 constantes
* **Comprimento máximo do nome:** 100 caracteres
* **Comprimento máximo do valor:** 5.000 caracteres
  {% endhint %}

Uma variável é um local de armazenamento nomeado para dados, identificado por um rótulo de texto exclusivo.

<div data-with-frame="true"><figure><img src="/files/4ca286dd3fae84d366132f41d066f01bd9283d88" alt=""><figcaption></figcaption></figure></div>

&#x20;                                          *Fig. 1: Uma variável chamada `total`, armazenando um valor de pagamento*.

O MaviBot fornece vários tipos de variáveis:

1. [Variáveis internas ](#built-in-variables)
2. [Variáveis do sistema](#system-variables)&#x20;
3. Variáveis definidas pelo usuário — são aquelas que você cria por conta própria dentro do projeto.

**Declarar uma variável** significa atribuir um valor a um contêiner nomeado. Em outras palavras, uma instrução como ***a=0*** é a declaração da variável ***a***. Acabamos de informar (declarar ao) construtor que vamos armazenar um número na variável ***a***, e por enquanto, esse valor é ***0***.

**Atribuir um valor a uma variável** tem o mesmo significado.

As expressões **"atribuir a uma variável o valor de uma função"** ou **"definir uma variável igual a uma função"** também são comumente usadas. O princípio é o mesmo: em vez de atribuir um valor específico, você atribui o resultado de uma função. Por exemplo: **s\_id = tg\_send\_message(platform\_id, "Olá!")** Nesse caso, o resultado da função será armazenado na variável.

**Redefinir uma variável** significa atribuir a ela o valor **0**.

[**Funções e métodos**](/doc/pt/chatbot/functions/variaveis.md#functions-for-working-with-variables)  são conjuntos predefinidos de comandos configurados antecipadamente pelo MaviBot. A maioria das funções requer parâmetros - valores que a função ou método consegue entender. Assim que o bot recebe os parâmetros necessários, ele executa um comando específico.

**`tg_send_message(platform_id, "Olá!")` —** essa função envia a mensagem "Olá!" no Telegram.

<div data-with-frame="true"><figure><img src="/files/61b26e5f7be4ef3e88bf8183301748bba29a3f72" alt=""><figcaption></figcaption></figure></div>

<p align="center"><em>Fig. 2. Exemplo de uma variável chamada text1 atribuída a uma função.</em></p>

### <mark style="color:vermelho;">**REGRAS PARA TRABALHAR COM VARIÁVEIS:**</mark>

1. O nome de uma variável só pode começar com **uma letra**; ele não pode começar com um número.

   **Age1 - ✅ correto**  &#x20;

   1Age - ❌ <mark style="color:vermelho;">incorreto</mark>

   **age1 -** **✅ correto**   <mark style="color:azul;">- opção recomendada</mark> <br>
2. Uma variável não pode conter espaços nem caracteres especiais, exceto o sublinhado (\_).

   **Name\_Surname - ✅ correto** &#x20;

   Name Surname - ❌ <mark style="color:vermelho;">incorreto</mark>

   **nameSurname** **- ✅ correto**   <mark style="color:azul;">- opção recomendada</mark><br>

   Palavras reservadas de linguagens de programação não podem ser usadas como nomes de variáveis, por exemplo: print, true, false, count, sum e assim por diante.<br>
3. <mark style="color:$primary;">É</mark> <mark style="color:vermelho;">**terminantemente proibido**</mark> <mark style="color:$primary;">usar</mark> usar os nomes das variáveis internas e do sistema para variáveis definidas pelo usuário. Você pode encontrar a lista dessas variáveis aqui. <mark style="color:vermelho;">**ссылка**</mark>
4. <mark style="color:azul;">**Recomendamos:**</mark>
   * Use nomes em latim (inglês) para variáveis.
   * Use nomes de variáveis curtos, mas significativos, por exemplo: totalSum, pay\_name, <mark style="color:vermelho;">**ns**</mark>, name\_client etc.

### Como obter o valor de uma variável

Coloque o nome da variável entre chaves **#{}**. Você pode referenciar o valor dela no campo de texto da mensagem dessa forma. No entanto, no campo "Calculadora", você deve se referir ao valor da variável simplesmente pelo nome, sem qualquer sintaxe adicional.

{% hint style="danger" %}
O **#{}** A construção permite recuperar o valor de uma variável. Ela é usada no campo "Texto da mensagem" para inserir o valor da variável no texto.
{% endhint %}

Exemplo:

<div data-with-frame="true"><figure><img src="/files/dd43c021a8225160f0954f45b48f2e7998f2041d" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="success" %}
O sistema suporta variáveis aninhadas, em que o valor de uma variável faz parte do nome de outra variável. Por exemplo: **#{q#{test#{i}}}**
{% endhint %}

No campo "Calculadora", faça referência às variáveis pelos nomes, sem usar a notação #{}.&#x20;&#x20;Por exemplo, se tivermos duas variáveis: price (sum) e quantity (num).

`num = 10`

`sum = 1500`

<div data-with-frame="true"><figure><img src="/files/e47e648c074142788802837a3a34cdcb19daa434" alt=""><figcaption></figcaption></figure></div>

### Como exibir a soma total&#xD;

Digite o seguinte na calculadora:

`total_sum = sum1 * num2` **✅ correto**

<div data-with-frame="true"><figure><img src="/files/996b4f79700c177060c393f2394d9d3e2487f73e" alt=""><figcaption></figcaption></figure></div>

**Como&#x20;*****não*****&#x20;fazer isso:**

`total_sum = #{sum1} * #{num2}` - ❌ <mark style="color:vermelho;">incorreto</mark>

### Como excluir uma variável do bot

Para excluir (limpar) uma variável, digite uma das opções a seguir no campo "Calculadora":\
YourVariableName =\
ou\
YourVariableName = ""

Após o sinal de igual, deixe um espaço ou use aspas duplas (ou simples).

{% hint style="warning" %} <mark style="color:vermelho;">**Por favor, observe!**</mark> É importante usar o prefixo correto para indicar a que lugar a variável pertence.

Para variáveis de nível de projeto (armazenadas nas configurações do projeto), use o prefixo **project:**\
Exemplo:&#x20;*project.YourVariableName =*&#x20;ou&#x20;*project.YourVariableName = ""*

Para variáveis de nível de cliente, use o prefixo **client**:\
Exemplo:&#x20;*client.YourVariableName =* ou&#x20;*client.YourVariableName = ""*

Para variáveis de nível de negócio, nenhum prefixo é necessário.
{% endhint %}

## Variáveis internas

Aqui está a lista de variáveis internas:

**#{none}** - ignorar a mensagem

**#{api\_key}** - token da API usado nas chamadas da API do Salebot

**#{attachment\_url}** - contém o link do anexo

**#{attachments}** - um array JSON de URLs de anexos da mensagem do usuário

**#{avatar}** - link para o avatar do usuário (mostrado na seção "Clientes")

**#{client\_id}** - ID do cliente no construtor, também usado em solicitações da API

**#{client\_type}** - o tipo de mensageiro de onde o cliente veio (valores descritos \[aqui])

**#{current\_date}** - data atual no formato dd.mm.aaaa, com base no fuso horário do projeto

**#{current\_time}** - hora atual no formato hh:mm, com base no fuso horário do projeto

**#{custom\_answer}** - a resposta recebida do servidor especificado no campo "URL da resposta do servidor"

**#{message\_from\_outside}** - tipo de mensagem recebida. Valores possíveis:\
\&#xNAN;*mensagem comum = 0*\
*mensagem enviada via API = 1*\
*notificação de callback (fundo amarelo no diálogo) = 3*\
*notificação de telefonia (fundo azul-claro no diálogo) = 5* \
*Essa variável é gerada a cada mensagem recebida, mas não aparece no cartão do cliente.*\
*Você pode usá-la no campo "Variável para comparação" para configurar condições para gatilhos e conexões de blocos.*

**#{date\_of\_creation}** - data em que o usuário foi adicionado ao bot ou enviou mensagem a ele pela primeira vez

**#{full\_name}** - nome completo do usuário (nome e sobrenome)

**#{group}** - bot ao qual o cliente está vinculado (mostrado como "Vinculado ao bot" no cartão do cliente)

**#{main\_client\_id}** - ID do cliente principal entre um grupo de cartões de cliente vinculados

**#{message\_id}** - ID do estado atual da conversa com o cliente (padrão: NONE)

**#{messenger}** - nome do mensageiro de onde o cliente veio

\#{name} - nome do usuário

\#{next\_day} - data de amanhã no formato dd.mm.aaaa (útil para agendar mensagens)

**#{order\_id}** - identificador do pedido (ID do cliente e ID interno do pedido separados por um hífen)

**#{order}** - conteúdo do pedido enviado pelo usuário

**#{platform\_id}** - ID do cliente na plataforma de mensagens

**#{question}** - mensagem enviada pelo usuário

**#{timestamp}** - timestamp atual incluindo milissegundos

**#{time\_of\_creation}** - hora em que o usuário foi adicionado ao bot ou enviou mensagem a ele pela primeira vez

**#{wa\_bot}** - número de WhatsApp para o qual o usuário enviou mensagem (útil para passar para campos de CRM e distribuir leads entre gerentes)

**#{weekday}** - dia da semana como um número (segunda-feira = 1, terça-feira = 2 etc.)

#### **valores de client\_type**

<table><thead><tr><th width="195.3359375">Valor</th><th width="211.8125">Mensageiro</th></tr></thead><tbody><tr><td>1  </td><td>para Telegram </td></tr><tr><td>2  </td><td>para Viber</td></tr><tr><td>3  </td><td>para Facebook</td></tr><tr><td>5  </td><td>para chat online</td></tr><tr><td>10</td><td>para Instagram</td></tr><tr><td>14 </td><td>e-mail </td></tr><tr><td>16</td><td>Conta Empresarial do Telegram </td></tr><tr><td>21</td><td>conta do Telegram</td></tr><tr><td>22</td><td>TikTok</td></tr></tbody></table>

## Variáveis do sistema

O sistema gera automaticamente várias variáveis de tempo de execução durante a operação de um bot Você pode usar essas variáveis ao construir seu bot. Aqui está uma lista daquelas que podem ser úteis para você.

{% hint style="info" %}
Você pode encontrar variáveis adicionais do sistema na documentação. Elas estão localizadas nas seções relevantes para seu uso.
{% endhint %}

**phone** - número de telefone

**notSubscribed** - se a variável for igual a 1, o cliente cancelou a inscrição nas mensagens e não receberá nenhuma mensagem

**clientBlocked** - o cliente está bloqueado, e o bot não opera para ele

**story\_url** - identificador do story do Instagram ao qual o cliente respondeu

**viewed\_page** - página de onde o usuário está escrevendo no chat online

**wa\_bot** - número de telefone do bot do WhatsApp

{% hint style="info" %}
Para saber quais variáveis podem ser criadas durante o pagamento, consulte os guias de integração dos serviços de pagamento na seção "[Sistema de pagamento](/doc/pt/pagamento.md)".
{% endhint %}

## Variáveis personalizadas

As variáveis personalizadas são divididas em:

* Variáveis do projeto (também chamadas de variáveis comuns)
* [Variáveis do cliente](#custom-variables)&#x20;
* [Variáveis do negócio](#key-deal-variables) (também chamadas de variáveis regulares)
* [Constantes](#how-to-set-constant-variables)&#x20;

Cada tipo de variável será explicado abaixo.

{% hint style="info" %}
Evite usar os mesmos nomes para diferentes tipos de variáveis para prevenir confusão quando o Builder exibir ou usar um valor diferente do que você esperava.
{% endhint %}

{% hint style="info" %}
Ao atribuir um valor a uma variável, é importante especificar seu tipo usando o prefixo apropriado:

**client.** (para variáveis do cliente) e **project.** (para variáveis do projeto). Nenhum prefixo é usado para variáveis de negócio.

O prefixo é omitido ao recuperar o valor de uma variável.

Exemplo:&#x20;Vamos imaginar que você queira criar uma variável de projeto chamada like para servir como contador de curtidas dos seus clientes.

**project.like = 0 - declaração, feita uma vez**

No bloco em que você precisa contar curtidas, escreva:&#x20;**project.like = like + 1**
{% endhint %}

{% hint style="info" %}
Ordem de prioridade das variáveis:&#x20;variáveis de negócio têm a maior prioridade, seguidas pelas variáveis do cliente e, depois, pelas variáveis do projeto.
{% endhint %}

#### **ID do mensageiro (platform\_id)**

**ID do mensageiro (platform\_id)** é o identificador do usuário/chat/canal dentro do mensageiro. Para encontrá-lo, abra a conversa com o cliente desejado na seção "Clientes". No lado direito da janela do chat, navegue até a aba "**Sobre o cliente** - **Variáveis do sistema"** ou a aba "**Todos"** .

O **`platform_id`** é uma variável permanente, gerada pelo sistema, que representa o ID exclusivo do mensageiro do usuário.

* **Persistência:** Este ID permanece constante para um usuário. Mesmo que você exclua o registro dele do builder, seu `platform_id` será o mesmo após o re-registro.
* **Origem:** O ID é atribuído pela plataforma de mensagens (por exemplo, Telegram, WhatsApp) quando o usuário interage com o bot pela primeira vez.

O exemplo a seguir mostra como o `platform_id` aparece em um cartão de cliente.

<div data-with-frame="true"><figure><img src="/files/576787e12eb31ca7a44d2eebdbfd654ce7a24ae5" alt="" width="563"><figcaption></figcaption></figure></div>

A variável platform\_id existe tanto para usuários comuns quanto para comunidades, canais e chats.

Para obter o **platform\_id** (ID do mensageiro) de um canal do Telegram no qual o bot é administrador, basta enviar uma mensagem para o canal a partir da sua conta pessoal. Isso criará automaticamente um diálogo entre o bot e o canal.

Você pode copiar o **platform\_id** valor do canal na seção "Sobre o cliente".

No Telegram, o ID do mensageiro para canais sempre começa com um sinal de menos (-). Ao usar funções, certifique-se de incluir o valor completo, incluindo o sinal de menos.&#x20;

## Como usar variáveis

As variáveis podem ser usadas em gatilhos, pedidos, respostas do usuário, blocos e muito mais. Vamos ver um exemplo concreto ao criar um funil para uma imobiliária.

Então, vamos criar um bloco de Início:

<div data-with-frame="true"><figure><img src="/files/f0aae80e5e4d4c331e6441c5755e0d64c38cd7aa" alt=""><figcaption></figcaption></figure></div>

**Etapa 1: Crie o bloco "Obrigado"**

Crie um novo bloco com uma mensagem agradecendo ao usuário pela contribuição.

**Etapa 2: Configure a transição**

Na conexão que leva a este bloco, configure o seguinte gatilho:

1. Ative a alternância **"Usuário insere dados"** .
2. Na **"Campo de entrada de dados"** , digite o nome da variável: **`name`**.

<div data-with-frame="true"><figure><img src="/files/e511ccfc05d969411c24b599ece61e8bf6a4c695" alt=""><figcaption></figcaption></figure></div>

A entrada do usuário é armazenada na variável **`Name`** . Esse valor pode ser reutilizado em qualquer bloco subsequente chamando a variável com a sintaxe `#{Name}` , como em: `Bem-vindo, #{Name}!`.

<div data-with-frame="true"><figure><img src="/files/1ec12d99198eb0428a35ffd7e45a1dac9794d604" alt=""><figcaption></figcaption></figure></div>

O bot funcionará da seguinte forma:

<div data-with-frame="true"><figure><img src="/files/de98b958c0e2547b32d7ce0c7eef4d2a9819426b" alt="" width="563"><figcaption></figcaption></figure></div>

Agora vamos tornar a tarefa um pouco mais complexa.&#x20;

Neste mesmo bloco, perguntaremos ao usuário se ele tem interesse em imóveis primários (novos) ou secundários (revenda):

<div data-with-frame="true"><figure><img src="/files/fd3bff571c9e44fece880daf7a5e82c9b6d520b6" alt=""><figcaption></figcaption></figure></div>

Em seguida, crie conexões a partir dos botões "Imóveis primários" e "Imóveis secundários" no bloco "Chat".

<div data-with-frame="true"><figure><img src="/files/4e70af7cdcaf53fc334a27a6e80c173c5100555a" alt=""><figcaption></figcaption></figure></div>

Agora vamos ver a segunda forma de usar variáveis dentro dos blocos.

Selecione o bloco certo e digite o seguinte texto no campo "Calculadora":&#x20;**client\_interest = Imóveis primários**. No bloco da esquerda, digite:&#x20;**client\_interest = Imóveis secundários**.

<div data-with-frame="true"><figure><img src="/files/ef860dd6f2ce756ac8f3e4a3f8da8d9de414a657" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/ea99aa1422ff02ba0d2bebf0466a1faab6067448" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Uma variável é atribuída ao usuário quando ele faz a transição para qualquer um desses blocos. Podemos usá-la depois ao criar um pedido.
{% endhint %}

Em seguida, perguntaremos ao cliente sobre o orçamento para compra de imóveis nestes blocos e criaremos mais dois blocos com setas levando até eles com base nos gatilhos de resposta do cliente.

<div data-with-frame="true"><figure><img src="/files/e89e9e5e9afba7e05fcdacf4e1b06ec46e5a93d7" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/4ceb5e561454b5067887584063417c2d1598c31d" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/a9f287c2d05b8fd0838685001e90eebd37c99b9f" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/197939abdaf79693bce78a516572762f33bc105b" alt=""><figcaption></figcaption></figure></div>

A partir do bloco **"Qual é o seu orçamento?"**, crie uma conexão e defina uma condição de gatilho para segmentar os usuários com base em suas respostas.

1. Nas configurações da conexão, marque a caixa para **"Usuário insere dados"**.
2. Atribua um nome de variável (por exemplo, `budget`) para armazenar a resposta do cliente.
3. Na **"Variável"** campo, use a variável interna `#{question}` (que contém a última mensagem do usuário) para criar uma condição.
   * **Exemplo:** `#{question} <= 1000000`

<div data-with-frame="true"><figure><img src="/files/e2d3ac62c79fd4f6946ce096eab9ea3c8198ab67" alt=""><figcaption></figcaption></figure></div>

{% hint style="warning" %}
Para todas as conexões para **blocos "Leads"** ative **"Usuário insere dados"** e defina a variável.
{% endhint %}

Você também pode definir uma variável adicional diretamente no bloco **blocos "Leads"** para fornecer informações mais completas sobre o negócio.

<div data-with-frame="true"><figure><img src="/files/6a46b5490609c0de6792d27d1febc11d8dff6d23" alt=""><figcaption></figcaption></figure></div>

Agora altere o tipo dos dois últimos blocos para "Leads" e veja os resultados:

Vamos testar o fluxo em ação:

<div data-with-frame="true"><figure><img src="/files/066bc9c70d75fcfad7b861c69655fc920120e7e7" alt="" width="375"><figcaption></figcaption></figure></div>

Você pode revisar o negócio criado e os dados armazenados do cliente acessando a seção **"Clientes"** e abrindo a conversa relevante. As variáveis do negócio estarão visíveis lá.

<div data-with-frame="true"><figure><img src="/files/0a45f9ae0d28f7184810ce01af877325217a4340" alt=""><figcaption></figcaption></figure></div>

Agora você sabe como usar variáveis de pelo menos três maneiras diferentes:

1. Atribuir nomes de variáveis aos dados inseridos pelo usuário (por exemplo, “Name”, “Budget”)
2. Atribuir um valor de variável ao fazer a transição para um bloco (por exemplo, client\_interest = Imóveis primários)

## Como visualizar variáveis

Para visualizar as variáveis de um cliente, navegue até a seção **"Clientes"** e abra o cartão do cliente.

<div data-with-frame="true"><figure><img src="/files/e79f9e3b11fefba8d0db5705d42e4c911ab9c24c" alt=""><figcaption></figcaption></figure></div>

As variáveis são exibidas em formato de lista dentro do cartão do cliente:

* Cada variável ocupa sua própria linha.
* O **o nome da variável** é mostrado à esquerda.
* Seu correspondente **value** é exibido à direita.

**Para modificar uma variável:**

Passe o mouse sobre a linha dela na lista para revelar um botão de ação. Clicar nesse botão permite que você:

* Edite o nome da variável.
* Edite o valor da variável.
* Exclua a variável completamente.

<div data-with-frame="true"><figure><img src="/files/2a7f1a98902154593843453b2bd1360fb1c1c578" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/aaa8e8468d31dba06cc404a9d995b5d7ffbea1f0" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Variáveis do sistema não podem ser editadas!
{% endhint %}

## Como definir variáveis do cliente

{% hint style="info" %}
As variáveis do cliente não são excluídas, redefinidas nem perdidas ao usar o bloco "Fim da coleta de dados" (bloco vermelho).
{% endhint %}

Uma variável do cliente pode ser definida de duas maneiras: explicitamente e implicitamente.\
Uma maneira explícita de definir uma variável é configurá-la no campo "Calculadora" de um dos blocos do funil.&#x20;

Exemplo: `client.age = 28` ou `client.age = 28:`

<div data-with-frame="true"><figure><img src="/files/acda1e743828d66a70671d4ac496f31764be834e" alt="" width="563"><figcaption></figcaption></figure></div>

A maneira implícita é definir uma variável no campo de entrada de dados da seta.

Exemplo:

Vamos criar um bloco em que perguntamos o nome do cliente e também criar um bloco abaixo:

<div data-with-frame="true"><figure><img src="/files/1434d46a1dac1e93ea5b4f675126282ab154016c" alt="" width="563"><figcaption></figcaption></figure></div>

Em seguida, navegue até as configurações da conexão e ative a opção "Usuário insere dados".

<div data-with-frame="true"><figure><img src="/files/e2b1c3cabf5598c2be741997a16e9d7fe79839d4" alt="" width="563"><figcaption></figcaption></figure></div>

Use a função `client.` prefixo ao nomear sua variável (por exemplo, `client.name`) para armazenar a entrada do usuário. Essa variável pode então ser referenciada em mensagens posteriores como `#{client.name}`.

<div data-with-frame="true"><figure><img src="/files/c6691af6d1c9da392dac031c97a079a16825b784" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="success" %}
As variáveis do cliente são usadas exatamente como variáveis regulares no builder, mas sem o **client** prefixo.
{% endhint %}

## Como definir variáveis do projeto

{% hint style="info" %}
Variáveis globais não são excluídas, redefinidas nem perdidas ao usar o bloco "Leads" (bloco vermelho).
{% endhint %}

Variáveis globais estão acessíveis a todos os usuários do bot. Elas são ideais para controlar o comportamento do bot ou facilitar interações entre diferentes usuários.

**Exemplo de caso de uso:**\
Um usuário pode publicar um item em um canal de marketplace definindo uma variável (por exemplo, `project.latest_listing`), e todos os outros usuários podem vê-lo e responder.

#### **Sintaxe para atribuição**

Para criar ou atualizar uma variável global, use o `project.` prefixo na Calculadora:

**Exemplos:**

* `project.product_shop = 28`
* `project.age = 28`

<div data-with-frame="true"><figure><img src="/files/843d6e06b577c3487ac0014b74883e67ce17521f" alt=""><figcaption></figcaption></figure></div>

Elas podem ser usadas sem nenhum prefixo.

Vamos ver como os dados são exibidos na tabela.

<div data-with-frame="true"><figure><img src="/files/22f4a860b26afd30f3771c8795f932d052f0694a" alt=""><figcaption></figcaption></figure></div>

Agora, execute o bloco "Início" no modo de teste.

<div data-with-frame="true"><figure><img src="/files/6145a35d8c3950e22746c5e069eeaa657c3dde2b" alt="" width="375"><figcaption></figcaption></figure></div>

Podemos ver os dados que foram gravados na variável a partir da tabela na mensagem enviada pelo bot. Como referenciamos a variável na mensagem usando a sintaxe `#{}` , os dados armazenados nela foram exibidos no chat do bot.

{% hint style="info" %}
Mais detalhes sobre como trabalhar com a função get\_records\_from\_table() são explicados no artigo "[Assistente de IA com tabela do MaviBot](/doc/pt/chatbot/ai/tables.md)".
{% endhint %}

O `project.` prefixo permitiu que a função gravasse os dados da tabela diretamente nas variáveis globais do projeto, acessíveis na seção **"Variáveis"** seção.

<div data-with-frame="true"><figure><img src="/files/143a8ebdd819868632b755320ee432c2e4a101bd" alt=""><figcaption></figcaption></figure></div>

Você pode editar variáveis do projeto nas configurações do projeto.

### Exemplo: usando variáveis do projeto

Crie um sistema que atribua um número sequencial a cada novo cliente que entrar no bot.

**Implementação:**

1. Navegue até suas **Configurações do projeto**.
2. Crie uma nova variável de projeto (por exemplo, `project.client_counter`).

<div data-with-frame="true"><figure><img src="/files/e34e0fe27dd48bfd4ec111bb5c6497ef5870e255" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/cb3f78ab82d9dbed2aa6a2ea9d9aa07a57532311" alt=""><figcaption></figcaption></figure></div>

3. Defina seu valor inicial (por exemplo, `0`) o que significa **"Nenhum cliente no bot"**:

<div data-with-frame="true"><figure><img src="/files/bfcf9c074596cdad4a54a6f92e2c1df35a0a2f1a" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/a41bb76232f101d6c75c2ccac154744da3d2fcf8" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/452a0b90a2895645142a2ef309d3e988f524f585" alt="" width="563"><figcaption></figcaption></figure></div>

No bloco inicial do bot, adicione uma lógica que:

1. Incrementa o valor da variável do projeto em 1.
2. Atribui o novo valor a uma variável específica do cliente para o usuário atual.

<div data-with-frame="true"><figure><img src="/files/a04dbdf509beb9851b7850555c96b3083d61e516" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Não se esqueça de definir uma restrição para que o contador não possa ser incrementado duas vezes para o mesmo cliente.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/9d47601aaea313efbe3034c525bb6332ca291572" alt="" width="563"><figcaption></figcaption></figure></div>

## Como definir variáveis constantes

Constantes são valores fixos que permanecem inalterados (ou mudam raramente) ao longo do ciclo de vida de um projeto.

**Diferença principal em relação às variáveis globais:**

Diferentemente das variáveis globais, as constantes são **específicas do cliente**. Se o valor de uma constante for modificado, a alteração se aplica apenas à sessão daquele cliente específico.

**Casos de uso comuns:**

As constantes são ideais para armazenar dados estáticos, como:

* Preços de produtos e descontos para clientes
* Tokens de integração e chaves de API
* Informações de contato do vendedor ou do suporte
* Quaisquer outros valores de configuração fixos

### Exemplo: usando variáveis constantes

Por exemplo, o desconto de um cliente poderia ser 10% por padrão, mas mudar para 25% ao inserir um código promocional.

Em "Configurações do projeto" → "Constantes", digite: Discount : 10

<div data-with-frame="true"><figure><img src="/files/e057a70d40129c834dce0084ed63c0893a459107" alt=""><figcaption></figcaption></figure></div>

Para inserir um código promocional, adicione um bloco "Gatilho", onde atribuímos à variável **discount** o valor de 25.

<div data-with-frame="true"><figure><img src="/files/f20a882005a6972efa9e49a45551501526712090" alt=""><figcaption></figcaption></figure></div>

Exiba a variável que mostra o valor do desconto no bloco verde:

<div data-with-frame="true"><figure><img src="/files/3c0dd3cf551658464971ea391f872f9cac3597c9" alt=""><figcaption></figcaption></figure></div>

**Etapa 1: Configure a transição automática**\
Crie uma conexão com um **temporizador de zero segundos** a partir do bloco cinza. Isso garante que o desconto seja aplicado imediatamente e que o cliente prossiga para a mensagem no bloco inicial.

**Etapa 2: Teste o fluxo**\
Agora, envie uma mensagem para o bot para acionar e testar toda a sequência.

<div data-with-frame="true"><figure><img src="/files/34b47a90adfb20415a58a3b353f3243495ef296a" alt="" width="563"><figcaption></figcaption></figure></div>

O desconto padrão é de 10% sem um código promocional. No entanto, inserir um código promocional válido muda a situação.

<div data-with-frame="true"><figure><img src="/files/e851997913c89a0d5759ad80317c3abc378dda05" alt="" width="563"><figcaption></figcaption></figure></div>

Assim, após inserir o código promocional, a variável "discount" para esse cliente passou a ser 25. <br>

Isso aconteceu porque uma atribuição como discount = 25 definiu o valor para a variável de negócio, em vez de alterar o valor da constante com o mesmo nome.

## Principais variáveis de negócio

**name** - nome do negócio. O termo **Name** é usado para a versão internacional do projeto.

**description** - descrição do negócio. **Descrição** é usado na versão internacional do projeto

**budget** - valor do negócio (número).

Para editar variáveis usando a requisição da API /set\_order\_vars, você deve usar os nomes deste guia[exatamente como mostrados , incluindo a diferença entre maiúsculas e minúsculas e a versão do projeto.](#how-to-set-client-variables)Limites

## Comprimento máximo do nome da variável: 500 caracteres

{% hint style="warning" %}
Comprimento máximo do valor da variável: 100.000 caracteres

Número máximo de variáveis por cliente ou negócio: 1.000 caracteres.

Como trabalhar corretamente com variáveis
{% endhint %}

## Quando você deve colocar o valor de uma variável entre aspas?

### *Por exemplo,*

*client\_id = 1202020202 <mark style="color:amarelo;">**client\_id = '1202020202'**</mark> ou <mark style="color:verde;">**Ambas as opções de sintaxe estão funcionalmente corretas. Usar aspas ao redor de um valor afeta apenas o destaque visual no editor da calculadora.**</mark>?*

No entanto, seguir convenções de codificação consistentes melhora a legibilidade e a manutenção:

Omitir aspas

* **para** valores **numéricos** (por exemplo, `discount = 25`).
* **Use aspas** valores **de string** (por exemplo, `status = "active"`).

<div data-with-frame="true"><figure><img src="/files/cf76f9c5f423177490fa16ca5388fab7b0c8cc2c" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/33955845718778f403b1fd817f83aa6cd74eacaa" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/0885e22f9151726880f887de73847cad3bec036f" alt=""><figcaption></figcaption></figure></div>

*Qual é a sintaxe correta para passar identificadores como ID do Cliente, ID do Site, ID do Bloco ou ID do Certificado para funções — eles devem ser colocados entre aspas?*

<div data-with-frame="true"><figure><img src="/files/d1684b74c8b53b6e9db56c8428bd6080a51a8abd" alt="" width="563"><figcaption></figcaption></figure></div>

Um ID não deve ser colocado entre aspas quando passado para um método ou função:

<div data-with-frame="true"><figure><img src="/files/96c9d9b960d27e29f84d1317dd32bebc5ef92f8c" alt=""><figcaption></figcaption></figure></div>

### Qual deve ser usado: aspas duplas ou aspas simples?

Não há diferença entre usar aspas simples ou duplas, mas recomendamos usar aspas duplas. Assim, por exemplo, ao inserir uma variável dentro de uma string, a variável será destacada em uma cor diferente, facilitando a percepção.

<div data-with-frame="true"><figure><img src="/files/bc337d8514e9e738f8057520f8a02d4fec53c6fb" alt=""><figcaption></figcaption></figure></div>

### Como os espaços devem ser colocados?&#x20;

Funciona do mesmo jeito se houver um espaço entre a variável e o sinal de igual (por exemplo, *<mark style="color:azul;">ans="yes"</mark>, <mark style="color:roxo;">ans = "yes"</mark>, <mark style="color:laranja;">ans= "yes"</mark>, <mark style="color:vermelho;">ans ="yes"</mark>?*

<div data-with-frame="true"><figure><img src="/files/95be59530c4f0bc7da64a3dcf37a9169e338be2e" alt=""><figcaption></figcaption></figure></div>

O espaçamento não afeta o funcionamento de métodos, variáveis ou funções. No entanto, recomenda-se usar espaços no código para melhorar a legibilidade.

### Como escrever comentários corretamente na calculadora

{% hint style="success" %}
**Para mais detalhes sobre como escrever comentários na Calculadora, veja** [**este artigo**](/doc/pt/chatbot/functions/calculadora.md)**.**
{% endhint %}

## Como comparar variáveis

Você pode controlar o fluxo do chatbot comparando os valores das variáveis. Isso permite criar lógica condicional, como verificar a idade de um usuário para conformidade legal ou direcionar interações com base na plataforma de mensageria do usuário.

{% hint style="info" %}
Veja como dividir o funil [por diferentes mensageiros ou por diferentes contas do mesmo mensageiro, explicado aqui.](/doc/pt/faq/faq.md#how-can-i-split-a-funnel-by-messengers)
{% endhint %}

#### **Operadores suportados:**

"**+**": adição \
"**-**"': subtração \
"**\***" *multiplicação* \
"**/**": *divisão*\
"**%**'"*: resto da divisão* \
"**^**" "**\*\***": exponenciação \
"**e**" "**E**" "**&&**": E lógico \
"**ou**" "**OU**" "**||**": OU lógico

Operadores de comparação:\
"**==**" — igual a\
"**!=**" — diferente de\
"**>**" — maior que\
"**<**" — menor que \
"**>=**" — maior ou igual a\
"**<=**" — menor ou igual a

{% hint style="warning" %}
**IMPORTANTE!** \
Para verificar se **a tag de variável встроeida** (a tag de início do bot) não está presente no cartão do cliente, use o seguinte método de comparação:\
\
`tag == "NONE"`
{% endhint %}

As variáveis devem ser comparadas na condição dentro do campo "Variável" (tanto nas configurações da conexão quanto nas configurações do bloco):

**Exemplo de comparação de variável no campo "Variável" de um bloco de gatilho.**

<div data-with-frame="true"><figure><img src="/files/b303236a43559d4de95310a778e819b8510559de" alt=""><figcaption></figcaption></figure></div>

**Exemplo de comparação de variável no campo "Variável" de uma conexão de bloco.**

<div data-with-frame="true"><figure><img src="/files/e2762417fcdbdb5a34fa0e3c47d5e307fa24e551" alt=""><figcaption></figcaption></figure></div>

#### **Como variáveis e gatilhos funcionam juntos**

Para que uma conexão seja ativada, **ambos os gatilhos devem ser atendidos**:

1. A condição no **"Trigger"** .
2. A lógica de comparação no **"Variável"** .

#### **Entendendo o campo "Variável"**

Se você inserir apenas um nome de variável (por exemplo, `client_type`) no **"Variável"** campo sem uma expressão, o sistema verifica a *existência* ou *verdade* do valor da variável. Ele não **não** o compara com a entrada bruta do usuário.

**Exemplo:**\
A configuração abaixo verifica se o cliente é do WhatsApp, confirmando que a `client_type` variável é igual a `6` (onde `6` representa o WhatsApp).

`client_type == 6`

<div data-with-frame="true"><figure><img src="/files/148686e9003203cfeaa5047e59d80e79d2affe89" alt="" width="563"><figcaption></figcaption></figure></div>

O exemplo abaixo funciona de forma idêntica:

<div data-with-frame="true"><figure><img src="/files/6ea74c7079677eaf4fc91bd021e17f3590bc7fd5" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
Atenção! \
Você não pode especificar vários valores para comparação de variável no campo "Gatilho".

<img src="/files/842673875ec1c642d20f1c8fa496e6f7d05fe635" alt="" data-size="original">

Isso está incorreto!

Se você precisar comparar várias variáveis, especifique seus valores no campo "Variável".

Estas opções estão corretas.

<img src="/files/4cd0d15413b87a3865a1b560d63741ea45e378b1" alt="" data-size="original">
{% endhint %}

{% hint style="info" %}
client\_type == 3 transição se o valor da variável for igual a **3**\
attachments != None transição se a variável contiver qualquer valor\
attachments == None transição se a variável não estiver definida\
product\_quantity >= 100 transição se a quantidade do produto for maior ou igual a **100**\
product\_quantity <= 100 transição se a quantidade do produto for menor ou igual a **100**\
name == "John" transição se o nome da variável for John

Para verificar se uma variável está vazia ou não, use as expressões:\
\&#xNAN;**"#{value}" == ""**  \
**"#{value}" != ""** <br>

(onde **value** é o nome da variável).

O resultado da operação de comparação retorna um valor booleano: **True** ou **Falso**.
{% endhint %}

{% hint style="warning" %}
Comprimento máximo da expressão: 1000 caracteres
{% endhint %}

{% hint style="warning" %}
O valor padrão será retornado como resultado ao tentar comparar valores de tipos diferentes.

"==" - Falso                       "<" - Falso\
"!=" - Verdadeiro                          ">=" - Falso \
">" - Falso                          "<=" - Falso
{% endhint %}

{% hint style="warning" %}
**IMPORTANTE!** \
Para verificar se **a tag de variável встроeida** (a tag de início do bot) não está presente no cartão do cliente, use o seguinte método de comparação:\
\
`tag == "NONE"`
{% endhint %}

**Exemplo:** um bot que verifica a idade de um usuário (`idade`).

* Se `age < 18`, ele envia uma mensagem para menores de idade.
* Se `age >= 18`, ele envia uma mensagem para adultos.

<div data-with-frame="true"><figure><img src="/files/1808d864ba6372b4eceb391ef1001bd1a9f673ca" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/97ccb9fc037e8e18b516de43c75ba61de6f5029a" alt=""><figcaption></figcaption></figure></div>

Observe que o fluxo inclui um bloco sem gatilho, com conexões temporizadas saindo dele.&#x20;

Este bloco foi projetado intencionalmente para demonstrar como criar fluxos em que o bot reage não às ações do usuário, mas aos resultados de cálculo. Na primeira etapa, a resposta é salva em uma variável e, em seguida, ocorre a comparação. O atraso nas setas é definido como 0 para uma resposta instantânea.

A comparação **"Idade >= 18"** também pode ser expressa como **"maior ou igual a 18."**

<div data-with-frame="true"><figure><img src="/files/056bff172b2ad0fa0ee520fbdbc449aa547de445" alt=""><figcaption></figcaption></figure></div>

{% hint style="danger" %}
Observe os erros nos gatilhos:

<img src="/files/819ebc36238e808e5f9ad83ee75007ecdf102309" alt="" data-size="original">

<img src="/files/65372f2cbc3826c20a376eebe7a3ab3905252a8f" alt="" data-size="original">

<img src="/files/8214c91465455b61db0e5092cd0378e86ee196aa" alt="" data-size="original">

**Um número não pode ser simultaneamente maior que, menor que e igual a 18!**

Esses gatilhos não fazem sentido. Todo número é menor que 18, maior que 18 ou igual a 18.
{% endhint %}

{% hint style="warning" %} <mark style="color:vermelho;">**Importante!**</mark>&#x20;

Gatilhos lógicos com variáveis devem ser escritos no <mark style="color:vermelho;">**"Variável"**</mark> campo, e não no campo "Gatilho"!
{% endhint %}

Por exemplo, na imagem abaixo, o bloco será acionado se <mark style="color:verde;">**a variável phone estiver preenchida**</mark> (ou seja, não for igual a **None**):

<div data-with-frame="true"><figure><img src="/files/68bb63fdc3bb49da126b3bc71f068fac1b523fd1" alt="" width="563"><figcaption></figcaption></figure></div>

O próximo exemplo mostra como combinar operadores:

<div data-with-frame="true"><figure><img src="/files/cb003343a750fa0768c26e45337ef8bb9590d898" alt=""><figcaption></figcaption></figure></div>

Se o cliente tiver uma variável de idade com um valor entre 18 e 99, o bloco será acionado. Se a variável estiver ausente, ou a idade for menor que 18 ou maior que 99, o bloco não será ativado.

{% hint style="warning" %}
Atenção!&#x20;

Se você comparar uma variável com um valor entre aspas, certifique-se de que não haja espaços entre as aspas e o valor; caso contrário, o bloco pode não ser acionado ou pode se comportar incorretamente!

<mark style="color:verde;">**Correto**</mark> (sem espaço <mark style="color:vermelho;">**antes da aspas**</mark> ou <mark style="color:vermelho;">**depois do valor my\_new\_bot**</mark>):

<img src="/files/c9de588127966f805ff7136d74f20633a20e8c5d" alt="" data-size="original">

<mark style="color:vermelho;">**Incorreto**</mark> (com um espaço antes da aspas):

<img src="/files/c6d0534e6da78570b1254d802eedd4a0e185942a" alt="" data-size="original">
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/pt/chatbot/functions/variaveis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
