Синтаксис
В данной статье описан синтаксис Платформы
Переход на новую версию синтаксиса
Новая версия синтаксиса имеет более широкий список функций, чем старая, и позволяет реализовывать большее количество сценариев, например:
Работа с циклами;
Парсинг объектов объектов неизвестной структуры и массивов переменной длины;
Применение большого количества фильтров к данным.
В настоящее время все новые агенты создаются в новой версии синтаксиса. Перейти со старой на новую версию можно следующим образом:
Важно: Сценарий может быть либо 1-й версии, либо 2-й. Одновременно использовать обе версии синтаксиса в Сценария нельзя.
Изменения после перехода на новую версию синтаксиса
В результате процедуры апгрейда с агентом произойдут следующие изменения:
Если переход был совершен с помощью кнопки UPGRADE на карточке Агента или в БотБилдере (способ более не доступен), в БотБилдере будут подсвечены те Слоты, в которых используются конструкции старой версии синтаксиса.
После того как проблемный Слот отредактирован, предупреждение можно убрать, нажав SLOT FIXED, REMOVE ALERT.
После перехода на 2-ую версию синтаксиса вернуться к 1-ой версии можно, поменяв версию в конфигурационном файле Агента.
Общая информация о новой версии синтаксиса
Новая версия синтаксиса может использоваться в следующих слотах:
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
Synonim: допустимо использование Выражений и Управляющих конструкций в поле Source
Новая версия использует синтаксис шаблонизатора Jinja: https://jinja.palletsprojects.com/en/3.0.x/templates/
Шаблоны в синтаксисе делятся на 2 концепции:
Выражение. Заключаются в двойные фигурные скобки.
https://jinja.palletsprojects.com/en/3.0.x/templates/#expressions
Примеры:
{{ client_message }}
{{ number * 10 }}
{{ chat_id == ‘abcde0123456789’ }}
{{ uuid4() }}
{{ some_variable is defined }}
Управляющая конструкция. Заключаются в фигурные скобки с символом %. https://jinja.palletsprojects.com/en/3.0.x/templates/#list-of-control-structures
Примеры:
{% if client_message == ‘привет’ %}Hi{% else %}Bye{% endif %}
{% for number in [1, 2, 3] %}{{ number }}{% endfor %}
Выражения
Литералы
Математические операции
Ограничения:
Максимальное число (по модулю), которое можно использовать в арифметических операциях — 4294967296. Если использовать большие числа, то будет ошибка (в memory в переменную сохранится False, например).
Если складывать строки / массивы, то максимально допустимая длина строки / массива — 1000.
Операции сравнения
Логические операции
Другие операции
Проверки значений переменных
Фильтры синтаксиса
If-выражения
Оператор | Тип | Обозначение | Область применения | Как использовать | Пример |
---|---|---|---|---|---|
Условные конструкции | if-выражения | if, elif, else | Любые контекстные переменные | Простые условные конструкции, например, для слота Memory:{{ <do something> if <something is true> else <do something else> }}Могут использоваться elif и else.Часть с else необязательна: при ее отсутствии, если условие if <something is true> не выполняется, результатом станет ‘False’. |
|
Управляющие конструкции
For
Оператор | Тип | Обозначение | Область применения | Как использовать | Пример |
---|---|---|---|---|---|
Пройти циклом по каждому элементу последовательности | For | for, in, endfor | Любые контекстные переменные | {% for A in B %}{{ ... }}{% endfor %}Важно: цикл может быть максимум двойной вложенности.Внутри циклов можно использовать дополнительные переменные для проверки значений: Проверки значений переменных внутри For-циклов | {% for number in [1, 2, 3] %}{{ number }}{% endfor %}Результат: 123. |
Проверки значений переменных внутри For-циклов
If
Оператор | Тип | Обозначение | Область применения | Как использовать | Пример |
---|---|---|---|---|---|
Условные конструкции | If | if, elif, else, endif | Любые контекстные переменные | Для более больших условий, нежели if-выражения, например, для слота Text:{% if ... %}A{% else %}B{% endif %}Могут использоваться elif и else. | Результат: ‘Добрый вечер!’, если переменная current_time содержит значение более 18.‘Добрый день!’, если переменная current_time содержит значение менее либо равное 18. |
Filters
Оператор | Тип | Обозначение | Область применения | Как использовать | Пример |
---|---|---|---|---|---|
Применяет фильтр по отношению к блоку данных шаблона | Filters | filter, endfilter | Любые контекстные переменные | Аналогично выражениям с использованием фильтров, только для более больших условий{% filter <фильтр> %} TEXT{% endfilter %}Фильтры: Фильтры синтаксиса | Результат: THIS TEXT BECOMES UPPERCASE. |
Assignments
Оператор | Тип | Обозначение | Область применения | Как использовать | Пример |
---|---|---|---|---|---|
Присваивает значение операнду | Assignments | set | Любые контекстные переменные |
| Результат: ‘apples’, если переменная age содержит четное число.‘oranges’, если переменная age содержит нечетное число. |
Ошибки при рендеринге Шаблонов
Формат текста предупреждения:
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.
Last updated