Блок производит математические и логические операции с числами, строками и переменными из доступных в Конструкторе ботов. Поддерживает код на языке JavaScript.
Когда сценарий доходит до блока «Программатор», система выполняет вычисления внутри блока и подставляет на место локальной переменной значения из результата.
Настройка блока «Программатор»
- В Конструкторе ботов выберите «Программатор» и добавьте блок на рабочую область.
- Нажмите «Настроить конфигурацию». В поле «Код» введите код на языке JavaScript.
- В конце перечислите переменные через запятую в функции save. Переменные должны быть заключены в фигурные, а затем в круглые скобки — ({переменная1, переменная2, переменная3}). Пример: save({a, b, c}).
- Если код введён с ошибками, они подсветятся в поле «Код». В поле «Отладчик» появится сообщение об ошибке.
- Нажмите «Тестирование», чтобы проверить выполнение кода. Результат отобразится в поле «Отладчик».
- Если код выполняется без ошибок, нажмите «Сохранить».
Доступные функции
Математические
- abs(a) — получает абсолютное значение (приводит к положительному числу). Пример: abs(-256) вернет 256;
- ceil(a) — округляет число к большему. Пример: ceil(25.66) вернет 26;
- int(a) — приводит числа с дробной частью к целому числу. При этом дробная часть отсекается. Пример: int(1.8) вернет 1;
- is_float(a) — проверяет, является ли строка дробным числом. Пример: is_float(5.5) вернёт True, а is_float(5) — False;
- is_int(b) — проверяет, является ли строка целым числом. Пример: is_int(`5`) вернет True, а is_int (0.5) — False;
- max(a, c) — ищет максимальное число из перечисленных. Можно ввести неограниченное кол-во чисел. Пример: max(4, 2, 9, 6) вернет 9;
- min(a, c) — ищет минимальное число из перечисленных. Можно ввести неограниченное кол-во чисел. Пример: min(4, 2, 9, 6) вернет 2;
- random(a, c) — получает случайное число. Нужно указать 2 параметра: нижнюю и верхнюю границу. Пример: random(-10,10) вернет любое число из диапазона от -10 до 10, например, 1;
- round(a, b) — округляет число до определенного знака. Нужно указать число, которое нужно сократить, и знак, до которого нужно сократить. Пример: round(1.8888888, 2) округлит до 2-го знака после точки, получится 1.89.
Для работы со строками
- substring(a, b, c) — обрезает сроку. Нужно указать три параметра: исходную строку, количество символов для обрезки слева (> 0) и количество символов для обрезки справа (< 0);
- endswith(a, b) — проверяет, заканчивается строка заданной подстрокой или нет. Нужно указать параметры: исходная строка — где ищем, подстрока — что ищем;
- startswith(a, b) — проверяет, начинается строка заданной подстрокой или нет. Нужно указать параметры: исходная строка — где ищем, подстрока — что ищем;
- contains(a, b, с) — проверяет, входит ли вторая строка в первую. Нужно указать параметры: исходная строка — где ищем; вторая строка — что ищем; True или False (в кавычках) — нужно ли учитывать регистр;
- len(a) — подсчитывает количество символов в строке;
- concat(a, b) — складывает строки, переданных в параметрах;
- splitter(a, b, c) — разделяет строки на части. Функция возвращает массив элементов. Нужно указать параметры: исходная строка; разделитель строки — может быть любым символом или строкой (нужно заключить в кавычки); максимальное количество элементов;
- lower(a) — приводит строку к нижнему регистру;
- upper(a) — приводит строку в верхний регистр;
- strip(a) — обрезает пробелы по краям строки;
- capitalize(a) — заменяет первый символ строки на тот же символ верхнего регистра;
- title(a) — приводит каждое слово в строке к виду: первая буква заглавная, остальные — строчные;
- replace(a, b, c, d) — заменяет подстроки в строке на другую подстроку. Нужно указать параметры: исходная строка; подстрока, которую будем менять; подстрока, на которую будем менять; количество замен.
Для работы с регулярными выражениями
- findall(/a/g, b, c) — ищет все вхождения группы в строку. Нужно указать параметры: регулярное выражение; строка, в которой происходит поиск; индекс найденного результата. Индекс считается с нуля — первый найденный результат будет иметь индекс 0;
- similar(a, b) — сравнивает строки с учетом описок. Возвращает True, если строки отличаются менее чем на 30%.
Для работы с датой и временем
- addYear(a, b) — добавляет к указанной дате нужное количество лет. Для вычитания используйте отрицательное число. Нужно указать параметры: исходная дата, количество лет. Пример: addYear('23.05.1994', 5) вернёт 23.05.1999;
- addMonth(a, b) — добавляет к указанной дате нужное количество месяцев. Для вычитания используйте отрицательное число. Нужно указать параметры: исходная дата, количество месяцев. Пример: addMonth('23.05.1994', 5) вернёт 23.10.1994;
- addDays(a, b) — добавляет к указанной дате нужное количество дней. Для вычитания используйте отрицательное число. Нужно указать параметры: исходная дата, количество дней. Пример: addMonth('23.05.1994', 5) вернёт 28.05.1994;
- addMinutes(a, b) — добавляет к указанному времени нужное количество минут. Для вычитания используйте отрицательное число. Нужно указать параметры: исходное время, количество минут. Пример: addMinutes('20:08', 30) вернёт 20:38;
- time_interval(a, b) — проверяет, входит ли текущее время в заданный интервал. Результат выполнения функции True или False. В параметрах нужно указать границы интервала. Пример: сейчас 19:00, time_interval('09:00','18:00'), результат будет — False;
- birthdate(a) — возвращает число дней до ближайшего дня рождения. В параметрах нужно указать дату рождения человека. Пример: сегодня 04.04.2024, birthdate('28.04.1994') вернет 24 дня;
- weekday_date(a) — возвращает дату ближайшего дня недели. Принимает два параметра: день недели, дату которого нужно определить (от 1 до 7); второй параметр — True или False, показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию False.
Пример: сегодня вторник 09.04.2024, weekday_date(4) вернёт 11.04.2024;
- month_date(a) — возвращает ближайшую дату на указанный в параметре день месяца. Принимает два параметра: день месяца, для которого нужно определить ближайшую дату (от 1 до 31); второй параметр — True или False, показывает, возвращать ли сегодняшнюю дату, если нужный день сегодня. Второй параметр можно не указывать, по умолчанию False.
Пример: сегодня 4 марта 2024 года, month_date(5) вернет 05.04.2024;
- convert_datetime(a, b, c) — конвертирует дату и время. Нужно 3 параметра: дата, формат входной строки, формат результата. Пример: convert_datetime(`2011-11-03`, `%Y-%m-%d`; `%Y/%m/%d`) вернет 2011/11/03;
- get_datetime(a) — получает текущее время в определенном формате. Нужно указать в каком формате вернуть время. Пример: сегодня 05.04.2024, get_datetime('%Yгод %mмесяц %dдень') вернёт 2024.04.05.
Обработка ошибок с помощью try...catch
Чтобы обработать ошибки в коде, можно использовать конструкцию try...catch. При возникновении ошибки в блоке try запустится выполнение блока catch.
В блоке try нужно написать код, а в блоке catch — что делать, если возникнет ошибка:
- Код выполняется внутри блока try.
- Если ошибок нет, то блок catch игнорируется.
- Если возникнет ошибка, то начинает работать блок catch.
- Переменная err будет содержать сообщение об ошибке.
Пример сценария в Конструкторе ботов
Блок может понадобиться, например, если нужно посчитать количество дней до дня рожденья и передать результаты вычислений в следующие блоки.
В таком случае код Программатора будет выглядеть так:
let a = '{{str1}}'
r3 = birthdate(a)
sale = random(11111, 99999)
save({r3, sale})
В приведенном ниже сценарии:
1. Клиенту предлагается тип подарка: купон или скидка на день рожденья. В блоке «Условие» указаны два варианта развития сценария:
2. Если клиент пишет «день рождения», ему отправляется сообщение с запросом даты рождения.
3. После получения сообщения с датой, блок «Программатор» вычисляет количество дней до нее и вносит результат в строковую переменную '{{str1}}'. Также генерирует случайное число для скидки в переменную '{{sale}}' и количество дней до скидки в '{{r3}}'.
4. Блок «Изменить переменную» заменяет значение даты рождения.
5. Клиенту отправляется сообщение с количеством дней до активации скидки — его дня рождения. Значение берется из переменной '{{r3}}'.
6. В CRM-системе создается задача — отправить клиенту скидку в день рождения.
7. Если клиент пишет «купон», ему отправляется сообщение про получение стандартной скидки 15%;
8. В CRM-системе создается задача — отправить купон на скидку.
9. В конце обоих веток сценария происходит возврат в начало.
Видео
Наглядно о работе с блоком смотрите в видео инструкции: