Переменные-функции
Список доступных функций (наполняется и спрятано)
 
Переменные-функции еще можно назвать текстовыми функциями потому что работают они прямо внутри текстовых полей. Функции отличаются наличием аргументов, которые выступают исходными данными. Текстовые функции подставляют результат своей работы в текст на место где находятся. 
Общие особенности
- Все функции обрамляются фигурными скобками: 
{} 
- В самом начале пишется название функции и двоеточие. 
Например, для функции c названием var — {var:} 
- После двоеточия идут аргументы функции. 
 
- Разделитель между аргументами: 
| - вертикальная черта. Пример: {var:arg1|arg2} 
- Все функции поддерживают многоуровневую вложенность друг в друга!
 
Особенности функции VAR
Основная и самая популярная функция - {var:}. Она получает значение из переменной. Например {var:text} получает значение переменной text и подставляет его вместо себя в текст.
Кроме {var:} есть еще несколько функций, которые вы также можете использовать. Другие функции не просто подставляют значение переменной, а выполняют еще какую-то полезную операцию.
Набор переменных, по своей сути, это большой JSON объект. Внутри такого объекта могут быть разные типы данных: другие объекты, массивы, строки, числа и т. п. 
Иногда нужно погрузиться внутрь одного из внутренних объектов. Для этого можно использовать символ точки: . Например:
{var:obj.deep.value} выведет 123 для JSON-переменной obj со значением {"deep":{"value": 123}}
 А если нужно получить элемент массива, то используются квадратные скобки с индексом элемента, начиная с 0. Например получить тип первого вложения можно так: 
{var:object.attachments[0].type}
Как видите, мы можем спокойно комбинировать разные опции написания, работая одновременно с многими типами данных. 
Продвинутые возможности (автоматизаторам)
На самом деле простым погружением внутрь все не ограничивается. Функция var поддерживает еще очень много встроенных возможностей благодаря библиотеке JMESPath. 
Официальная документация и песочница для тренировок находится на их сайте: https://jmespath.org/ 
Например, можно написать такую сложную структуру для получения идентификатора текущего контакта: 
{user:contacts[?type=='{var:platform.contact.type}' && value=='{user:platform.id}' && bot_id==`{var:graph.integration.id}`] => [0].id}
Есть только пара особенностей. Чтобы не конфликтовать с обрамлением текстовых функций несколько символов заменены. В песочнице работают те которые слева, а в ботах - которые справа. 
Значение по умолчанию
Первый аргумент функции var - название переменной. А второй - значение по умолчанию, если первое не найдено. Если ничего не написать во второй аргумент (не писать символ |), то значением по умолчанию будет undefined. 
Несколько случайных примеров: 
{var:name|default} 
{var:number|0} 
{var:object.attachments[?type=='photo'] => [0].code|Photo not found} 
Если по умолчанию нужна пустая строка, то после символа | не нужно писать ничего (даже пробел). Пример: {var:name|}
Синонимы var - user, chat, author, contact, t
Есть ряд функций, которые по своей сути упрощают администратору жизнь. Их ключевая задача - сократить количество текста которое нужно написать чтобы достать нужную переменную. Покажем соответствия в таблице, где аргументом функции будет крайняя переменная
Профиль текущего чата (например, где было написано сообщение)
| Функция | 
Переменная | 
Значение | 
| {user:id} | 
{var:users.user.id} | 
Профиль текущего пользователя (например, кто написал сообщение) | 
| {chat:title} | 
{var:users.chat.title} | 
Профиль текущего чата (например, где было написано сообщение) | 
| {author:title} | 
{var:users.author.title} | 
Профиль текущего автора (например, кому отвечали - пользователь на сообщение которого получен ответ) | 
| {contact:phone} | 
{var:users.user.contacts[?type=='phone'] => [0].value} | 
Значение первого контакта указанного типа | 
| {t:field_name} | 
{var:template.field_name} | 
Значение поля field_name внутри текущего шаблона (только для случаев если схема запущена через шаблон) | 
Дополнительные фишки функций user - author
Показано на примере user, но для chat и author работает аналогично. 
| Переменная | 
Назначение | 
| {user:full_name} | 
Имя + Фамилия для пользователя или Название для чата | 
| {user:platform} | 
Эквивалент {var:platform.user} | 
| {user:platform.url} | 
Надежная ссылка на профиль пользователя на внешней платформе (через ID) | 
| {user:platform.link} | 
Красивая ссылка на профиль пользователя на внешней платформе (через public_name контакта). В некоторых случаях может быть не задана.  | 
| {user:hash} | 
Зашифрованный ID пользователя. Для использования в реферальных ссылках вместо явного ID. Пример синтаксиса: ?start=uh-{user:hash}. Дает дополнительные преимущества  - помещает профиль партнера в роль {author:} в момент срабатывания события Бот запущен | 
Случайное число - RAND 
Cлучайное число в указанном диапазоне
{rand:|100|999}
Первое число - начиная с числа, второе - заканчивая. Числа учитываются включительно.
Примечание: рандом криптографический и не учитывает историю запросов, поэтому на малых диапазонах множественные повторы одинаковых результатов являются нормой
Случайный текст - ICIDENT
{incident:|one|two|three|four}
Список значений разделяется вертикальной чертой | . И начинается с такой же вертикальной черты.
Дополнительно функция поддерживает возможность передачи массива в первый аргумент. Например у вас есть переменная {var:array} у которой значение - JSON массив: ["one","two,"three"] . Работать будет аналогично. Пример:
{incident:{var:array}}
incident - случайный текст выбранный из всех предложенных вариантов
- Пример: 
{incident:|one|two|three|four} 
- Пример результата: two
 
 
Оставить только цифры - NUM
Пример: {num:{var:product.price}|human}
num - оставить только цифры / числа / математику
int - только цифры в виде одного числа - по умолчанию 
float - число с точкой 
math - числа (float) и математические операторы  
list - числа и запятые  
human - удобочитаемый формат 
price - удобочитаемый формат цены (сумма с копейками, если такие переданы) 
 
Калькулятор - CALC
Посчитать простую математическую формулу (строковый аналог действия Калькулятор)
calc - посчитать простую математическую формулу (аналог действия Калькулятор)
- Параметры:
- 1 - Переменная откуда брать формулу
 
- 2 - Математическое выражение. Может содержать вложенные переменные. Если указаны и первый и второй параметры, то второй параметр в приоритете
 
- 3 - Количество знаков после запятой
 
 
- Примеры:
- а) 
{calc:1.234 + 2*3} = 7.234
б) {calc:1.234 + 2*3|1} = 7.2 
- а) 
{var:expression} = 1.234 + 2*3
б) {calc:{var:expression}}|1} = 7.2 
 
 
Вывод аргумента по индексу - CASE
case - получение аргумента по его индексу, который находится в значении переменной
- Пример: 
{case:{var:users.user.appeal}|обращение на вы|женский|мужской} 
- Суть функции:
- Варианты значений воспринимаются как массив с числовыми индексами.
 
