Подстановки и формулы
Переменные в текстах и действиях, контекст выполнения, формулы и функции.
На этой странице
Подстановки вида {{...}} вставляют значения переменных в тексты сообщений, поля действий и шаблоны кнопок при срабатывании реакции. Нераспознанные подстановки остаются как есть. Для вычислений есть формулы. Вставить переменную помогает кнопка «Подстановки» в редакторе сообщения.
Данные отправителя
{{first_name}},{{last_name}}: имя и фамилия.{{username}}:@usernameпользователя.{{user_id}}: числовой Telegram-ID.
Данные события и чата
{{text}}(он же{{received_message}}): текст входящего сообщения.{{message_id}}(он же{{received_message_id}}): ID входящего сообщения.{{chat_id}},{{chat_title}}(он же{{chat_name}}): чат, где произошло событие.{{topic_id}},{{topic_url}}: топик (для форумов).
Источник и рефералы
{{utm_source}},{{utm_medium}},{{utm_campaign}},{{utm_content}},{{utm_term}}: пять UTM-полей из payload deep-link. Поддерживаются query-форма (utm_source=vk&utm_medium=cpc) и Telegram-форма (utm_source-vk__utm_medium-cpc); для каждого ключа берётся первое непустое значение.ref=<ID>иref_<ID>разбираются отдельно как реферальный идентификатор. Произвольный payload без распознанных ключей сохраняется как источник, но оставляет все пять UTM-полей пустыми. Первый непустой payload занимает неизменяемый first-touch источник, даже если в нём нет UTM или реферального идентификатора. Поздний/startне заменяет этот источник и не записывает UTM-метки из нового payload. Пустой payload first-touch источник не занимает.{{referrals.count}}: число текущих не объединённых подписчиков, приглашённых этим человеком по его реферальной ссылке (https://t.me/<bot>?start=ref_{{user_id}}). Если приглашённых нет, значение равно0. Считаются только новые подписчики: повторный/startпо чужой ссылке ничего не меняет.{{referrer_id}}: ID пригласившего; пусто, если человек пришёл сам.{{ctx.referrer_id}}: доступен именно в реакции на самый первый/startновичка, пришедшего по реферальной ссылке. Это контекст первого старта, а не свойство событияreferral.joined.
Пример реферальной механики: реакция на /start отправляет «Ваша ссылка: https://t.me/<bot>?start=ref_{{user_id}} – приглашено: {{referrals.count}}», а реакция с триггером Событие клиента referral.joined обрабатывает новое приглашение от лица новичка. У события есть свойства referrer_tg_user_id, referrals_count, start_payload; адресат действия и ограничения подстановок описаны в разделе Событие клиента / сайта.
Дата и время
{{date}}: дата (ГГГГ-ММ-ДД),{{time}}: время (ЧЧ:ММ),{{datetime}}: дата и время.- Форматирование:
{{date:DD.MM.YYYY HH:mm}}: токеныYYYY,YY,MM,DD,HH,mm,ss.
Параметры пользователя
{{param.ключ}}(он же{{params.ключ}}или{{recipient.ключ}}): значение параметра подписчика. Параметры наполняются действиями «Изменить параметры», «Сохранить сообщение» и ответами в диалоге.{{label.имя}}:1, если у подписчика есть метка с таким именем (регистр не важен; вместо имени можно указать id метки), иначе пусто. Удобно в условном тексте и для скрытия кнопок.{{label.имя.expires_at}}: срок действия временной метки в форматеГГГГ-ММ-ДД ЧЧ:ММ; пусто для бессрочной метки или если метки нет.{{label.имя.days_left}}: сколько полных дней осталось до снятия метки (округление вверх,0– срок уже вышел); пусто для бессрочной метки.
Контекст выполнения (ctx)
{{ctx.ключ}}(он же{{context.ключ}}): временные значения текущего запуска: данные входящего вебхука, результаты действий (веб-запрос, запрос к источнику, ИИ), восстановленные данные кнопки (Carry), элементы цикла.- В цикле по списку элемент доступен по своему псевдониму, например
{{item.name}}.
Формулы
Конструкция {{= выражение}} вычисляет короткое выражение прямо в тексте. Тот же язык выражений работает в режиме «Формула» действия «Вычисление» и в условиях таблицы решений. В выражениях можно ссылаться на параметры и значения ctx по имени, использовать арифметику, сравнения, логику, тернарный оператор ? : и несколько функций: len, upper, lower, trim, concat, round, floor, ceil, abs, min, max.
Примеры: {{= price * qty}}, {{= round(total / 3)}}.
Функции расширенной формулы (ОКРУГЛ, ЕСЛИ, СЦЕПИТЬ, FILTER, HASH и др.) внутри {{= }} не работают. Посчитайте значение действием «Вычисление» в режиме «Расширенная формула» и подставьте результат через {{ctx.ключ}}.
Оба языка подробно: в разделе Формулы.
HTML в подстановках
Сообщения отправляются с разметкой HTML. Чтобы значение подстановки не сломало вёрстку (например, если имя пользователя содержит <), подставляемые значения по умолчанию экранируются: HTML-символы превращаются в безопасный текст. Собственные теги, которые вы написали прямо в тексте реакции (<b>, <a> и т.п.), не трогаются.
Если значение само содержит готовую разметку (например, сохранённый в параметре анонс с <b>...</b>) и вы хотите вставить её как есть, пометьте подстановку префиксом &:
{{& ключ}}: сырая вставка для{{...}}-подстановок.{&user:ключ},{&recipient:ключ},{&global:ключ}: сырая вставка для namespace-подстановок.
Префикс & отключает экранирование только для конкретной подстановки: вы берёте на себя доверие к источнику значения. Подписчик-контролируемые токены ({{first_name}} и т.п.) лучше оставлять экранированными.
При импорте ботов из других конструкторов namespace-подстановки {user:…}/{recipient:…}/{global:…} автоматически переносятся в сырую форму {&…}: там часто лежат значения с готовой разметкой, как это и работало в исходном конструкторе.
Важно про формат
Подстановки {{...}} работают в текстах, подписях, телах запросов и шаблонах кнопок. Имена параметров и ключей ctx давайте короткими и латиницей (email, total, order_id): так их удобнее подставлять.
Что дальше
- Формулы: синтаксис DSL и полный список функций.
- Сообщения и кнопки: где применяются подстановки.
- Действия: действия, которые наполняют параметры и
ctx. - Коллекции и данные: хранение данных между запусками.