VARICA
digital proposal bureau
VARICA / Документация v2

Маски и данные шаблона

Поддерживается только формат:

Формат маски

Поддерживается только формат:

{{object.field}}

Примеры:

{{client.name}}
{{company.name}}
{{deal.title}}
{{manager.phone}}
{{price}}

Имя маски может состоять из латинских букв, цифр, _ и .. Пробелы внутри двойных фигурных скобок допускаются, но при чтении не несут смысла: {{ client.name }} и {{client.name}} — одна маска.

Где маска работает

Маски извлекаются из:

  • темы шаблона (subject);
  • HTML тела шаблона;
  • содержимого Table v2.

Поэтому удаление маски из видимого блока не всегда снимает обязательность: она может оставаться в теме или в скрытом/табличном HTML. Перед API-созданием нужно сверять список в окне «Запрос».

Обычные маски

Обычная маска передаётся внешнему API как поле data.<имя маски>:

data.client.name=АО Ромашка
data.price=100,20

Значение может содержать кавычки, запятые и другой обычный текст: multipart/form-data передаёт поле как одно значение и не требует ручного JSON-экранирования.

Табличные маски

Маска с префиксом tables. считается табличной только внутри Table v2. Например:

{{tables.name}}
{{tables.count}}
{{tables.price}}

Во внешнем API она передаётся как rows.tables.name, rows.tables.count, rows.tables.price.

Значения строк разделяются символом |:

rows.tables.name=Насос|Шкаф|Кабель
rows.tables.price=100,20|250,50|10,00

Количество строк определяется самым длинным набором значений. Если в одном поле значений меньше, остаток соответствующих ячеек остаётся пустым.

Ошибка разметки

Не использовать в масках:

{{Текст}}
{{client name}}
{{client-name}}
{{tables.name}} в обычной HTML-таблице для динамических строк

Последний вариант важен: маска может подставиться как текст, но автоматическое размножение строк работает только в Table v2. Окно «Запрос» различает обычные маски, маски Table v2 и маски, которые не могут быть динамически обработаны как таблица.

Серверная проверка

Перед созданием страницы сервис:

  1. извлекает все маски из темы и подготовленного тела;
  2. строит контекст из data.*;
  3. проверяет, что каждая обязательная маска присутствует;
  4. при отсутствии возвращает HTTP 400 с missing_variables, required_variables и provided_variables;
  5. рендерит шаблон в Jinja с StrictUndefined.

Это намеренно строгий режим: лучше вернуть диагностируемую ошибку интегратору, чем отправить клиенту КП с молча пропавшим значением.