Поля

При заполнении блоков можно использовать маски для создания определяемых значений или работы с массивами. Если в маске будет использоваться ссылка на некорректный блок/несуществующие данные — они будут обработаны как пустая строка.

Если

В некоторых случаях необходимо заполнять значение в зависимости от входящих/иных данных. Для этого можно использовать маску 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 — если требуется инвертировать одно из условий

Сравнения

  • == — равно
  • != — не равно
  • > — больше
  • >= — больше или равно
  • < — меньше
  • <= — меньше или равно
  • 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 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!"

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 %}

В результате получим переменную

"результат":"успех"