СОЗДАНИЕ АГЕНТА НА ПЛАТФОРМЕ

icon picker
Синтаксис

Общая информация о синтаксисе

Синтаксис может использоваться в следующих
@Слот
ах:
@Text
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в поле Text List
@Attachment
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в полях Source и Caption
@Slot Filling
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в поле Question
@button
: допустимо использование
@Выражение
в поле Label
@condition
: допустимо использование
@Выражение
в поле Condition
@Timer
: допустимо использование
@Выражение
в поле If
@Memory
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в поле Value
@External Request
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в полях URL, Value на вкладке Headers и Query parameters, Data, поле Name на вкладке Response
@Incoming Request
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в поле Value
@Synonym
: допустимо использование
@Выражение
и
@Выражение с управляющей конструкцией
в поле Source

Синтаксис
@Платформа
использует синтаксис шаблонизатора Jinja:
@Шаблон
ы в синтаксисе делятся на 2 концепции:
@Выражение
. Заключаются в двойные фигурные скобки.
Примеры:
{{ client_message }}
{{ number * 10 }}
{{ chat_id == ‘abcde0123456789’ }}
{{ uuid4() }}
{{ some_variable is defined }}
@Выражение с управляющей конструкцией
. Заключаются в фигурные скобки с символом %.
Примеры:
{% if client_message == ‘привет’ %}Hi{% else %}Bye{% endif %}
{% for number in [1, 2, 3] %}{{ number }}{% endfor %}
Поддерживаемые типы данных
Тип данных
Memory
Примеры вывода в текстовом слоте
Примечание
1
Строки
{{ 'string' }}
{{ "string" }}
Пустая строка: {{ '' }} или {{ "" }}
string Пустая строка выводится в виде отсутcтвия значения
Если строка обрамлена двойными кавычками и внутри строки присутствует символ двойных кавычек в качестве знака препинания, то символ кавычек внутри строки необходимо экранировать символом \ для прохождения и корректного отображения. Пример: ​{{ "кинотеатр \"Победа\" " }} ​ Если строка обрамлена одинарными кавычками и внутри строки присутствует символ одинарных кавычек в качестве знака препинания, то символ кавычек внутри строки необходимо экранировать символом \ для прохождения и корректного отображения. Пример: ​{{ 'I\'ve made an order' }} ​В случаях, когда строка обрамлена двойными кавычками и внутри строки присутствует символ одинарных кавычек, либо если строка обрамлена одинарными кавычками и внутри строки присутствует символ двойных кавычек, экранирование не требуется.
2
Числа
{{ 5 }}
{{ 42.23 }}
5
42.23
3
Булевы
{{ true }}
{{ false }}
True
False
4
Отсутствие значения
{{ None }}
Выводится в виде отсутcтвия значения
5
Объекты
{{ {"one": 1, "two": 2, "colors": ["red", "green", "blue"]} }}
{"one": 1, "two": 2, "colors": ["red", "green", "blue"]}
6
Массивы
Чисел: [1, 2, 3, 4, 5]
Строк: ["one", "two", "three"]
Массивов: [["one", "two", "three"], ["cat", "dog", "bird"], ["green", "blue", "red"]]
[1, 2, 3, 4, 5]
["one", "two", "three"]
[['one', 'two', 'three'], ['cat', 'dog', 'bird'], ['green', 'blue', 'red']]
Через точку (.) происходит обращение к элементам массивов;
Обращение к соответствующему номеру элемента массива происходит с помощью чисел. Нумерация элементов массива начинается с нуля, поэтому обращение к первому элементу массива обозначается как 0.
Примеры: {{ array.0 }}
7
Даты
Привести данные к формату даты возможно только с помощью фильтра string_to_time Пример: {{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }} ​Подробнее:
2000-06-15 18:50:47
Часовой пояс не хранится
There are no rows in this table

Зарезервированные методы объектов
Метод
Доступность в Платформе
Смысл
Как использовать
Пример
1
items
Да
Возвращает пары "ключ-значение" словаря.
{{ data.items() }}
{{ data.items() | list }}
Результат: [('a', 1), ('b', 2)]
2
keys
Да
Возвращает ключи словаря
{{ data.keys() }}
{{ data.keys() | list }}
Результат: ['a', 'b']
3
values
Да
Возвращает значения словаря
{{ data.values() }}
{{ data.values() | list }}
Результат: [1, 2]
4
clear
Нет
5
copy
Нет
6
fromkeys
Нет
7
get
Нет
8
pop
Нет
9
popitem
Нет
10
setdefault
Нет
11
update
Нет
There are no rows in this table
Важно: при парсинге
@Входящий запрос
, ответа на
@Внешний запрос
или на
@Notification
обращение к ключу объекта, если его имя совпадает с именем происходит через квадратные скобки и кавычки. ​Пример: {{ data["keys"] }}

Выражения

Литералы
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Строка
Литералы
"string"
Объявление строки
Объявление пустой строки
Объявление строки
Пустая строка
{{ '' }} или {{ "" }}
Непустая строка
{{ 'str' }} или {{ "str" }}
Обращение к символам строки
str == {{ 'string' }}
{{ str[0] }} = s
{{ str[1] }} = t
...
Срез строки
str == {{ 'string' }}
{{ str[:2] }} = st
{{ str[2:] }} = ring
{{ str[2:5] }} = rin
{{ 'Hello World' }}
Результат: Hello World.
{{ "Hello World" }}
Результат: Hello World.
{{ 'Hello World'[1] }}
Результат: e.
{{ 'Hello World'[:5] }}
Результат: Hello.
{{ 'Hello World'[5:] }}
Результат: World.
2
Целое число
Литералы
42
123_456
Объявление целого числа
{{ num }}
{{ 123 }}
Результат: 123.
{{ 1_2_3 }}
Результат: 123.
3
Число с точкой
Литералы
42.23
42.1e2
123_456.789
Объявление вещественного числа
{{ num }}
{{ 42.23 }}
Результат: 42.23.
{{ 42.1e2 }}
Результат: 4210.0.
{{ 4_2.23 }}
Результат: 42.23.
4
Списки
Литералы
['list', 'of', 'objects']
Объявление списка с произвольными типами объектов
Обращение к элементу из списка

