Переменные и функции 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")}
Если под условия подходят несколько подписок, выбирается подписка с самым высоким приоритетом.
Доступные поля для подстановки:
| Канал | Поле | Описание |
|---|---|---|
| Email-адрес подписки | ||
| domain | Домен email-адреса подписки | |
| domain_group | Доменная группа | |
| md5 | MD5-хеш email-адреса | |
| sms | phone | Телефон подписки |
| md5 | MD5-хеш телефона | |
| push | subscription_id | Идентификатор push-подписки |
| bundle_id | Идентификатор приложения для iOS APNs | |
| provider | Push провайдер |
Аналогично в шаблон можно подставлять данные из подписок кастомных каналов. Поля кастомных каналов соответствуют 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"
"%ru_month": "январь"
# 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:
| AES | Blowfish | |
|---|---|---|
| Вектор инициализации | Первые 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 Пример: в дополнительном поле профиля Favourite_genres хранится массив ["Детектив", "Юмор", "Фантастика"], выражение {randomize(lead.Favourite_genres)} выведет один случайный элемент, например "Детектив".Работает с полями Телефоны, Теги и Массив объектов, а также с массивами API-контента и внешнего JSON-контента. |
| Лимит массива | 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}
Циклы
Использование циклов описаны в соответствующей статье.