Формат маски
Поддерживается только формат:
{{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 и маски, которые не могут быть динамически обработаны как таблица.
Серверная проверка
Перед созданием страницы сервис:
- извлекает все маски из темы и подготовленного тела;
- строит контекст из
data.*; - проверяет, что каждая обязательная маска присутствует;
- при отсутствии возвращает HTTP 400 с
missing_variables,required_variablesиprovided_variables; - рендерит шаблон в Jinja с
StrictUndefined.
Это намеренно строгий режим: лучше вернуть диагностируемую ошибку интегратору, чем отправить клиенту КП с молча пропавшим значением.