При заполнении блоков можно использовать маски для создания определяемых значений или работы с массивами. Если в маске будет использоваться ссылка на некорректный блок/несуществующие данные — они будут обработаны как пустая строка.
Если
В некоторых случаях необходимо заполнять значение в зависимости от входящих/иных данных. Для этого можно использовать маску if-else.
Пример:
{% if input.type == "lead" %}Заявка{% elif input.type == "deal" %}Сделка{% endif %}Благодаря маске if-else можно сделать настройку полей динамической в зависимости от входящих данных без множества проверок и создания переменной.
Допустимые варианты использования:
if - endifif - elif - endifif - elif - else - endifif - else - endif
Для составления условий можно использовать логические операторы и сравнения.
Логические операторы
and— если требуется соблюсти сразу два и более условийor— если достаточно соблюдения одного из несколькихnot— если требуется инвертировать одно из условий
Сравнения
==— равно!=— не равно>— больше>=— больше или равно<— меньше<=— меньше или равноin— входит (если проверяется входит ли левая часть условия в массив справа)not in— не входит (если проверяется не входит ли левая часть условия в массив справа)
Цикл
Иногда во входящих данных могут приходить массивы (товары/списки/…) и необходимо их прописать в примечание или поле, для этого могут использоваться циклы.
Пример (создание строки используя данные товаров из запроса):
"products": [
{
"name": "Товар 1",
"quantity": 2,
"amount": 8900,
"externalid": "qweer1234gdfgdf4567",
"price": "8900",
"sku": "PS444-01"
},
{
"name": "Товар 2",
"quantity": 2,
"amount": 1600,
"externalid": "qhfgr1234gdfgdf654",
"price": "8900",
"sku": "PS444-02"
}
]Для вывода названия товаров и цены используем цикл:
{% for i in input.products %}
название: {{i.name}}
Цена: {{i.price}}
{% endfor %}Результат получим:
название: Товар 1
Цена: 8900
название: Товар 2
Цена: 1600
Маски цикла
Внутри циклов доступны все те же маски что и в остальной схеме, плюс специфические для цикла:
{{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}}
Пример с подциклом forloop
Если есть два массива вида:
{
"name_member": [
"мембер 1",
"мембер 2"
],
"post_member": [
"должность 1",
"должность 2"
]
}И нужно получить результат в виде:
мембер 1: должность 1, мембер 2: должность 2
Используем два цикла с обращением к родительскому циклу:
{% for name in input.name_member %}{{name}}: {% for i in input.post_member %}{% if forloop.parentloop.counter == forloop.counter %}{{i}},{% endif %}{% endfor %}{% endfor %}Фильтры
Применяются для работы с полями функций/переменных. Применить фильтр можно через вертикальный слэш |
Используются внутри маски, например — {{#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 tseTreverseк числу"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!"
strip
Функция убирает пробелы в начале и в конце строки.
strip:"*"к строке**********моя любимая строка********, результат —моя любимая строкаstripк строкемоя любимая строка, результат —моя любимая строка
Работа с датами
Подробнее о возможных форматах дат можно прочитать в разделе Дата и время.
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"
sort
Фильтр сортировки. Сортирует данные по ключу или значению
Если есть данные вида:
{
"managers": {
"менеджер 1": 542000,
"менеджер 2": 336000,
"менеджер 5": 43243242,
"A": "300",
"C":"200",
"B": "100"
}Чтобы отсортировать их по значению — применим |sort"1" к словарю managers
{% for manager, number in input.managers.items|sort:"1" %}
{{manager}}: {{number}}{% endfor %}На выходе получим результат:
A: переменная\nB: Переменная\nC: 4343443\nменеджер_1: 542000\nменеджер_2: 336000\nменеджер_5: 43243242
Если применить к этим же данным:
{% for manager, number in input.managers.items|sort:"0" %}{{manager}}: {{number}}
{% endfor %}Получим сортировку по ключам, на выходе будет:
A: переменная\nB: Переменная\nC: 4343443\nменеджер_1: 542000\nменеджер_2: 336000\nменеджер_5: 43243242\n
Сортировка по дате:
Если есть массив вида:
{
"data": [
{
"date": "2025-11-21 06:37:00.000",
"event": "1"
},
{
"date": "2025-12-01 14:20:15.123",
"event": "2"
},
{
"date": "2022-01-05 09:00:00.000",
"event": "3"
}
]
}И нам нужно отсортировать его по датам, то можно использовать |sort:"date"
Результат будет:
{
"data": [
{
"date": "2022-01-05 09:00:00.000",
"event": "3"
},
{
"date": "2025-11-21 06:37:00.000",
"event": "1"
},
{
"date": "2025-12-01 14:20:15.123",
"event": "2"
}
]
}sequence
Фильтр, формирующий массив
Данный фильтр позволяет сформировать массив по заданным условиям:
Например, если есть переменная: {"test": 5 }
При применении фильтра на выходе получим:
{{test|sequence}} -> [0, 1, 2, 3, 4]
{{test|sequence:"1","2"}} -> [1, 3]
{{test|sequence:"10","-1"}} -> [10, 9, 8, 7, 6]
Примеры
Подставляем 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 %}Динамически меняем статус воронки в зависимости от типа клиента
Следующий кейс описывает подстановку определенного статуса воронки в зависимости от типа клиента
Если клиент приходит как физическое лицо — мы должны подставить воронку и статус, где работают с физ. лицами. Если клиент приходит как юридическое лицо — мы должны подставить воронку и статус, в которой работают с юр. лицами
{% 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"
}Запустим цикл по всем элементам словаря form_data. Каждая пара ключ-значение (где ключ — nam, а значение — это value) из form_data будет обрабатываться поочередно.
{% 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"
Сервисный контекст
Если нужно проверить успешность или неуспешность результата выполнения блока, можно использовать маску сервисного контекста
Такая проверка будет иметь вид:
{% if S10.result %}1{% else %}0{% endif %}Где 10 — номер блока
Пример с сервисным контекстом
Например если есть блок проверки, который сравнивает значение = значение (успешный выход блока)

И создать переменную «результат», в значение которой нужно записать результат прохода блока, условие будет следующим:
{% if S36.result %}проверка прошла{% else %}проверка не прошла{%endif %}
В результате получим переменную
"результат":"успех"