Переменные

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

Как работать с переменными

Рассмотрим, что такое переменные и как их использовать при создании чат-ботов на конструкторе Salebot.

Переменная - это хранилище данных. Переменной присваивается некое текстовое имя:

Рис. 1. Пример переменной под названием payment_sum, в которой лежит сумма для платежа

В Salebot существуют несколько типов переменных:

  1. Пользовательские переменные — это те, которые Вы сами задаете в проекте.

Объявить переменную - значит присвоить некое значение поименованному хранилищу: то есть запись вида a=0 и есть то самое объявление переменной a. Мы только что сказали (объявили) конструктору, что в переменной a мы будем хранить число, пока это значение 0. Присвоить переменной значение имеет такой же смысл .

Также используют выражение Присвоить переменной значение функции, Приравнять переменную к функции. Принцип тот же, после знака равно ставим не конкретное значение, а функцию. Например, s_id = vk_send_message(platform_id, "Привет"). В этом случае в переменную запишется результат выполнения функции.

Обнулить переменную - значит присвоить этой переменной значение 0.

Функции и методы — это определенный набор команд, который заранее установлен Сейлботом. Для большинства функций указываются параметры — значения, которые понимает функция или метод. Как только бот получит значения для функции/метода, далее выполняется определенная команда.

vk_send_message(platform_id, "Привет") — это функция, которая отправляет сообщение вконтакте "Привет".

Рис. 2. Пример переменной под названием s_id с приравненной функцией

ПРАВИЛА РАБОТЫ С ПЕРЕМЕННЫМИ:

  1. Переменная может начинаться только с буквы, с цифры нельзя

    Возраст1 - ✅ правильно

    1Возраст - ❌ неправильно

    age1 - ✅ правильно - рекомендуемый вариант

  2. Переменная не может содержать пробелы и иные спецсимволы, кроме нижнего подчеркивания

    Имя_Фамилия - ✅ правильно

    Имя Фамилия - ❌ неправильно

    имяФамилия - ✅ правильно - рекомендуемый вариант

    В имени переменной нельзя использовать зарезервированные слова языков программирования, например: print, true, false, count, sum и т.д.

  3. КАТЕГОРИЧЕСКИ НЕЛЬЗЯ использовать для имен пользовательских переменных имена встроенных и служебных переменных. С перечнем таких переменных Вы познакомитесь здесь

  4. Рекомендуем:

    • используйте латинские наименования для переменных

    • используйте короткие, но смысловые названия переменных, например: totalSum, pay_name, fio, name_client и т.д.

Как получить значение переменной?

#{} - внутри фигурных скобок укажите имя переменной. Так мы можно обращаться к значению в поле текст сообщения, а в Калькуляторе к значению переменной обращаться нужно просто по имени, без каких-либо дополнительных конструкций.

В поле "Калькулятор" к переменной обращаемся по имени, без использования конструкции #{}.

Например, у нас есть две переменные: цена (sum) и количество (num).

num = 10

sum = 1500

Как вывести итоговую сумму?

Прописываем в калькуляторе:

total_sum = sum * num ✅ правильно

Как нельзя:

total_sum = #{sum} * #{num} - ❌ неправильно

Как сравнивать значения переменных?

В настройках соединения в поле Переменная для сравнения введите:

client_type == 3 переход, если значение переменной равно 3 attachments != None переход, если значение переменной заполнено любым содержимым attachments == None переход, если значение переменной не задано количество_товара >= 100 переход, если количество товара больше или равно 100 количество_товара <= 100 переход, если количество товара меньше или равно 100 имя == "Вася" переход, если значение переменной имя равно Вася

Как удалить переменную из бота?

Для удаления переменной (очищения) в поле Калькулятор введите одно из двух: Название_вашей_переменной = Название_вашей_переменной = ""

После знака = либо пробел, либо двойные (одинарные) кавычки.

Встроенные переменные

Список встроенных переменных:

#{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

whatsapp

7

авито

8

одноклассники

10

в Instagram*

12

Юла

13

Телефония

14

e-mail

16

Telegram Business Account

19

для Циан

20

Max

Служебные переменные

Дополнительно к встроенным переменным, в ходе работы бота, могут появляться переменные, указанные ниже. Вы их можете использовать в процессе создания бота. Эти переменные появляются автоматически. Ниже перечислены те, которые могут быть вам полезны.

