> For the complete documentation index, see [llms.txt](https://docs.imbee.me/imbee-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.imbee.me/imbee-docs/autobots/variables.md).

# Variables

### Declaración de variables&#x20;

Para declarar una variable se utiliza @ y el nombre que se le quiera dar. Por ejemplo @name.

En el caso de los elementos tipo [input](/imbee-docs/autobots/elementos/inputs.md), [quickReplies](/imbee-docs/autobots/elementos/quick-replies.md), [buttonMessage](/imbee-docs/autobots/elementos/button-message.md) y [carousel](/imbee-docs/autobots/elementos/carousel.md) las variables se declararán en el apartado variables utilizando @ para definir el nombre y & para vincular la variable con el valor del input. A su vez es posible declarar variables y asignarle un valor manualmente

```yaml
"variables": {
                "@name": "&input_text",
                "@new_var": "Valor definido por el usuario"
            }
```

Los elementos del tipo [quickReplies](/imbee-docs/autobots/elementos/quick-replies.md), [buttonMessage](/imbee-docs/autobots/elementos/button-message.md) y [carousel](/imbee-docs/autobots/elementos/carousel.md) permiten almacenar tanto el label como el payload del boton. También es posible declarar variables en sus botones. Estas variables solo se guardarán una vez el usuario pulse el botón&#x20;

```yaml
{
      "name": "rate_us",
      "tags": null,
      "actions": [
        {
          "msg": "Que valoracion le da a este servicio?",
          "type": "buttonMessage",
          "buttons": [
            {
              "label": "Regular",
              "payload": "1_star",
              "@review": "Hemos recibido una valoración de una estrella"
            },
            {
              "label": "Bien",
              "payload": "2_star",
              "@review": "Hemos recibido una valoración de dos estrellas"
            },
            {
              "label": "Excelente",
              "payload": "3_star",
              "@review": "Hemos recibido una valoración de tres estrellas"
            }
          ]
        }
      ],
      "variables": {
        "@variable_payload": "&payload",
        "@variable_label": "&label",
        "@variable_extra": "Valor definido por el usuario"
      },
      "next_step" : [
                    "if @variable_payload == '1_star': return bad_step", 
                    "if @variable_payload == '2_star': return medium_step", 
                    "if @variable_payload == '3_star': return good_step"
                    ]
}
```

### Variables de entorno

En el apartado ENVIRONMENT\_VARIABLES es posible definir variables que estarán disponibles desde el primer step del bot.

Hay valores pre definidos para todos los bots:

* @user\_id: Número de identificación del usuario.
* @bot\_id: Número de identificación del bot.
* @conversation\_id: Número de identificación de la conversación.
* @\_\_day: Día del mes en número.
* @\_\_month: Mes de año en número.
* @\_\_year: Año en formato xxxx

```yaml
"ENVIRONMENT_VARIABLES": {
    "@counter": "0",
    "@max_attemps": "3"
    "@new_var" : "Valor definido por el usuario"
}
```

### Operaciones con variables

Es posible realizar operaciones aritméticas con variables para, por ejemplo, limitar la cantidad de veces que un usuario puede pasar por un step.

En este ejemplo a la variable @counter se le suma su valor actual + 1.&#x20;

```yaml
"variables": {
          "@continue_process_label": "&label",
          "@continue_process_payload": "&payload",
          "@counter": "@counter + 1"
        }
```

### Ejemplo de uso

```yaml
{
  "steps": [
    {
      "name": "welcome",
      "tags": [
        "init"
      ],
      "actions": [
        {
          "msg": "Bienvenido al bot de **Imbee**.\n Te mostraremos este mensaje @max_attemps veces y luego mostraremos el mensaje de despedida. \n Esta es la vez número @counter que te mostramos este mensaje.",
          "type": "text"
        }
      ],
      "next_step": "checkpoint"
    },
    {
      "name": "checkpoint",
      "tags": null,
      "actions": [
          {
            "msg": "Quieres que te mostremos el primer mensaje otra vez?",
            "type": "quickReplies",
            "buttons": [
                {
                  "label": "Si",
                  "payload": "show_again_yes"
                },
                {
                  "label": "No",
                  "payload": "show_again_no"
                }
              ]
          }
        ],
        "variables": {
          "@continue_process_label": "&label",
          "@continue_process_payload": "&payload",
          "@counter": "@counter + 1"
        },
        "next_step": ["if @counter > @max_attemps or @continue_process_label == 'No': return goodbye", "if @continue_process_label == 'Si': return welcome"]
    },
    {
      "name": "goodbye",
      "tags": [
        "finish"
      ],
      "actions": [
        {
          "msg": "Gracias por participar!",
          "type": "text"
        }
      ],
      "next_step": null
    }
  ],
  "restart_on_refresh": true,
  "ENVIRONMENT_VARIABLES": {
    "@counter": "1",
    "@max_attemps": "3"
  }
}
```

![Resultado del ejemplo de uso](/files/-LjvWNX9N0Jyr2BzM2EA)
