База знаний GetMyBot

Подстановки и формулы

Переменные в текстах и действиях, контекст выполнения, формулы и функции.

На этой странице

Подстановки вида {{...}} вставляют значения переменных в тексты сообщений, поля действий и шаблоны кнопок при срабатывании реакции. Нераспознанные подстановки остаются как есть. Для вычислений есть формулы. Вставить переменную помогает кнопка «Подстановки» в редакторе сообщения.

Данные отправителя

  • {{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): так их удобнее подставлять.

Что дальше