Как работать с переменными
Рассмотрим, что такое переменные и как их использовать при создании чат-ботов на конструкторе Salebot.
Обращаем внимание!
Необходимо учитывать лимиты по переменным и константам в проекте:
- Максимальное количество шаблонных переменных — 100;
- Название шаблонной переменной не может превышать 100 символов;
- Максимальное количество констант проекта — 50;
- Название константы не может превышать 100 символов;
- Значение константы не может превышать 5000 символов.
Переменная - это хранилище данных. Переменной присваивается некое текстовое имя:

Рис. 1. Пример переменной
под названием payment_sum, в которой лежит
сумма для платежа
В Salebot существуют несколько типов переменных:
- Встроенные переменные;
- Служебные переменные;
- Пользовательские переменные — это те, которые Вы сами задаете в проекте.
Объявить переменную - значит присвоить некое значение поименованному хранилищу: то есть запись вида a=0 и есть то самое объявление переменной a. Мы только что сказали (объявили) конструктору, что в переменной a мы будем хранить число, пока это значение 0. Присвоить переменной значение имеет такой же смысл.
Также используют выражение Присвоить переменной значение функции, Приравнять переменную к функции. Принцип тот же, после знака равно ставим не конкретное значение, а функцию. Например, s_id = vk_send_message(platform_id, "Привет"). В этом случае в переменную запишется результат выполнения функции.
Обнулить переменную - значит присвоить этой переменной значение 0.
Функции и методы — это определенный набор команд, который заранее установлен Сейлботом. Для большинства функций указываются параметры — значения, которые понимает функция или метод. Как только бот получит значения для функции/метода, далее выполняется определенная команда.
vk_send_message(platform_id, "Привет") — это функция, которая отправляет сообщение вконтакте "Привет".

Рис. 2. Пример переменной
под названием s_id с приравненной функцией
ПРАВИЛА РАБОТЫ С ПЕРЕМЕННЫМИ:
-
Переменная может начинаться только с буквы, с цифры нельзя
Возраст1 - ✅ правильно
1Возраст - ❌ неправильно
age1 - ✅ правильно - рекомендуемый вариант
-
Переменная не может содержать пробелы и иные спецсимволы, кроме нижнего подчеркивания
Имя_Фамилия - ✅ правильно
Имя Фамилия - ❌ неправильно
имяФамилия - ✅ правильно - рекомендуемый вариант
В имени переменной нельзя использовать зарезервированные слова языков программирования, например: print, true, false и т.д.
-
КАТЕГОРИЧЕСКИ НЕЛЬЗЯ использовать для имен пользовательских переменных имена встроенных и служебных переменных. С перечнем таких переменных Вы познакомитесь здесь
-
Рекомендуем:
- используйте латинские наименования для переменных
- используйте короткие, но смысловые названия переменных, например: totalSum, pay_name, fio, name_client и т.д.
Как получить значение переменной?
#{} - внутри фигурных скобок укажите имя переменной. Так мы можно обращаться к значению в поле текст сообщения, а в Калькуляторе к значению переменной обращаться нужно просто по имени, без каких-либо дополнительных конструкций.
Конструкция #{} позволяет получить значение переменной. Используется эта конструкция в поле Текст сообщения для вставки значения переменной в текст.
Пример:
Система понимает вложенные переменные, где значение одной переменной входит в имя переменной другой. Например: #{q#{test#{i}}}
В поле "Калькулятор" к переменной обращаемся по имени, без использования конструкции #{}.
Например, у нас есть две переменные: цена (sum) и количество (num).
num = 10
sum = 1500

Как вывести итоговую сумму?
Прописываем в калькуляторе:
total_sum = sum * num ✅ правильно

