Перейти к основному содержимому

Переменные и функции ALTCRAFT

Переменные

Переменные данных профиля
ОписаниеПеременная
Email-адрес{lead.email}
Список телефонов{lead.phones}
Имя{lead._fname}
Фамилия{lead._lname}
Дата рождения{lead._bdate}
Пол{lead._sex}
Дата регистрации{lead._regdate}
IP-адрес регистрации{lead._regip}
Город регистрации{lead._regcity}
Страна регистрации{lead._regcountry}
URL-адрес регистрации{lead._regurl}
IP-адрес{lead._ip}
Город{lead._city}
Страна{lead._country}
Регион{lead._region}
Индекс{lead._postal_code}
Временная зона{lead._tz}
Поставщик{lead._vendor}
Идентификатор профиля{lead._id}
XXM-хеш{lead._xxm}
XX-хеш{lead._xxh}
MD5-хеш{lead._md5}
* Дополнительное поле {lead.название_поля}
Переменные подписок профиля
ОписаниеПеременная
Email-адрес подписки{subscription.email}
Домен email-адреса{subscription.email_domain}
Список email-адресов подписки{subscription.emails}
Телефон подписки{subscription.phone}
Список телефонов подписки{subscription.phones}
Список push-подписок{subscription.pushes}
MD5-хеш email-адреса{subscription.email_md5}
MD5-хеш телефона{subscription.phone_md5}
Hash подписки{subscription.hash_id}
Кастомное поле подписки{subscription_field("channel" "field_name" resource_id)}

channel — строка с указанием на канал ("email")

field_name — имя поля для вставки ("domain")

resource — идентификатор ресурса (10)

Функция subscription_field позволяет вставлять поля из подписок, независимо от того, какой канал используется в текущем сообщении. Например, если у профиля есть SMS подписка, вы можете подставить его телефон в email версию сообщения:

{subscription_field("sms" "phone")}

Если под условия подходят несколько подписок, выбирается подписка с самым высоким приоритетом.

Доступные поля для подстановки:

КаналПолеОписание
emailemailEmail-адрес подписки
domainДомен email-адреса подписки
domain_groupДоменная группа
md5MD5-хеш email-адреса
smsphoneТелефон подписки
md5MD5-хеш телефона
pushsubscription_idИдентификатор push-подписки
bundle_idИдентификатор приложения для iOS APNs
providerPush провайдер
подсказка

Аналогично в шаблон можно подставлять данные из подписок кастомных каналов. Поля кастомных каналов соответствуют sid полей, которые вы указываете при создании канала.

Связи профилей

Общая формула переменной:

{relation.[короткое_имя_связи].[direct для прямых или reverse для обратных].[имя_свойства].[count — количество, total — сумма, top — топ связей]}

Количество прямых связей со свойством profit:

{relation.managers_loyal.direct.profit.count}

Топ обратных связей со свойством profit. Используется цикл для вывода нескольких значений:

