Spintax в MAX Sender — примеры, перестановки и подстановки
AndySendy academy

Spintax в MAX Sender — примеры, перестановки и подстановки

MAX Sender

Spintax — это способ написать один шаблон так, чтобы на выходе расширение каждый раз собирало немного разный текст. В MAX Sender Spintax работает не «вообще как где-то принято», а по конкретным правилам из Spintax.js. Ниже — разбор именно этого поведения: что реально поддерживается, что происходит с переменными, как работают перестановки и как читать сложные шаблоны.

Если вы только начинаете, сначала посмотрите поле «Текст сообщения» и предпросмотр, а потом возвращайтесь сюда за расширенными примерами.


1. Что такое Spintax простыми словами

Вместо одного жёсткого текста вы пишете шаблон с вариантами, а расширение при каждой генерации выбирает из него один из возможных результатов.

Самый простой пример:

{Здравствуйте|Добрый день|Привет}!

Результат может быть таким:

  • Здравствуйте!
  • Добрый день!
  • Привет!

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


2. Самая базовая конструкция {вариант1|вариант2}

Главная конструкция Spintax в этом проекте — фигурные скобки с вариантами через вертикальную черту:

{Привет|Здравствуйте|Добрый день}

Из этой группы берётся один случайный вариант.

Ещё примеры:

{Скидка|Акция|Спецпредложение}
{сегодня|до конца дня|только сейчас}

Можно писать целые фразы:

{Здравствуйте!|Добрый день!|Приветствуем вас!}

Что важно:

  • выбирается только один вариант;
  • пустые варианты после перемешивания отбрасываются;
  • повторяющиеся варианты технически допустимы, но смысла в них обычно нет.

3. Переменные {{...}} из списка абонентов

Кроме Spintax, в шаблоне можно использовать переменные из списка абонентов:

Здравствуйте, {{External Number Name}}!

Во время отправки или предпросмотра расширение подставляет туда значение из строки текущего получателя.

Пример:

Здравствуйте, {{External Number Name}}! Ваш номер: {{External Number}}.

Если у строки есть такие значения:

  • External Number Name = Иван
  • External Number = 79991234567

то результат будет:

Здравствуйте, Иван! Ваш номер: 79991234567.

Переменные лучше вставлять через кнопку «Переменные», чтобы не ошибиться в названии колонки.


4. Что будет, если переменная пустая или неизвестная

Здесь у движка есть важная особенность.

Если переменная известная, но ячейка пустая

Шаблон:

Здравствуйте, {{External Number Name}}!

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

То есть он не оставит в сообщении буквальный текст {{External Number Name}}.

Если переменная вообще неизвестная

Шаблон:

Здравствуйте, {{FirstName}}!

Если в активном списке нет колонки FirstName, то поведение зависит от контекста:

  • при обычной генерации неизвестный плейсхолдер в итоге вычищается;
  • в предпросмотре такие плейсхолдеры специально сохраняются и показываются как предупреждение:
{{переменной FirstName нет в активном списке рассылки}}

Именно поэтому предпросмотр полезен: он помогает увидеть ошибку в шаблоне до запуска рассылки.


5. Перестановки через [+разделитель+вариант1|вариант2|...]

Это самая необычная и полезная часть текущего Spintax-движка.

Формат такой:

[+РАЗДЕЛИТЕЛЬ+вариант1|вариант2|вариант3]

Что делает эта конструкция:

  1. берёт все варианты;
  2. перемешивает их порядок случайно;
  3. соединяет их через указанный разделитель.

Простой пример:

[+, +кофе|чай|выпечка]

Возможные результаты:

  • кофе, чай, выпечка
  • чай, выпечка, кофе
  • выпечка, кофе, чай

Здесь происходит не выбор одного варианта, а именно перестановка всего списка.

Это удобно для перечислений, когда вы хотите менять порядок пунктов, но оставить все элементы в тексте.

Ещё примеры:

[+ / +доставка|самовывоз|онлайн-оплата]
[+; +утро|день|вечер]
[+\n+Telegram|WhatsApp|MAX]

Последний пример даст список в случайном порядке, по одному элементу на строку.


6. Чем выбор отличается от перестановки

Очень важно не путать две конструкции:

Выбор одного

{кофе|чай|выпечка}

Результат:

  • кофе или
  • чай или
  • выпечка

Перестановка всех

[+, +кофе|чай|выпечка]

Результат:

  • кофе, чай, выпечка или
  • чай, выпечка, кофе или
  • выпечка, кофе, чай

То есть:

  • {...|...} = один из вариантов
  • [+...+...|...] = все варианты, но в случайном порядке

7. Вложенность и порядок разбора

Движок поддерживает вложенные конструкции, но разбирает их по этапам.

Например:

[+, +{здравствуйте|приветствую}|{{External Number Name}}]

Что происходит:

  1. сначала защищаются переменные {{...}}, чтобы они не спутались с обычными фигурными скобками;
  2. потом разбираются простые {...|...};
  3. потом разбираются перестановки [+...+...|...];
  4. в конце переменные возвращаются обратно и подставляются.

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

Разбор идёт в цикле, пока шаблон меняется, но не больше 50 итераций. Это защитный предел, чтобы не зациклиться на сложных или кривых шаблонах.


8. Что делает !!

Конструкция !! в этом проекте нужна для принудительного перевода следующего символа в верхний регистр.

Пример:

!!привет

Результат:

Привет

Ещё пример:

!!это тест

Результат:

Это тест