Объявление списка
Пустой список
{{ [] }}
Список чисел
{{ [num1, num2, ...] }}
Список строк
{{ ['str1','str2', ...] }}
{{ ["str1","str2", ...] }}
Обращение к элементам списка
list = {{ [A, B, ...] }}
{{ list[0] }} = A
{{ list[1] }} = B
...
{{ [1, 2, 3] }}
Результат: [1, 2, 3].
{{ ['one', 'two'] }}
Результат: ['one', 'two'].
{{ ['one', 'two'] }}[0]
Результат: one.
5
Словари
Литералы
{'dict': 'of', 'key': 'and', 'value': 'pairs'}
Объявление словаря
Обращение к элементу из словаря
Объявление словаря
{{ { key1:val1, key2:val2, ... } }}
Обращение к элементам словаря
dict = {{ { key1:val1, key2:val2, ... } }}
{{ dict[key1] }} = val1
{{ dict[key2] }} = val2
...
{{ {1:'A', 2:'B', 3:'C'} }}
Результат: {1: 'A', 2: 'B', 3: 'C'}.
{{ {1:'A', 2:'B', 3:'C'}[1] }}
Результат: A.
{{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
Результат: {'one': 'A', 'two': 'B', 'three': 'C'}.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}['three'] }}
Результат: C.
6
Массивы
Литералы
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] }}
Объявление массива данных
Обращение к элементу из массива
Объявление массива
{{ [{'id': id1, 'value': val1 }, {'id': id2, 'value': val2 }, ...] }}
Обращение к элементам массива
array = {{ [{'id': id1, 'value': val1 }, {'id': id2, 'value': val2 }, ...] }}
{{ array[0] }} = {'id': id1, 'value': val1 }
...
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] }}
Результат: [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}].
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}] [0] }}
Результат: {'id': 3, 'name': 'O'}.
7
Булевы значения
Литералы
true
false
Выражения и булевы переменные
{{ true }}
{{ false }}
{{ А == true }}
Результат: True, если булева переменная A истинна.
{{ (A == B) == true }}
Результат: True, если выражение (A == B) истинно.
There are no rows in this table
Математические операции
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Сложение
Математические выражения
+
Сложение целых и вещественных чисел
Конкатенация строк
Объединение элементов массивов в один массив
{{ num1 + num2 + ... }}
{{ 'str1' + 'str2' + ... }}
{{ "str1" + "str2" + ... }}
{{ mas1 + mas2 + ... }}