- Нумерация элементов массива начинается с 0.
 
- Значение переменной переводится в число и воспринимается как индекс этого массива.
 
- И в итоге происходит поиск элемента по индексу,
- или выводится значение переменной, если такой элемент с таким номером не найден.
 
 
- например, 
{var:users.user.appeal} может принимать такие значения:
0 - пол не указан, 1 - женский, 2 - мужской. 
- Поэтому и пример выше сработает как положено.
 
 
 
Cклонение слов после числительных - LEXEME
lexeme - склонение существительных после числительных
- Пример: в корзине было 
{var:apples} {lexeme:{var:apples}|яблок|яблоко|яблока} 
- Пример результата: 
в корзине было 24 яблока 
- Суть: 0 или много → яблок, 1 → яблоко, 2 / 3 / 4 → яблока
 
 
Задать формат даты - DATE
Задает или меняет формат даты и времени. Позволяет получить текущее время.
Аргументы:
- Переменная (сразу после двоеточия) с временем
- Если оставить пустой, то будет подставлено текущее время
 
- Должна быть в формате UNIX Timestamp: %s или %d-%m-%Y %H:%M:%S. Если эти форматы вам не подходят, то обязательно передайте свой третьим аргументом!
 
 
- Формат исходящей даты. Пара примеров:
- %F %T - 2023-01-31 18:57:45
 
- %d-%m-%Y %H:%M - 31-01-2023 18:57
 
- %s - 1675180665 - количество секунд с 1 января 1970 года
 
 
- Формат входящей даты (значения переменной или текущей)
- Форматы аналогичны входящим за исключением %s. Он не поддерживается, но его и не нужно задавать через формат. Достаточно просто подставить переменную со значением в формате UNIX Timestamp
 
 
Примеры:
{date:|%d-%m-%Y %H:%M} 
{date:{var:object.text}|%F %T|%d-%m-%Y %H:%M} 
{date:{var:date} {var:time}|%s|%d/%m/%Y %H:%M} 
{date:|%s} 
{date:|%s.%f} или {date:|%s-%f} 
Таблица форматов даты
| Директива | 
Описание | 
Пример результата | 
| %a | 
%Weekday, short version% | 
Wed | 
| %w | 
Weekday as a number 0-6, 0 is Sunday | 
3 | 
| %d | 
Day of month 01-31 | 
31 | 
| %b | 
Month name, short version | 
Dec | 
| %B | 
Month name, full version | 
December | 
| %m | 
Month as a number 01-12 | 
12 | 
| %y | 
Year, short version, without century | 
18 | 
| %Y | 
Year, full version | 
2018 | 
| %H | 
Hour 00-23 | 
17 | 
| %I | 
Hour 00-12 | 
05 | 
| %p | 
AM/PM | 
PM | 
| %M | 
Minute 00-59 | 
41 | 
| %S | 
Second 00-59 | 
08 | 
| %f | 
Microsecond 000000-999999 | 
548513 | 
| %s | 
UNIX Timestamp - количество секунд с 1 января 1970 года | 
1675180665 | 
| %z | 
UTC offset | 
+0100 | 
| %Z | 
Timezone | 
CST | 
| %j | 
Day number of year 001-366 | 
365 | 
 
| Директива | 
Описание | 
Пример результата | 
| %U | 
%Week number of year, Sunday as the first day of week, 00-53% | 
52 | 
| %W | 
Week number of year, Monday as the first day of week, 00-53 | 
52 | 
| %c | 
Local version of date and time | 
Mon Dec 31 17:41:00 2018 | 
| %C | 
Century | 
20 | 
| %x | 
Local version of date | 
12/31/18 | 
| %X | 
Local version of time | 
17:41:00 | 
| %% | 
A % character | 
% | 
| %G | 
ISO 8601 year | 
2018 | 
| %u | 
ISO 8601 weekday (1-7) | 
1 | 
| %V | 
ISO 8601 weeknumber (01-53) | 
01 |