{for $index $item = relation.managers_loyal.reverse.profit.top}
{$item.lead._fname} {$item.lead._lname} ({$item.value} profit)
{else} There is no ‘profit’ for you :(
{end}

Сумма значения свойства profit для прямой связи:

{relation.managers_loyal.direct.profit.total}
Переменные даты и времени
ОписаниеПеременнаяПример
Форматированная дата{format}{format datenow "%Y-%m-%D %H:%M:%S timezone, %I am"}

2018-12-25 18:56:10 +03:00, 6 pm
Неформатированная дата{datenow}2018-12-25T18:56:10+0300
Смещение даты{adddate()}{adddate(datenow 0 0 3)}

2018-12-27T18:56:10+0300
Полный год{yearlong}2018
Год{year}18
Месяц{month}12
День{day}10
Часы в 24-часовом формате{hours}18
Часы в 12-часовом формате{hours12}06
«До полудня», «После полудня»{ampm}PM
Минуты{minutes}56
Секунды{seconds}10
Дополнительные переменные
ОписаниеПеременная
API-контент{apicontent.field_name}
Имя отправителя SMS{from_name_sms}
Пиксель, чтобы зафиксировать открытие письма{pixel}
Пиксель, чтобы зафиксировать чтение письма{read}
Идентификатор ресурса{resid}
Пиксель, чтобы зафиксировать чтение письма{read}
Название базы данных{listname}
Идентификатор базы данных{listid}
Название сообщения{msgname}
Идентификатор сообщения{msgid}
Тип сообщения{msg_type}
Отмена отправки сообщения{cancel}
Трекинг домен{trkdomain}
Название кампании{campname}
Идентификатор кампании{campid}
SUBID кампании{subid}
Добавление в стоп-список{suppress}
URL-адрес менеджера подписок{preferences}
URL-адрес отписки{unsubscribe}
URL-адрес глобальной отписки{globalunsubscribe}

Функции редактора

Форматирование даты

Данные типа "дата" имеют разное представление в разных странах. Для удобства подписчиков предусмотрена функция форматирования дат.

Например, для того, чтобы представить дату рождения подписчика в виде:

Дата рождения 02.11.1998

Используется такая функция:

<p>Дата рождения {format lead._bdate "%D.%m.%Y"}</p>

Все параметры форматирования даты:

# years
"%y": "06"
"%Y": "2006"
"yy": "06"
"YYYY": "2006"

# months
"%m": "01"
"MM": "01"
"%B": "January"
"month": "January"

# days
"%d": "2"
"%D": "02"
"DD": "_2"
"%A": "Monday"
"weekday": "Monday"

# hours
"%H": "15"
"%I": "3"
"hh": "15"
"hours": "15"
"twelve_h": "3"

# mins
"%M": "04"
"mm": "04"

# seconds
"%S": "05"
"ss": "05"

# am/pm indicator
"am": "pm"
"AM": "PM"
"%p": "pm"

# timezone
"tzone": "-07"
"timezone": "-07:00"
"%Z": "Z0700"

Чтобы вставить функцию, нажмите на кнопку </> в редакторе шаблонов и выберите Дата и времяФорматированная дата.

к сведению

Если в шаблоне используется контент из внешнего JSON (переменная apicontent или динамический JSON-контент), платформа может преобразовать строки в формате RFC 3339 в дату и время.

Пример форматирования:

РежимФормат
JSON"date_time": "2023-02-21T11:10:35.141Z"
Шаблон{format apicontent.date_time "%Y-%m-%d %H:%M:%S"}
Предпросмотр2023-02-21 11:10:35
Смещение даты

Функция adddate(date, year, month, day) возращает значение даты после того, как добавит к ней определённый интервал.

<p>Event starts on {adddate(lead.notify_date 0 0 10)}</p>

adddate() может использоваться внутри функции format().

<p>Event starts on {format adddate(lead.notify_date 0 0 10) "%Y-%m-%D"}</p>

Чтобы вставить функцию, нажмите на кнопку </> в редакторе шаблонов и выберите Дата и времяСмещение дат.

Форматирование цен

Также предусмотрена фунция форматирования числовых данных, которая делит число на блоки по три цифры заданным разделителем.

Price 8.000 RUR
<p>Price {format json.price "."} RUR</p>

Чтобы вставить функцию, нажмите на кнопку </> в редакторе шаблонов и выберите Функции выводаФорматирование.

Шифрование и хэширование

Шифрование переменных шаблона применяется когда необходимо передать данные вместе с кликом по URL на целевой сайт, но при этом данные не должны отражаться в журналах веб серверов или каким-то образом у пользователя. Например, в некоторых случаях данные предзаполнения форм достаточно закодировать в base58, чтобы на стороне сайта их раскодировать и подставить в форму.

Чтобы передавать контент шаблона и переменные в зашифрованном или хeшированном виде, в редакторе шаблонов предусмотрена функция crypt. Чтобы получить доступ к ней, нажмите на кнопку </> в редакторе шаблонов и выберите Шифрование.

{crypt(алгоритм поле ключ)}

Можно изменить кодировку или зашифровать данные по одному из этих алгоритмов:

  • base58
  • base64
  • sha1
  • sha256
  • aes
  • blowfish

Для sha1, sha256, aes и Blowfish необходимо указать ключ, который будет применяться на другой стороне для дешифровки значения.

Детали шифрования AES и Blowfish:

AESBlowfish
Вектор инициализацииПервые 16 байт строкиПервые 8 байт строки
Режим шифрованияCFB (Cipher Feedback)CBC (Cipher Block Chaining)
Длина ключа128 бит — 16 символов64 бит — 8 символов
Paddingнулевойнулевой
подсказка

Шифрование / дешифрование происходит через кодировку Base64URL.

Ниже приведены примеры синтаксиса для изменения кодировки и шифрования:

{crypt(base58 lead._fname)}
{crypt(base64 lead._lname)}
{crypt(sha256 lead.custom_field "encrypt_key")}
{crypt(sha1 lead._city "encrypt_key")}
{crypt(aes lead._fname "key1234567891234")}
{crypt(blowfish lead._fname "key12345")}

Если необходимо зашифровать строку текста, её нужно заключить в кавычки. Если число — кавычки не нужны:

{crypt(base58 "value")}
{crypt(base64 42)}

Для хеширования доступны следующие алгоритмы. Для каждого можно использовать соль:

  • md5 + соль
  • xxh32 + соль
  • xxh64 + соль

Синтаксис такой же, как для функций шифрования:

{crypt(md5 subscription.email "salt")}
{crypt(xxh32 loyalty.new2.promocode "salt")}
{crypt(xxh64 json.text "salt")}

Обратите внимание, что зашифрованные данные уже будут закодированы в base64.

Функции вывода
ОписаниеПеременнаяПример
Форматированиеformat{format 1000000000 ","}

1,000,000,000
Длина переменнойlength{length("abc")}

3
Массив значенийarray{array[1 "2" 3.3]}

[1 2 3.3]
Случайный элемент массива`randomize{randomize(array[1 2 3])}

1
Лимит массиваlimit{limit(array[1 2 3] 2)}

[1 2]
Чётность числаiseven{iseven(2)} => true

{iseven(3)} => false
Кодирование URL-адресаurlencode{urlencode(lead._regurl)}

http:%2F%2Ftest.testdomain.com%2Fsomething

Используется для кодирования недопустимых символов в URL параметрах.
Декодирование URL-адресаurldecode{urldecode(lead._regurl)}

http://test.testdomain.com/something
Верхний регистр
uppercase{uppercase("text")}

TEXT
Первый символ в верхнем регистре
uppercasefirst{uppercasefirst("john")}

John

Логические выражения

к сведению

Использование логических выражений описано в отдельной статье. Для составления простого условия используется:

{if lead.age gte 18}
Если 18 или старше.
{else}
Если младше 18.
{end}

Циклы

к сведению

Использование циклов описаны в соответствующей статье.

Внешний JSON

к сведению

Переменные маркета

Фрагменты

к сведению

Использование фрагментов описано в этой статье.

Для вызова фрагмента используйте {fragment.<короткое_имя_фрагмента>}.

Для вызова случайного фрагмента из диапазона: {randomfragment[fragment.name1 fragment.name2 fragment.name3]}.

Функционал JSONPath

к сведению

Язык запросов JSONPath позволяет быстро и просто обращаться к json-объектам внутри внешнего контента.

Путь к переменной указывается в виде {jsonpath(json.<корневой_объект> "<путь_к_объекту>" "<формат вывода>")}.

Использование функционала JSONPath подробно описано в этой статье.