{{ 1 + 2 + 3 }}
Результат: 6.
{{ 'a' + 'b' + 'c' }}
Результат: abc.
{{ 0.5 + 1.5 }}
Результат: 2.0.
{{ [0,1,2] + [3,4,5] }}
Результат: [0, 1, 2, 3, 4, 5].
2
Вычитание
Математические выражения
-
Вычитание целых и вещественных чисел
{{ num1 - num2 - num3 - ... }}
{{ 4 - 2 - 1 }}
Результат: 1.
{{ 0.5 - 1.5 }}
Результат: -1.0.
3
Деление
Математические выражения
/
Деление целых и вещественных чисел
{{ num1 / num2 / num3 / ... }}
{{ 1 / 2 }}
Результат: 0.5.
{{ -1.5 / 0.5 }}
Результат: -3.0.
{{ 6 / 3 / 2 }}
Результат: 1.0.
4
Деление, при котором будет возвращена только целая часть результата
Математические выражения
//
Деление целых и вещественных чисел
Ограничения:
Оператор // возвращает целое число только при делении целых чисел. Если одним из операндов является вещественное число, то результатом также будет вещественное число.
{{ num1 // num2 // num3 // ... }}
{{ 6 // 3 // 2 }}
Результат: 1.
{{ 1.5 // 0.5 }}
Результат: 3.0.
5
Вычисление остатка от деления
Математические выражения
%
Вычисление остатка от деления целых и вещественных чисел
{{ num1 % num2 }}
{{ 6 % 4 }}
Результат: 2.
{{ 1.5 % 0.5 }}
Результат: 0.0.
6
Умножение
Математические выражения
*
Умножение целых и вещественных чисел
{{ num1 * num2 * num3 * ... }}
{{ -1.5 * -0.5 }}
Результат: 0.75.
{{ -2 * 3 * 4 }}
Результат: -24.
There are no rows in this table
Ограничения:
Максимальное число (по модулю), которое можно использовать в арифметических операциях — 4294967296 . Если использовать большие числа, то будет ошибка (в memory в переменную сохранится False, например).
Если складывать строки / массивы, то максимально допустимая длина строки / массива — 1000 . При попытке сложения/конкатенации строк/массивов, дающих результат длиннее 1000 символов, в
@Контекстная переменная
записывается значение “Addition of objects with length greater than 1000 is not allowed”.
Для конкатенации строк/массивов, дающих результат длиннее 1000 символов, можно использовать запись {{ string_1 }}{{ string_2 }}.
Операции сравнения
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Проверка равенства
Операции сравнения
==
Любые контекстные переменные и значения
{{ A == B }}
{{ A == B }}
Результат: True, если переменная A равна переменной B.
{{ A == 1 }}
Результат: True, если переменная A равна 1.
{{ A == 'один' }}
Результат: True, если переменная A равна 'один'.
2
Проверка неравенства
Операции сравнения
!=
Любые контекстные переменные и значения
{{ A != B }}
{{ A != B }}
Результат: True, если переменная A не равна переменной B.
{{ A != 1 }}
Результат: True, если переменная A не равна 1.
{{ A != 'один' }}
Результат: True, если переменная A не равна 'один'.
3
Проверка, что первый операнд больше второго
Операции сравнения
>
Числовые переменные и числа
{{ A > B }}
{{ A > B }}
Результат: True, если переменная A больше переменной B.
{{ A > 1 }}
Результат: True, если переменная A больше 1.
4
Проверка, что первый операнд больше либо равен второго
Операции сравнения
>=
Числовые переменные и числа
{{ A >= B }}
{{ A >= B }}
Результат: True, если переменная A больше или равна переменной B.
{{ A >= 1 }}
Результат: True, если переменная A больше или равна 1.
5
Проверка, что первый операнд меньше второго
Операции сравнения
<
Числовые переменные и числа
{{ A < B }}
{{ A < B }}
Результат: True, если переменная A меньше переменной B.
{{ A < 1 }}
Результат: True, если переменная A меньше 1.
6
Проверка, что первый операнд меньше либо равен второго
Операции сравнения
<=
Числовые переменные и числа
{{ A <= B }}
{{ A <= B }}
Результат: True, если переменная A меньше или равна переменной B.
{{ A <= 1 }}
Результат: True, если переменная A меньше или равна 1.
There are no rows in this table
Логические операции
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
“И”
Логические операции
and
Выражения и булевы переменные
{{ A and B }}
{{ A and B }}
Результат: True, если если обе булевы переменные A и B истинны.
2
"ИЛИ”
Логические операции
or
Выражения и булевы переменные
{{ A or B }}
{{ A or B }}
Результат: True, если если одна из булевых переменных A и B истинны.
3
"НЕ”
Логические операции
not
Выражения и булевы переменные
{{ not A }}
{{ not A }}
Результат: True, если если булева переменная A ложна.
{{ not A == 1 }}
Результат: False, если переменная A равна 1.
4
Скобки для группировки выражения
Логические операции
(expr)
Выражения и булевы переменные
{{ (A) }}
{{ (A > 0) and (A < 10) }}
Результат: True, если переменная A больше 0 и меньше 10.
There are no rows in this table
Другие операции
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Поиск первого операнда во втором
Другие операции
in
Контекстные переменные и выражения
Строка
{{ 's' in 'str' }}
Список чисел
{{ num in [num1,num2,...] }}
Список строк
{{ 'str' in ['str1','str2',...] }}
Словарь
{{ key in { key1:val1, key2:val2, ... } }}
{{ 'A' in 'ABC' }}
Результат: True.
{{ 1 in [1,2,3] }}
Результат: True.
{{ 'ABC' in ['ABC','DEF','GHI'] }}
Результат: True.
{{ 1 in {1: 'A', 2: 'B', 3: 'C'} }}
Результат: True.
2
Проверка операнда на свойство
Другие операции
is
Тесты
{{ A is B }}
Описано в таблице:
3
Применяет фильтр по отношению к операнду
Другие операции
|
Фильтры
{{ A|B }}
Описано в таблице:
4
Приведение операндов к строкам и их конкатенация
Другие операции
~
Контекстные переменные и строки
{{ "string" ~ var }}
{{ var ~ "string" }}
{{ "Hello " ~ name ~ "!" }}
Результат: Hello John! (если переменная name содержит значение John).
5
Получение артибута объекта
Другие операции
. / []
Любые контекстные переменные
{{ A.B }}
{{ A['B'] }}
{{ ['A','B','C'].0 }}
Результат: A.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}['two'] }}
Результат: B.
There are no rows in this table
Проверки значений переменных
Тест
Обозначение
Как использовать
Пример
1
Проверка, что переменная существует в контексте
defined
{{ A is defined }}
{{ A is defined }}, A существует
Результат: True.
{{ A is defined }}, A не существует
Результат: False.
2
Проверка, что переменная не существует в контексте
undefined
{{ A is undefined }}
{{ A is undefined }}, A существует
Результат: False.
{{ A is undefined }}, A не существует
Результат: True.
3
Проверка на соответствие регулярному выражению
match
{{ A is match ... }}
{{ A is match("[regular_expression]") }} Результат:
True, если A соответствует регулярному выражению;
False, если A НЕ соответствует регулярному выражению;
False, если A имеет не строковый формат;
False, если регулярное выражение прописано некорректно
Важно: проверка чувствительна к регистру.
4
Проверка, что объект является числом
number
{{ A is number }}
{{ 5 is number }}
Результат: True.
{{ 'five' is number }}
Результат: False.
5
Проверка, что объект является четным числом
even
{{ A is even }}
{{ 22 is even }}
Результат: True.
{{ 11 is even }}
Результат: False.
6
Проверка, что объект является нечетным числом
odd
{{ A is odd }}
{{ 46 is odd }}
Результат: False.
{{ 15 is odd }}
Результат: True.
7
Проверка, что объект является целым числом
integer
{{ A is integer }}
{{ 1012 is integer }}
Результат: True.
{{ 10.12 is integer }}
Результат: False.
8
Проверка, что объект является вещественным числом
float
{{ A is float }}
{{ 3.55 is float }}
Результат: True.
{{ 35 is float }}
Результат: False.
9
Проверка, что объект делится нацело на число
divisibleby
{{ A is divisibleby(B) }}
Важно:
Если A = True, а B = 1, то вернется True, т.к True это 1, а 1 делится на 1.
Если A = False, то вернется True, т.к False это 0, а 0 делится на любое число (кроме 0).
{{ 4 is divisibleby(2) }}
Результат: True.
{{ 6 is divisibleby(5) }}
Результат: False.
{{ 5 is divisibleby(0) }}
Результат: False.
{{ true is divisibleby(1) }}
Результат: True.
{{ false is divisibleby(10) }}
Результат: True.
10
Проверка, что объект является строкой
string
{{ A is string }}
{{ 'one' is string }}
Результат: True.
{{ 1 is string }}
Результат: False.
11
Проверка, что строка находится в нижнем регистре
lower
{{ A is lower }}
{{ 'hello' is lower }}
Результат: True.
{{ 'Hello' is lower }}
Результат: False.
{{ 'HELLO' is lower }}
Результат: False.
12
Проверка, что строка находится в верхнем регистре
upper
{{ A is upper }}
{{ 'BYE' is upper }}
Результат: True.
{{ 'Bye' is upper }}
Результат: False.
{{ 'bye' is upper }}
Результат: False.
13
Проверка, что объект является словарем
mapping
{{ A is mapping }}
{{ {1:'A', 2:'B', 3:'C'} is mapping }}
Результат: True.
{{ [1, 2, 3] is mapping }}
Результат: False.
14
Проверка, что объект является последовательностью (строкой, списком или словарем)
sequence
{{ A is sequence }}
{{ '12345' is sequence }}
Результат: True.
{{ [1, 2, 3] is sequence }}
Результат: True.
{{ {1:'A', 2:'B', 3:'C'} is sequence }}
Результат: True.
{{ 12345 is sequence }}
Результат: False.
15
Проверка, что объект является булевым
boolean
{{ A is boolean }}
{{ A is boolean }}, A = true
Результат: True.
{{ A is boolean }}, A = 4
Результат: False.
16
Проверка, что объект является истинным
true
{{ A is true }}
{{ A is true }}, A = true
Результат: True.
{{ A is true }}, A = 1
Результат: False.
17
Проверка, что объект является ложным
false
{{ A is false }}
{{ A is false }}, A = false
Результат: True.
{{ A is false }}, A = 2
Результат: False.
18
Проверка, что у объекта отсутствует значение (значение None или Null (преобразуется при парсинге ER в None))
none
{{ A is none }}
{{ A is none }}, A = none
Результат: True.
{{ A is none }}, A = ''
Результат: False.
19
Проверка равенства (эквивалентно оператору ==)
eq
{{ A is eq B }}
{{ 123 is eq 123 }}
Результат: True.
{{ 'abc' is eq 'ABC' }}
Результат: False.
{{ 456 is eq '456' }}
Результат: False.
20
Проверка неравенства (эквивалентно оператору !=)
ne
{{ A is ne B }}
{{ 123 is ne 124 }}
Результат: True.
{{ 'D' is ne 'D' }}
Результат: False.
21
Проверка, что первый операнд больше второго (эквивалентно оператору >)
gt
{{ A is gt B }}
{{ 5 is gt 3 }}
Результат: True.
{{ (-1.12) is gt 1.13 }}
Результат: False.
{{ '5a' is gt '33' }}
Результат: True.
{{ '222' is gt '33' }}
Результат: False.
22
Проверка, что первый операнд больше либо равен второго (эквивалентно оператору >=)
ge
{{ A is ge B }}
{{ 12.12 is ge 12.1199 }}
Результат: True.
{{ 15 is ge 15 }}
Результат: True.
{{ 0 is ge (-15) }}
Результат: False.
23
Проверка, что первый операнд меньше второго (эквивалентно оператору <)
lt
{{ A is lt B }}
{{ 0.001 is lt 1 }}
Результат: True.
{{ (-1) is lt (-1.5) }}
Результат: False.
24
Проверка, что первый операнд меньше либо равен второго (эквивалентно оператору <=)
le
{{ A is le B }}
{{ 21 is le 22 }}
Результат: True.
{{ (-1.11) is le (-1.11) }}
Результат: True.
{{ (1) is le (-12) }}
Результат: False.
25
Поиск первого операнда во втором
in
{{ A in B }}
There are no rows in this table
Фильтры синтаксиса
Фильтр
Обозначение
Как использовать
Пример
1
Добавление дефолтного значения
default
{{ A|default(B) }}
Значение B будет использоваться только в случае, если переменной A нет в контексте.
{{ A|default(B,true) }}
Значение B будет использоваться в случаях, если переменной A нет в контексте или если значение переменной A приводится к False (0, пустая строка, пустой массив, пустой список).
{{ A|default('A is not defined') }}, A = 1
Результат: 1.
{{ A|default('A is not defined') }}, A не существует
Результат: A is not defined.
{{ A|default('A is empty', true) }}, A = ''
Результат: A is empty.
{{ A|default('A is not defined', true) }},
A не существует
Результат: A is not defined.
2
Преобразование в целое число
int
{{ A|int }}
{{ 2.53|int }}
Результат: 2.
{{ '-15'|int }}
Результат: -15.
{{ '12abc'|int }}
Результат: 0.
3
Преобразование в вещественное число
float
{{ A|float }}
{{ 2|float }}
Результат: 2.0.
{{ '-122'|float }}
Результат: -122.0.
{{ '1a'|float }}
Результат: 0.0.
4
Возвращение абсолютного значения числа
abs
{{ A|abs }}
Ограничения: работает только с целыми и вещественными числами.
{{ -1|abs }}
Результат: 1.
{{ -0.1111|abs }}
Результат: 0.1111.
5
Округление числа
round
{{ A|round }}
Округление до целой части.
{{ A|round(B, C) }}
B - число знаков после запятой.
C - тип округления:
common - округление в большую или меньшую сторону.
ceil - округление в большую сторону.
floor - округление в меньшую сторону.
{{ 42.12345|round }}
Результат: 42.0.
{{ -1.538675|round(3,'common') }}
Результат: -1.539.
{{ 0.5712|round(2, 'ceil') }}
Результат: 0.58.
{{ 121.67354|round(3, 'floor') }}
Результат: 121.673.
{{ 0.11111|round|int }}
Результат: 0.
6
Преобразование в строку
string
{{ A|string }}
{{ 12345|string }}
Результат: 12345.
{{ [1,2,3,4,5]|string }}
Результат: [1, 2, 3, 4, 5] (весь список является строкой).
{{ {1: 'A', 2: 'B', 3: 'C'}|string }}
Результат: {1: 'A', 2: 'B', 3: 'C'} (весь словарь является строкой).
7
Преобразование в список
list
{{ A|list }}
{{ 'abcdefg'|list }}
Результат: ['a', 'b', 'c', 'd', 'e', 'f', 'g'].
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|list }}
Результат: ['one', 'two', 'three'].
{{ 12345|list }}
Результат: False.
8
Преобразование в нижний регистр
lower
{{ A|lower }}
{{ 'AbcDefg'|lower }}
Результат: abcdefg.
{{ ['A','B','C']|lower }}
Результат: ['a', 'b', 'c'].
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|lower }}
Результат: {'one': 'a', 'two': 'b', 'three': 'c'}.
9
Преобразование в верхний регистр
upper
{{ A|upper }}
{{ 'AbcDefg'|upper }}
Результат: ABCDEFG.
{{ ['a','b','c']|upper }}
Результат: ['A', 'B', 'C'].
{{ {'one': 'a', 'two': 'b', 'three': 'c'}|upper }}
Результат: {'ONE': 'A', 'TWO': 'B', 'THREE': 'C'}.
10
Приведение первой буквы в строке к верхнему регистру
capitalize
{{ A|capitalize }}
Ограничения: работает только со строками.
{{ 'abc'|capitalize }}
Результат: Abc.
11
Преобразование в заглавный регистр (т.е. слова будут начинаться с прописных букв, все остальные символы будут строчными)
title
{{ A|title }}
Важно: элементы списка и словаря приводятся к нижнему регистру.
{{ 'hello'|title }}
Результат: Hello.
{{ 'hELLO'|title }}
Результат: Hello.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|title }}
Результат: {'one': 'a', 'two': 'b', 'three': 'c'}.
12
Первый элемент последовательности (строки, списка или словаря)
first
{{ A|first }}
{{ '12345'|first }}
Результат: 1.
{{ [1, 2, 3]|first }}
Результат: 1.
{{ {1:'A', 2:'B', 3:'C'}|first }}
Результат: 1.
{{ 12345|first }}
Результат: False.
13
Последний элемент последовательности (строки, списка или словаря)
last
{{ A|last }}
{{ '12345'|last }}
Результат: 5.
{{ [1, 2, 3]|last }}
Результат: 3.
{{ {1:'A', 2:'B', 3:'C'}|last }}
Результат: 3.
{{ 12345|last }}
Результат: False.
14
Число элементов в последовательности (строке, списке или словаре)
length
{{ A|length }}
{{ 'abcdefg'|length }}
Результат: 7.
{{ [1, 2, 3]|length }}
Результат: 3.
{{ {1:'A'}|length }}
Результат: 1.
{{ 111|length }}
Результат: False.
15
Сумма элементов последовательности
sum
{{ A|sum }}
Важно: если последовательность пустая, то возвращается 0.
{{ [1,2,3,4,5]|sum }}
Результат: 15.
{{ {1: 'A', 2: 'B', 3: 'C'}|sum }}
Результат: 6.
{{ ''|sum }}
Результат: 0.
16
Получение наименьшего значения элемента последовательности
min
{{ A|min }}
{{ [1, 0.001, -1]|min }}
Результат: -1.
{{ ['1', '0.001', '-1']|min }}
Результат: -1.
{{ ['b', 'f', 'a']|min }}
Результат: a.
{{ {'1': 'A', '2': 'B', '3': 'C'}|min }}
Результат: 1.
17
Получение наибольшего значения элемента последовательности
max
{{ A|max }}
{{ [1, 0.001, -1]|max }}
Результат: 1.
{{ ['1', '0.001', '-1']|max }}
Результат: 1.
{{ ['b', 'f', 'a']|max }}
Результат: f.
{{ {'1': 'A', '2': 'B', '3': 'C'}|max }}
Результат: 3.
18
Получение случайного элемента
random
{{ A|random }}
Ограничения: работает только со списками и массивами.
{{ [-22, 4.110263, 353, 124]|random }}
Результат: 4.110263.
{{ ['-22', '4.110263', '353', '124']|random }}
Результат: -22.
{{ ['apple', 'orange', 'banana']|random }}
Результат: banana.
19
Замена элемента последовательности
replace
{{ A|replace }}
{{ "Hello World"|replace("Hello", "Goodbye") }}
Результат: Goodbye World.
{{ ['A','B','C']|replace('A', 'D') }}
Результат: ['D', 'B', 'C'].
20
Переворачивание последовательности
reverse
{{ A|reverse }}
Важно: чтобы перевернуть список или словарь, нужно добавить |list для преобразования результата в список, иначе переменная будет пустой.
{{ 'abcdefg'|reverse }}
Результат: gfedcba.
{{ '12345'|reverse }}
Результат: 54321.
{{ ['a', 'b', 'c']|reverse|list }}
Результат: ['c', 'b', 'a'].
{{ {'1': 'A', '2': 'B', '3': 'C'}|reverse|list }}
Результат: ['3', '2', '1'].
21
Добавление разделителя элементов последовательности (строки, списка или словаря)
join
{{ A|join }}
{{ A|join(B) }}
{{ '123'|join(',') }}
Результат: (1, 2, 3).
{{ [1, 2, 3]|join }}
Результат: 123.
{{ {'one': 'A', 'two': 'B', 'three': 'C'}|join('!') }}
Результат: one!two!three.
{{ {1:'A', 2:'B', 3:'C'}.values()|join(", ") }}
Результат: A, B, C.
{{ {1:'A', 2:'B', 3:'C'}.keys()|join("!")|list }}
Результат: ['1', '!', '2', '!', '3'].
22
Преобразование последовательности в уникальный список
unique
{{ A|unique|list }}
Ограничения: работает только с добавлением |list.
{{ 'abcab'|unique|list }}
Результат: gfedcba.
{{ '12345'|reverse }}
Результат: 54321.
{{ ['a', 'b', 'c']|reverse|list }}
Результат: ['c', 'b', 'a'].
{{ {'1': 'A', '2': 'B', '3': 'C'}|reverse|list }}
Результат: ['3', '2', '1'].
23
Сортировка последовательности
sort
{{ A|sort }}
{{ A|sort(r, c, a) }}
r(reverse) - сортировка по убыванию, а не по возрастанию.
c(case_sensitive) - сортировка верхнего и нижнего регистров отдельно.
a(attribute) - значение или ключ для сортировки.
{{ [1,4,3,2,5]|sort }}
Результат: [1, 2, 3, 4, 5].
{{ ['b','a','c']|sort(reverse=true) }}
Результат: ['c', 'b', 'a'].
{{ [{'id': 3, 'name': 'O'}, {'id': 1, 'name': 'E'}, {'id': 2, 'name': 'S'}]|sort(attribute='name') }}
Результат: [{'id': 1, 'name': 'E'}, {'id': 3, 'name': 'O'}, {'id': 2, 'name': 'S'}].
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}.values()|sort }}
Результат: ['a', 'b', 'c', 'd'].
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}.keys()|sort }}
Результат: [1, 2, 3, 4].
24
Сортировка словаря по ключу или значению
dictsort
{{ A|dictsort }}
{{ A|dictsort(by='key' }}
{{ A|dictsort(by='value' }}
Важно: словарь по умолчанию превращается в строку.
{% for key, value in {"c": 1, "a": 4, "b": 2, "d": 3}|dictsort %} {{ key }}: {{ value }} {% endfor %}
Результат: aaa: 4 b: 2 c: 1 d: 3.
{% for key, value in {"c": 1, "a": 4, "b": 2, "d": 3}|dictsort(by="key") %} {{ key }}: {{ value }} {% endfor %}
Результат: a: 4 b: 2 c: 1 d: 3.
{{ {4: 'c', 2: 'a', 3: 'b', 1:'d'}|dictsort(by='value')|list }}
Результат: [(2, 'a'), (3, 'b'), (4, 'c'), (1, 'd')].

25
Фильтрация по атрибуту
map
{{ A|map(attribute='B')|map(attribute='C'|...|list }}
Важно: если объект является массивом, то результат необходимо преобразовать в список.
{{ [{'name': 'Anna', 'number': '123'}, {'name': 'Olga', 'number': '456'}, {'name': 'Evgeniya', 'number': '789'}]| map(attribute='name')|list }}
Результат: ['Anna', 'Olga', 'Evgeniya'].
26
Группировка по числу элементов в цикле
batch
{{ A|batch(l) }}
{{ A|batch(l, f) }}
l(linecount) - число групп, на которые будет разбит объект.
f(fill_with) - значение, которое используется для заполнения отсутсвующих элементов.
{% for row in ['A','B','C']|batch(5, 'D') %}{{ row }}{% endfor %}
Результат: ['A', 'B', 'C', 'D', 'D'].
{% for row in [1, 2, 3, 4]|batch(2) %}
{% for i in row %}{{ i }}{% endfor %}
{% endfor %}
Результат:
12
34.
27
Преобразование в список списков
slice
{{ A|slice(s) }}
{{ A|slice(s, f) }}
s(slices) - число списков, на которые будет разбит объект.
f(fill_with) - значение, которое используется для заполнения отсутсвующих элементов.
{{ [1, 2, 3, 4, 5]|slice(2)|list }}
Результат: [[1, 2, 3], [4, 5]].
{{ 'abc'|slice(5, 'd')|list }}
Результат: [['a'], ['b'], ['c'], ['d'], ['d']].
28
Группировка по атрибуту
groupby
{{ A|groupby(a) }}
{{ A|groupby(a, d) }}
a(attribute) - атрибут.
d(default) - значение по умолчанию, использующееся, если объект в списке не имеет данного атрибута.
items = [ {"name": "james", "type": "green"}, {"name": "john", "type": "blue"}, {"name": "jim", "type": "blue"}, {"name": "jessie", "type": "green"} ]
{% for type, items in items|groupby('type') %}
{{ type }}:
{% for item in items %}{{ item.name }} {% endfor %}
{% endfor %}
Результат: blue: john jim green: james jessie.
29
Удаление элементов последовательности, которые не соответствуют тесту
select
{{ A|select(B,C)|list }}
B - тест из таблицы .
C - аргумент, который передается в тест B.
{{ [1, 2, 3, 4, 5]|select('odd')|list }}
Результат: [1, 3, 5] (нечетные числа).
{{ [1, 2, 3, 4, 5]|select('gt', 3)|list }}
Результат: [4, 5] (числа, которые больше 3).
30
Удаление элементов последовательности, которые не соответствуют тесту по атрибуту
selectattr
{{ A|selectattr(B,C,D)|list }}
B - атрибут, который необходимо достать из последовательности.
C - тест из таблицы .
D - аргумент, который передается в тест С.
users = [ {"name": "james", "email": "james@james.com", "password": "123"}, {"name": "john", "email": "john@john.com"}, {"name": "jim", "email": "jim@jim.com"}, {"name": "jessie", "email": "jessie@jessie.com", "password": "123"} ] .
{{ users|selectattr('password','undefined')| map(attribute='email')|list }}{{ email }}
Результат: ['john@john.com', 'jim@jim.com'].
table = [['685697115', 'evpolyntseva', 'Новосибирск'], ['658795243', 'Iourigaha', 'Москва'], ['683128920', 'jarondara', 'Казань'], ['630685929', 'blarar', 'Москва']] .
{{ table_all|selectattr(2, 'eq', "Москва")|map(attribute=1)|list }}
Результат: ['Iourigaha', 'blarar'].
31
Удаление элементов последовательности, которые соответствуют тесту
reject
{{ A|reject(B,C)|list }}
B - тест из таблицы .
C - аргумент, который передается в тест B.
{{ [1, 2, 3, 4, 5]|reject('odd')|list }}
Результат: [2, 4] (не нечетные числа).
{{ [1, 2, 3, 4, 5]|reject('gt', 3)|list }}
Результат: [1, 2, 3] (числа, которые не больше 3).
32
Удаление элементов последовательности, которые соответствуют тесту по атрибуту
rejectattr
{{ A|rejectattr(B)|list }}
B - атрибут, который необходимо достать из последовательности.
C - тест из таблицы .
D - аргумент, который передается в тест С.
table = [['685697115', 'evpolyntseva', 'Новосибирск'], ['658795243', 'Iourigaha', 'Москва'], ['683128920', 'jarondara', 'Казань'], ['630685929', 'blarar', 'Москва']] .
{{ table|rejectattr(2, 'eq', "Москва")|map(attribute=1)|list }}
Результат: ['evpolyntseva', 'jarondara'].
33
Удаление символов в начале и конце строки
trim
{{ A|trim }}
{{ A|trim(c) }}
c(chars) - символ или строка, которые будут удалены. По умолчанию пробел.
{{ ' a '|trim }}
Результат: a.
{{ 'bbbсbb'|trim('b') }}
Результат: c.
34
Усечение строки
truncate
{{ A|truncate(len) }}
{{ A|truncate(len,k,e,l) }}
len(length) - длина урезанной строки. По умолчанию 255.
k(killwords) - True или False. True указывается если нужно обрезать строку по длине, False если нужно отбросить последнее обрезаемое слово.
e(end) - знак на месте усечения. По умолчанию многоточие.
l(leeway) - предел превышения длины.
{{ 'foo bar baz qux'|truncate(9) }}
Результат: foo... .
{{ 'foo bar baz qux'|truncate(9, True) }}
Результат: foo ba... .
{{ 'foo bar baz qux'|truncate(11, False, '', 0) }}
Результат: foo bar.
35
Подсчет слов
wordcount
{{ A|wordcount }}
{{ 'Hello World!'|wordcount }}
Результат: 2.
{{ ['a a a','b','c']|wordcount }}
Результат: 5.
{{ {'one': 'a', 'two': 'b b b', 'three': 'c'}|wordcount }}
Результат: 8.
36
Форматирование числа в размер файла
filesizeformat
{{ A|filesizeformat }}
{{ 100000 | filesizeformat }}
Результат: 100.0 kB.
{{ 25000000 | filesizeformat }}
Результат: 25.0 MB.
37
Кодирование в URL
urlencode
{{ A|urlencode }}
Важно: работает только со строками и словарями.
{{ 'привет'|urlencode }}
Результат: %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
{{ {"aaa": "привет", "bbb": 1}|urlencode }}
Результат: aaa=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&bbb=1.
38
Преобразование строки в дату
string_to_time
{{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }} ​После string_to_time в скобках указывается необходимый формат даты. Подробнее:
{{ "2000-06-15 18:50:47" | string_to_time("%Y-%m-%d %H:%M:%S") }}Результат: 2000-06-15 18:50:47 (тип данных — дата)
39
Преобразование даты в строку
time_to_string
{{ "2000-06-15 18:50:47" | time_to_string("%Y-%m-%d %H:%M:%S") }} ​После time_to_string в скобках указывается необходимый формат даты. Подробнее:
{{ "2000-06-15 18:50:47" | time_to_string("%Y-%m-%d %H:%M:%S") }} ​Результат: 2000-06-15 18:50:47 (тип данных — строка)
There are no rows in this table

Выражения с управляющими конструкциями

For
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Пройти циклом по каждому элементу последовательности
For
for, in, endfor
Любые контекстные переменные
{% for A in B %}{{ ... }}{% endfor %}
Важно: цикл может быть максимум двойной вложенности.
Внутри циклов можно использовать дополнительные переменные для проверки значений:
{% for number in [1, 2, 3] %}{{ number }}{% endfor %}
Результат: 123.
There are no rows in this table

Проверки значений переменных внутри For-циклов
Переменная
Обозначение
Как использовать
Пример
1
Номер итерации с начала цикла (1 проиндексирована)
loop.index
{{ loop.index }}
{% for i in [{'name': 'Молоко', 'quantity': '1'}, {'name': 'Яблоки', 'quantity': '4'}, {'name': 'Печенье', 'quantity': '1'}] %}{{ loop.index }}{{ ') ' }}{{ i.name }} {{ i.quantity }}
{% endfor %}
Результат:
1) Молоко 1
2) Яблоки 4
3) Печенье 1
2
Номер итерации с начала цикла (0 проиндексирован)
loop.index0
{{ loop.index0 }}
{% for i in ['A','B','C'] %}{{ loop.index0 }}{{ ': ' }}{{ i }}
{% endfor %}
Результат:
0: A
1: B
2: C.
3
Номер итерации с конца цикла (1 проиндексирована)
loop.revindex
{{ loop.revindex }}
dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
{% for i in dict %}{{ loop.revindex }}{{ ': ' }}{{ i }}{{ ' is ' }}{{ dict[i] }}
{% endfor %}
Результат:
3: one is A
2: two is B
1: three is C.
4
Номер итерации с конца цикла (0 проиндексирован)
loop.revindex0
{{ loop.revindex0 }}
{% for i in ['apple','orange','cherry'] %}{{ loop.revindex0 }}{{ ' | ' }}{{ i }}
{% endfor %}
Результат:
2 | apple
1 | orange
0 | cherry.
5
Истина, если первая итерация
loop.first
{{ loop.first }}
{% for i in ['a','b','c','d','e'] %}{% if loop.first == true %}{{ i }}{{ ' is first' }}{% endif %}{% endfor %}
Результат: a is first.
6
Истина, если последняя итерация
loop.last
{{ loop.last }}
{% for i in ['a','b','c','d','e'] %}{% if loop.last == true %}{{ i }}{{ ' is last' }}{% endif %}{% endfor %}
Результат: e is last.
7
Количество элементов в последовательности
loop.length
{{ loop.length }}
{% for i in ['a','b','c','d','e'] %}{% if loop.last == true %}{{ 'длина: '}}{{ loop.length }}{% endif %}{% endfor %}
Результат: длина: 5.
8
Циклическое перемещение внутри объекта
loop.cycle
{{ loop.cycle }}
dict = {{ {'one': 'A', 'two': 'B', 'three': 'C'} }}
{% for i in dict %}{{ loop.cycle }}{{ dict[i] }}{% endfor %}
Результат: >A>B>C.
9
Глубина рекурсивного цикла (начиная с уровня 1)
loop.depth
{{ loop.depth }}
{% for i in [1,2,3] %}{% if loop.last == true %}{{ 'глубина: '}}{{ loop.depth }}{% endif %}{% endfor %}
Результат: глубина: 1.
10
Глубина рекурсивного цикла (начиная с уровня 0)
loop.depth0
{{ loop.depth0 }}
{% for i in [1,2,3] %}{% if loop.last == true %}{{ 'глубина: '}}{{ loop.depth0 }}{% endif %}{% endfor %}
Результат: глубина: 0.
11
Получение значения из предыдущей интерации цикла
loop.previtem
{{ loop.previtem }}
Важно: элемент не определен, если итерация является первой.
{% for i in [1,2,3] %}{% if loop.first == false %}{{ 'предыдущий элемент: '}}{{ loop.previtem }}
{% endif %}{% endfor %}
Результат:
предыдущий элемент: 1
предыдущий элемент: 2.
12
Получение значения из следующей интерации цикла
loop.nextitem
{{ loop.nextitem }}
Важно: элемент не определен, если итерация является последней.
{% for i in [1,2,3] %}{% if loop.last == false %}{{ 'следующий элемент: '}}{{ loop.nextitem }}
{% endif %}{% endfor %}
Результат:
следующий элемент: 2
следующий элемент: 3.
13
Проверка изменялось ли значение переменной
loop.changed(val)
{{ loop.changed(A) }}
mass = [{'k': 3, 'v': 2}, {'k': 2, 'v': 3}, {'k': 2, 'v': 2}]
{% for row in mass %}{% if loop.changed(row.k) == true %}
{{ row.k }}{% endif %}{% endfor %}
Результат:
3
2.
There are no rows in this table
If
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Условные конструкции
if-выражения
if, elif, else
Любые контекстные переменные
Простые условные конструкции, например, для слота Memory:
{{ <do something> if <something is true> else <do something else> }}
Могут использоваться elif и else.
Часть с else необязательна: при ее отсутствии, если условие if <something is true> не выполняется, результатом станет ‘False’.

