LogoLogo
  • Smartbot Pro
  • Мини-курс
    • Регистрация и личный кабинет
    • Начальные инструменты сценариев
    • Создание первого сценария
    • Пользователи и сбор информации
    • Заявки, переменные и менеджеры
    • Проверка данных
    • Сбор заявок на вебинар внутри Телеграма
    • Тестирование неопубликованных сценариев
    • Рассылки
    • Шаблон «Тест с набором баллов»
    • Статистика
    • Лайфхаки интерфейса
  • Техподдержка
  • Рецепты
    • Игра в комментариях
    • Бот для ответов на частые вопросы
    • Как получить телефон пользователя
    • Выдача лид-магнита за подписку
    • Тест с набором баллов
    • Как принимать платежи в боте
    • Как собирать заявки через бота
    • Как отправлять заявки в групповой чат
    • Как переслать ссылку на чат с конкретным пользователем
    • Как проверять, сколько людей перешло по реферальным меткам
    • Антиспам с удалением пользователя из группового чата
  • Начало работы
    • Коротко о главном
    • Регистрация в сервисе
    • Подробнее о сценариях
    • Как подключить мессенджер
      • Подключение Telegram
        • 🆕Подключение Telegram Business
      • Подключение ВК
        • Подключение комментариев
      • Подключение Viber
      • Подключение Wazzup
        • Подключение других каналов через Wazzup
        • Привязка аккаунта Wazzup
      • Подключение Jivo
        • Подключение других каналов через Jivo
        • Привязка аккаунта Jivo
        • Особенности в работе с Jivo
      • Подключение канала к сценарию
      • Привязка аккаунта социальной сети
      • Подключение бота в каналы и групповые чаты
        • Добавление бота в групповой чат в Telegram
        • Добавление бота в канал Telegram
        • Добавление бота в групповой чат в ВК
    • Добавление менеджеров
  • Сценарии
    • Основы
      • Создание сценария
      • Шаблоны сценариев
        • Личные шаблоны
        • Шаблон Тайного Санты
      • Интерфейс редактора
      • Публикация сценария
      • Тестирование сценария
      • Как выбирается сценарий
    • События сценария
      • Сообщение от пользователя
      • Новый комментарий
      • Нет подходящего сценария
      • Первое сообщение
      • События ВКонтакте
      • Webhook
      • Фильтр предобработки
        • Настройка фильтра для нежелательных пользователей
    • Действия
      • Отправить сообщение
        • Кнопки
      • Обработать сообщение
        • Сохранение плавающего числа вложений
      • Извлечь данные
      • Сменить контекст
      • Записать в статистику
      • Отправить уведомление
      • Переход в другой сценарий
      • Работа с пользователем
      • Таймер
      • Перевод на оператора
      • Установить переменную
      • Выполнить SmartQuery
      • Бросить кубик
      • Удалить пользователя из чата
    • Условия
      • Условие
      • Условие с вариантами
      • Рандом
      • Проверка подписки
    • Переменные
      • Специальные переменные
      • Пользовательские переменные
      • Глобальные переменные
      • Временные переменные
      • Переменная %ref%
        • Как проверять, сколько людей перешло по реферальным меткам
      • Переменная “Вложение”
      • Где сработал бот — %realm%
    • Прием оплаты
      • Подключение платежной системы
      • ЮKassa для приема платежей
      • Прием оплаты через Тинькофф
      • 🆕Прием оплаты с помощью Telegram Stars
    • Меню для Telegram бота
    • Интеграции
      • Google-таблицы
        • Как собирать данные пользователей в таблицу
      • HTTP-запросы
      • amoCRM
        • Блок "Создать сделку"
        • Блок "Изменить сделку"
        • Переменные для работы с amoCRM
        • 🆕Редактирование сделки, созданной через Wazzup24
      • Get Course
  • Инструменты
    • Smartbot AI
      • Блок "Ответ Chat GPT"
      • 🆕Рецепты с AI ботом
        • Настройка шаблона "Консультация через Smartbot AI"
        • ИИ-лидогенератор
      • Режим "Проконсультировать"
      • Режим "Получить телефон"
    • Рассылки
    • Магазины в Telegram
      • Создание каталога
      • Импорт товаров из Excel-файла
      • Магазин с модификациями
    • Статистика
    • Пользователи
    • Чаты
  • Настройки
    • Проекты
    • Кабинеты
      • Выход из аккаунта и удаление кабинета
  • SmartQuery
    • Введение
    • Синтаксис языка
    • Справочник функций
    • Работа с датами
    • Рецепты и примеры
  • Nocode Cloud
    • Коротко о главном
      • Как подключить Nocode инструмент
    • n8n
      • Блоки в n8n (узлы/ноды)
      • Триггеры в n8n
      • Режимы работы
  • Документы
    • Политика конфиденциальности
    • Пользовательское соглашение
    • Договор публичной оферты
      • Редакция №7 от 17 декабря 2024г
      • Редакция №6 от 7 августа 2024г
      • Редакция №5 от 19 января 2024г
      • Редакция №4 от 31 января 2023г
      • Редакция №3 от 13 декабря 2022г
      • Редакция №2 от 2 ноября 2022 г
      • Редакция №1 от 15 февраля 2022 г
    • Договор публичной оферты для партнеров
    • Подписка и тарифы
      • Как активировать подписку на сервис
      • Тарифы и цены
