> 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}}! 
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://book.microcrm.online/konstruktor-chat-botov/rabota-s-peremennymi.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