{{ 42 if client_message == "Привет" else 111 }}
Результат: ‘42’, если переменная client_message содержит значение "Привет";
‘111’, если переменная client_message содержит любое другое значение.
{{ 42 if client_message == "Привет"}}
Результат: ‘42’, если переменная client_message содержит значение "Привет";
‘False’, если переменная client_message содержит любое другое значение.
There are no rows in this table


Filters
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Применяет фильтр по отношению к блоку данных шаблона
Filters
filter, endfilter
Любые контекстные переменные
Аналогично
@выражениям с использованием фильтров
, только для более больших условий
{% filter <фильтр> %}
TEXT
{% endfilter %}
{% filter upper %}
This text becomes uppercase
{% endfilter %}
Результат: THIS TEXT BECOMES UPPERCASE.
There are no rows in this table

Assignments
Оператор
Тип
Обозначение
Область применения
Как использовать
Пример
1
Присваивает значение операнду
Assignments
set
Любые контекстные переменные
{% set A = B%}
{% set x = 'apples' if age is even else 'oranges' %}{{ x }}
Результат: ‘apples’, если переменная age содержит четное число.
‘oranges’, если переменная age содержит нечетное число.
There are no rows in this table

Ошибки при рендеринге Шаблонов

При
@Обучение
@Агент
а в процессе
@Валидация сценария
проверяется правильность используемых в
@Слот
ах
@Выражение
и
@Выражение с управляющей конструкцией
. При обнаружении ошибок появится предупреждение: ​
image.png
Формат текста предупреждения:
Invalid template syntax:
Slot <id проблемного слота>. Error “<описание ошибки>” in expression “<проблемное выражение>”
Пример:
Invalid template syntax:
Slot 8848840. Error “unexpected char '@' at 3” in expression “{{ @foo }}”
Расшифровка ошибки: в
@Слот
е 8848840 обнаружена ошибка — лишний символ '@' с порядковым номером 3 в выражении {{ @foo }}.
Важно: отсчет порядковых номеров символов в проблемном выражении начинается с 0.

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.