Дополнительные служебные переменные вы можете увидеть в документации. Они расположены в тех разделах, к которым имеют отношение.

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.), для переменных сделки префикс не используется.

При получении значения переменной такой префикс опускается.

Пример:

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

проект.лайк = 0 - объявление, выполняется единожды

в блоке, где необходимо проводить подсчет лайков, пишем:

проект.лайк = лайк + 1

Приоритет срабатывания у переменных: переменные сделки (самый высокий), переменные клиента, переменные проекта

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" в поле "Переменная для сравнения" как раз помогает проверить ответ клиента, распределить его в зависимости от бюджета и переместить по воронке в нужный блок. При этом также нужно активировать чекбокс "Пользователь вводит данные" и назначить переменную, в которую запишется ответ клиента.

Теперь сменим тип последних двух блоков на "Закрыть сделку" и посмотрим что получилось:

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

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

Теперь Вы умеете использовать переменные как минимум тремя разными способами:

  1. Присваивать введенным пользователем данным названия переменных ("Имя", "Бюджет")

  2. Присваивать название переменной при переходе в блок (Клиента интересует = Первичное жилье)

  3. Сравнивать переменные с ответом пользователя (question >= 1000001)

Как посмотреть переменные

Переменные можно просмотреть в карточке клиента в разделе Клиенты

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

Отредактировать системные переменные нельзя!

Как задать переменные клиента

Переменные клиента не удаляются, не обнуляются и не пропадают при использования блока Конец сбора данных (красный блок)

Задать переменную клиента можно двумя способами - явно и неявно.

Явный способ объявления переменной - это прописать ее в Калькуляторе одного из блоков воронки.

Например, клиент.возраст = 28 или client.возраст = 28:

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

Пример:

Создадим блок, в котором спросим имя клиента, а также создадим блок ниже, соединенный стрелкой:

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

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

Далее переменную можно вывести в следующем сообщении:

Как задать общие переменные

Общие переменные не удаляются, не обнуляются и не пропадают при использовании блока "Закрыть сделку" (красный блок).

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

Записать переменную можно используя приставку проект., например: проект.количество_обращений = 28 или project.возраст = 28

Использовать их можно без префикса.

Подробнее о работе с функцией get_records_from_table() рассказали в статье "AI-ассистент с Salebot-таблицами".

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

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

Для примера сделаем систему присвоение номера по порядку каждому входящему в бот клиенту.

Перейдем в настройки проекта и создадим новую переменную:

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

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

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

Как задать константные переменные

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

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

В качестве примера представим, что скидка для нового клиента по умолчанию 10%, но если ввести промокод - становится 25%.

В "Настройках проекта" -> "Константы" запишем Скидка : 10

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

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

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

Теперь напишем боту:

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

Таким образом, переменная "скидка" после ввода промокода для данного клиента стала равна 25.

Так произошло, потому что запись вида скидка = 25 задала значение для переменной сделки, а не изменила значение одноименной константы.

Основные переменные сделки

Название / Name - название сделки. Наименование Name используется для международной версии проекта.

Описание / Description - описание сделки. Наименование Description используется для международной версии проекта.

budget - Стоимость сделки (число).

Для редактирования переменных с помощью api-запроса /set_order_vars необходимо использовать наименования из данной инструкции с учетом регистра и версии проекта.

Функции для работы с переменными

Лимиты

Как правильно работать с переменными

Когда нужно в переменных закрывать в кавычки значение переменной?

Например, client_id = 1202020202 или client_id = '1202020202'?

Верны оба способа. Постановка кавычек в значение переменной влияет только на подсветку кода в калькуляторе. Но хорошей практикой будет для числовых значений не использовать кавычки, а для строковых (то есть для текста) использовать, поскольку это также упрощает чтение кода.

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

Тут имелось ввиду использование скобок по типу #{}? при использовании переменных в калькуляторе, их не нужно оборачивать в фигурные скобки. Например вот это будет работать:

result = some_function(client_id, message_id)

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

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

Как расставлять пробелы?

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

Постановка пробелов не влияет на работу методов, переменных и функций. Рекомендуется расставлять пробелы в коде, чтобы он был более читаем.

Last updated

Was this helpful?