Powered by GitBook
On this page
  • Основы
  • Как устроен SQ
  • Примеры синтаксиса
  • Функциональное программирование
  • Лямбды (лямбда-выражения)
  1. SmartQuery

Синтаксис языка

В этом разделе описан синтаксис языка

Основы

Как устроен SQ

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

Например, значением выражения 2 * 2 является число 4, а значением выражения "привет" — строка привет.

Примеры синтаксиса

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

Символом # отмечены комментарии (пояснения) к коду.

Арифметика

>>> 2 * 2
4

>>> 2 ** (4 + 10 / 5)
64

Переменные

Переменные позволяют хранить данные пользователей.

Переменные делятся на типы: числа, строки, массивы и словари.

От типа переменной зависит набор действий, который можно с ней выполнить. Например, числа можно сравнивать (>, <, >=, <=, ==, !=), делить и умножать. Строки, можно только складывать.

Имена переменных в боте (специальные, локальные и глобальные) начинаются и заканчиваются со знака процента, например, %сообщение%. С точки зрения SQ эти проценты -- часть имени переменной, а создавать новые временные переменные в самом SQ можно без значков процента, например, x = 10.

Операции сравнения

>>> x = 10
>>> x > 0
True

>>> x <= 0
False

>>> x == 10
True

>>> x += 2
>>> x
12

>>> x *= 2
>>> x
24

>>> y = 0
>>> x == 0 and y > 0 or x != 0 and y < 0
False

>>> not (x == 0 and y > 0 or x != 0 and y < 0)
True

# допустим, что %пол% равен "женский"
>>> 'да' if %пол% == 'женский' else 'нет'
'да'

# допустим, что %сообщение% равно "привет мир"
>>> 'прив' in %сообщение%
True

>>> ' ' in %сообщение%
True

>>> 'пока' not in %сообщение%
True

Вызов функций

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

В SQ существует 3 варианта вызова функций: через точку, через пайп (|) и явно -- они взаимозаменяемые и равноценные.

'привет' | len
6

>>> len('привет')
6

>>> 'привет'.len()
6

Пара примеров:

# предположим, %сообщение% равно "привет мир"
>>> %сообщение%.startswith('привет')
True

>>> %сообщение%.endswith('привет')
False

>>> %сообщение%.endswith('мир')
True

>>> round(0.23)
0

>>> round(0.23, 1)
0.2

>>> 12345678 | pretty
12 345 678

# примечание: \ служит для экранирования кавычки в строке
>>> 12345678 | pretty('\'')
12'345'678

>>> rand([1, 2, 3])
1

Работа с массивами

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

>>> корзина = []
>>> корзина.push('хлеб')
>>> корзина.push('греча')
>>> корзина
['хлеб', 'греча']

>>> 'хлеб' in корзина
True

>>> 'сыр' in корзина
False

>>> корзина | pretty('\n')
хлеб
греча

Словари

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

>>> корзина = {}
>>> корзина['хлеб'] = 3
>>> корзина['греча'] = 10
>>> корзина
{'хлеб': 3, 'греча': 10}

>>> 'хлеб' in корзина
True

>>> 'сыр' in корзина
False

>>> корзина | pretty
хлеб: 3
греча: 10

Функциональное программирование

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

Лямбды (лямбда-выражения)

Лямбда (lambda) — анонимная функция.

В SQ нет возможности объявлять свои функции, но для некоторых задач, вроде преобразования массивов, фильтрации и сортировки можно использовать лямбда-выражения.

Синтаксис

Давайте для примера рассмотрим функцию, которая принимает 3 аргумента: a, b, c и возвращает их сумму:

a, b, c => a + b + c

Таким образом, лямбда-выражение состоит их 2 частей: списка аргументов (до стрелки) и выражения (после стрелки). Результат выражения вернётся при вызове этой функции.

Пример

>>> корзина = {}
>>> корзина['хлеб'] = 3
>>> корзина['греча'] = 10

# выведем словарь в нужном нам формате
>>> корзина | map((k, v) => k + ' - ' + v + ' кг') | join
хлеб - 3 кг
греча - 10 кг

Тут мы использовали функцию map(), в которую передали в качестве аргумента нашу лямбду. Функция map() пройдёт по всем парам ключ-значение (k, v) в словаре корзина и вместо него вернёт строку — результат сложения k, дефиса, v и слова "кг".

PreviousВведениеNextСправочник функций

Last updated 3 years ago