Как нельзя:
total_sum = #{sum} * #{num} - ❌ неправильно
Как удалить переменную из бота?
Для удаления переменной (очищения) в поле Калькулятор введите одно из двух:
Название_вашей_переменной =
Название_вашей_переменной = ""
После знака = либо пробел, либо двойные (одинарные) кавычки.
Обратите внимание! Важно указывать приставку для места определения принадлежности переменной.
Для переменных проекта (тогда переменная будет записана в настройки проекта) - это project:
project.Название_вашей_переменной =
или project.Название_вашей_переменной = ""Для переменных клиента client:
client.Название_вашей_переменной =
или client.Название_вашей_переменной = ""Для переменных сделки приставка не указывается.
Встроенные переменные
Список встроенных переменных:
#{none} - проигнорировать сообщение
#{api_key} - токен API. Он передается в вызовах API Salebot
#{attachment_url} - в этой переменной содержится ссылка на вложение
#{attachments} - URL вложений к сообщению пользователя в формате JSON-массива
#{avatar} - ссылка на аватар пользователя (которая отображается в разделе Клиенты)
#{client_id} - ID клиента в конструкторе. Он передается в вызовы API.
#{client_type} - тип мессенджера, откуда пришел клиент. Значения описаны тут
#{current_date} - текущая дата в формате dd.mm.yyyy по часовому поясу проекта
#{current_time} - время проекта в формате hh:mm по часовому поясу проекта
#{custom_answer} - ответ, полученный с сервера, указанного в поле URL для ответа с сервера
#{message_from_outside} - тип входящего сообщения, может быть:
- обычное сообщение =
0 - сообщение, отправленное через API =
1 - сообщение из CRM (Амо, Битрикс) =
2 - уведомление Callback (желтоватый фон в диалоге) =
3 - уведомление телефонии (светло-синий фон в диалоге) =
5
Переменная появляется при каждом входящем сообщении, в карточке клиента не отображается. Можно использовать в поле Переменная для сравнения для настройки срабатывания блоков с условием и стрелок.
#{date_of_creation} - дата, когда человек был добавлен в бота или написал ему первый раз
#{full_name} - имя и фамилия собеседника
#{group} - бот, к которому привязан клиент (в карточке клиента называется Привязан к боту)
#{main_client_id} - ID основного клиента среди связанных карточек клиентов
#{message_id} - текущее состояние диалога с клиентом. По умолчанию NONE
#{messenger} - название мессенджера, откуда пришел клиент
#{name} - имя собеседника
#{next_day} - завтрашняя дата в формате dd.mm.yyyy
#{order_id} - идентификатор заявки (идентификатор клиента и внутренний идентификатор заявки через дефис)
#{order} - содержимое заявки, созданной пользователем
#{platform_id} - ID клиента в мессенджере
#{question} - сообщение пользователя
#{timestamp} - текущий timestamp с учетом миллисекунд
#{time_of_creation} - время, когда человек был добавлен в бота или написал ему первый раз
#{wa_bot} - номер WhatsApp, на который написал пользователь (удобно передавать в CRM)
#{weekday} - день недели в виде числа, где понедельник = 1, вторник = 2 и т.д.
Значения client_type
| Значение | Мессенджер |
|---|---|
| 0 | ВКонтакте |
| 1 | Telegram |
| 2 | Viber |
| 3 | Facebook* |
| 5 | Онлайн-чат |
| 6 | |
| 7 | Авито |
| 8 | Одноклассники |
| 10 | Instagram* |
| 12 | Юла |
| 13 | Телефония |
| 14 | |
| 16 | Telegram Business Account |
| 19 | Циан |
| 20 | Max |
| 21 | Telegram Account |
| 22 | TikTok |
| 23 | Discord |
* Принадлежит компании Meta Platforms Inc., деятельность которой признана экстремистской на территории РФ и запрещена.
Служебные переменные
Дополнительно к встроенным переменным, в ходе работы бота могут появляться переменные, указанные ниже. Они создаются автоматически и могут использоваться при разработке бота.
Дополнительные служебные переменные вы можете увидеть в документации. Они расположены в тех разделах, к которым имеют отношение.
avito_profile — ссылка на профиль покупателя в Avito
avito_order_id — идентификатор объявления
avito_order_url — ссылка на объявление в Avito
phone — номер телефона
notSubscribed — если переменная равна 1, клиент отписался от сообщений и новые сообщения ему отправляться не будут
clientBlocked — клиент заблокирован и бот для него не работает
story_url — идентификатор сторис, на которую ответил клиент в Instagram*
ok_user_id — идентификатор пользователя в Одноклассниках
viewed_page — страница, с которой человек пишет в онлайн-чат
wa_bot — номер телефона WhatsApp-бота
Какие переменные могут быть созданы при оплате, читайте в инструкциях по подключению платежных сервисов в разделе Эквайринг.
Пользовательские переменные
Пользовательские переменные делятся на:
Каждый из видов переменных рассмотрим ниже.
Не используйте одинаковые имена для разных видов переменных, чтобы не сталкиваться с ситуацией, когда конструктор использует не то значение, которое вы ожидали.
При присвоении значения переменной важно указать её тип, используя соответствующие префиксы:
client.— переменная клиента;project.— переменная проекта;- для переменных сделки префикс не используется.
При получении значения переменной префикс указывать не нужно.
Пример:
project.лайк = 0Далее:
project.лайк = лайк + 1
Приоритет переменных:
- переменные сделки;
- переменные клиента;
- переменные проекта.
ID в мессенджере (platform_id)
ID в мессенджере (platform_id) — идентификатор пользователя, чата или канала в мессенджере.
В разделе Клиенты откройте диалог с нужным клиентом. В правой части экрана откройте вкладку О клиенте → Системные переменные или вкладку Все.
ID в мессенджере (platform_id) является встроенной служебной переменной и не изменяется. Даже если удалить пользователя из конструктора, после повторной регистрации в боте значение platform_id останется прежним.
Как выглядит platform_id в карточке клиента:

Переменная platform_id существует как у пользователей, так и у сообществ, каналов и чатов.
Чтобы получить platform_id Telegram-канала, в котором бот является администратором:
- Напишите сообщение в канал со своего личного аккаунта.
- Автоматически будет создан диалог бота с каналом.
- В разделе О клиенте можно скопировать значение
platform_id.
Для Telegram-каналов
platform_idначинается со знака-. При использовании в функциях передавайте значение полностью, вместе с минусом.

Как использовать переменные
Переменные можно использовать в условиях, заявках, сообщениях пользователю, блоках и других элементах схемы.
Рассмотрим пример создания чат-бота для агентства недвижимости.
Создайте блок Стартовое условие, в котором спросите имя пользователя:

Создайте следующий блок, в котором поблагодарите пользователя.
В настройках перехода:
- включите Пользователь вводит данные;
- в поле Вводимые данные укажите
Имя.

В данном случае Имя — это переменная, в которую будет записан ответ пользователя.
Название переменной может быть любым (на русском или английском языке, также допускаются цифры).
После этого можно обратиться к значению переменной:

Бот будет работать следующим образом:

Теперь усложним пример.
В этом же блоке спросим пользователя, интересует ли его первичное или вторичное жилье:

Создадим два блока и настроим переходы по тексту кнопок:


Теперь используем переменные в блоках.
В правом блоке в поле Калькулятор укажем:
Клиента_интересует = "Первичное жилье"
В левом блоке:
Клиента_интересует = "Вторичное жилье"

При переходе в один из блоков пользователю будет присвоена соответствующая переменная, которую можно использовать далее, например при создании заявки.
Далее спросим бюджет клиента и создадим два новых блока:

В стрелках настроим проверку введенного значения через встроенную переменную #{question}.
Например:
question <= 1000000
При этом необходимо:
- включить переключатель Пользователь вводит данные;
- указать переменную, в которую будет записан бюджет.
После этого последние два блока можно изменить на тип Закрыть сделку.
Получится следующая схема:

Результат работы:

В разделе Клиенты в карточке пользователя появится сделка со всеми записанными переменными:

Таким образом, переменные можно использовать как минимум тремя способами:
- Записывать ответы пользователя в переменные (
Имя,Бюджет). - Присваивать значения переменным при переходе в блок (
Клиента_интересует = "Первичное жилье"). - Использовать переменные в условиях (
question >= 1000001).
Как посмотреть переменные
Просмотреть переменные можно в карточке клиента в разделе Клиенты.

Каждая переменная отображается отдельной строкой:
- слева — название;
- справа — значение.
При наведении курсора появляется кнопка редактирования:

Через неё можно изменить имя переменной, её значение или удалить переменную.


