При заполнении блоков можно использовать маски для создания определяемых значений или работы с массивами. Если в маске будет использоваться ссылка на некорректный блок/несуществующие данные — они будут обработаны как пустая строка.
Содержание
Если
В некоторых случаях необходимо заполнять значение в зависимости от входящих/иных данных. Для этого можно использовать маску if-else.
Пример:
{% if input.type == "lead" %}Заявка{% elif input.type == "deal" %}Сделка{% endif %}
Благодаря маске if-else можно сделать настройку полей динамической в зависимости от входящих данных без множества проверок и создания переменной.
Допустимые варианты использования:
- if — endif
- if — elif — endif
- if — elif — else — endif
- if — else — endif
Для составления условий можно использовать логические операторы и сравнения.
Логические операторы
- and — если требуется соблюсти сразу два и более условий
- or — если достаточно соблюдения одного из нескольких
- not — если требуется инвертировать одно из условий
Пример:
{% if input.type == "lead" and input.phone %} ... {% endif %}
Сравнения
==
— равно!=
— не равно>
— больше>=
— больше или равно<
— меньше<=
— меньше или равноin
— входит (если проверяется входит ли левая часть условия в массив справа)not in
— не входит (если проверяется не входит ли левая часть условия в массив справа)
Цикл
Иногда во входящих данных могут приходить массивы (товары/списки/…) и необходимо их прописать в примечание или поле, для этого могут использоваться циклы.
Пример (создание строки используя данные товаров из запроса):
{% for prod in input.products %} {{prod.name}} {{prod.quantity}} {{prod.weight_class_id}} x {{prod.price}} = {{prod.total}}{% endfor %}
Маски цикла
Внутри циклов доступны все те же маски что и в остальной схеме, плюс специфические для цикла:
{{forloop.counter}}
— счётчик цикла, показывает какой элемент по порядку сейчас обрабатывается (1, 2, 3, ….){{forloop.counter0}}
— счётчик цикла, начинается с нуля (0, 1, 2, …){{forloop.revcounter}}
— обратный счётчик цикла до 1{{forloop.revcounter0}}
— обратный счётчик цикла до 0{{forloop.first}}
— true если первая итерация цикла{{forloop.last}}
— true если последняя итерация цикла{{forloop.parentloop. ...}}
— доступ к данным родительского цикла (если один цикл производится внутри другого), например —{{forloop.parentloop.counter}}
Фильтры
Применяются для работы с полями функций/переменных. Используются внутри маски, например — {{#4.Бюджет|to_currency}}
или {{#4.Название|capitalize}}
.
Работа со строками
capitalize
Изменяет строку, чтобы она начиналась с заглавной буквы (Строка начинается так ...
).
lower
Изменяет строку, переводя все символы в нижний регистр (только нижний регистр
).
upper
Изменяет строку, переводя все символы в верхний регистр (ТОЛЬКО ВЕРХНИЙ РЕГИСТР
).
length
Считает количество символов в строке.
Если применить к массиву, результатом обработки будет количество элементов в массиве.
Например length
к массиву [ Услуга1, Услуга2, Услуга3 ]
в результате получится 3
substr
Получает фрагмент строки по параметрам:
- Начало фрагмента* — любое целое число. Если указано отрицательное — отсчёт ведётся от конца строки.
- Количество символов — положительное число. Если не указано — фрагмент берётся до конца строки.
Например, если применить фильтр:
substr:"5"
к строкеФИО: Иванов Иван Иванович
, то в результате получимИванов Иван Иванович
;substr:"1","6"
к строке№456732 Лид по звонку
, то в результате будет456732
;
split
Превращает строку в массив, разделяя её по разделителю (если не передан, то им считается ,
). Например:
split
к строкеУслуга 1,Услуга 2,Услуга 3
, результат —['Услуга 1', 'Услуга 2', 'Услуга 3']
;split:"&"
к строкеservice&goods&time
, результат —['service', 'goods', 'time']
join
Обратная к split функция, превращает массив в строку, объединяя его при помощи указанного символа (если не передан, то им считается ,
). Например:
join
к массиву['Услуга 1', 'Услуга 2', 'Услуга 3']
, результат —Услуга 1,Услуга 2,Услуга 3
;join:"&"
к массиву['service', 'goods', 'time']
, результат —service&goods&time
reverse
Возвращает строку, число или массив в обратном порядке. Например:
reverse
к массиву['Услуга 1', 'Услуга 2', 'Услуга 3']
, результат —['Услуга 3', 'Услуга 2', 'Услуга 1']
,reverse
к строкеTest string
результат —gnirts tseT
reverse
к числу"123456"
, результат"654321"
(возвращается в формате строки)
replace
Функция ищет строку для указанного значения и возвращает новую строку, где указанные значения будут заменены.
replace
к строкеTest string
.{{Test string|replace: "Test","Word"}}
. РезультатWord string
,replace
к строкеTest string
.{{Test string|replace: "Test","Word"|replace: "r","2"}}
. РезультатWo2d st2ing
,replace
к строке"Test_String": "12,34,56"
.{{Test string|replace:"\,","."}}
. Результат12.34.56
,
slice
Функция извлечения из строки одного символа или некоторого фрагмента. При обращении к массиву выделяет фрагмент массива по заданным параметрам.
slice:"0","5"
к массиву["value1","value2","value3","value4","value5","value6","value7","value8"]
, результат —["value1","value2","value3","value4","value5"]
,slice:"0","-2"
к массиву["value1","value2","value3","value4","value5","value6","value7","value8"]
, результат["value1","value2","value3","value4","value5","value6"]
slice:"-1"
к массиву["value1","value2","value3","value4","value5","value6","value7","value8"]
, результат["value8"]
slice:"2","8"
к строкеHelloWorld!
, результат"lloWorld"
slice:"-6"
к строкеHelloWorld!
, результат"World!"
Работа с датами
format
Используется для превращения даты в строку. Например:
{{#1.date|format:"%Y-%m-%d"}}
— получим строку вида «2023-01-25»
Подробнее о возможных форматах — Дата и время.
isoformat
Превращает дату в строку формате ISO — 2021-07-27T16:02:08.070557
timestamp
Превращает дату в timestamp
Преобразования чисел
to_cardinal
Используется для превращения числа в текстовое представление, принимает в настройки язык. Например:
{{тестовая_переменная|to_cardinal}}
->один
{{тестовая_переменная|to_cardinal:"en"}}
->two
to_ordinal
Используется для превращения чисел в числительные, принимает в настройки язык. Например:
{{тестовая_переменная|to_ordinal}}
->первый
{{тестовая_переменная|to_ordinal:"en"}}
->second
to_currency
Используется для преобразования суммы в письменный вид, принимает в настройки язык и валюту. Например:
{{тестовая_переменная|to_currency}}
->сто один рубль 00 копеек
{{тестовая_переменная|to_currency:"en","USD"}}
->one hundred and one dollars 00 cents
prep
Используется для форматирования чисел. На примере value = 123456789
:
{{input.value|prep:"_"}}
— разделяет строку на группы по три символа, используя символ подчеркивания"_"
в качестве разделителя. ->123_456_789
- Форматирует число с двумя знаками после запятой
{{input.value|prep:".2f"}}
->123456789.00
- Добавляет нули слева до достижения длины 15 символов
{{input.value|prep:"0>15"}}
->000000123456789
В строковых функциях, если нужно ввести какой-то системный символ (запятая или кавычки) то их надо экранировать символом \
Например, если есть массив "my_key": ["value1", "value2", "value3", "value4"]
и мы используем фильтр: {{input.my_key|join:"\, "}}
, то в результате получим: "value1, value2, value3, value4"
Примеры
- Подставляем ID менеджера в зависимости от email-адреса.
Представим ситуацию, что сторонняя система присылает нам email-адрес менеджера, который работал с клиентом. Мы знаем, какой email-адрес принадлежит конкретному менеджеру и подставим ID менеджера.
Проверка будет иметь следующий вид:{% if "user1@mail.ru" in input.manager_email %}112233{% elif "user2@mail.ru" in input.manager_email %}445566{% else %}778899{% endif %}
- Динамически меняем статус воронки в зависимости от типа клиента
Cледующий пример описывает подстановку определенного статуса воронки в зависимости от типа клиента. Если клиент приходит как физическое лицо — мы должны подставить воронку и статус, где работают с физ. лицами. Если клиент приходит как юридическое лицо — мы должны подставить воронку и статус, в которой работают с юр. лицами. - Обрабатываем словарь, чтобы извлечь данные за исключением некоторых полей
{% if input.client.type == "Физическое лицо" %}112233:142{% elif input.client.type == "Юр. лицо" %}445566:142{% endif %}
{ "event": "lead", "data": { "id": "45199392", "num": "669", "time": "1721626226", "status": { "code": "0", "name": "New" }, "client": { "name": "test", "phone": "+78005553535", "email": "test@mail.ru" }, "note": "something", "form_name": "Самая лучшая форма", "form_data": { "123553": { "id": "123553", "name": "Наличие Bluetooth", "value": "Нет" }, "123446": { "id": "123446", "name": "Name", "value": "test" }, "4234323": { "id": "4234323", "name": "Phone", "value": "+78005553535" }, "64564434": { "id": "64564434", "name": "Email", "value": "test@mail.ru" }, "1657482": { "id": "1657482", "name": "Тип клавиатуры", "value": "Механчиеская" }, "1132566524": { "id": "1132566524", "name": "Ценовой сегмент", "value": "Сердний, от 5000 до 10000 руб" } }, "page": { "url": "http://test-site.ru/forms", "name": "Купи клавиатуру по доступной цене" } }, "site": { "id": "672484", "sub_id": "655894", "domain": "test-site.ru" }, "method": "POST" }
{% for nam, value in input.data.form_data.items %}
Проверка, не входит ли имя текущего элемента (value.name) в строку «Email Phone Name». Если имя элемента не входит в строку, то условие выполняется и происходит подстановка значения. В противном случае, элемент будет пропущен.
{% if value.name not in "Email Phone Name" %}
На скриншоте представлен пример записи значений в переменную. Результат создания такой переменной будет:
«Ответы на вопросы»:
"Наличие Bluetooth - Нет\nТип клавиатуры - Механчиеская\nЦеновой сегмент - Сердний, от 5000 до 10000 руб\n"
«Данные контакта»:
"Name - test\nPhone - +78005553535\nEmail - test@mail.ru\n"