Переменные
Статья рассказывает о переменных в системе, как их использовать, где их можно использовать. Продемонстрирует результат их работы
Как работать с переменными
Рассмотрим, что такое переменные и как их использовать при создании чат-ботов на конструкторе 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 c учетом милисекунд #{time_of_creation} - время, когда человек был добавлен в бота или написал ему первый раз #{wa_bot} - номер Whatsapp, на который написал пользователь (удобно передавать его в поля СРМ, чтобы распределять заявки между менеджерами) #{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
*Принадлежит компании Meta, запрещенной в России и признанной экстремисткой.
Служебные переменные
Дополнительно к встроенным переменным, в ходе работы бота, могут появляться переменные, указанные ниже. Вы их можете использовать в процессе создания бота. Эти переменные появляются автоматически. Ниже перечислены те, которые могут быть вам полезны.
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-бота
Пользовательские переменные
Пользовательские переменные делятся на - переменные проекта или общие переменные - переменные клиента или клиентские переменные - переменные сделки или обычные переменные - константы
Каждый из видов переменных мы рассмотрим ниже.
ID в мессенджере (platform_id)
ID в мессенджере (platform_id) - идентификатор пользователя/чата/канала в мессенджере. В разделе Клиенты откройте диалог с интересующим клиентом. В правой части экрана диалога есть вкладка О клиенте - Системные переменные или вкладка Все.
ID в мессенджере (переменная platform_id) является служебной (встроенной) переменной и постоянна. Даже если вы удалите пользователя из конструктора, то при новой регистрации в боте ID в мессенджере будет тот же. Этот ID пользователь получает при регистрации в самом мессенджере. Как выглядит platform_id (ID в мессенджере) в карточке клиента:

Переменная platform_id есть как у обычных пользователей, так и у сообществ, каналов чатов.
Чтобы получить platform_id (ID канала в мессенджере) для канала Телеграм, в котором бот является администратором, достаточно написать в канал сообщение (со своего личного аккаунта напишите сообщение в канал).
Будет автоматически создан диалог бота с каналом. И в разделе О клиенте можно скопировать значение platform_id канала. В Телеграм для каналов значение ID в мессенджере идёт со знаком минус. В функциях используем всё значение вместе с минусом.

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

Дальше создаем еще один блок, где благодарим пользователя за предоставленную информацию. В условии перехода в этот блок включим переключатель "Пользователь вводит данные" и в поле "Вводимые данные" напишем "Имя":

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

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

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

Затем добавим два блока, где в стрелках в условиях укажем текст кнопок:


Теперь рассмотрим второй вариант использования переменных: в блоках. Для этого выделим правый блок, в поле "Калькулятор" введем следующий текст: "Клиента_интересует = Первичное жилье". В левом блоке соответственно "Клиента_интересует = Вторичное жилье":

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

А из блоков "Какой у вас бюджет" создадим условие с проверкой введенных данных через встроенную переменную #{question} (в данном случае эта переменная является введенным ответом пользователя).
Выражение "question <= 1000000" в поле "Переменная для сравнения" как раз помогает проверить ответ клиента, распределить его в зависимости от бюджета и переместить по воронке в нужный блок. При этом также нужно активировать чекбокс "Пользователь вводит данные" и назначить переменную, в которую запишется ответ клиента.
Теперь сменим тип последних двух блоков на "Закрыть сделку" и посмотрим что получилось:

Теперь проверим схему в действии:

При переходе в раздел "Клиенты" в диалоге с клиентом вы увидите созданную сделку с переменными сделки, которые хранят данные клиента:

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

Каждая переменная указывается с новой строки, слева имя переменной, справа - значение. При наведении указателя мыши на переменную появляется кнопка , при нажатии на которую можно отредактировать как имя переменной, так и ее значение или удалить переменную:


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

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


Далее переходим в настройки стрелки (соединения) и активируем переключатель "Пользователь вводит данные":

В поле прописываем приставку client. и название переменной (в примере client.name): таким образом, когда клиент напишет свое имя, бот запишет имя в клиентскую переменную name.
Далее переменную можно вывести в следующем сообщении:

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

Использовать их можно без префикса.
Отредактировать общие переменные можно в настройках проекта:

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

Откроется окно, где нужно добавить переменную со значением 0, что означает "Нет клиентов в боте":

Далее в стартовом блоке бота будем увеличивать значение переменной на 1 и отписывать полученное значение в клиентскую переменную нашего клиента.


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

Для ввода промокода добавим блок “Не состояние с условием”, где присвоим переменной "Скидка" значение 25.

А в зеленом блоке выведем переменную с размером скидки:

И проведем стрелку с таймером в ноль секунд из серого блока, чтобы скидка была применена и клиенту пришло сообщение из стартового блока.
Теперь напишем боту:

Без промокода наша скидка равна 10%. Но если мы напишем промокод, то ситуация изменится:

Таким образом, переменная "скидка" после ввода промокода для данного клиента стала равна 25.
Так произошло, потому что запись вида скидка = 25 задала значение для переменной сделки, а не изменила значение одноименной константы.
Основные переменные сделки
Название / Name - название сделки. Наименование Name используется для международной версии проекта.
Описание / Description - описание сделки. Наименование Description используется для международной версии проекта.
budget - Стоимость сделки (число).
Для редактирования переменных с помощью api-запроса /set_order_vars необходимо использовать наименования из данной инструкции с учетом регистра и версии проекта.
Функции для работы с переменными
Лимиты
Максимальная длина названия переменной: 500 Максимальная длина переменной: 100 000 Максимальное количество переменных у клиента или сделки: 1 000
Как правильно работать с переменными
Когда нужно в переменных закрывать в кавычки значение переменной?
Например, client_id = 1202020202 или client_id = '1202020202'?
Верны оба способа. Постановка кавычек в значение переменной влияет только на подсветку кода в калькуляторе. Но хорошей практикой будет для числовых значений не использовать кавычки, а для строковых (то есть для текста) использовать, поскольку это также упрощает чтение кода.



Если передавать ID клиента, ID сайта, ID блока в конструкторе, ID сертификата и другие ID в функциях и методах, нужно ли их закрывать в кавычки?

При передаче ID в методе или функции, его не нужно оборачивать в кавычки:

Что использовать: двойные кавычки или одинарные?
Разницы между использованием одинарных и двойных кавычек нет, но рекомендуем использовать двойные кавычки. В таком случае, например, при вставке переменной внутрь строки, переменная будет подсвечена другим цветом и её проще будет заметить.

ВАЖНО!
Не ставьте пробелы после кавычки!
ПРАВИЛЬНО:

ЭТО НЕВЕРНО!

Как расставлять пробелы?
Одинаково ли работает, если между переменной и равенством есть пробел (например, ans="yes", ans = "yes", ans= "yes", ans ="yes"?

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

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

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

Как сравнивать переменные
Переменные можно сравнивать по значениям для отработки схемы чат-бота. Например, проверить, является ли ваш пользователь совершеннолетним, а также на случай, чтобы разделить схему бота по мессенджерам.
Поддерживаемые операторы:
"+": сложение "-"': вычитание "*" умножение "/": деление "%'": остаток от деления "^" "**": возведение в степень "and" "AND" "&&": логическое И "or" "OR" "||": логическое ИЛИ
Операторы сравнения: "==" — равно "!=" — не равно ">" — больше "<" — меньше ">=" — больше или равно "<=" — меньше или равно
ВАЖНАЯ ОСОБЕННОСТЬ!
Для встроенной переменной tag (тег для запуска бота) для того, чтобы проверить значение на отсутствие в карточке клиента, используйте следующий способ сравнения:
tag == "NONE"
Сравнивать переменные нужно в условии в поле "Переменная для сравнения" (как в настройках стрелки, так и в настройках блока):


Переменная для сравнения работает совместно с условием. То есть должно выполниться как условие в поле "Условие", так и сравнение в поле "Переменная для сравнения".
Если в поле переменная для сравнения указать просто имя переменной, без выражения, то условие будет сравниваться с ней, а не с тем, что ввел пользователь. Например, на рисунке ниже проверяется что клиент из Wahtsapp (переменная client_type в Whatsapp равна 6):

Пример ниже работает идентично:

Обращаем внимание! В поле условие вы не можете прописать несколько значений для сравнения переменной:
Это ошибка!
Если нужно сравнить несколько переменных, то укажите их значения в поле "Переменная для сравнения".
Максимальная длина выражения: 1000 символов
При попытке сравнения значений разных типов в результате будет возвращено значение по умолчанию:
"==" - False "<" - False "!=" - True ">=" - False ">" - False "<=" - False
ВАЖНАЯ ОСОБЕННОСТЬ!
Для встроенной переменной tag (тег для запуска бота) для того чтобы проверить значение на отсутствие в карточке клиента используйте следующий способ сравнения:
tag == "NONE"
Пример:
Бот спрашивает возраст, если он меньше 18 лет, бот отвечает, что человек несовершеннолетний, если больше, то совершеннолетний.

Заметьте, в схеме есть блок без ответа, а из него идут стрелки с таймером. Данный блок сделан специально, чтобы показать как строить схемы, если бот реагирует не на действие пользователя, а на результат вычисления. На первом этапе сохраняется ответ в переменную, а дальше происходит сравнение. Задержка на стрелках стоит 0 для моментального ответа.
Сравнение "Age >= 18" может выглядеть также следующим образом: как больше 18 или равно 18%

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

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

То есть, если у клиента есть переменная age, где указан его возраст от 18 до 99, то блок отработается. Если переменной нет или возраст меньше 18 и больше 99, то блок не будет срабатывать.
Важно!
Если вы сравниваете переменную со значением в кавычках, то проверьте, нет ли пробела между кавычкой и значением, иначе блок может не отработаться или отработаться некорректно!
Верно (без пробела перед кавычкой или после значения my_new_bot):
Неверно (с пробелом перед кавычкой):
Last updated
Was this helpful?