SmartBot
  • SmartBot - конструктор ботов для ВКонтакте
  • Подключение
  • Создание сценариев
    • Простые команды
    • Цепочка диалога
    • Как работает бот
    • Шаги
      • Отправить сообщение
      • Ждать сообщение
      • Установить переменную
      • Переход
      • Отложенный переход
      • Извлечь данные
        • Фильтры
        • Шаблон
        • Переход в случае ошибки
      • Таймер
      • Написать админу
      • Записать событие в статистику
      • Работа с аудиторией
      • Выполнить SmartQuery
      • Смена контекста
      • HTTP-запрос
    • Реакции
      • Фильтр предобработки
      • Реакция на оплату
    • Переменные
      • Специальные переменные
      • Пользовательские переменные
      • Операции с переменными
      • Временные переменные
      • Отличия шага Установить переменную и SmartQuery
    • Условия
    • Кнопки
      • Текстовая кнопка
      • Кнопка-переход
      • Кнопка-ссылка
      • Inline-кнопки
      • Кнопка-Vk pay
  • Работа с подписчиками
    • Рассылки
      • Создание рассылок
      • Таргетирование рассылки
      • Отписка от рассылок
      • Email-рассылка через Smartbot
    • Раздел "Пользователи"
    • Списки пользователей
    • Лендинги
      • Создание лендингов
      • Оплата через лендинг
      • Кнопка "подписаться"
      • Интеграция с рекламным кабинетом ВК
      • Запуск рекламного объявления
    • Онлайн-оплата
    • Сбор статистики
  • Модули
    • Яндекс.Деньги
    • Виджет
    • Гугл-таблицы
    • Геймификация
      • Взаимодействие пользователей
    • Источники переходов
    • Модуль HTTP-запросы
      • Пример использования
      • Способы подтверждения владения доменом
  • Скрипты на SmartQuery
    • Введение
    • Синтаксис языка
    • Справочник функций
    • Рецепты
      • Работа с регулярными выражениями
      • Форматирование длинных чисел
      • Разные ответы в зависимости от пола пользователя
      • Шаг "Показать топ" с emoji
      • Простая корзина товаров
      • Корзина товаров со счётчиком каждой позиции
      • Фильтрация спама
      • Получить ссылку на фото из сообщения пользователя
      • Данные из отвеченных и пересланных сообщений
      • Выдача промокодов
  • Политика конфиденциальности
Powered by GitBook
On this page
  • Про шаг "Установить переменную"
  • Про шаг "Выполнить SmartQuery"
  • Список отличий

Was this helpful?

  1. Создание сценариев
  2. Переменные

Отличия шага Установить переменную и SmartQuery

PreviousВременные переменныеNextУсловия

Last updated 4 years ago

Was this helpful?

Исторически сложилось так, что в SmartBot есть 2 разных способа для вычисления значений выражений с переменными: шаг "Установить переменные" и SmartQuery (SQ, шаг Выполнить SmartQuery).

Про шаг "Установить переменную"

Изначально был только шаг "Установить переменные". Его основная задача — сохранять текст в переменную. Так, например, с его помощью можно сохранить ответ пользователя из переменной %сообщение% в какую-то локальную переменную.

Также можно использовать этот шаг для сохранения меток пользователей, например:

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

Алгоритм работы этого шага можно описать следующим образом:

  1. Подставляем значения переменных (в виде текста) в правую часть выражения

  2. Результирующую строку пытаемся выполнить как арифметическое выражение

  3. Если выражение удалось вычислить, то подставляем вместо него,полученный результат

  4. Иначе оставляем всё как было - текстом, полученным в п.1

Такой подход хорош простотой для новичков: пользователю не нужно задумываться на сложными конструкциями языков программирования, не нужно думать над типами операндов. Тут всё — текст. Но он подвержен ошибкам.

Рассмотрим на примере. Пусть у нас есть 2 переменные: %a% и %b%. Допустим, их значения вводит пользователь.

%a%

%b%

Выражение

Результат

10

10

%a% + %b%

20

10

10ш

%a% + %b%

10 + 10ш

Видно, что во втором случае выражение не удалось вычислить (из-за "ш"), и оно осталось не вычисленным, хоть переменные и были подставлены. Другим негативным примером может быть кейс, когда пользователь в переменную занесёт что-то, что может быть проинтерпретировано как арифметическое выражение. Возможно вы не хотите его вычислять, просто хотите сохранить как есть. Но сделать этого не можете, потому что SmartBot всегда пытается вычислить выражение в правой части шага Установить переменную.

%сообщение%

Выражение

Результат

20 * 2

%сообщение%

40

Кроме того, так как этот шаг всегда подставляет переменные в виде текста, вы не можете работать с массивами и словарями в этом шаге без SQ.

Про шаг "Выполнить SmartQuery"

SmartQuery — это встроенный в SmartBot скриптовый язык программирования со строгой динамической типизацией. Во многом он похож на Python.

При использовании SQ не возникает никаких неоднозначностей при интерпретации выражений. Так, например, строки в SQ всегда заключены в кавычки, и значения переменных не подставляются как текст, вместо этого используется их реальное значение, будь то массив, словарь, число или строка.

Приведём несколько примеров:

Значением переменной %var1% будет строка 2 * 2, %var2% — число 4, %var3% — строка из переменной %сообщение%. При этом даже если в %сообщение% будет записано арифм. выражение оно не будет вычислено, потому что строка есть строка, строка — это не выражение.

С помощью SQ можно сделать всё, что можно сделать с помощью "Установить переменную" и гораздо больше, но синтаксис сложнее.

Список отличий

  • Выражения на SQ можно использовать везде, не только в шаге "Выполнить SmartQuery" и в сложных условиях, но и в тексте сообщений, рассылок и т.п. Для этого выражение нужно обернуть в двойные фигурные скобки. Это говорит смартботу, что вместо выражения нужно подставить его текстовое представление результата его вычисления в текст сообщения. Таким образом всё, что находится внутри {{ }} — это выражение на языке SQ, и оно будет вычислено, а всё что снаружи — это просто текст. Обратите внимание, что в шаге "Выполнить SmartQuery" и в сложных условиях фигурные скобки ставить не нужно: там всё поле ввода — это одно выражение на SQ, а не текст.

  • В шаге "Установить переменную" можно использовать такие переменные как %ранд(a, b)% и %дата+N%. В целом, не очень корректно их называть переменными, но так сложилось исторически. В SQ они недоступны, потому что противоречат синтаксису этого языка программирования. Вместо них в SQ есть функция rand(a, b). Кроме того, она также позволяет получить случайное значение из массива. Альтернативы для второй переменной в SQ на данный момент нет.

  • В шаге Установить переменную тоже можно использовать SQ -- в фигурных скобках, также как и везде, где можно использовать обычные переменные. Но скорее всего, удобней будет всё же воспользоваться шагом "Выполнить SmartQuery".

  • Так как в "Установить переменную" подстановка переменных идёт перед вычислением выражения, то для того, чтобы склеить 2 строки вместе вам просто нужно написать их подряд. Тут нет никакого спец. синтаксиса. Смартбот не сможет вычислить это выражение как арифметическое, и просто ограничится подстановкой значений переменных в текст.

  • В SQ того же результата будет добиться гораздо сложнее

  • Работать с словарями и массивами можно только в SQ.

Подробное описание возможностей этого шага можно посмотреть тут: .

Подробнее про SQ можно почитать тут: . Документация: .

Функции из раздела доступны только в шаге Установить переменную. Функции SQ описаны тут: .

Операции с переменными
Введение
Справочник функций
Операции с переменными
Справочник функций