> For the complete documentation index, see [llms.txt](https://book.microcrm.online/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.microcrm.online/konstruktor-chat-botov/rabota-s-peremennymi.md).

# Работа с переменными

Переменные позволяют сохранять и использовать данные в сценариях.

### Синтаксис

Переменные записываются в двойных фигурных скобках:

```
{{название.переменная}}
```

### Доступные переменные

#### **Сообщение пользователя**

```
{{message.text}} — текст последнего сообщения
```

#### **Контекст (ваши переменные)**

```
{{context.переменная}} — любая переменная, сохранённая через "Сохранить в контекст"

Примеры:
{{context.user_name}}
{{context.score}}
{{context.selected_product}}
```

#### **Данные кнопки**

```
{{callback_data}} — callback_data нажатой кнопки
```

#### **Данные клиента из CRM**

```
{{client.name}} — имя клиента
{{client.email}} — email
{{client.phone}} — телефон
{{client.telegram}} — Telegram ID
{{client.category}} — категория клиента
```

#### **Транзакции клиента**

```
{{transactions.total}} — общая сумма покупок
{{transactions.count}} — количество покупок
{{transactions.last_date}} — дата последней покупки
```

#### **Данные Telegram пользователя**

```
{{user.first_name}} — имя в Telegram
{{user.last_name}} — фамилия в Telegram
{{user.username}} — username в Telegram
```

***

### Формулы и выражения

Можно использовать математические и логические операции:

#### **Математика**

```
{{context.score}} + 10
{{transactions.total}} * 0.1
{{context.count}} - 1
```

#### **Сравнения**

```
{{context.score}} > 100
{{client.category}} == "VIP"
{{transactions.count}} >= 5
```

#### **Логические операции**

```
{{context.age}} > 18 and {{client.category}} == "verified"
{{context.score}} > 50 or {{transactions.total}} > 10000
```

#### **Строковые функции**

```
{{context.text}} contains "ключевое слово"
{{message.text}} starts_with "/"
{{client.name}} ends_with "ов"
```

***

### Примеры использования

#### **Пример 1: Персонализация**

```
Узел: Отправить сообщение
Текст: "Здравствуйте, {{client.name}}! 

У вас {{transactions.count}} покупок на сумму {{transactions.total}} руб."
```

#### **Пример 2: Накопление баллов**

```
Узел 1: Сохранить в контекст
Переменная: score
Значение: 0

Узел 2: Сохранить в контекст (после правильного ответа)
Переменная: score
Значение: {{context.score}} + 10

Узел 3: Отправить сообщение
Текст: "Ваш счёт: {{context.score}} баллов! 🎉"
```

#### **Пример 3: Условие с переменной**

```
Узел: Условие - Переменная
Условие: {{context.score}} >= 100

TRUE → "Поздравляем! Вы набрали {{context.score}} баллов и получаете подарок! 🎁"
FALSE → "Продолжайте играть! Для подарка нужно 100 баллов, у вас: {{context.score}}"
```

***

### Практические примеры

#### Пример 1: Простой приветственный бот

**Цель:** Бот приветствует пользователя по имени и показывает меню.

**Схема:**

```
[Триггер: Команда "/start"]
         ↓
[Действие: Отправить сообщение]
Текст: "Привет, {{user.first_name}}! 👋

Я — бот компании Example. Чем могу помочь?"

Кнопки:
- "О компании" | callback: "about"
- "Услуги" | callback: "services"
- "Контакты" | callback: "contacts"
```

**Добавляем обработку кнопок:**

```
[Триггер: Кнопка "about"]
         ↓
[Действие: Отправить сообщение]
Текст: "Мы — ведущая компания в сфере IT..."
```

***

#### Пример 2: Сбор контактных данных

**Цель:** Запросить у пользователя имя и телефон, сохранить в CRM.

**Схема:**

```
[Триггер: Команда "/contact"]
         ↓
[Действие: Отправить сообщение ⏳]
Текст: "Как вас зовут?"
Ожидать ответ: ВКЛ
Сохранить ответ в: user_name
         ↓ 💬 (обработчик ответа)
         ↓
[Действие: Отправить сообщение ⏳]
Текст: "Приятно познакомиться, {{context.user_name}}! 

Теперь укажите ваш номер телефона:"
Ожидать ответ: ВКЛ
Сохранить ответ в: user_phone
         ↓ 💬 (обработчик ответа)
         ↓
[Действие: HTTP запрос]
Метод: POST
URL: https://your-crm.com/api/leads
Тело: {
  "name": "{{context.user_name}}",
  "phone": "{{context.user_phone}}",
  "telegram": "{{user.username}}"
}
         ↓
[Действие: Отправить сообщение]
Текст: "Спасибо, {{context.user_name}}! 

Ваши данные сохранены. Мы свяжемся с вами в ближайшее время по номеру {{context.user_phone}}."
```

***

#### Пример 3: Бот-викторина с подсчётом баллов

**Цель:** Задать 3 вопроса, подсчитать правильные ответы, выдать результат.

**Схема:**

```
[Триггер: Команда "/quiz"]
         ↓
[Действие: Сохранить в контекст]
Переменная: score
Значение: 0
         ↓
[Действие: Отправить сообщение]
Текст: "Начинаем викторину! 🎯

Вопрос 1: Столица России?"
Кнопки:
- "Москва" | callback: "q1_correct"
- "Санкт-Петербург" | callback: "q1_wrong"
- "Казань" | callback: "q1_wrong"

[Триггер: Кнопка "q1_correct"]
         ↓
[Действие: Сохранить в контекст]
Переменная: score
Значение: {{context.score}} + 1
         ↓
[Действие: Отправить сообщение]
Текст: "Правильно! ✅ Ваш счёт: {{context.score}}

Вопрос 2: ..."

[Триггер: Кнопка "q1_wrong"]
         ↓
[Действие: Отправить сообщение]
Текст: "Неправильно! ❌ Ваш счёт: {{context.score}}

Вопрос 2: ..."

... (аналогично для вопросов 2 и 3)

После всех вопросов:

[Условие: Переменная]
Условие: {{context.score}} >= 2
         ↓
    TRUE → "Отлично! Вы набрали {{context.score}} из 3! 🏆"
    FALSE → "Попробуйте ещё раз! Вы набрали {{context.score}} из 3."
```

***

#### Пример 4: Бот с ИИ помощником

**Цель:** Бот использует AI для ответов на вопросы о товарах.

**Схема:**

```
[Триггер: Команда "/ask"]
         ↓
[Действие: Отправить сообщение ⏳]
Текст: "Задайте ваш вопрос о наших товарах, и я помогу вам с выбором! 🤖"
Ожидать ответ: ВКЛ
Сохранить ответ в: user_question
         ↓ 💬
         ↓
[ИИ Агент]
Провайдер: OpenAI
Модель: GPT-5
Системный промпт: "Ты — консультант магазина электроники TechStore. 
Помогаешь клиентам выбрать товары. 
Каталог: ноутбуки (от 30000 руб), смартфоны (от 15000 руб), наушники (от 2000 руб).
Всегда будь вежлив и предлагай 2-3 варианта."

Пользовательский промпт: "Клиент спрашивает: {{context.user_question}}

Имя клиента: {{user.first_name}}
Количество предыдущих покупок: {{transactions.count}}"

Температура: 0.7
Max tokens: 500
Сохранить ответ в: ai_answer
         ↓
[Действие: Отправить сообщение]
Текст: "{{context.ai_answer}}

Хотите задать ещё вопрос?"
Кнопки:
- "Да" | callback: "ask_again"
- "Оформить заказ" | callback: "make_order"

[Триггер: Кнопка "ask_again"]
         ↓
(возврат к началу сценария)
```

***

#### Пример 5: Бот с уведомлениями менеджеру

**Цель:** При заявке клиента отправить уведомление менеджеру в Telegram.

**Схема:**

```
[Триггер: Команда "/order"]
         ↓
[Действие: Отправить сообщение ⏳]
Текст: "Укажите ваше имя:"
Ожидать ответ: ВКЛ
Сохранить в: client_name
         ↓ 💬
         ↓
[Действие: Отправить сообщение ⏳]
Текст: "Укажите ваш телефон:"
Ожидать ответ: ВКЛ
Сохранить в: client_phone
         ↓ 💬
         ↓
[Действие: Уведомление]
Канал: Telegram
Получатели: [Менеджер по продажам]
Сообщение: "🔔 Новая заявка!

Имя: {{context.client_name}}
Телефон: {{context.client_phone}}
Telegram: @{{user.username}}

Время: {{now}}"
         ↓
[Действие: Отправить сообщение]
Текст: "Спасибо, {{context.client_name}}! 
```
