Создание HTML и AMP писем одновременно и без напрягов
Емейл-канал остается одним из наиболее эффективных в маркетинге, хотя используется давно, а изменений претерпел не так уж много. Последним из них стало появление технологии AMP for email, поддержку которой объявили Gmail, Mail. ru и Verizon Media: Yahoo и AOL. С ее помощью можно активно взаимодействовать как с пользователем, так и с сервером непосредственно из письма, что значительно увеличивает потенциал классических емейлов.
Развитие AMP замедляется сложностью и дороговизной — вместе c HTML-письмом необходимо разрабатывать и его AMP-версию.
Основной сложностью классических HTML-писем является кроссплатформенность: емейл-верстка должна одинаково хорошо отображаться в веб-интерфейсах, почтовых клиентах вроде Outlook или Lotus, а также в мобильных приложениях, причем как с поддержкой медиазапросов, так и без нее.
Для решения этих задач был разработан емейл фреймворк, получивший название Ampier, а язык разметки, используемый фреймворком — TJML. Именно об этом новом фреймворке и пойдет речь ниже.
Подключение
Для работы фреймворка необходимо подключить js и css файлы. Это можно сделать добавив сразу после <body> следующий JavaScript код:
<script type="text/javascript">
var s=document.createElement("script"),l=document.createElement("link"),d=new Date;s.setAttribute("src","https://ampier.io/tjml/app.js?ver="+d.getTime()),l.setAttribute("type","text/css"),l.setAttribute("rel","stylesheet"),l.setAttribute("href","https://ampier.io/tjml/app.css?ver="+d.getTime()),document.head.appendChild(l),document.body.appendChild(s);
</script>
Такой вариант позволит избежать нежелательного кеширования и всегда использовать актуальную версию фреймворка.
Файлы можно подключить и напрямую, скачав app.js и app.css на GitHub.
В браузере появится панель инструментов фреймворка:
Интерфейс фреймворка
Отображение HTML и AMP-версий емейла иногда отличается (текстом, наличием форм, каруселей и т.д.), поэтому первый элемент управления — это переключение режимов AMP и HTML.
Следующий элемент панели — переключатель десктопной и мобильной версии емейла. Он позволяет проверить работу медиазапросов, перестроение и отображение мобильной версии в целом.
Режим Dark Mode Check показывает, как отобразится письмо в темной теме. Это, главным образом, относится к мобильным приложениям, но и в веб-интерфейсах некоторых почтовиков есть подобный режим преобразования.
У всех немного отличается формирование темной темы, но есть два базовых варианта:
преобразование только светлого в темное;
полная инверсия цвета (светлое — в темное, а темное — в светлое) — данный вариант характерен для Gmail на iOS.
Подробнее про особенности формирования темной темы можно посмотреть в статье.
Для выхода из режима Dark Mode Check нажмите < Back.
Данная кнопка делает полный скрин письма в один клик. Это удобно, например, когда нужно согласовать с дизайнером, как отображается мобильная версия или темная тема.
Переключатель отображения кода позволяет увидеть непосредственно сгенерированный HTML или AMP код, а также скопировать его в буфер обмена или сохранить в виде файла. Важной особенностью является то, что фреймворк вычисляет размер результирующего кода, поскольку Gmail и некоторые другие почтовики обрезают слишком большие письма. Если размер результирующего код превысит рекомендуемый, фреймворк выделит его красным цветом. Здесь же можно сжать код перед сохранением.
Автозавершение
Для продуктов JetBrains — PhpStorm и WebStorm — вы можете подключить web-types.json и использовать автозавершение: подсказки о доступных тегах, атрибутах и их значениях. Или же просто скачайте стартпак.
Начало работы
Итак, фреймворк подключен, что дальше?
Прежде всего необходимо ознакомиться с документацией — в рамках статьи нет смысла дублировать ее содержание, я опишу лишь базовые принципы.
Классическая емейл верстка строится на таблично-блочном подходе — разметка осуществляется с помощью таблиц, а для блоков, которые необходимо перестроить, используются инлайн-блочное отображение (совместно с условными комментариями для Outlook).
Фреймворк же оперирует тремя абстракциями, на основе которых строится структура:
обертка (m-wrap) — применяется для задания фона, ограничения размера или же для указания выравнивания;
перестраивающиеся блоки (m-boxes и m-box);
не перестраивающиеся блоки (m-row и m-column).
Данный подход позволяет реализовать любую структуру в рамках письма. Помимо тегов, отвечающих за структуру, есть текст (m-text), кнопка (m-button), картинка (m-img) и другие.
Для наглядности давайте сверстаем простое письмо на TJML
Зададим цвет всего письма, прописав его в m-body. Также здесь укажем шрифт по умолчанию: его начертание, размер и цвет.
И текст, выровненный по левому краю с отступами в 20px:
<m-wrap align="left" padding="20px">
<m-text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut magna in libero fringilla laoreet. Praesent nec velit nisi. Nulla ac iaculis massa. Phasellus vitae sagittis risus. Nullam cursus, velit sit amet pulvinar fermentum, felis augue dapibus nulla, non consequat odio lectus auctor libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae.
</m-text>
</m-wrap>
Ниже расположены две карточки, которые в мобильной версии явно хотелось бы перестроить друг под друга:
Код второго блока m-box идентичен, поэтому его приводить не будем. Достаточно скопировать первый блок и вставить его следом. При этом не нужно думать о разбиении на строки\столбцы для Microsoft Outlook — условные комментарии будут автоматически рассчитаны и вставлены в HTML-версию письма.
А код футера представляет собой уже знакомый m-text, но в этот раз мы перезададим значения по-умолчанию:
<m-text font-size="10px" color="#ffffff">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut magna in libero fringilla laoreet. Praesent nec velit nisi. Nulla ac iaculis massa. Phasellus vitae sagittis risus.
</m-text>
TJML код в чистом виде пока не поддерживается большинством ESP, поэтому для загрузки письма в ESP нам потребуется выгрузить HTML и AMP код. Для этого можно нажать Download справа в верхней панели. Либо включить отображение кода с помощью переключателя Show Code и скопировать его.
Переключайте режимы HTML и AMP, чтобы выгрузить соответствующий код.
Pixel Perfect
Подход Pixel Perfect очень удобен: дизайн-макет накладывается на верстку для сопоставления прямо в процессе. Он ускоряет и упрощает верстку, а главное — обеспечивает четкое соответствие дизайну.
Для использования этой возможности в Ampier framework необходимо прописать атрибут pixel-perfect тегу tj-ui с указанием адреса дизайн-макета:
<tj-ui pixel-perfect="img/maket.png">
После этого в интерфейсе появится переключатель pixel-perfect, который активирует панель:
Для более точного наложения макета на вёрстку укажите смещение в пикселях (X и Y) вручную или воспользуйтесь стрелками.
Центральная кнопка задает режим наложения: обычный или «Вычитание»:
HTML в TJML
Использование специального синтаксиса TJML необходимо для преобразования этого кода в результирующий HTML-код (который обеспечивает одинаковый и корректный рендеринг в различных веб-интерфейсах и почтовых клиентах), а также позволяет преобразовать TJML в AMP-код, который пройдет валидацию.
Но в рамках фреймворка допускается и произвольный HTML-код, правда, при рендеринге HTML и AMP версии такой код останется без изменений. Например, использование тега <img> вместо <m-img> позволит корректно отобразить письмо в HTML-режиме, но вызовет ошибку при AMP-рендеринге. Так что эту возможность следует использовать осторожно, фактически взяв на себя ответственность за корректную работу и отображение финального кода.
Возможность размещения произвольного HTML-кода в рамках Ampier-framework также может использоваться для проверки отображения старых писем в темной теме. Для этого их содержимое нужно разместить в <m-body>.
Условный рендеринг AMP и HTML
Контент HTML и AMP-версий часто отличается, например, в HTML пользователю предлагают перейти на веб-версию AMP-письма. Возникает вопрос: как реализовать эти различия в рамках единого TJML-кода?
Здесь поможет условный оператор m-if где проверяется булевая переменная isAmp, которая:
истина (true) при рендеринге AMP версии;
ложна (false) при рендеринге HTML версии.
Используя эту же переменную и отрицание !isAmp, можно проверить, является ли текущая версия HTML.
Получаем:
m-if="isAmp" — тег и его содержимое отобразится только в AMP-версии письма;
m-if="!isAmp" — тег и его содержимое отобразится только в HTML-версии письма.
AMP-теги и их особенности
В AMP для использования amp-bind часто применяются атрибуты в квадратных скобках. В качестве их значения указывается состояние, например [class]=”myState”.
В TJML коде такая запись вызовет ошибку, поэтому динамические атрибуты, которые будут зависеть от состояний, нужно записывать следующий образом:
data-amp-class=”myState”
В общем виде запись будет выглядеть так:
data-amp-attribute="state"
где attribute — это атрибут, значение которого предполагается менять динамически через состояния. Список допустимых атрибутов и тегов можно посмотреть в официальной документации AMP.
Чаще всего HTML — это упрощенная версия AMP-письма, и фреймворк Ampier способствует этому. Например, карусель рендерится в HTML-версии как первый слайд этой карусели. По аналогии работают и другие элементы, характерные для AMP.
AMP mustache
При использовании форм и обработке ответов, при работе с amp-list и в других ситуациях обычно используются шаблоны Mustache. В TJML для этого предусмотрен тег m-template, аналогичный тегу template в AMP. Но есть одно важное отличие: переменные в m-template следует заключать не в фигурные {{ myVar }}, а в квадратные скобки [[ myVar ]].
AMP-формы и генерирование форм Ampier
Зачастую, говоря про AMP-письма, мы подразумеваем именно формы: возможность отправить информацию о действиях пользователя или другие данные на сервер. Естественно, для обработки этих данных и их хранения нужны другие инструменты — здесь нам и поможет сервис Ampier. Он интегрируется с фреймворком Ampier напрямую и позволяет сформировать необходимую структуру для хранения данных.
Для этого вам может потребоваться вспомогательная разметка форм и их элементов.
Атрибут data-title для m-form позволяет дать название компоненту. Это не обязательно, но с ним будет проще ориентироваться в статистике, особенно если в письме несколько форм.
Атрибут data-title можно задать также элементам форм (input, select, textarea), чтобы присвоить понятные названия и им.
Для элемента форм вы можете указать обязательность заполнения — используйте атрибут data-required со значением 1:
data-required="1"
Чтобы сформировать компонент в сервисе Ampier из TJML-кода, нажмите Save to Ampier: код и изображения экспортируются, а также сформируется необходимая структура данных на сервере для их хранения.
Результаты
В течение года фреймворк Ampier активно используется крупным российским маркетинговым агентством. На начальных этапах внедрения мы провели тестирование и увидели прирост производительности в среднем на 51.4% при расчете только HTML-писем (на тот момент AMP-рендеринг был в разработке). Причем увеличение производительности не сказывается на качестве конечного результата и не накладывает ограничений на структуру и дизайн.
При использовании AMP-рендеринга производительность в среднем вырастает на 150% за счет экономии на верстке HTML-версии и автоматического формирования AMP-версии письма.
Отображение HTML и AMP-версий емейла иногда отличается (текстом, наличием форм, каруселей и т.д.), поэтому первый элемент управления — это переключение режимов AMP и HTML.
Следующий элемент панели — переключатель десктопной и мобильной версии емейла. Он позволяет проверить работу медиазапросов, перестроение и отображение мобильной версии в целом.
Режим Dark Mode Check показывает, как отобразится письмо в темной теме. Это, главным образом, относится к мобильным приложениям, но и в веб-интерфейсах некоторых почтовиков есть подобный режим преобразования.
У всех немного отличается формирование темной темы, но есть два базовых варианта:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["преобразование только светлого в темное;","полная инверсия цвета (светлое — в темное, а темное — в светлое) — данный вариант характерен для Gmail на iOS."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Подробнее про особенности формирования темной темы можно посмотреть в статье.
Данная кнопка делает полный скрин письма в один клик. Это удобно, например, когда нужно согласовать с дизайнером, как отображается мобильная версия или темная тема.
Переключатель отображения кода позволяет увидеть непосредственно сгенерированный HTML или AMP код, а также скопировать его в буфер обмена или сохранить в виде файла. Важной особенностью является то, что фреймворк вычисляет размер результирующего кода, поскольку Gmail и некоторые другие почтовики обрезают слишком большие письма. Если размер результирующего код превысит рекомендуемый, фреймворк выделит его красным цветом. Здесь же можно сжать код перед сохранением.
Для продуктов JetBrains — PhpStorm и WebStorm — вы можете подключить web-types.json и использовать автозавершение: подсказки о доступных тегах, атрибутах и их значениях. Или же просто скачайте стартпак.
Классическая емейл верстка строится на таблично-блочном подходе — разметка осуществляется с помощью таблиц, а для блоков, которые необходимо перестроить, используются инлайн-блочное отображение (совместно с условными комментариями для Outlook).
Фреймворк же оперирует тремя абстракциями, на основе которых строится структура:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["обертка (m-wrap) — применяется для задания фона, ограничения размера или же для указания выравнивания;","перестраивающиеся блоки (m-boxes и m-box);","не перестраивающиеся блоки (m-row и m-column)."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Данный подход позволяет реализовать любую структуру в рамках письма. Помимо тегов, отвечающих за структуру, есть текст (m-text), кнопка (m-button), картинка (m-img) и другие.
И текст, выровненный по левому краю с отступами в 20px:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n \n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut magna in libero fringilla laoreet. Praesent nec velit nisi. Nulla ac iaculis massa. Phasellus vitae sagittis risus. Nullam cursus, velit sit amet pulvinar fermentum, felis augue dapibus nulla, non consequat odio lectus auctor libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae.\n \n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Ниже расположены две карточки, которые в мобильной версии явно хотелось бы перестроить друг под друга:
Код второго блока m-box идентичен, поэтому его приводить не будем. Достаточно скопировать первый блок и вставить его следом. При этом не нужно думать о разбиении на строки\\столбцы для Microsoft Outlook — условные комментарии будут автоматически рассчитаны и вставлены в HTML-версию письма.
А код футера представляет собой уже знакомый m-text, но в этот раз мы перезададим значения по-умолчанию:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut magna in libero fringilla laoreet. Praesent nec velit nisi. Nulla ac iaculis massa. Phasellus vitae sagittis risus.\n","lang":""}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"fd514a7b-4add-5f74-8b24-179436d7a30b","width":2280,"height":1922,"size":67533,"type":"png","color":"74637d","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
TJML код в чистом виде пока не поддерживается большинством ESP, поэтому для загрузки письма в ESP нам потребуется выгрузить HTML и AMP код. Для этого можно нажать Download справа в верхней панели. Либо включить отображение кода с помощью переключателя Show Code и скопировать его.
Подход Pixel Perfect очень удобен: дизайн-макет накладывается на верстку для сопоставления прямо в процессе. Он ускоряет и упрощает верстку, а главное — обеспечивает четкое соответствие дизайну.
Центральная кнопка задает режим наложения: обычный или «Вычитание»:
"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"bccde49c-4405-5510-9444-929b17257fcd","width":1600,"height":1520,"size":135812,"type":"png","color":"3b383b","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"HTML в TJML"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Использование специального синтаксиса TJML необходимо для преобразования этого кода в результирующий HTML-код (который обеспечивает одинаковый и корректный рендеринг в различных веб-интерфейсах и почтовых клиентах), а также позволяет преобразовать TJML в AMP-код, который пройдет валидацию.
Но в рамках фреймворка допускается и произвольный HTML-код, правда, при рендеринге HTML и AMP версии такой код останется без изменений. Например, использование тега <img> вместо <m-img> позволит корректно отобразить письмо в HTML-режиме, но вызовет ошибку при AMP-рендеринге. Так что эту возможность следует использовать осторожно, фактически взяв на себя ответственность за корректную работу и отображение финального кода.
Возможность размещения произвольного HTML-кода в рамках Ampier-framework также может использоваться для проверки отображения старых писем в темной теме. Для этого их содержимое нужно разместить в <m-body>.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Условный рендеринг AMP и HTML"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Контент HTML и AMP-версий часто отличается, например, в HTML пользователю предлагают перейти на веб-версию AMP-письма. Возникает вопрос: как реализовать эти различия в рамках единого TJML-кода?
Здесь поможет условный оператор m-if где проверяется булевая переменная isAmp, которая:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["истина (true) при рендеринге AMP версии;","ложна (false) при рендеринге HTML версии."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Используя эту же переменную и отрицание !isAmp, можно проверить, является ли текущая версия HTML.
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["m-if=\"isAmp\" — тег и его содержимое отобразится только в AMP-версии письма;","m-if=\"!isAmp\" — тег и его содержимое отобразится только в HTML-версии письма."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"AMP-теги и их особенности"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
В AMP для использования amp-bind часто применяются атрибуты в квадратных скобках. В качестве их значения указывается состояние, например [class]=”myState”.
где attribute — это атрибут, значение которого предполагается менять динамически через состояния. Список допустимых атрибутов и тегов можно посмотреть в официальной документации AMP.
Чаще всего HTML — это упрощенная версия AMP-письма, и фреймворк Ampier способствует этому. Например, карусель рендерится в HTML-версии как первый слайд этой карусели. По аналогии работают и другие элементы, характерные для AMP.
При использовании форм и обработке ответов, при работе с amp-list и в других ситуациях обычно используются шаблоны Mustache. В TJML для этого предусмотрен тег m-template, аналогичный тегу template в AMP. Но есть одно важное отличие: переменные в m-template следует заключать не в фигурные {{ myVar }}, а в квадратные скобки [[ myVar ]].
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"AMP-формы и генерирование форм Ampier"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Зачастую, говоря про AMP-письма, мы подразумеваем именно формы: возможность отправить информацию о действиях пользователя или другие данные на сервер. Естественно, для обработки этих данных и их хранения нужны другие инструменты — здесь нам и поможет сервис Ampier. Он интегрируется с фреймворком Ampier напрямую и позволяет сформировать необходимую структуру для хранения данных.
Атрибут data-title для m-form позволяет дать название компоненту. Это не обязательно, но с ним будет проще ориентироваться в статистике, особенно если в письме несколько форм.
Чтобы сформировать компонент в сервисе Ampier из TJML-кода, нажмите Save to Ampier: код и изображения экспортируются, а также сформируется необходимая структура данных на сервере для их хранения.
В течение года фреймворк Ampier активно используется крупным российским маркетинговым агентством. На начальных этапах внедрения мы провели тестирование и увидели прирост производительности в среднем на 51.4% при расчете только HTML-писем (на тот момент AMP-рендеринг был в разработке). Причем увеличение производительности не сказывается на качестве конечного результата и не накладывает ограничений на структуру и дизайн.
При использовании AMP-рендеринга производительность в среднем вырастает на 150% за счет экономии на верстке HTML-версии и автоматического формирования AMP-версии письма.
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":2,"favorites":34,"reposts":1,"views":68,"hits":3294,"reads":null,"online":0},"dateFavorite":0,"hitsCount":3294,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/348702-sozdanie-html-i-amp-pisem-odnovremenno-i-bez-napryagov","author":{"id":575428,"name":"Антон","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"b1dccb1a-d071-5fd6-a464-9c4998046f86","width":867,"height":867,"size":154998,"type":"jpg","color":"302e3c","hash":"48180c90ca8ba91c","external_service":[]}},"cover":null,"achievements":[{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 15 августа 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":5544937,"userId":575428,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5544937"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4854323,"userId":575428,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4854323"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1230236,"userId":575428,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1230236"}],"lastModificationDate":1764946243,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":11}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":null,"customCover":null,"robotsTag":null,"categories":[],"isAnonymized":true}};