Системные переменные редактировать нельзя.
Как задать переменные клиента
Переменные клиента не удаляются, не обнуляются и не пропадают при использовании красного блока «Закрыть сделку».
Задать переменную клиента можно двумя способами: явно и неявно.
Явный способ
Пропишите переменную в поле Калькулятор одного из блоков.
Например:
client.возраст = 28
или
клиент.возраст = 28

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


Перейдите в настройки стрелки и включите переключатель Пользователь вводит данные:

В поле ввода укажите переменную с префиксом client..
Например:
client.name
После ввода имени пользователя значение автоматически сохранится в клиентской переменной name.
Использовать её можно уже без префикса:

После записи клиентские переменные используются так же, как обычные — без префикса
client..
Как задать общие переменные
Общие переменные не удаляются, не обнуляются и не пропадают при использовании блока «Закрыть сделку».
Общие переменные доступны всем пользователям проекта.
Их можно использовать, например:
- для хранения общего счётчика;
- для взаимодействия пользователей между собой;
- для управления логикой проекта.
Записываются они с использованием префикса project.:
project.количество_обращений = 28
или
проект.возраст = 28

При использовании префикс писать уже не нужно.
Подробнее о работе функции
get_records_from_table()рассказано в статье «AI-ассистент с Salebot-таблицами».
Редактировать общие переменные можно в настройках проекта:

Пример использования общих переменных
Сделаем счётчик клиентов.
Откройте Настройки проекта и создайте новую переменную:

Задайте ей значение 0:

В стартовом блоке увеличивайте значение счётчика на единицу и записывайте его клиенту:

Не забудьте установить ограничение, чтобы одному клиенту нельзя было увеличить счётчик повторно.

Как задать константные переменные
Константы — это постоянные переменные, значения которых редко меняются или не меняются вовсе.
В отличие от общих переменных:
- доступ к ним имеет только текущий клиент;
- при записи нового значения изменяется только значение для этого клиента, сама константа проекта не меняется.
Константы удобно использовать для хранения:
- стоимости товаров;
- скидок;
- токенов;
- контактных данных;
- других постоянных значений.
Пример использования констант
Предположим:
- стандартная скидка — 10%;
- после ввода промокода — 25%.
В Настройки проекта → Константы создайте константу:
Скидка = 10

Создайте блок Не состояние с условием и в калькуляторе укажите:
Скидка = 25

В сообщении используйте переменную скидки:

Соедините блоки стрелкой с таймером 0 секунд, чтобы изменение применилось сразу.
Без промокода пользователь увидит:

После ввода промокода:

В данном случае запись
Скидка = 25
создала переменную сделки, а не изменила значение одноимённой константы проекта.
Основные переменные сделки
Название / Name — название сделки.
Описание / Description — описание сделки.
budget — стоимость сделки (числовое значение).
Для изменения этих переменных через API (/set_order_vars) используйте названия из документации с учётом регистра и языка проекта.
Функции для работы с переменными
https://docs.salebot.pro/peremennye-1/kalkulyator/dlya-raboty-s-peremennymi
Лимиты
Максимальная длина имени переменной — 500 символов.
Максимальная длина значения переменной — 100 000 символов.
Максимальное количество переменных у клиента или сделки — 1000.
Как правильно работать с переменными
Когда нужно заключать значение переменной в кавычки?
Например:
client_id = 1202020202
или
client_id = "1202020202"
Оба варианта работают корректно.
Использование кавычек влияет только на подсветку синтаксиса в калькуляторе.
Рекомендуется придерживаться следующего правила:
- для чисел — без кавычек;
- для строк (текста) — в кавычках.
Так код становится более читаемым.



Нужно ли заключать ID в кавычки?
Если передаются:
- ID клиента;
- ID сайта;
- ID блока;
- ID сертификата;
- другие идентификаторы,
то заключать их в кавычки не требуется.

Правильный пример:

Одинарные или двойные кавычки?
Разницы между одинарными и двойными кавычками нет.
Рекомендуется использовать двойные кавычки, поскольку при вставке переменных внутрь строки они лучше подсвечиваются.

Важно!
Не ставьте пробел после открывающей кавычки и перед закрывающей.
Правильно:

Неправильно:

Как расставлять пробелы?
Все варианты работают одинаково:
ans="yes"
ans = "yes"
ans= "yes"
ans ="yes"
Пробелы не влияют на работу функций, методов и переменных.
Рекомендуется использовать пробелы для лучшей читаемости кода.

