Калькулятор - это поле в Редакторе блока, которое открывается при клике по одноименной вкладке. В этом поле можно совершать логические или арифметические действия, выполнять функции API- запросов конструктора и доступных интеграций.
В нем можно присвоить(объявить) переменную клиента, перешедшего в данный блок, или назначить значение уже существующим переменным. Например, будет полезно при создании воронки или отслеживания источника трафика.
О работе с переменными рассказали в одноименной статье.

Коротко о главном:
При работе с калькулятором название переменной не может начинаться с цифры.
Неверно: <1_имя>
Верно: <имя_1>.Название переменной не может состоять из двух слов, используйте для разделения символ нижнего подчеркивания "_".
Неверно: <Имя клиента>
Верно: <Имя_клиента>Подробнее читайте в статье "Переменные".
Быстрый доступ к описаниям функций:
- математические
- Для работы с ссылками
- для работы с таблицами Salebot
- работы с регулярными выражениями
- работы со строками
- для работы с датами и временем
- для работы с AI-ассистентом
- работы с клиентами и CRM
- для работы с онлайн-записью
- работы с метками Salebot
- работы со списками
- для работы в мессенджерах
- для работы с сотрудниками
- отправки e-mail
- проверки условия "if": Если
- работы со сторонними API
- работы с датой и временем
- работы с маркетплейсами
Как использовать калькулятор в конструкторе
При обращении к переменной не нужно использовать конструкцию #{}
Пример подсчета значения переменной в поле Калькулятор:

Переменные можно записывать просто названием или через #{}. Все переменные автоматически будут приводиться к числам с плавающей запятой.
Калькулятор поддерживает все необходимые логические и арифметические операции.
Комментарии в калькуляторе
Для комментирования текста используйте /* текст комментария */. Данное сочетание /* */ (теги) позволяют делать в калькуляторе как однострочные, так и многострочные комментарии:

Не забывайте, что комментарий нужно обязательно закрыть тегом */ на конце, поскольку иначе комментарий продолжится с новой строки:

Не забывайте ставить закрывающий тег для комментария, даже если комментарий является последней строкой поля Калькулятор:

Не располагайте комментарии друг за другом, между ними должна быть обязательно хотя бы пустая строка
Константы
"E": число Эйлера e
Поддерживаемые операторы
"+": сложение
"-"': вычитание
"*" умножение
"/": деление
"%'": остаток от деления
"^" "**": возведение в степень
"==" "!=" ">" "<" ">=" "<=": операторы сравнения
"and" "AND" "&&": логическое И
"or" "OR" "||": логическое ИЛИ
Важно! Логические условия с переменными необходимо писать в поле Переменная для сравнения**,** а не в Условие!
Например, на рисунке ниже переход по стрелке осуществится, если переменная Номер_телефона заполнена:

Важно!
Если вы сравниваете переменную со значением в кавычках, то проверьте, нет ли пробела между кавычкой и значением, иначе блок может не отработаться или отработаться некорректно!
Верно (без пробела перед кавычкой и после значения my_new_bot):
Неверно (с пробелом перед кавычкой):
Оператор IF
В калькуляторе можно прописывать условия с оператором IF:
if (score > 90) {
grade = 'отлично'
bonus = 500
} else if (score > 70) {
grade = 'хорошо'
} else {
grade = 'старайся лучше'
}
- Условия можно прописывать в одну строку:
if (paid == 1) { status = 'ok' } else { status = 'wait' } - Внутри веток — сколько угодно строк, вложенные условия и циклы.
- Выполняется только та ветка, чьё условие сработало. Остальные не вычисляются вообще: несуществующая переменная или ошибка в «чужой» строке больше ничего не ломает.
- Подстановка #{переменных} тоже происходит только в активной ветке.
Метод if(условие, если_да, если_нет) работает как раньше, но теперь вычисляется только нужная ветка: status = if(paid == 1, 'Оплачено', 'Ждём оплату: #{payment_url}')
Если paid == 1, ветка с #{payment_url} даже не подставляется — переменной может не существовать.
Циклы while и for, break и continue
i = 0
sum = 0
while (i < 10) {sum += i
i += 1
}
for (i = 0; i < 10; i += 1) {
sum += i
}
Циклы и условия можно свободно вкладывать друг в друга.
- break — досрочный выход из цикла
- continue — переход к следующей итерации:
found = -1
for (i = 0; i < arr_len(items); i += 1) {
if (items[i] == target) {
found = i
break
}
}
for (;;) { ... } — бесконечный цикл (до лимита).
Защита от зацикливания: на один блок переменных — суммарно не более 256 итераций всех циклов. При достижении лимита циклы останавливаются, блок продолжает работать дальше. Досрочный break экономит этот лимит.
Как сохраняются переменные
- Внутри цикла значения обновляются мгновенно: условие цикла и каждая следующая строка видят актуальные данные.
- Сохраняются только финальные значения — один раз, после завершения цикла (в том числе через break). Независимо от количества итераций, запишется только итог.
- Если внутри цикла произошла ошибка, то изменения из цикла не сохраняются вовсе. Значения итераций временные, сохранённым останется то, что было до входа в цикл.
- Переменная цикла for (например, i) — служебная. Живёт только внутри цикла, никогда не сохраняется и исчезает после его завершения.
Локальные переменные
Ключевое слово local создаёт служебную переменную: она работает во всех расчётах до конца блока, но никогда не сохраняется в карточку клиента, поэтому не нужно потом чистить временные tmp и buf через del.
local tmp = get(#{data}, 'items')
local count = arr_len(tmp)
if (count > 5) {
result = 'много'
}
Если у клиента есть обычная переменная с тем же именем — она останется нетронутой: local просто временно её заслонит.
Операторы += и -=
- counter
+=1 - balance
-=price - greeting
+=', привет!'
Работают с числами и строками (для строк += — приклеивание), в любом месте блока.
Переносы строк и JSON без кавычек
Длинное выражение больше не обязано помещаться в одну строку — раньше перенос ломал блок, что являлось частой ошибкой при работе с калькулятором.
Теперь вызов функции можно переносить — просто разрывайте строку после запятой между аргументами:
Словари и массивы пишутся без обёртки в кавычки и на сколько угодно строк:
cfg = {
"greeting": "Здравствуйте!",
"work_hours": [10, 19]
}
hello = cfg["greeting"]
Единственное ограничение: внутри текста в кавычках ('...') разрывать строку нельзя. Переносите после запятой между аргументами или внутри {фигурных} и [квадратных] скобок — там можно разрывать где угодно.
Проверка ИИ
Любые строки калькулятора можно проверить с помощью ИИ, который подскажет все проблемы и ошибки при использовании методов, функций, операторов и циклов.