Перед этим движок ещё убирает случаи вроде !! или !!,, чтобы !! применялся именно к букве, а не к пробелу или запятой.


9. Что делает \n

В шаблоне \n означает перевод строки.

Пример:

Здравствуйте!\nЭто вторая строка.

Результат:

Здравствуйте!
Это вторая строка.

Это удобно для коротких многострочных сообщений.


10. Разбор шаблона !![+, +{здравствуйте|приветствую}|{{External Number Name}}]{! |. |\n}Это я.

Теперь разберём твой пример целиком:

!![+, +{здравствуйте|приветствую}|{{External Number Name}}]{! |. |\n}Это я.

Он состоит из трёх частей:

Часть 1. !!

Сделает первую букву итоговой фразы заглавной.

Часть 2. [+, +{здравствуйте|приветствую}|{{External Number Name}}]

Это перестановка из двух элементов:

  1. {здравствуйте|приветствую} — случайное приветствие;
  2. {{External Number Name}} — имя получателя.

Потом эти два элемента соединяются через разделитель , .

То есть возможны варианты:

здравствуйте, Иван
приветствую, Иван
Иван, здравствуйте
Иван, приветствую

Часть 3. {! |. |\n}

После первой части выбирается один вариант окончания:

  • !
  • .
  • перевод строки \n

Часть 4. Это я.

Финальная постоянная фраза.


11. Возможные результаты для этого шаблона

Если {{External Number Name}} = Иван, то шаблон может дать, например:

Здравствуйте, Иван! Это я.

или

Приветствую, Иван. Это я.

или

Иван, здравствуйте! Это я.

или

Иван, приветствую.
Это я.

Почему первое слово с большой буквы:

  • сначала собирается строка;
  • потом !! поднимает первый символ в верхний регистр.

Почему иногда имя может стоять первым:

  • потому что используется перестановка, а не просто приветствие с подстановкой имени в одном фиксированном месте.

12. Простые и общедоступные примеры

Ниже набор шаблонов, которые можно использовать почти сразу.

Приветствие по имени

Здравствуйте, {{External Number Name}}!

Несколько приветствий

{Здравствуйте|Добрый день|Привет}, {{External Number Name}}!

Случайная скидка

Здравствуйте, {{External Number Name}}! Для вас скидка {10|15|20}%.

Перечень услуг в случайном порядке

Мы предлагаем [+; +доставку|самовывоз|онлайн-оплату].

Возможные результаты:

  • Мы предлагаем доставку; самовывоз; онлайн-оплату.
  • Мы предлагаем онлайн-оплату; доставку; самовывоз.

Многострочное сообщение

Здравствуйте, {{External Number Name}}!\nНапоминаем о вашей записи.\nОтветьте, если нужно перенести время.

Сообщение с естественным началом

!!{здравствуйте|добрый день}, {{External Number Name}}!

13. Более расширенные примеры

Пример 1. Короткая акция

{Здравствуйте|Добрый день}, {{External Number Name}}! Сегодня действует скидка {10|15|20}% на {кофе|десерты|выпечку}.

Пример 2. Список преимуществ в разном порядке

Здравствуйте! У нас есть [+; +доставка|самовывоз|оплата при получении].

Пример 3. Сообщение с именем и свободным порядком обращения

!![+, +{{External Number Name}}|{здравствуйте|добрый день}]! Рады вас видеть.

Возможные результаты:

  • Иван, здравствуйте! Рады вас видеть.
  • Добрый день, Иван! Рады вас видеть.

Пример 4. Многострочное напоминание

Здравствуйте, {{External Number Name}}!\n{Напоминаем|Сообщаем}, что ваша запись подтверждена.\nОтветьте на это сообщение, если хотите перенести время.

Пример 5. Нейтральное сообщение без имени

{Здравствуйте|Добрый день}! Для вас доступно {новое предложение|обновление условий|специальное предложение}.

14. Что лучше не делать

Вот типичные ошибки:

Не писать переменные вручную с ошибкой

Плохо:

{{Externel Number Name}}

Лучше вставлять через кнопку «Переменные».

Не путать выбор и перестановку

Если вы хотите одно приветствие, пишите:

{Здравствуйте|Добрый день}

Если вы хотите все элементы в случайном порядке, пишите:

[+, +Здравствуйте|Добрый день]

Но во втором примере оба слова попадут в итог, просто в разном порядке. Это уже другой смысл.

Не усложнять без предпросмотра

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


15. Как проверять шаблон перед рассылкой

Надёжный рабочий порядок такой:

  1. Создайте текст на вкладке «Сообщения».
  2. Вставьте переменные через кнопку «Переменные».
  3. Откройте «Предпросмотр».
  4. Нажмите «Обновить» несколько раз.
  5. Проверьте:
    • корректно ли подставляется имя;
    • не пропадают ли слова неожиданно;
    • не появляется ли предупреждение про неизвестную переменную;
    • хорошо ли читается текст в разных вариантах.

Только после этого стоит включать шаблон в проект и запускать реальную рассылку.


16. Краткая памятка

Самые важные конструкции:

КонструкцияЧто делает
{a|b|c}выбирает один вариант
[+разделитель+a|b|c]берёт все варианты и перемешивает их
{{Name}}подставляет значение из списка абонентов
!!делает следующую букву заглавной
\nперенос строки

Если нужно быстро начать, используйте такой безопасный шаблон:

{Здравствуйте|Добрый день}, {{External Number Name}}! Напоминаем о вашей записи.

А если хотите более «живой» текст — уже потом добавляйте перестановки и многострочные варианты.