Как писать комментарии в калькуляторе
Комментарии нужны только для удобства чтения кода и не влияют на выполнение функций.
Для комментариев используется конструкция:
/* текст комментария */
Она подходит как для однострочных, так и для многострочных комментариев.

Обязательно закрывайте комментарий:
*/
Иначе комментарий продолжится на следующих строках.

Между соседними комментариями должна быть хотя бы одна пустая строка.
Даже если комментарий находится последней строкой калькулятора, его необходимо закрыть.

Как сравнивать переменные
Переменные можно сравнивать по значениям и использовать результат для переходов по схеме.
Например:
- определить совершеннолетие пользователя;
- разделить логику по мессенджерам;
- проверять заполненность данных.
Подробнее:
- разделение схемы по мессенджерам;
- разделение схемы по разным аккаунтам одного мессенджера.
Поддерживаемые операторы
Арифметические
+ сложение
- вычитание
* умножение
/ деление
% остаток от деления
^
** возведение в степень
Логические
and
AND
&&
логическое И
or
OR
||
логическое ИЛИ
Операторы сравнения
== равно
!= не равно
> больше
< меньше
>= больше или равно
<= меньше или равно
Особенность переменной
tagЧтобы проверить отсутствие значения:
tag == "NONE"
Сравнения указываются в поле Переменная для сравнения.


Поле Переменная для сравнения работает совместно с полем Условие.
Если в поле сравнения указать только имя переменной, то сравнение будет происходить именно с ней, а не с ответом пользователя.
Например, проверка, что клиент пришёл из WhatsApp (client_type = 6):

Следующий пример работает аналогично:

В поле Условие нельзя перечислять несколько значений.
❌ Это неверно:
Если требуется проверить несколько условий, используйте поле Переменная для сравнения.
Примеры сравнений
client_type == 3
Переход, если значение переменной равно 3.
attachments != None
Переход, если переменная заполнена.
attachments == None
Переход, если переменная пустая.
количество_товара >= 100
Переход, если значение больше или равно 100.
количество_товара <= 100
Переход, если значение меньше или равно 100.
имя == "Вася"
Переход, если имя равно "Вася".
Чтобы проверить, заполнена ли переменная:
"#{value}" == ""
или
"#{value}" != ""
где value — имя переменной.
Результатом любого сравнения будет логическое значение:
TrueFalse
Максимальная длина выражения — 1000 символов.
Если сравниваются значения разных типов, возвращается значение по умолчанию:
== False
!= True
> False
< False
>= False
<= False
Для переменной
tagпроверка отсутствия значения выполняется так:tag == "NONE"
Пример сравнения переменных
Рассмотрим пример.
Бот спрашивает возраст пользователя:
- если возраст меньше 18 лет — сообщает, что пользователь несовершеннолетний;
- если 18 лет и больше — совершеннолетний.

Обратите внимание, что в схеме присутствует блок без ответа, из которого идут стрелки с таймером.
Такой блок используется, когда дальнейшая логика зависит не от нового сообщения пользователя, а от результата вычисления.
Сначала ответ пользователя сохраняется в переменную, после чего выполняется сравнение.
Таймер на стрелках установлен в 0 секунд, чтобы переход произошёл мгновенно.
Выражение
Age >= 18
можно записать и другим способом:

Обратите внимание на ошибки.
Следующие условия составлены неверно:
Число не может одновременно быть больше, меньше или равно 18.
Такие условия не имеют смысла.
Важно!
Логические выражения необходимо писать в поле Переменная для сравнения, а не в поле Условие.
Например, блок ниже выполнится только в том случае, если переменная phone заполнена:

Следующий пример показывает использование нескольких операторов одновременно:

В данном случае блок выполнится, если одновременно соблюдаются все условия:
- существует переменная
age; - значение
ageнаходится в диапазоне от 18 до 99 включительно.
Если переменная отсутствует либо возраст меньше 18 или больше 99, переход не произойдёт.
Важно!
Если сравниваете строковое значение в кавычках, убедитесь, что внутри кавычек нет лишних пробелов.
Правильно:
Неправильно:






