Перейти к содержанию

Списки и формы подписки

Список — тема, в которую человек может вступить и выйти из неё отдельно: рассылка новостей, обновления продукта, события. Люди присоединяются через блок подписки на вашем сайте, собственную форму, API подписки, импорт или через администратора. Эта страница описывает сами списки, блок подписки, действие плагина Form и публичные страницы.

Списки

Списки живут на вкладке Audience вместе с тегами и сегментами. В свежей установке есть один: Newsletter, код newsletter, который просит людей подтвердить подписку и является списком по умолчанию.

Чтобы добавить список, откройте Add a list и заполните:

Поле Что делает
Code Как список называет форма подписки. Строчные буквы, без пробелов, и он никогда не меняется после создания списка.
Name Что читают люди в центре предпочтений и рядом с флажком.
Description Необязательно. Показывается под именем в центре предпочтений.
Ask people to confirm Двойное подтверждение подписки для этого списка. Новые списки начинают с настройки Ask People to Confirm на вкладке Signup (double_opt_in, включена). Для формы на публичной странице правильный ответ — включено.
On the preference center Предлагать этот список в центре предпочтений, чтобы человек со ссылкой из вашей почты мог вступить в него сам. Выключено означает, что в него вступают через форму, импорт или через вас.

Щёлкните список, чтобы открыть его страницу: код и настройки, Edit (имя, описание, Ask people to confirm, Default list, On the preference center), Add people (вставьте адреса, см. Подписчиков) и его людей с чипами, где каждый находится в этом списке, и той же панелью массовых действий, что и в таблице Subscribers.

  • Default list — куда попадает подписка, не назвавшая список. Назначение одного списка по умолчанию снимает флаг с любого другого.
  • Код списка нельзя изменить, потому что каждая форма подписки, импорт и кампания находят список по нему.
  • Списки нельзя удалить. Список, который вы больше не используете, может просто оставаться вне центра предпочтений и ваших форм.
  • Счётчик списка на вкладке Audience открывает таблицу Subscribers, отфильтрованную по подписанным на него людям.

Блок подписки

mailroom_form() рисует блок подписки в любом месте темы или в содержимом страницы:

{{ mailroom_form() }}                    {# список по умолчанию #}
{{ mailroom_form('newsletter') }}        {# один список, по коду #}
{{ mailroom_form('newsletter', {heading: 'Get the newsletter', name: true, source_ref: 'footer'}) }}

Первый аргумент — код списка. Если его нет, он пуст или называет несуществующий список, подписка идёт в список по умолчанию, а не выбрасывается. Второй аргумент — набор параметров:

Параметр Что делает
heading Заголовок над блоком. По умолчанию «Join the mailing list»; '' — без заголовка.
intro Строка текста под заголовком.
button Текст кнопки. По умолчанию «Sign me up».
placeholder Подсказка в поле электронной почты. По умолчанию «you@example.com».
email_label, name_label Названия полей. По умолчанию «Email address» и «Your name».
name true добавляет поле имени.
tags Коды тегов, которые ставятся всем, кто подписывается здесь, списком или одной строкой через запятую.
source_ref Ваша заметка о том, откуда они пришли, например footer, хранится у подписчика (до 190 символов).
lists Дополнительные коды списков, предлагаемые флажками (ниже).
lists_label Заголовок над этими флажками. По умолчанию «What would you like to hear about?».
consent_text Другая формулировка рядом с флажком этой формы и формулировка, записываемая для людей, которые через неё подписываются (см. примечание ниже).
template Нарисовать другой partial вместо partials/newsletter-signup.html.twig.

Примечание

Собственный consent_text формы — это предложение, записываемое для людей, которые через неё подписываются. Форма передаёт его обратно сайту в скрытом поле consent_form, подписанном секретом сайта, поэтому никто не может заявить предложение, которого сайт никогда не показывал. Пустой consent_text показывает Consent Sentence сайта (на вкладке Signup), пока она у сайта есть; флажок исчезает, только когда эта настройка тоже пуста. См. Двойное подтверждение подписки и согласие.

Несколько списков в виде флажков

Предложите два или больше списка, и блок рисует их флажками под собственным именем каждого списка, ни один не отмечен:

{{ mailroom_form('newsletter', {lists: ['security', 'events'], lists_label: 'What should we send you?'}) }}

Первый аргумент идёт первым, затем lists, каждый по разу. Код, не называющий список, не предлагается. Человек подписывается на отмеченные списки, и форма не отправится, если не отмечен ни один («Choose at least one list to join.»). Каждый список сохраняет своё Ask people to confirm: тот, что просит подтверждение, оставляет человека ждать, тот, что не просит, подписывает сразу, а список, в котором он уже состоит, не трогается. Сколько бы списков его ни ждали, уходит одно письмо подтверждения, и нажатие подтверждает все.

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

Что делает блок

  • С JavaScript блок отправляет свои поля как JSON на {route}/subscribe и печатает ответ там, где была форма: как только подписка принята, поля и кнопка уступают ему место и оно получает фокус, поэтому скринридер его прочитает. Отказ оставляет поля для исправления и прокручивает ответ в поле зрения.
  • Без JavaScript та же форма отправляется обычно с nonce сайта, и сайт отвечает страницей с тем же предложением.
  • Флажок согласия рисуется, когда есть предложение согласия, и его нужно отметить. Форма без флажка не отправляет согласия вообще.
  • Поле-ловушка website находится за экраном с названием «Leave this field empty». Заполнившему его говорят, что всё получилось, и ничего не записывают.
  • Ответ одинаков для нового адреса, уже находящегося в списке и исключённого, поэтому форма никогда не выдаёт, читает ли конкретный человек вашу почту.
  • Подписки ограничены — Signups Per Hour (rate_limits.subscribe, 10) с одного адреса посетителя. Одиннадцатая получает «That is a few too many tries.»

Подписка через блок записывается как Signup form (form), с JavaScript или без него.

Изменение разметки

Скопируйте templates/partials/newsletter-signup.html.twig из плагина в templates/partials/ вашей темы и редактируйте там. У каждого элемента есть класс mailroom-*, а id формы — mailroom-1, mailroom-1-email и так далее, с нумерацией по форме на странице. Блок оформляется небольшим файлом стилей Mailroom, который есть на каждой странице сайта (поэтому блок оформлен везде, куда вы его поставите) и который выключает Mailroom Stylesheet (pages.builtin_css) на вкладке Public Pages, когда ваша тема сама оформляет эти классы. Его кнопки и флажки берут Accent Color с вкладки Email Design, когда вы её задали, иначе акцент вашей темы, если он у неё есть (у Quark2 есть).

Собственная форма: действие плагина Form

Для формы, которую вы определяете плагином Form, добавьте действие mailroom Mailroom в её список process:

form:
  name: newsletter-footer
  fields:
    email:
      type: email
      label: Email
      validate:
        required: true
    name:
      type: text
      label: Name
    consent:
      type: checkbox
      label: 'I agree to receive email from this site. I can leave with one click at any time.'
      validate:
        required: true
  buttons:
    submit:
      type: submit
      value: Sign me up
  process:
    - mailroom:
        list: newsletter
        tags: [site]
        email_field: email
        name_field: name
        consent_field: consent
    - message: 'Thanks. Check your inbox.'
    - reset: true

Каждый параметр необязателен:

Параметр Что делает
list Код списка. По умолчанию список по умолчанию.
lists Дополнительные коды списков, в которые вступить сразу, списком или одной строкой через запятую. Каждый сохраняет своё двойное подтверждение подписки, с одним письмом подтверждения на всех.
tags Коды тегов для всех, кто подписывается.
email_field Поле с адресом. По умолчанию email.
name_field Поле с именем.
consent_field Флажок согласия. Только поле checkbox, toggle или switch является флажком, который нужно отметить.
consent_text Предложение для записи. Без него записывается название самого поля согласия, затем Consent Sentence сайта.
language Код языка для сохранения у подписчика.

Адрес, который не является адресом, или неотмеченный флажок согласия задаёт ошибку формы и останавливает остаток списка process. Всё остальное завершается успешно с тем же сообщением, что даёт блок подписки. Подписка записывается как form, с именем формы как source_ref, и считается в том же почасовом ограничении, что и блок подписки.

Публичные страницы

Всё, что видит подписчик, отвечает под базовым маршрутом /newsletter, если Route Base (route, на вкладке Public Pages) не говорит иначе:

Путь Что это
POST {route}/subscribe Сюда отправляет блок подписки. См. API подписки.
{route}/confirm/{token} Ссылка двойного подтверждения подписки
{route}/u/{token} Отписка
{route}/p/{token} Центр предпочтений
{route}/v/{token} Кампания в браузере
{route}/o/{token}.gif, {route}/c/{token} Пиксель открытия и редирект перехода
POST {route}/webhook/{provider}/{secret} События провайдера. См. Отправку и провайдеров

Подписанный токен — единственные учётные данные на всех них: ни одна не требует входа, и ни одна никогда не кэшируется (Cache-Control: private, no-store, Referrer-Policy: no-referrer, X-Robots-Tag: noindex, nofollow). Всё остальное под базовым маршрутом проваливается к собственным страницам сайта.

Важно

Задайте базовый маршрут до отправки первой кампании. Уже отправленные ссылки сохраняют базовый маршрут, с которым их отправили. Пустой базовый маршрут читается как /newsletter, поскольку страницы в корне сайта стояли бы перед вашими собственными.

Страницы подтверждения, отписки, предпочтений и сообщения рисуются внутри вашей темы (веб-просмотр — само письмо): они расширяют Page Template (pages.base_template, partials/base.html.twig, когда пусто) и заполняют его блок content. Чтобы изменить страницу, скопируйте её из templates/ плагина в тему под тем же именем: newsletter-confirm.html.twig, newsletter-unsubscribe.html.twig, newsletter-preferences.html.twig или newsletter-message.html.twig.

Страницы-ссылки (подтверждение, отписка, предпочтения, просмотр в браузере) ограничены Link Pages Per Hour (rate_limits.token, 60) на адрес посетителя, а пиксель и редирект перехода — Opens and Clicks Per Hour (rate_limits.tracking, 600). Исчерпанное ограничение пикселя всё равно отдаёт своё изображение, а при переходе отправляет читателя на главную страницу сайта, ничего не записывая.