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

Выпуски рассылки

Способы выпуска

данное api - выпуск массовых рассылок и индивидуальных сообщений через вызов issue.send данного общего api

шлюз smtp - выпуск индивидуальных писем через протокол SMTP. Для этого свяжитесь со Службой поддержки

потоковое api - выпуск массовых и индивидуальных писем через специализированное api. Для этого свяжитесь со Службой поддержки

Все способы выпуска имеют общую интегрированную статистику по доставкам, открытиям и переходам, доступную через данное общее api (вызов stat.uni).

Мобильный SDK

В мобильном приложении вы можете использовать как наше SDK доступное наhttps://github.com/sendsay-ruдля отправки сообщений и передачи нам данных (например покупок в модуль Еком), так и стандарные мобильые api для передачи сообщений и наше собственное мобильное api для передачи данных нам.

По умолчанию, при создании аккаунты настроены на использование SDK - сообщения уходят в формате для SDK, обратное взаимодействие так же через SDK

Для переключения в режим стандартного мобильного api используйте настройки issue.pushapp.format вызова sys.settings.set - сообщения уходят в формате мобильных платформ, обратное взаимодействие через наше api.

При любом способе работы используется обычные FCM / APNS/ HMS для доставки сообщений и обычный вызов issue.send прячет от вас все тонкости взаимодействия.

Варианты выпуска рассылок

Все рассылки (email, sms, viber, push, vk, tg, vknotify, pushapp, max) выпускаются через вызов issue.send.

Для выпуска веб-пуш (push) необходимо сначала собрать подписчиков на своём сайте, установив и настроив скрипты как описано в "Подписка на веб-пуш".

Для выпуска ВКонтакте (vk) необходимо сначала зарегистрировать сообщество через веб-интерфейс.

Для выпуска Телеграм (tg) необходимо сначала зарегистрировать бота через веб-интерфейс или напрямую через создание внешней аутентификации.

Для выпуска MAX (max) необходимо сначала зарегистрировать бота через веб-интерфейс или напрямую через создание внешней аутентификации.

Для выпуска мобильных пушей/пушей в приложение (pushapp) необходимо сначала создать внешнюю аутентификацию с методами доступа в сервисы доставки пушей. Одно приложение - одна внешняя аутентификация. При работе с несколькими приложениями выбирайте требующееся указывая параметр authext.id в выпуске или черновике

Есть пять вариантов использования issue.send:

1)Выпуск по группе-списку- это выпуск по заранее определённому и сохранённому списку получателей, неизменному если вы его не измените сами.

2)Выпуск по группе-фильтру- это выпуск по динамически отбираемому каждый раз сегменту получателей. Например, "Те кто получил письмо за последние 24 часа и ни разу не кликнул" - условие отбора зависит от времени и каждый раз результат будет разный.

3)Экспресс-выпуск- это выпуск по списку с данными для персонализации без его внесения в базу. Список и данные персонализации задаются каждый раз в вызове или указывается откуда их забрать.

Экспресс-выпуск предназначен для рассылки общей для многих получателей информации.Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не Экспресс-выпуск, это транзакционные personal.

Типичная ошибка - использование Экспресс-выпуска для таких индивидуальных писем: система автоматически это замечает итакие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

Если один Экспресс-выпуск - выпуск по списку на много адресов вы разделите на Экспресс-выпуск на маленькие порцииэтого спискаю, то получится только медленнее. Кроме описанного выше снижения приоритета, в каждый выпуск добавятся затраты на его запуск. Самое долгое - проверка на попадания в спам по нескольким сервисам - это занимает от 20 до 120 секунд и мало от нас зависит, так как это сторонние сервисы. В итоге вы получите такую проверку и затраты времени на неё столько раз, на сколько кусков разрежете один выпуск.

Существует возможность использования Экспресс-Выпуска, что бы разрешить третьим лицам выпуски без сообщения им адресов получаетелей.

  • загрузите адреса в систему без создания подписчика (импорт с параметром no_member:1)

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

  • сообщайте ему только номера адресов - email.id - можно получить через stat.uni

  • подрядчик осуществляет Экспресс-Выпуск использую номера адресов с добавлением нужных данных персонализации

4) "Выпуск по группе Экспресс-Импорта" - как Экспресс-Выпуск, но реестре получателей не указывается в задании на выпуск, а берётся загруженый в Экспресс-Импорте.

5)Транзакционные сообщения- это выпуск одному конкретному получателю с данными персонализации. Именно этот тип выпуска предназначен для сообщений вида "Спасибо за регистрацию" или "Ваш код на сайте". Для этих выпусков имеется отдельный механизм, который позволяет выпускать их очень быстро. Рекомендуется выпускать Транзакционные письма по заранее сохранённому черновику - это исключает некоторые проверки, что позволяет формировать сообщение ещё быстрее.

Группа-спискок Группа-фильтр Экспресс-выпуск Транзакционное письмо
Адреса получателей Заранее созданные в базе список Динамический поиск по базе адресов данные которых удовлетворяют фильтру Указываются при выпуске или забираются по ссылке Указывается при выпуске
Данные для персонализации Из базы Из базы Указываются при выпуске Из базы если не указаны при выпуске
Количество переменных Не ограничено Не ограничено Не ограничено Не ограничено
Шаблонизатор Продвинутый Продвинутый Продвинутый Продвинутый
Собственные функции-плагины к шаблонизатору Да Да Да Да
Сложные вложенные структуры данных Да, в модели ДК Да, в моделе ДК Да Да
Подтверждение от владельца адреса Требуется Требуется Требуется Не обязательно
Разбор жалоб на спам Согласно договору Согласно договору Согласно договору С особым пристрастием
Лимит в месяц Не ограничено в пределах тарифа Не ограничено в пределах тарифа Не ограничено в пределах тарифа Первоначально равен максимально допустимому количеству адресов в базе. Далее в зависимости от репутации

Отправить тестовый выпуск

Вызов issue.send.test

Полный аналог "Отправить выпуск" issue.send за исключением того, что любой указанный sendwhen заменяется на test

Основная причина существования - иметь отдельное право на выпуск только тестов. Например, сотрудник "дизайнер" должен не мочь отправлять реальные выпуски (отбираем право issue.send), но тесты для себя должен быть отправить способен (оставляем ему право issue.send.test).

Отправить выпуск

Вызов issue.send

Этот вызов асинхронный- получение положительного ответа означает, что задание на рассылку поставлено в очередь. Используйте возвращаемый track.id для отслеживания выпуска.

Это не гарантирует выпуск - он может не состоятся по причинам, которые не проверить на момент вызова (например, недоступность на момент преобразования ссылки, для которой производится преобразование для учёта переходов).

Индивидуальные данные персонализации для каждого адреса берутся из сохранённых в базе (группа-список, группа-фильтр) или из указанных прямо при выпуске (Экспресс-выпуск, Транзакционные письма) и доступны через префикс anketa шаблонизатора.

Данные формата АВО автоматически доступны как преобразованные в формат ДК.

Данные персонализации для каждого получателя могут быть дополнены внешними данными (формат ДК) в процессе выпуска. Подробнее в разделе "Внешние данные для персонализации"

Из списка участников группы и списка Экспресс-выпуска система автоматически исключает адреса, не подтвердившие внесение в базу, отписавшиеся, находящиеся в стоп-листе или имеющие постоянные ошибки доставки. Вам не надо предпринимать никаких дополнительных усилий для этого - всё происходит автоматически.

Для каждого сообщения (email, sms , viber, push, vk, tg, vknotify, pushapp, max) система отслеживает статус доставки - доставлено/не доставлено (и с какой ошибкой), для каждой sms - дополнительно размер, предполагаемый оператор и стоимость доставки, для каждого vknotify - стоимость доставки. Это доступно через объект deliv вызова stat.uni (из этого следует что из deliv можно так же получить просто список участников выпуска).

Для каждого успешно доставленного email, viber, push система отслеживает факты открытия и факты перехода по каждой ссылке (если учёт переходов не был отключён при выпуске). Время каждого открытия/перехода и ip-адрес доступны через объекты read и click вызова stat.uni.

Дополнительно различаются открытия/переходы для html и amp-версий email-сообщений (read.source,click.source).

Также система отслеживает вид устройства, операционную систему, браузер и его версию, если произошло чтение или переход из письма. Для чтения также отслеживается его длительность. Это доступно через объект gadget вызова stat.uni.

При установке на страницах сайта специального счётчика, возможно отслеживание пути по сайту и достижения целевых страниц после перехода из письма - подробности в разделе "Целевые Страницы".

Каждое сообщение имеют уникальный идентификатор состоящий из номера выпуска и номера письма в выпуске. Поэтому вы можете получить описанную выше статистику с точностью до каждого email/sms/viber/push/vk/tg/vknotify/pushapp/max каждого выпуска для каждого адресата.

Кроме системного уникального номера письма каждому письму можно присвоить клиентскую метку (custid), состоящую из одного или нескольких полей. Для этого настраивается список ключей данных, которые запоминаются в каждом выпуске для каждого получателя (отсутствующие в конкретном выпуске или пустые данные не в счёт). Они доступные через Универсальную статистику и позволяют присваивать письмам удобные для анализа клиента метки. Для настройки этой возможности обратитесь в Службу поддержки.

Благодаря поддержке нескольких идентификаторов у одного подписчика вам доступны разнообразные сценарии мультиканального взаимодействия с ним. Например, "Выслать письмо, а тем кто за 10 дней так и не прочёл и не сделал ни одного перехода, выслать смс".

При получении параметра выпуска из нескольких источников приоритет имеет параметр: - указанный непосредственно в issue.send - если параметр не указан или пуст, то параметр берётся из класса выпуска (issue.send, параметр class.id) - если класс не указан, или параметр в нём не указан или пуст, то параметр берётся из черновика выпуска (issue.send, параметр draft.id) - если черновик не указан, то берётся значение параметра по умолчанию - если черновик указан, но параметр в нём не указан или пуст, то параметр берётся из класса черновика (issue.draft.set, параметр class.id) - если класс черновика не указан, или параметр в нём не указан или пуст, то берётся значение параметра по класса по умолчанию - если класса по умолчанию нет, или параметр в нём не указан или пуст, то берётся значение параметра по умолчанию

Исключение - так как параметр group обязателен в issue.send, то из другого источника он получен быть не может.

Исключение - параметр extra. Суммируется по ключам первого уровня по всем источникам. Приоритет одноимённых ключей первого уровня как описано выше для параметров.

Исключение - список прикрепляемых файлов. Списки, заданные в черновике и выпуске, суммируются. Из двух одноимённых файлов приоритет у того, что указан в выпуске.

Содержимое выпуска из черновика - текст, тема, отправитель и прочее (кроме attaches) - полностью заменяют собой аналогичные параметры letter выпуска и имеет абсолютный приоритет.

Для того чтобы частично заменять в выпусках такие параметры черновика, используйте параметр weak_draft, указывая его одновременно с draft.id. Допустимые значения - пусто (отсутствует) - как по умолчанию в аккаунте (т.е. черновик сильнее параметров), 0 - черновик сильнее параметров, несмотря на настройку акканута, 1 - черновик слабее параметров, несмотря на настройку аккаунта и параметры содержимого выпуска, указанные в вызове заменяют аналогичные из черновика.

Транзакционные письма в течении календарных суток группируются в выпуски на основе номера черновика, использованного DKIM, номера формы или триггера (если письмо вызвано ими), саблогина вызова выпуска письма. Возможен альтернативный вариант - группировка только на основе первых трёх меток выпуска - настраивается через параметр issue.personal.groupby вызовы sys.settings.set

{
   "action" : "issue.send" или "issue.send.test",

   "name" : "Название выпуска", -- параметр необязателен, при отсутствии используется тема письма или имя отправителя sms
                                -- из-за особенностей учёта выходов Транзакционных писем personal данный параметр
                                -- для них будет работать не так, как ожидается и, в целом, бесполезен

   "label" : "метка" или [ "метка1", "метка2".. ], -- набор произвольных меток выпуска, позволяющих фильтровать/классифицировать
                                                   -- от 0 до 10 строк не длиннее 128 символов
                                                   -- параметр необязателен

* параметры содержимого выпуска

    "letter" : {

*** для sms

                * содержимое сообщения

                или указание параметров

                "from.name" : "Имя отправителя" -- обязателен и имя отправителя должно быть в списке уже промодерированных имён (вызовы issue.smssender.*)

               ,"message": {

                           "sms"  : "sms сообщение" 

                          }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик, из которого их взять. Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь sms-версию

*** для viber

                * содержимое сообщения

                или указание параметров

                "button.url"   : "ссылка с кнопки" -- параметр обязателен, если нужна кнопка после сообщения

               ,"button.text" : "надпись на кнопке" -- параметр необязателен, по умолчанию "Узнать" 

               ,"message": {

                          "viber"  : "viber сообщение" -- текст без форматирования

                          }

               ,"attaches": [  -- не обязательно, одна и только одна ссылка на возможную картинку отображаемую между текстом и кнопкой

                              -- при выпуске по черновику, прикрепляемые файлы из черновика добавляются к указанным в списке
                              -- если одноимённый файл или ссылка тут отсутствуют

                             { "url"  : "Внешние ссылки http / https / ftp / ftps / sftp" },

                             -- или

                             { "url"  : "персонализированный url - для каждого свой" }, -- подробнее в разделе "Персонализация выпуска" 

                            ]

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик из которого их взять.  Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь viber-версию

 *** для push в браузеры

                * содержимое сообщения

                или указание параметров

                "subject" : "тема" -- обязательно

               ,"click.url"   : "ссылка для клика" 

               ,"message": {

                            "push"  : "текст сообщения" -- текст с переводами строк

                           }

               ,"icon.url" : "ссылка на иконку" --  https://, обычно 192х192.

               ,"image.url" : "ссылка на картинку" -- https://

               ,"require_interaction" : 0|1 -- для закрытия сообщения ожидать нажатия подписчиком. по умолчанию 1 - ожидать
                                            -- глобально для аккаунта можно изменить параметром issue.push.require_interaction
                                            -- вызова sys.settings.set

               ,"actions": [  -- не обязательно, одна или две кнопки описываемые структурой
                                   {
                                    "action" : "действие кнопки", -- ссылка https://
                                                                  -- или ключевое слово "close" - просто закрывает сообщение.
                                                                  -- или ключевое слово "clickurl" - при выпуске подставляется ссылка из параметра click.url

                                    "title" : "текст кнопки", -- рекомендация: до 36 символов.

                                    "icon" : "ссылка иконки кнопки" -- не обязательно
                                                                    -- https:// на том же сайте, где установлен service-worker, размер стороны 16-24 px
                                   }, ...
                               ]
               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик из которого их взять.  Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь push-версию

*** для vk

                * содержимое сообщения

                или указание параметров

                "subject" : "тема" -- обязательно

               ,"message": {

                            "vk"  : "текст сообщения" -- текст, возможно с переводами строк
                                                        -- дополнительно распознаются команды:
                                                        --  * подстановки картинок <img src="ссылка">
                                                        --  * подстановки видео <video src="ссылка">
                                                        --  * разбиения текста на части <hr />
                                                        -- таким образом, в одном сообщении можно
                                                        -- скомбинировать разные части, которые обычно
                                                        -- отправляются по отдельности
                           }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик из которого их взять.  Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь vk-версию

*** для tg

                * содержимое сообщения

                или указание параметров

                "subject" : "тема" -- обязательно

               ,"message": {

                            "tg"  : "текст сообщения" -- текст MarkdownV2
                                                        -- не забывайте правильно экранировать управляющие символы
                                                        --
                                                        -- для прикрепления/встраивания изображений и файлов используйте
                                                        --
                                                        -- ![описание](медиа-ссылка)
                                                        --
                                                        -- и они будут по порядку следования в тексте автоматически оформлены
                                                        -- соответствующими сообщениями Телеграм
                                                        --
                                                        -- "описание" ожидается в MarkdownV2. описание не обязательно
                                                        --
                                                        -- тип содержимого определяется по расширению файла и может быть уточнён указанием
                                                        -- mediatype=document|animation|audio|video|voice|photo|venue
                                                        --
                                                        -- Ещё можно указать "Контакт" 
                                                        --
                                                        --          ![ИмяКонтакта](+номертелефона)
                                                        --
                                                        -- "Место встречи" (venue) и "Координаты" (location)
                                                        --
                                                        -- ![](59.972611, 30.311311)
                                                        -- ![SendSay office;SPb, Professora Popova, 23D](59.972612,30.311311?mediatype=location)
                                                        -- ![SendSay office;SPb, Professora Popova, 23D](https://yandex.ru/maps/2/saint-petersburg/?ll=30.311398%2C59.972617&mediatype=venue)
                                                        -- ![SendSay office;SPb, Professora Popova, 23D](https://www.google.com/maps/search/59.972612,30.311311?mediatype=venue)
                                                        -- ![SendSay office;SPb, Professora Popova, 23D](https://www.google.com/maps/place/59°58'21.4"N+30°18'40.7"E?mediatype=venue)
                                                        -- ![SendSay office;SPb, Professora Popova, 23D](https://google.ru/maps/@59.9723963,30.311142,18.5z?mediatype=venue)
                                                        --
                                                        --
                                                        -- особенность при подстановке значений с каким либо оформлением вокруг
                                                        -- например вот такое
                                                        --
                                                        -- _[% переменная %]_
                                                        --
                                                        -- при пустом значении переменной приведёт в Телеграм совсем не к тому, что ожидается
                                                        -- ошибка это или особенность, не известно
                                                        -- для обхода добавляйте пробел после начального или перед конечным управляющим символом
                                                        --
                                                        -- _[% переменная %] _
                                                        --                 ^^^ пробел добавлен
                           }

                ,"settings" : { -- не обязательные параметры для специальных вещей

                   -- Для всех деталей смотрите основную документацию Telegram
                   --
                   -- InlineKeyboardMarkup: https://core.telegram.org/bots/api#inlinekeyboardmarkup
                   --
                   -- ReplyKeyboardMarkup: https://core.telegram.org/bots/api#replykeyboardmarkup

                   --*-- Кнопка запроса гео-положения
                   --
                   -- ответ будет сохранён в ключи данных telegram.logitude и telegram.latitude
                   -- "telegram" : {
                   --        "longitude" : "30.12222",
                   --        "latitude" : "59.12345" 
                   --              }

                   "reply_markup" : { "keyboard" : [ [ { "text": "Сообщить, где я" ,"request_location": true } ] ] }

                   --*-- Кнопка запроса номера телефона
                   --
                   -- ответ будет сохранён в ключи данных telegram.phone_number, telegram.last_name, telegram.first_name
                   -- "telegram" : {
                   --         "phone_number" : "79110000000",
                   --         "last_name" : "Дед",
                   --         "first_name" : "Ленин" 
                   --              }

                   "reply_markup": { "keyboard" : [ [ { "text": "Сообщить телефон","request_contact": true } ] ], "one_time_keyboard":true }

                   --*-- Отображение клавиатуры типа ReplyKeyboardMarkup
                   --
                   -- Данные никак не обрабатываются (не считая передачи далее, если настроено проксирование).
                   -- Но если текст кнопки это команда боту, то она будет выполнена.

                   "reply_markup": { "keyboard" : [ [ { "text": "/help"}, {"text": "просто текст кнопки"} ] ], "one_time_keyboard":true} }

                   --*-- Удаление клавиатуры типа ReplyKeyboardMarkup

                   "reply_markup": { "remove_keyboard":true }

                   --*-- Клавиатура типа InlineKeyboardMarkup
                   --
                   -- Сразу после нажатия кнопки бот отвечает "Вы выбрали ТекстКнопки" с целью зафиксировать в чате выбранный ответ
                   --
                   -- Код кнопки сохраняется в указанном "datakey" 
                   --
                   -- Если в коде присутствуют команды, то они выполняются, а значение сохраняется без самой команды
                   -- Поиск и обработка команд производится стандартным способом
                   --
                   -- Для каждой кнопки клавиатуры формируется ссылка для учёта нажатий пользователя, как при нажатии на ссылку - считаются клики и это доступно в Универсальной статистике
                   --
                   -- Формат ссылки: tgkey://<имя бота>/?code=<код кнопки>&text=<текст кнопки>
                   --
                   -- Пример tgkey://Name_bot/?code=12345&text=Yes

                   "reply_markup": { "inline_keyboard" :
                                       [
                                         [ -- первый ряд клавиатуры
                                           { "text" :"Male" , "callback_data": "m" }  -- кнопка
                                          ,{ "text" :"Female" , "callback_data": "f" } -- другая кнопка
                                        ]
                                       ,[ -- второй ряд клавиатуры
                                           { "text" :"Kid" , "callback_data": "k" } -- ещё кнопка
                                          ,{ "text" :"Cat" , "callback_data": "c" } -- и ещё кнопка
                                       ]
                                       ....
                                      ]
                                  }
                  , "datakey": ["base.gender"] -- ключ данных для сохранения значения параметра callback_data нажатой кнопки
                 }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик из которого взять текст и настройки.  Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь tg-версию

*** для vknotify

                Содержимое сообщений должно быть зараннее согласовано с VK !

                Только выпуски personal !

                * содержимое сообщения

                или указание параметров

                "from.name" : "Имя отправителя" -- обязателен

               ,"message": {

                           "vknotify"  : "vknotify сообщение" -- текст до 1000 символов

                          }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик, из которого их взять. Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь vknotify-версию

*** для pushapp

                * содержимое сообщения

                или указание параметров

                "subject" : "Заголовок" -- обязателен если не указано data

               ,"message": {

                           "pushapp"  : "сообщение" -- укажите пустую строку если передаёт скрытый пуш содержащий только данные (параметр data)

                          }

               -- Специфичные для платформы (apns, fcm, hms) настройки, такие как collapse_key, priority, content_available, dry_run
               -- Зарезервированные системные параметры: tokens, platform, data, auth, notif_id, to_email, api_key, os, title, message
               -- Полный список вынесен в отдельный параграф ниже
               ,"settings" :  -- не обязательно
                  {
                   "param" : "value" 
                   .............
                  }

               -- Передача приложению любых дополнительных данных
               -- Структура одноуровневая !
               -- Зарезервированные системные параметры: title, body, msg_id, sendsay*, google*, gcm*
               ,"data" : -- не обязательно
                  {
                   "param" : "value" 
                   .............
                  }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик, из которого их взять. Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь pushapp-версию

*** для max

                * содержимое сообщения

                или указание параметров

                "subject" : "название выпуска" -- обязательно

               ,"message": {

                            "max"  : "текст сообщения" -- текст markdown, согласно официальной документации:
                                                       -- https://dev.max.ru/docs-api#Форматирование%20текста

                                                       -- не забывайте правильно экранировать управляющие символы
                                                       --
                                                       -- для прикрепления/встраивания изображений и файлов используйте
                                                       --
                                                       -- ![описание](медиа-ссылка)
                                                       --
                                                       -- и они будут по порядку следования в тексте автоматически оформлены
                                                       -- соответствующими сообщениями макса
                                                       --
                                                       -- "описание" ожидается в markdown. описание не обязательно
                                                       --
                                                       -- тип содержимого определяется по расширению файла и может быть уточнён указанием
                                                       -- mediatype=audio|video|photo|file|share|location|contact|sticker
                                                       --
                                                       -- Ещё можно указать "Контакт" 
                                                       --
                                                       --          ![ИмяКонтакта](+номертелефона)
                                                       --
                                                       -- "Координаты" (location)
                                                       --
                                                       -- ![](59.972611, 30.311311)
                                                       -- ![SendSay.ru; СПб, Левашовский проспект, 11/7с4](59.972612,30.311311?mediatype=location)
                                                       -- ![SendSay.ru; СПб, Левашовский проспект, 11/7с4](https://yandex.ru/maps/2/saint-petersburg/?ll=30.289108%2C59.967592)
                                                       -- ![SendSay.ru; СПб, Левашовский проспект, 11/7с4](https://www.google.com/maps/search/59.967592,30.289107)
                                                       -- ![SendSay.ru; СПб, Левашовский проспект, 11/7с4](https://www.google.com/maps/place/59°68'31.4"N+30°28'40.7"E?mediatype=location)
                                                       -- ![SendSay.ru; СПб, Левашовский проспект, 11/7с4](https://google.ru/maps/@59.967592,30.289107,18.5z)
                                                       --
                                                       --
                                                       -- особенность при подстановке значений с каким либо оформлением вокруг
                                                       -- например вот такое
                                                       --
                                                       -- _[% переменная %]_
                                                       --
                                                       -- при пустом значении переменной приведёт в Max совсем не к тому, что ожидается
                                                       -- ошибка это или особенность, не известно
                                                       -- для обхода добавляйте пробел после начального или перед конечным управляющим символом
                                                       --
                                                       -- _[% переменная %] _
                                                       --                 ^^^ пробел добавлен
                           }

                ,"settings" : { -- не обязательные параметры для специальных вещей

                   -- Для всех деталей смотрите основную документацию max
                   --
                   -- https://dev.max.ru/docs-api/methods/POST/messages
                   --
                   -- Все указанные тут ключи переносятся в результирующий API запрос к серверу https://platform-api.max.ru
                   --
                   --*-- Клавиатура
                   --
                   -- Для каждой кнопки клавиатуры формируется ссылка для учёта нажатий пользователя, как при нажатии на ссылку - считаются клики и это доступно в Универсальной статистике
                   --
                   -- Формат ссылки: maxkey://<имя бота>/?code=<код кнопки>&text=<текст кнопки>
                   --
                   -- Пример maxkey://Name_bot/?code=12345&text=Yes
                   --
                   -- Пример "settings" с кнопками, изображением и пересылкой сообщения
                   -- 
                   --  "settings" : {
                   --    "link" : {
                   --      "type" : "forward",  -- пересылка указанного сообщения
                   --      "mid" : "abcd1234567890" 
                   --   },
                   --   "attachments" : [
                   --  {
                   --       "payload" : {
                   --         "buttons" : [
                   --           [
                   --              -- первый ряд клавиатуры
                   --              { "text":"Кнопка1", "payload":"b1", "type":"callback" } -- кнопка
                   --             ,{ "text":"Кнопка2", "payload":"b2", "type":"callback" } -- другая кнопка
                   --           ],
                   --           [
                   --              -- второй ряд клавиатуры
                   --              { "text":"Кнопка3", "payload":"b3", "type":"callback" } -- ещё кнопка
                   --             ,{ "text":"Кнопка4", "payload":"b4", "type":"callback" } -- и ещё кнопка
                   --           ]
                   --           ....
                   --         ]
                   --       },
                   --       "type" : "inline_keyboard" 
                   --     },
                   --     {
                   --       "payload" : {
                   --         "url" : "https://domain.c/a.jpg" 
                   --       },
                   --       "type" : "image" 
                   --     }
                   --   ],
                   -- }
                 }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               ,"prescript" : "" -- не обязательно. смотри email

                или черновик из которого взять текст и настройки.  Приоритет описан выше.

                "draft.id": "номер черновика, содержимое которого даст выпуск" -- должен иметь max-версию

*** для email

                * содержимое письма

                или указание параметров (дополнительно смотрите параметр letter.zip ниже

                "subject" : "Тема письма" -- обязательно не пусто

               ,"from.name" : "Имя отправителя" 

               ,"from.email" : "Адрес отправителя (email)" -- обязательно не пустой для текстовых писем; адрес должен быть в списке уже подтверждённых адресов (вызовы issue.emailsender.*)
                                                           --
                                                           -- Использование в качестве адреса отправителя адреса, принадлежащие Почте Mail.ru (mail.ru, bk.ru, inboc.ru, list.ru, mail.ua) - запрещено настройками Mail.Ru
                                                           -- Рассылка с таким адресом не выйдет. Черновик - не сохранится.
                                                           ---Более подробную информацию вы можете прочитать по адресу https://corp.mail.ru/ru/press/releases/9593/

               ,"reply.name" : "Имя для обратного адреса для ответа" 

               ,"reply.email" : "Обратный адрес для ответа (email)"  -- адрес должен быть в списке уже подтверждённых адресов (вызовы issue.emailsender.*)
                                                                     -- возможен учёт и статистика ответов получателей
                                                                     -- для этого необходимо активировать через Службу поддержки настройку "Проксирование ответов на письма выпуска" 
                                                                     -- статистика доступна через deliv.replyed.* вызова stat.uni
                                                                     -- так же смотрите ниже параметр intercept_replyto

               ,"to.name" : "Имя получателя" -- в этом поле уместна персонализация для подстановки имени и фамилии получателя

               ,"message": { -- одна или обе не пустые версии письма

                           "html" : "html-версия письма" 

                          ,"amp" : "amp-версия письма" -- подробнее про особенности работы можно прочитать в нашей статье
                                                       -- https://docs.sendsay.ru/email-campaigns/create-your-campaign/amp-campaign
                                                       --
                                                       -- для отправки проверочных писем в Gmail и Mail.Ru используйте отправку именно тестовых писем (issue.send.test), а не просто personal

                          ,"text" : "текстовая версия письма" 
                          }

               ,"basedraft.id" -- не обязательно. ни на что не влияет в _содержимом_, но выпуск записыватся как вышедший по нему. так же из него учитываются  всякие фильтры, списки отписки, списки участия и прочии параметры.

               -- начальный proscript

               -- при формировании каждого сообщения выполняется в шаблонизаторе в текстовом контексте ДО прочих частей сообщения
               -- результаты работы ДОСТУПНЫ далее в прочих частях сообщения через изменение переменных
               -- какой либо сформированный тект будет проигнорирован
               -- команда отменый письма - работает как обычно
               -- позволяет отделить сложную логику от самого шаблона сообщения

               -- позволяет избавиться от пустых строк в начале сообщения которые могут возникнуть если эту логику поставить в начало сообщения
               -- (это только в html они не мешают, а в других форматах очень даже)
               -- позволяет отделить сложную логику в отдельный черновик и подключать её через команду подстановки черновика
               --
               -- для передачи вычисленных значений для использования в других частях сообщения следует использовать специальную функцию шаблонизатора
               --
               --  [% save_global("имя-для-использования-далее",вычисленная-переменная) %] 

               ,"prescript" : "" -- не обязательно
                                 -- если не пустой, то должен содержать хотя бы одну команду ProScript

                или черновик из которого их взять.  Приоритет описан выше

                "draft.id": "номер черновика содержимое которого даст выпуск", -- должен иметь html и/или текстовую версию

                * генерация текстовой версии из html

                -- при отсутствии текстовой версии и включённой её автоматической генерации из html-версии письма, создаётся текстовая версия
                -- поддерживаются базовые виды выделения текста. Таблицы не поддерживаются по умолчанию, но это можно обсудить со Службой поддержки

                "autotext" : 0|1|ширина -- 0 - отключено (по умолчанию)
                                        -- 1 - включено, ширина строки 80 символов
                                        -- ширина - включено, ширина строки - указанное число

                * прикреплённые файлы письма

                -- по умолчанию, mime-тип файла определяется по расширению

                -- по умолчанию, кодировкой текстовых файлов text/* считается utf-8

                -- следующие имена файлов зарезервированы для внутренних нужд и не должны использоваться
                --
                --  все начинающиеся с _
                --
                --  message.text
                --  message.sms
                --  message.viber
                --  message.push
                --  message.vk
                --  message.tg
                --  message.vknotify
                --  message.pushapp
                --  message.max
                --
                --  index.html
                --  index.htm
                --  index.shtml
                --  index.shtm
                --
                --  attach.html
                --  attach.htm
                --  attach.shtml
                --  attach.shtm
                --
                --  message.html
                --  message.htm
                --  message.shtml
                --  message.shtm

               ,"attaches": [

                              -- при выпуске по черновику, прикрепляемые файлы из черновика добавляются к указанным в списке
                              -- если одноимённый файл или ссылка тут отсутствуют

                             {
                              "name" : "имя файла",

                             ,"content": "содержимое файла закодированное base64",

                             ,"encoding" : "base64",

                             ,"mime-type" : "тип аттача", -- параметр необязателен, заменяет тип установленный по расширению имени аттача

                             ,"charset" : "набор символов аттача", -- параметр необязателен, заменяет используемое по умолчанию utf-8
                             },

                             {
                              "name" : "имя файла",

                             ,"content": "содержимое файла",

                             ,"mime-type" : "тип файла", -- параметр нобязателен, заменяет тип установленный по расширению имени файла

                             ,"charset" : "набор символов файла" -- не обязательно, заменяет используемое по умолчанию utf-8
                             },

                             {
                              "url"  : "url откуда забрать. Внешние ссылки http / https / ftp / ftps / sftp или из хранилища загрузок rfs://upload/путь-до-файла " 

                             ,"mime-type" : "тип аттача", -- не обязательно, заменяет тип установленный по расширению имени аттача или полученный в ответ на запрос

                             ,"charset" : "набор символов аттача", -- не обязательно, заменяет используемое по умолчанию utf-8 или полученный в ответ на запрос
                             },

                             { "url"  : "персонализированный url откуда забирать - для каждого свой" }, -- подробнее в разделе "Персонализация выпуска" 

                             -- генерация персонального pdf-документа на ходу. подробнее в разделе "Персонализация выпуска" 

                             { "pdf"  : "номер черновика"}

                             -- генерация персонального excel-документа на ходу. подробнее в разделе "Персонализация выпуска" 

                             { "xlsx"  : "номер черновика"}

                             ...

                            ]
               }

*  текст выпуска и картинки из архива (для email). не для Транзакционных выпусков

  -- В архиве ищется индексный файл, который даст текст выпуска - это первый регистронезависимый файл *.htm(l) с наименьшим уровнем вложенности и наименьшим среди одноуровневых именем.
  -- Остальное содержимое каталога, в котором он находится сохраняется в Хранилище картинок.
  -- Остальные части архива игнорируются.
  -- В содержимом индексного файла относительные ссылки в img-src и ссs-url() дополняются веб-базой каталога, куда было сохранено содержимое.
  -- Полученный результат записывается в  letter-> message->html (т.е. это будет email).
  -- Остальные параметры по-прежнему передаются через явно указанный в вызове letter (например, тема).
  -- Если в вызове уже есть letter и в нём есть есть message, то это ошибка.

  ,"letter.zip" : "содержимое архива закодированное в base64" --  zip-архив, содержащий текст выпуска (в utf-8) и сопровождающие картинки для оформления

* получатели выпуска

   ,"group" : "id группы | masssending - если это Экспресс-Выпуск | personal - Транзакционное письмо",
              --
              -- Eсли фильтр группы описан в формате КД и в нём используется оператор has с параметром save,
              -- то один участник группы может попасть в рассылку несколько раз в зависимости от количества
              -- срабатываний has/save и параметра выпуска "multiple".
              -- В описании фильтра формата КД описано когда и чем это полезно.

   -- Выпуск Транзакционного письма (personal) в каналах Телеграм и ВКонтакте не может быть произведён
   -- "просто так", необходимо указывать какой бот или сообщество использовать.
   -- Для этого при personal необходимо указать дополнительный параметр-подсказку в выпуске или в черновике (для выпуска из триггеров, например)

  ,"basegroup.id" : "группа бота или сообщества" -- tg_xxxx или vk_xxx или max_xxx

* параметры способа выпуска

   ,"sendwhen": "Когда выпустить (now - сейчас | later - отложенный | delay - задержанный | save - отложить на хранение | test - тестовый)",
                -- при использовании в "Действиях по расписанию" допустимы только now и test
                -- Тестовый выпуск не доступен для Экспресс-выпуска, Транзакционных писем
                -- Одновременно может быть не более 100 отложенных (later), задержанных (delay) и на хранении (delay) выпусков. Если этого мало, то свяжитесь со Службой поддержки.

   ,"weak_draft": "не обязательно. описано выше" 

   ,"dkim.id" : "номер проверенного dkim-ключа или 0" 
                 -- если строго "0", то будет использоваться общий системный ключ
                 -- если пусто/не задано/невалиден, то будет взят из черновика
                 -- если в черновике строго "0", то будет использоваться общий системный ключ
                 -- если в черновике не задан или на момент выпуска выбранный ключ из черновика окажется не проверенным,
                 ---- шаги только при выпуске по email
                 --   то будет использоваться самый свежий из ключей имеющихся для домена отправителя (from.email из вызова или черновика)
                 --   если ключа точно по домену не будет, то домен будет сокращён на один уровень и поиск будет повторён. и так до домена второго уровня  включительно
                 --   если ключа по домену и его сокращённым вариантам не будет или на момент выпуска выбранный ключ по домену окажется не проверенным,
                 --   то будет искаться любой валидный DKIM для любого возможно настроенного поддомена для домена отправителя (это не стандартный шаг, если такой поиск нужен, то попросите Службу Поддержки его активировать)
                 --   если такой есть то будет использоваться самый свежий по времени настройки
                 ----- /конец шагов только при выпуске по email
                 ---то если всё ещё ничего не найдено, то будет использоваться значение установленное через sys.settings.set
                 -- если и его нет или не проверено, то будет использоваться общий системный ключ
                 --
                 -- если dkim-ключ будет подобран, то он
                 -- при выпуске по email - даст клиентскую dkim-подпись письма и повлияет на служебные адреса и служебные домены (если домен дкима кастомизированный - см. issue.dkim.*)
                 -- при выпуске не по email - только влияние на служебные домены (для учёта переходов, чтений, раздачи картинок)

   -- фильтр включения в выпуск - только адреса, попадающие под этот фильтр будут пропущены в выпуск
   -- если не указано - действует глобальная настройка  issue.filter.include.mass или issue.filter.include.personal
   -- если её надо отменить - укажите "-" 
   -- в Экспресс-выпуске фильтр всегда работает по данным реестра, даже если получатель есть в базе как подписчик
   -- в personal если у адреса нет подписчика то он пропускается в выпуск

   ,"issue_include_filter" : "код группы" 

    -- или

   ,"issue_include_filter" : [ фильтр как group.filter.set ]

   -- фильтр исключения из выпуска - адреса, попадающие под этот фильтр будут исключены из выпуска
   -- если не указано - действует глобальная настройка issue.filter.exclude.mass и issue.filter.exclude.personal
   -- если её надо отменить - укажите "-" 
   -- в Экспресс-выпуске фильтр всегда работает по данным реестра, даже если получатель есть в базе как подписчик
   -- в personal если у адреса нет подписчика то он пропускается в выпуск

   ,"issue_exclude_filter" : "код группы" 

   -- или

   ,"issue_exclude_filter" : [ фильтр как group.filter.set ]

   -- Группы списки для исключения получателей

   ,"group.exclude" : [ "id-группы1", "id-группы2" .... ]
                     -- Если адрес получателя присутствует хотя бы в одной из указанных групп-списков,
                     -- то он исключается из выпуска
                     -- Это работает быстрее чем issue_exclude_filter
                     -- Эта возможность позволяет, например, реализовать "стоп-лист по тематикам" - в письме
                     -- размещается дополнительная ссылка "Не хочу получать эту тематику" ведущая на Форму
                     -- А в выпусках "этой тематики" указывается исключить группу-список "Заполнившие Форму" 

-- список попавших в выпуск

   ,"issue_member_list" : "код группы-списка попавших в выпуск" -- в указанную группу-список накапливаются адреса,
                                                                -- попавшие в выпуск по данному классу.
                                                                -- каждый адрес вносится только один первый раз

-- список отписавшихся из выпуска

   ,"unsub_list" : "код группы-списка отписавшихся из выпуска"  -- В указанную группу-список накапливаются адреса,
                                                                -- нажавшие в выпуске "ссылку тематической отписки" 
                                                                -- Каждый адрес вносится только один первый раз
                                                                -- При последующих выпусках по этому классу
                                                                -- участники - это группы-списка из него исключаются
                                                                -- Ссылка тематической отписки оформляется как [% param.url_unsub_topic %]
                                                                -- Также можно использовать ссылку "Отмены тематической отписки",
                                                                -- оформляемую как [% param.url_unsub_topic_cancel %]
                                                                -- Подписчики, нажавшие её в каком либо имеющимся у них старом письме
                                                                -- (новые они не получают из-за нахождения в группе-списке отписки),
                                                                -- удаляются из группы отписки и со следующего выпуска по этому
                                                                -- классу могут опять получать письма (если нет других препятствий)

 -- явное указание аутентификации

  ,"authext.id" : "номер внешней аутентификации"  -- для тех каналов, доставка сообщений которых требуется использование внешних сервисов
                                                  -- без явного указания используется соответствующая аутентификация по умолчанию
                                                  -- но в некоторых случаях, например у вас больше одного мобильного приложения для канала pushapp,
                                                  -- такое поведение не подходит и вы можете указать явно какое имеете в виду при выпуске

-- игнорирование стоп-листа

   ,"ignore_stoplist" : 0|1                                   -- игнорировать пользовательский стоп-лист при выпуске
                                                              -- доступно только при заключении отдельного соглашения

   ,"class.id" : "идентификатор класса выпуска" -- возможный источник параметров выпуска для тех, что не указаны непосредственно в issue.send

   ,"campaign.id" : "код кампании" 

-- или

    ,"campaign.id" : [ "код кампании 1", "код кампании 2" ...]

                   -- Код кампании в которую будет включён выпуск
                   -- пусто или не указан - будет включён в кампанию, если она указана в черновике
                   -- 0 - не будет включён ни в какую кампанию, даже указанную в черновику
                   --     не может быть указан с другими кодами если их несколько

                   -- Код кампании (указанный или полученный из черновика) игнорирует если выпуск выходит
                   -- в рамках АБ-тестирования или триггерной рассылки

                   -- При успешном создании задания отложенного выпуска, он автоматически вносится в кампании указанные в campaign.id
                   -- При выходе отложенного выпуска ранее заданный campaign.id игнорируется и выпуск вносится только в те кампании,
                   -- в которых на момент выпуска состоит задание отложенного выпуска, сработавшее в кроне естественным путём (cron.runonce не считается)

* при отложенном выпуске (later) указывается дополнительно дата, час и минута, не ранее которых выпускать

    -- Если на такие же дату-время уже запланирован выпуск по такой же группе, то новое задание принято не будет.
    -- ИСКЛЮЧЕНИЕ - Экспресс-выпуск и Транзакционные письма.
    -- Выпуски по этим группам могут быть запланированы на одну и ту же дату в любом количестве.

    "later.time" : "YYYY-MM-DD hh:mm" -- рекомендуемая точность - 5 минут. Т.е. mm из набора 0,5,10,15,20,25,30,35,40,45,50,55
                                      -- другие значение mm допустимы, но фактически при выпуске могут быть округлены системой
                                      -- до ближайшего большего значения из указанного набора
                                      -- время не должно быть в прошлом

* при задержанном выпуске (delay) указывается дополнительно на сколько минут задержать выпуск.

    -- Так как "задержка" реализуется созданием отложенного выпуска на "текущее время + delay.time",
    -- то действуют ТАКИЕ ЖЕ ОГРАНИЧЕНИЯ, что и при использовании later.time

    "delay.time" : "mm" 

* для Email - при выпуске теста (test) указываются адреса получателей. не более пяти.

    "mca": [

            "e@mail.1",

            "e@mail.2",

             ......

           ]

* для Email - параметры преобразования ссылок для учёта перехода по ним в системе
            -- каждая ссылка в выпуске обсчитывается отдельно (даже повторяющиеся),
            -- но на это можно повлиять через параметр data-do-link-same

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию
                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе,
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

    "relink.param" : {
                      -- если relink = 1, а какой то из параметров relink.param не указан,
                      -- то считается что: link=1 и test=1 соответственно для всех рассылок кроме personal
                      -- для personal это: link=1 и test=0 - объяснение ниже

                      "link" : 0|1 -- преобразовывать ссылки тега <A>
                                   -- 1 - да, 0 - нет
                                   -- преобразуются ссылки со схемами: http(s)://, ftp(s)://, viber://, fb-messenger://,

                      "test": 0|1 -- проверять существование адресов (только если адрес подлежит преобразованию)
                                  -- НЕ СОВМЕСТИМОЕ ИЗМЕНЕНИЕ - с 01 июня 2025 года test:1 будет проверять существовение не зависимо от link
                                  -- 1 - да, 0 - нет
                                  -- при включённой проверке выпуск не выйдет если ссылка
                                  -- не действительна (ответ не 2xx, не 301, 302, 303, 307, 308 или 401 или тайм-аут 30 секунд)
                                  -- при положительных ответах 3хх дальнейшая проверка по пути редиректа не производится

                                  -- настройка "test"=1 не действует на домены vk.com, vkontake.ru, ok.ru, my.mail.ru, facebook.com, fb.com, instagram.com, twitter.com,
                                  -- pinterest.com, youtube.com, rutube.com, rutube.com, linked.in, odnoklassniki.ru, ok.ru, telegram.me, t.me, apps.apple.com,
                                  -- itunes.apple.com, play.google.com
                                  -- и их мобильные версии с префиксом "m" и версии с префиксом "www" 
                                  -- ссылки с их использованием не проверяются на существование из-за непредсказуемости результата
                                  -- указывайте таким ссылкам явно data-do-link-test=1 для осуществления проверки

                                  -- никогда не проверяются ссылки с персонализацией и со схемами viber://, fb-messenger://, webcal://

                                  -- при выпуске А/B-тестирования всегда устанавливается test=0, так как такая проверка типичный источник
                                  -- проблем, когда одна часть теста выходит, а другая - нет
                                  -- указывайте ссылкам явно data-do-link-test=1 для осуществления проверки при А/B-тестировании

                                  -- Обратите внимание, что массовая отсылка выпусков Персональных писем, может вызвать
                                  -- проблему выпуска из-за неудавшейся проверки адресов. Причина - система анализа частоты
                                  -- запросов сайта, для которой проверяется ссылка, может воспринять многократные постоянные
                                  -- запросы несколько подряд раз за короткое время (а именно так это будет выглядеть при массовой
                                  -- отсылке Персональных писем) как атаку на сайт и не давать проверить ссылку.
                                  -- Поэтому по умолчанию для personal проверка ссылок не производится.
                                  -- Включить её для всего выпуска вы всегда можете, задав параметр test в явном виде.
                                  -- Включить её для отдельных выпусков вы всегда можете атрибутом data-do-link-test

                      -- Глобальные настройки из relink.param можно переопределить для любого
                      -- конкретного тега A, указав в них нестандартные атрибуты
                      -- "data-do-link-relink" и "data-do-link-test", влияющие на преобразование
                      -- и тестирование по следующим правилам:
                      --
                      -- Атрибут отсутствует или пуст - учитывается глобальная настройка
                      -- Атрибут = 1 - делать действие, несмотря на глобальную настройку
                      -- Атрибут = 0 - не делать действие, несмотря на глобальную настройку
                      --
                      -- В отличие от параметра "test", зависящего от "link",
                      -- явное указание атрибута data-do-link-test="1" всегда вызывает проверку ссылки
                      -- несмотря на то, что преобразование для неё может и не проводиться
                      -- из-за настроек link/data-do-link-relink

                      -- несмотря на указание test=1, проверка не будет производиться, если через sys.settings.get
                      -- установлено issue.link.notest = 1 (по умолчанию = 0). Только явное указание в теге А параметра data-do-link-test = 1
                      -- заставит всё же провести проверку

                      -- В некоторых случаях например, блок товара с картинкой-названием-описанием с одной и той же ссылкой с каждого элемента,
                      -- может не требоваться различать, какую именно ссылку нажали (карта кликов становится проще).
                      -- Для того чтобы одинаковые ссылки получили в выпуске общий учёт переходов, надо явно указать в теге А
                      -  в атрибуте data-do-link-same="метка объединения", где "метка объединения" любое не пустое значение.
                      -- Одна и та же ссылка, встреченная в любом месте выпуска и имеющая одну и ту же метку объединения, будет использовать
                      -- один и тот же учёт переходов в этом выпуске.
                      -- Разные ссылки могут иметь одинаковую метку - ссылки будут объединяться, но каждая с такими же как она.
                      -- Метка нигде не запоминается - она только подсказывает при формировании выпуска, что ссылки различать не надо.
                     }

* для Viber - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но действует только на ссылку button.link и не применимы замечания про атрибуты data-do-relink-*

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию
                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

    "relink.param" : {
                      "link" : 0|1

                      "test" : 0|1
                     }

* для Push - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но не применимы замечания про атрибуты data-do-relink-*

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию
                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

    "relink.param" : {
                      "link" : 0|1  -- действует на click.url

                      "test": 0|1 -- действует на click,url, icon.url, image.url, actions.*.action
                     }

* для VK - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но не применимы замечания про атрибуты data-do-relink-*

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию

                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

    "relink.param" : {
                      "link" : 0|1

                      "test": 0|1
                     }

* для TG - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но не применимы замечания про атрибуты data-do-relink-*

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию

                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

                   -- не преобразуются ссылки домена t.me

    "relink.param" : {
                      "link" : 0|1

                      "test": 0|1
                     }

* для MAX - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но не применимы замечания про атрибуты data-do-relink-*

    "relink" : 0|1 -- Преобразовывать ссылки автоматически. По умолчанию - 1 - преобразовывать
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию

                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

                   -- не преобразуются ссылки домена t.me

    "relink.param" : {
                      "link" : 0|1

                      "test": 0|1
                     }

* для SMS - параметры преобразования ссылок для учёта перехода по ним

-- Аналогично как для Email, но не применимы замечания про атрибуты data-do-relink-*

-- Ссылки преобразуются через сокращатель, что дополнительно снижает длину (и, значит, цену) сообщения
-- Доступна статистика переходов для тех, ссылок которыми воспользовались получатели

    "relink" : 0|1 -- Преобразовывать ссылки автоматически
                   -- 1 - да
                   -- 0 - нет
                   -- не указано, пусто, null - по умолчанию
                   --
                   -- По умолчанию 0 - в отличии от других форматов !
                   --
                   -- при сочетании c relink из черновика/класса значения 0, 1 и пусто перебивают указание в черновике/классе
                   -- а при отсутствии в вызове или указании null - значение из черновика/класса сильнее

    "relink.param" : {
                      "link" : 0|1 -- по умолчанию 0

                      "test" : 0|1 -- по умолчанию 0
                      }

* для Email - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 
                  -- добавляется ко всем ссылкам через query-string
                  -- значение должно быть уже url-encoded
                  -- при выпуске по черновику, если этот параметр пуст, то берётся link.qsid из черновика
                  -- обычно содержит utm-метки и используется для отслеживания через сервисы типа Google Analytics
                  -- не имеет ни какого отношения к параметра relink*
                  -- если к какой-то ссылке параметр добавлять не требуется, то укажите в теге нестандартный
                  -- параметр data-no-qsid со значением 1

* для Viber - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов
     -- Аналогично как и для Email, но действует только на ссылку button.link

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 

* для Push - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов
     -- Аналогично как и для Email, но действует только на ссылку click.url

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 

* для VK - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов
     -- Аналогично как и для Email

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 

* для TG - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов
     -- Аналогично как и для Email

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 

* для MAX - параметр преобразования ссылок для отслеживания перехода по ним с помощью сторонних сервисов
     -- Аналогично как и для Email

    "link.qsid": "Параметр для отслеживания переходов по ссылкам через сторонние сервисы" 

* список получателей и данные персонализации для Экспресс-выпуска

  -- подробнее в разделе "Форматы данных для импортирования и Экспресс-выпуска" 
  -- данные персонализации могут быть дополнены внешними данными в процессе выпуска
  -- подробнее в разделе "Внешние данные для персонализации" 

  -- Экспресс-выпуск предназначен для рассылки общей для многих получателей информации. Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не сюда, это Транзакционные personal.
  -- Типичная ошибка - это использование Экспресс-выпуска для таких индивидуальных писем - система автоматически это замечает, и такие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

    "users.list": адреса и данные персонализации  -- непосредственно в CSV или XLSX
                                                  -- рекомендуется CSV - XLSX всё равно преобразуется внутри в CSV для того, чтобы подключить многопоточную обработку, а преобразование хоть и быстрое
                                                  -- (тысячи строк  с секунду), но на большом реестре всё равно займёт заметное время

или

  -- Экспресс-выпуск предназначен для рассылки общей для многих получателей информации. Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не сюда, это Транзакционные personal.
  -- Типичная ошибка - это использование Экспресс-выпуска для таких индивидуальных писем. Система автоматически это замечает, и такие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

    "users.list" : {
                    "encoding" : "base64" 
                   ,"content" : "адреса и данные персонализации в base64" -- вариант для CSV и XLSX которые не получается передать в двоичном виде
                   },

или

  -- Экспресс-выпуск предназначен для рассылки общей для многих получателей информации. Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не сюда, это Транзакционные personal.
  -- Типичная ошибка - это использование Экспресс-выпуска для таких индивидуальных писем. Система автоматически это замечает, и такие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

    "users.list" : [  -- данные в формате JSON-массив
                    { данные одного получателя }
                    ..............
                   ]

или

  -- Экспресс-выпуск предназначен для рассылки общей для многих получателей информации. Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не сюда, это Транзакционные personal.
  -- Типичная ошибка - это использование Экспресс-выпуска для таких индивидуальных писем. Система автоматически это замечает, и такие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

    "users.list" : {  -- данные в формате JSON-объект-ABO
                    "caption" : [ описание столбцов ]
                   ,"rows" : [
                              [ данные одного получателя ]
                              ..............
                             ]
                   }

или

  -- Экспресс-выпуск предназначен для рассылки общей для многих получателей информации. Разовые письма типа "Спасибо за регистрацию" или "Ваш код на сайте" это не сюда, это Транзакционные personal.
  -- Типичная ошибка - это использование Экспресс-выпуска для таких индивидуальных писем. Система автоматически это замечает, и такие выпуски получают очень низкий приоритет и выходят в последнюю очередь.

    "users.url": "url"  -- по которому находятся список адресов с данными для персонализации
                        -- внешние ссылки http / https / ftp  / ftps / sftp или из хранилища загрузок rfs://upload/путь-до-файла

                        -- Для запросов по SOAP (например, к Siebel) схемы soap:// и soaps:// - обратитесь с Службу поддержки
                        -- для получения дополнительной информации

                        -- Для запросов из Google Big Query настройте внешнюю аутентификацию для схемы gbd:// (описано в вызовах authext.*)
                        -- Данные получаются полной выборкой, из указанной в url вида gbd://authext:AUTHEXT_ID@DATASET_ID/TABLE_ID таблицы.
                        -- Одна из колонок таблицы должна называться email - она послужит источником адресов получателей и доступно при персонализации текста письма под стандартным именем anketa.member.email.
                        -- Название остальных колонок неважно, но оно должно начитаться с латинской буквы и продолжаться латинскими буквами и цифрами.
                        -- Для использования данных в персонализации используйте подстановки вида [% anketa.t.НАЗВАНИЕ-КОЛОНКИ-ТАБЛИЦЫ %] для всех колонок таблицы кроме email.

                        -- При оформлении выпуска как действия по расписанию не забудьте, что эту ссылку можно кастомизировать
                        -- временем и указать количество и интервал попыток получения данных. Подробнее в разделе "Общие замечания".

   ,"users.url.remove" : "none|always|onerror|onok" -- параметр необязателен
                                                 -- применимо только к rfs:// и http(s)://
                                                 --    none - не удалять. По умолчанию
                                                 --    always - всегда
                                                 --    onerror - при завершении с ошибкой
                                                 --    onok - при завершении без ошибок

* параметры объединения Экспресс-выпусков

    "accumulate" : 0|1 -- только для Экспресс-выпуска
                      -- если Экспресс-выпуск с такими же именем (параметр "name") когда-либо уже выпускался в текущем интервале накопления,
                      -- то этот запускаемый выпуск будет оформлен не как новый, а как продолжение уже вышедшего.
                      -- полезно в случае, если ваши CRM не может выдать весь реестр для рассылки за раз,
                      -- а только порциями.
                      -- с учётом параллельности приёма и выпуска заданий на рассылку, настоятельно рекомендуется
                      -- выпустить сначала первую порцию и потом уже последующие можно запускать параллельно

    "accumulate_by" : "month|week|day" -- интервал накопления. Параметр необязателен. По умолчанию month, если не изменено через sys.settings.set issue.accumulate_by
                                       -- календарная неделя, приходящаяся на два месяца, - это две разные недели для обеспечения правильного учёта месячного лимита трафика
                                       -- без разницы, какой именно интервал накопления был (и был ли вообще) у выпуска, который будет выбран базовым
                                       -- например, первого числа в понедельник выпуски с любым интервалом накопления будут использовать один и тот же выпуск с нужным именем как базовый,
                                       -- так как он будет удовлетворять и условию, что он в один и тот же день, и условию, что в одну и ту же неделю, и условию, что в один и тот же месяц

* параметры списка получателей для Экспресс-выпуска

    "only_unique": 0|1 -- Следить за уникальностью адресов в списка
                         -- 0 - нет, в выпуске участвуют все адреса текущего реестра
                         -- 1 - да,  исключаются из выпуска адреса повторно встречающиеся в реестре этого выпуска

* учёт множественных совпадений итератор в фильтре

    "multiple" : 0|1 -- что делать с множественными совпадениями итератора
                     -- 0 - по умолчанию, выпустить одно письмо
                     -- 1 - по одному письму на совпадение
                     -- В описании фильтра формата КД описано когда и чем это полезно.

* получатель для Транзакционных писем

    "email" : "адрес получателя или номер телефона получателя" 
                                 -- данные для персонализации берутся из базы
                                 --
                                 -- данные персонализации могут быть дополнены внешними данными в процессе выпуска
                                 -- подробнее в разделе "Внешние данные для персонализации" 
                                 --
                                 -- при этом способе указания получателя он проверяется на возможность отсылки ему письма
                                 -- (синтаксическая верность адреса, стоп-лист, ошибки доставки, отписался) и вы сразу получите
                                 -- в ответ описание ошибки, если она есть
                                 -- при  других способах задания получателя, проверка на возможность выпуска происходит
                                 -- только при формировании рассылки

   "customer.id" : "клиентский идентификатор письма" -- параметр необязателен, до 255 байт
                                                     -- ваш идентификатор письма (например, номер вашего клиента)
                                                     -- возвращается в callback и доступен через Универсальную статистику stat.uni
                                                     -- доступен в шаблонизаторе как anketa.customer.id

или

    "users.list": один адрес и данные персонализации  -- непосредственно в JSON (два варианта) или в CSV или XLSX
                                                      -- подробнее в разделе "Форматы данных для импортирования и Экспресс-выпуска" 
                                                      -- при указании только адреса данные персонализации берутся из базы
                                                      -- при указании более чем одного адреса - ошибка выпуска
                                                      -- данные персонализации могут быть дополнены внешними данными в процессе выпуска
                                                      -- подробнее в разделе "Внешние данные для персонализации" 

* Ограничение на размер тиража

 -- параметр необязателен, по умолчанию - "100%" 

 ,"users.slice" : "число" - тираж составит не более "число" первых получателей. Число - целое число больше нуля

 или

 ,"users.slice" : "процент%" - тираж составит указанный процент от всех получателей. Процент - целое число больше нуля и меньше 101

* Ограничение количества контактов на получателя

 -- ограничивает число высылаемых сообщений для каждого получателя
 --
 -- если за последний interval получателю уже успешно отправлено max и более сообщений, то он исключается из текущего выпуска
 --
 -- если у выпуска есть класс (указан или получен из черновика), то в расчёт лимита берутся только выпуски, вышедшие по такому же классу
 --
 -- если у выпуска нет класса , то в расчёт лимита берутся вообще все выпуски
 --
 -- должны быть заданы оба параметра сразу или ни одного
 --
 -- параметр необязателен, по умолчанию не ограничено

 ,"contact_rate" : {
                    "interval" : "часы"  -- за сколько последних часов проверять. Число от 1 или -1 за всё время
                    -- или
                    "interval" : "днейd" -- за сколько последних дней проверять. День начинается в 00:00:00. Число от 1 с окончанием "d" 
                                         -- например:
                                         -- 1d - за сегодня, т.е. с 00:00:00 сегодня
                                         -- 2d - за вчера и сегодня, т.е. с 00:00:00 вчера

                   ,"max"      : "число" -- лимит сообщений. число от 1
                  }

* Высылка письма в наиболее подходящее для каждого получателя время индивидуально на основе его прошлой активности

 -- для активации данной возможности просто обратитесь в Службу поддержки

 -- например,
 --   day и 4   - учитывая статистику дней недели, выбрать наилучшее время в ближайшие 4 часа
 --   week и 12 -учитывая суммарную статистику недели, выбрать наилучшее время в ближайшие 12 часа
 --
 -- если используется day и в указанном интервале вообще не было активности, то алгоритм переключается на week, при этом interval устанавливается в 24, если он был более 24
 --
 -- если в указанном интервале лучшими являются несколько часов, то выбирается самый ранний
 --
 -- не совместимо с выпуском по часовым поясам tz_observance
 --
 -- заданы оба параметра сразу или ни одного
 --
 -- параметр default необязателен и не учитывается без source и interval

 ,"tz_best" : {
               "source" : "day" или "week" -- лучшее время определять с учётом дня недели выпуска рассылки (day) или по суммарным данным всех дней недели (week). По умолчанию - day

              ,"interval" : число от 1 до 24 для week и от 1 до 168 для day -- число ближайших от выпуска часов, среди которых искать наилучший (считая и час выпуска). По умолчанию - 4

              ,"default"  -- от 00 до 23
                          -- час начала для тех, у кого время не определилось
                          -- параметр необязателен, по умолчанию - текущий час для выпуска "сейчас" 
                          -- или час запуска для отложенного выпуска - т.е. для них письма будут
                          -- отправляться сразу при выпуске
                          -- если час указан, то начнут отправлять им письма, начиная с указанного часа сегодня,
                          -- а если он уже полностью прошёл - с этого часа завтра
              }

* Ограничение на частоту отправки
  --
  -- Все ограничения касаются только первой попытки отправки сообщения.
  -- Если сообщение не принято сразу, то ограничения могут не быть соблюдены.

  -- При совместном использовании с tz_observance, ограничение на частоту отправки действует независимо в каждом
  -- часовом поясе.

  -- Для SMS частота автоматически ограничивается в каждом часовом поясе отдельно и без tz_observance.

 ,"tz_limit" {

   "default" : {

      -- ограничение на частоту отправки сообщений
      -- за rate минут будет передано в доставку в не более number сообщений
      -- начиная со второго раза, number будет увеличиваться на increase каждый раз от текущего значения

      -- Если параметр отсутствует или пуст или обе величины равны 0,
      -- то ограничения нет.

      "batch" : { -- или отсутствуют или указаны оба значения
                 "number" : "сколько сообщений" -- обязательно, >= 200
                ,"rate"   : "за сколько минут"  -- обязательно, >= 0

                 -- не обязательно, по умолчанию 0

                ,"increase" : число -- увеличение number на указанное целое число, >= 0

                -- или

                ,"increase" : "число%" -- увеличение number на указанное число процентов, >= 0
                                       -- процент принимается с точностью до сотых
                                       -- при малых number, если наращивание даёт менее 1 получателя
                                       -- то принимается увеличение на 1 получателя
                                       -- процент равный нулю - отсутствие наращивания
                }

     }
  }

* Учёт часового пояса получателя

  -- Параметр необязателен.

  -- Для не SMS при отсутствии учёта часового пояса всё выходит сразу (если нет прочих настроек).

  -- Для SMS при отсутствии явно заданного учёта часового пояса он учитывает на основании номера телефона.

  -- Не совместимо с tz_best.

  -- При выпуске с учётом временной зоны, письма будут заранее сформированы, но их первая попытка
  -- доставки начнётся не ранее, чем во временной зоне получателя начнётся указанный час
  -- по его локальному времени.
  --
  -- Источником данных может быть один или несколько пунктов анкеты подписчика.
  --
  -- Берётся первое определившееся время по порядку указания источников.
  --
  -- Если часовой пояс не удалось определить ни по одному из источников, то письмо начинает
  -- доставляться как описано в default (с учётом tz_limit).
  --
  -- В качестве указания на часовой пояс понимаются названия большинства стран и крупных городов
  -- в английском и русском написании (регистр не важен).
  --
  -- А также числовые смещения относительно UTC в виде:
  --
  --           +hhmm  -hhmm  UTC+hhmm  UTC-hhmm
  --           +hh    -hh    UTC+hh    UTC-hh
  --           +h     -h     UTC+h     UTC-h
  --           hh
  --           h
  --
  -- Используйте вызов sys.settings.get, чтобы проверить понимает ли система ваш способ записи.
  -- Если нет - обратитесь в Службу поддержки за расширением нашего списка городов и стран.
  --
  -- Во избежание путаницы с пониманием часовых поясов, настоятельно рекомендуется планировать
  -- такие рассылки не менее чем за 24 часа и учитывать особенности России - текущий час в Москве
  -- по всех других часовых поясах страны (за исключением Калининграда) уже прошёл и настанет
  -- там через через 15-23 часа в зависимости от удалённости.

  -- При совместном использовании с tz_limit ограничение на частоту отправки действует независимо в каждом
  -- часовом поясе.

  -- Настройка может быть указана и будет учтена по убыванию приоритета: при выпуске, в классе выпуска, в черновике, в классе черновика, глобально (sys.settings.set)

  -- Если требуется отключить соблюдение местного времени, то в более приоритетном источнике необходимо задать tz_observance.source с не существующим ключом данных.

 ,"tz_observance" : { -- не обязательно

                    "hour" : "час" -- от 00 до 23
                                   -- час по местному времени для начала доставки писем
                                   -- не обязательно, по умолчанию - час из default

                   ,"source" : [ -- параметр обязателен. Источники данных о временной зоне подписчика в его анкете.
                                 -- один и более.
                                 -- рекомендуется заполнять и использовать base.tz - поле "Часовой пояс" анкеты "Базовая" 
                                 -- при отсутствии своих данных, можно использовать member.last.tz - автоматически
                                 -- обновляющееся системой значение на основании последнего клика или чтения
                                "ключ-данных" 
                               ,"ключ-данных" 
                               ,"ключ-данных" 
                               ........
                               ]

                   ,"default"  -- от 00 до 23
                               -- час начала для тех, у кого местное время не определилось
                               -- параметр необязателен, по умолчанию - текущий час для выпуска "сейчас" 
                               -- или час запуска для отложенного выпуска - т.е. для них письма будут
                               -- отправляться сразу при выпуске
                               -- если час указан, то письма начнут отправлять, начиная с указанного часа сегодня,
                               -- а если он уже полностью прошёл - с этого часа завтра
                   }

* Проксирование ответов для Email

  -- При проксировании ответов на письма рассылок адрес для ответов reply.email заменеяется на служебный адрес сервиса, что позволяет
  -- получать статистику кто на какое письмо рассылки ответил. Ответное письмо после учёта в статистике пересылается на оригинальный адрес reply.email

  -- Статистика доступна через deliv.replyed.* вызова stat.uni

  -- Для работы, эта возможность должны быть разрешена для аккаунта через Службу Поддержки, активка в аккаунте по умолчанию или включена в параметре выпуска (черновика)
  -- и в выпуске должен быть явно указан адрес reply.email

 ,"intercept_replyto" : 0|1|пусто
                        -- 0 - не использовать
                        -- 1 - использовать
                        -- пусто - по умолчанию - настройка sys.settings.get(issue.intercept_replyto),

* время жизни сообщения для Email

 ,"ttl" : число -- время в секундах хранения сообщения при невозможности доставить сразу (ошибки доставки 4xx)
                -- параметр необязателен. По умолчанию 4 дня
                -- не рекомендуется задавать менее 1 часа. Если всё же попробуете - расскажите нам, как получилось.

* время жизни сообщения для Push

 ,"ttl" : число -- время в секундах хранения сообщения при невозможности отобразить сразу
                -- параметр необязателен. По умолчанию 12 часов

* забота о переменных

,"care_vars" : [ список ключей данных ] -- не обязательно
                                        -- указанные в списке переменные ProScript проверяются для каждого письмо на пусто-непусто
                                        -- если пусто, то письмо отменяется с причиной "care for var VAR" 
                                        -- проверяются только переменные название которых состоит из символов @a-zA-Z.[_]@
                                        -- список из выпуска имеют приоритет над черновиком
                                        -- список ни как не проверяется на использование или не использование его переменных в их тексте
                                        -- или наличие в данных персонализации
                                        -- проверка реализуется через специальный ProScript вставляемый без перевода строки перед началом
                                        -- текста сообщения. при успешной проверке он не оставляется после себя ни какого текста.

* данные произвольной структуры *одинаковые для всех подписчиков*

 -- эти данные трактуются в по модели КД

 -- эти данные будут доступны для шаблонизатора выпуска как переменные с именем, совпадающим с именем ключа хэша

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

 -- эти данные могут быть дополнены внешними данными в процессе выпуска - подробнее в разделе "Внешние данные для персонализации" 

 -- в настоящий момент зарезервированы имена:
 --   anketa - данные о конкретном подписчике
 --   lenta  - данные для подстановки rss/atom каналов
 --   date   - интерфейс к функциям работы с датой и временем
 --   form   - форма опроса

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

,"extra" : {
            "Key1" : [ 12, 34 ,56 ] -- пример использования [% Key1[2] %]

           ,"City" : { -- пример использования [% City.rus.long %]
                      "rus" : {
                               "long"  : "Санкт-Петербург" 
                              ,"short" : "СПБ" 
                     ,"eng" : {
                               "long"  : "Leningrad" 
                              ,"short" : "LED" 
                              }
                     }

           }

,"track.info" : "дополнительная информация, которая будет потом доступна в track.list/get" -- строка 1024 байта. Параметр необязателен

,"reltype" : ...
,"relref" : ...
}

ответ

{

    <общие поля>

   ,"track.id" : номер -- номер асинхронного запроса для отслеживания с помощью track.*
                       --
                       -- также можно получать callback по достижению трекером конечного состояния - т.е. по завершения выпуска
                       --
                       -- после выпуска Транзакционного письма полученный письмом номер "letter" будет в отчёте track.get
                       -- для данного track.id. Используя letter в stat.uni, можно получить информацию по данному конкретному
                       -- Транзакционному письму.

}

Настройки для выпуска pushapp

"settings":
    {
    "image":               строка     -- Содержит URL-адрес изображения, которое будет загружено на устройство и отображено в уведомлении.
    "priority":            строка     -- Приоритет сообщения. Может принимать значения normal или high.
    "retry":               число      -- Число попыток отправить сообщение при сбое сервиса.
    "android":             объект     -- (fcm) Специальные параметры службы push-уведомлений Android
    "apns":                объект     -- (fcm) Специальные параметры службы push-уведомлений Apple
    "dry_run":             логическое -- (fcm) Сухой запуск для эмуляции отправки пуша без непосредственно доставки пуша на устройство пользователя.
    "ttl":                 строка     -- (fcm) Как долго (в секундах) сообщение должно храниться в хранилище FCM, если устройство находится в автономном режиме.
    "validate_only":       логическое -- (fcm) Тоже, что и dry_run
    "alert":               объект     -- (apns) Информация об отображаемом уведомлении
    "apns_id":             строка     -- (apns) Канонический идентификатор уведомления apns
    "apns_payload":        объект     -- (apns) Пайлоад apns
    "badge":               число      -- (apns) Значок с числом, отображаемым около иконки
    "category":            строка     -- (apns) Тип уведомления в виде ссылки на объект категории
    "collapse_id":         строка     -- (apns) Идентификатор группы сообщений
    "development":         логическое -- (apns) Для разработки
    "expiration":          число      -- (apns) Истечение срока действия сообщения
    "interruption_level":  строка     -- (apns) Важность сообщения: “passive”, “active”, “time-sensitive”, “critical”
    "mutable_content":     логическое -- (apns) Изменяемый контент
    "name":                строка     -- (apns) sets the name value on the aps sound dictionary.
    "production":          логическое -- (apns)
    "push_type":           строка     -- (apns) Тип уведомления
    "sound":               объект     -- (apns) Звук, который воспроизводится, когда устройство получает уведомление.
    "thread-id":           строка     -- (apns) для группировки связанных уведомлений
    "topic":               строка     -- (apns) Возможность отправки уведомления не по токену, а по топику ((не реализовано)
    "url-args":            массив строк -- (apns)
    "volume":              флоат      -- (apns) Громкость звука уведомления
    "bi_tag":              строка     -- (hms) Tag of a message in a batch delivery task
    "fast_app_target":     число      -- (hms) State of a mini program when a quick app sends a data message.
    "huawei_collapse_key": число      -- (hms) a key integer for collapsing notifications
    "huawei_data":         строка     -- (hms) JSON object as string to extensible partition partition
    "huawei_notification": объект     -- (hms) payload of a HMS message
    "huawei_ttl":          строка     -- (hms) Истечение срока действия сообщения
    }

    Объект  { "alert":
    {
    "body":                строка     -- Текст уведомления.
    "launch-image":        строка     -- The filename of an image file in the app bundle, with or without the filename extension.
    "loc-args":            массив строк -- Variable string values to appear in place of the format specifiers in loc-key.
    "loc-key":             строка     -- A key to an alert-message string in a Localizable.strings file for the current localization.
    "subtitle":            строка     -- Apple Watch & Safari display this string as part of the notification interface.
    "title":               строка     -- Заголовок уведомления.
    "title-loc-args":      массив строк -- Variable string values to appear in place of the format specifiers in title-loc-key.
    "title-loc-key":       строка     -- The key to a title string in the Localizable.strings file for the current localization.
    }

    Объект  { "android":
    {
    "collapse_key":        строка     -- Идентификатор группы сообщений, которые можно свернуть, чтобы при возобновлении доставки отправлялось только последнее сообщение. В любой момент времени допускается максимум 4 различных ключа свертывания.
    "data":                объект     -- Полезная нагрузка произвольного ключа/значения. Если он присутствует, он переопределит  data .
    "direct_boot_ok":      логическое -- Если установлено значение true, сообщениям будет разрешено доставляться в приложение, пока устройство находится в режиме прямой загрузки.
    "notification":        объект     -- Уведомление для отправки на устройства Android.
    "priority":            строка     -- Приоритет сообщения. Может принимать значения normal или high.
    "restricted_package_name":строка     -- Имя пакета приложения, которому должен соответствовать регистрационный токен, чтобы получить сообщение.
    "ttl":                 строка     -- Как долго (в секундах) сообщение должно храниться в хранилище FCM, если устройство находится в автономном режиме.
    }

    Объект  { "android":  { "notification":
    {
    "body":                строка     -- Текст уведомления.
    "body_loc_args":       массив строк -- Значения переменных строк, которые будут использоваться вместо спецификаторов формата в body_loc_key и использоваться для локализации основного текста в соответствии с текущей локализацией пользователя.
    "body_loc_key":        строка     -- Ключ основной строки в строковых ресурсах приложения, используемый для локализации основного текста в соответствии с текущей локализацией пользователя.
    "channel_id":          строка     -- Идентификатор канала уведомления
    "click_action":        строка     -- Действие, связанное с щелчком пользователя по уведомлению. Если указано, действие с соответствующим фильтром намерений запускается, когда пользователь нажимает на уведомление.
    "color":               строка     -- Цвет значка уведомления.
    "default_light_settings":логическое -- Если установлено значение true, для уведомления используйте настройки светодиодной подсветки платформы Android по умолчанию.
    "default_sound":       логическое -- Если установлено значение true, для уведомления используется звук платформы Android по умолчанию.
    "default_vibrate_timings":логическое -- Если установлено значение true, для уведомления используется стандартный шаблон вибрации платформы Android.
    "icon":                строка     -- Значок уведомления. Устанавливает значок уведомления myicon для рисуемого ресурса myicon.
    "image":               строка     -- Содержит URL-адрес изображения, которое будет загружено на устройство и отображено в уведомлении.
    "light_settings":      объект     -- Настройки для управления частотой и цветом мигания светодиода уведомления.
    "local_only":          логическое -- Установите, относится ли это уведомление только к текущему устройству. Некоторые уведомления можно перенаправить на другие устройства.
    "notification_count":  число      -- Устанавливает количество элементов, которые представляет это уведомление.
    "sound":               строка     -- Звук, который воспроизводится, когда устройство получает уведомление.
    "sticky":              логическое -- Если установлено значение true, уведомление сохраняется, даже когда пользователь щелкает его.
    "tag":                 строка     -- Идентификатор, используемый для замены существующих уведомлений в панели уведомлений. Если не указано, каждый запрос создает новое уведомление. Если указано и уведомление с таким же тегом уже отображается, новое уведомление заменяет существующее в панели уведомлений.
    "ticker":              строка     -- Устанавливает текст «тикера».
    "title":               строка     -- Заголовок уведомления.
    "title_loc_args":      массив строк -- Значения переменных строк, которые будут использоваться вместо спецификаторов формата в title_loc_key и использоваться для локализации текста заголовка в соответствии с текущей локализацией пользователя.
    "title_loc_key":       строка     -- Ключ строки заголовка в строковых ресурсах приложения, используемый для локализации текста заголовка в соответствии с текущей локализацией пользователя.
    }

    Объект  { "apns":
    {
    "headers":             объект     -- Заголовки HTTP-запросов, определенные в службе push-уведомлений Apple, таких как apns-expiration и apns-priority
    "payload":             объект     -- Полезная нагрузка APN в виде объекта JSON, включая словарь aps и пользовательскую полезную нагрузку.
    }

    Объект  { "apns":  { "payload":
    {
    "aps":                 объект     -- Словарь полезной нагрузки
    }

    Объект  { "apns":  { "payload":  { "aps":
    {
    "alert":               объект     -- Информация об отображаемом уведомлении
    "badge":               число      -- Значок с числом, отображаемым около иконки
    "category":            строка     -- Тип уведомления в виде ссылки на объект категории
    "content-available":   число      -- Флаг для тихого обновления данных приложения
    "mutable-content":     число      -- Изменяемый контент
    "sound":               строка     -- Звук, который воспроизводится, когда устройство получает уведомление.
    "thread-id":           строка     -- для группировки связанных уведомлений
    }

    Объект  { "apns":  { "payload":  { "aps":  { "alert":
    {
    "action-loc-key":      строка     -- If a string is specified, the system displays an alert that includes the Close and View buttons.
    "body":                строка     -- Текст уведомления.
    "launch-image":        строка     -- The filename of an image file in the app bundle, with or without the filename extension.
    "loc-args":            массив строк -- Variable string values to appear in place of the format specifiers in loc-key.
    "loc-key":             строка     -- A key to an alert-message string in a Localizable.strings file for the current localization.
    "title":               строка     -- Заголовок уведомления.
    "title-loc-args":      массив строк -- Variable string values to appear in place of the format specifiers in title-loc-key.
    "title-loc-key":       строка     -- The key to a title string in the Localizable.strings file for the current localization.
    }

    Объект  { "huawei_notification":
    {
    "auto_cancel":         логическое --
    "auto_clear":          число      --
    "badge":               объект     -- Значок с числом, отображаемым около иконки
    "big_body":            строка     --
    "big_title":           строка     --
    "body":                строка     -- Текст уведомления.
    "body_loc_args":       массив строк -- Значения переменных строк, которые будут использоваться вместо спецификаторов формата в body_loc_key и использоваться для локализации основного текста в соответствии с текущей локализацией пользователя.
    "body_loc_key":        строка     -- Ключ основной строки в строковых ресурсах приложения, используемый для локализации основного текста в соответствии с текущей локализацией пользователя.
    "channel_id":          строка     -- Идентификатор канала уведомления
    "click_action":        объект     -- Действие, связанное с щелчком пользователя по уведомлению. Если указано, действие с соответствующим фильтром намерений запускается, когда пользователь нажимает на уведомление.
    "color":               строка     -- Цвет значка уведомления.
    "default_sound":       логическое -- Если установлено значение true, для уведомления используется звук платформы Android по умолчанию.
    "foreground_show":     логическое --
    "group":               строка     --
    "icon":                строка     -- Значок уведомления. Устанавливает значок уведомления myicon для рисуемого ресурса myicon.
    "image":               строка     -- Содержит URL-адрес изображения, которое будет загружено на устройство и отображено в уведомлении.
    "importance":          строка     --
    "light_settings":      объект     -- Настройки для управления частотой и цветом мигания светодиода уведомления.
    "multi_lang_key":      объект     --
    "notify_id":           число      --
    "notify_summary":      строка     --
    "sound":               строка     -- Звук, который воспроизводится, когда устройство получает уведомление.
    "style":               число      --
    "tag":                 строка     -- Идентификатор, используемый для замены существующих уведомлений в панели уведомлений. Если не указано, каждый запрос создает новое уведомление. Если указано и уведомление с таким же тегом уже отображается, новое уведомление заменяет существующее в панели уведомлений.
    "ticker":              строка     -- Устанавливает текст «тикера».
    "title":               строка     -- Заголовок уведомления.
    "title_loc_args":      массив строк -- Значения переменных строк, которые будут использоваться вместо спецификаторов формата в title_loc_key и использоваться для локализации текста заголовка в соответствии с текущей локализацией пользователя.
    "title_loc_key":       строка     -- Ключ строки заголовка в строковых ресурсах приложения, используемый для локализации текста заголовка в соответствии с текущей локализацией пользователя.
    "use_default_light":   логическое --
    "use_default_vibrate": логическое --
    "vibrate_config":      массив строк --
    "visibility":          строка     -- Различные уровни видимости уведомления: private, public, secret, visibility_unspecified.
    "when":                строка     --
    }

    Объект  { "huawei_notification":  { "badge":
    {
    "add_num":             число      --
    "class":               строка     --
    "set_num":             число      --
    }

    Объект  { "huawei_notification":  { "click_action":
    {
    "action":              строка     --
    "intent":              строка     --
    "rich_resource":       строка     --
    "type":                число      --
    "url":                 строка     --
    }

    Объект  { "huawei_notification":  { "light_settings":
    {
    "color":               объект     -- Цвет значка уведомления.
    "light_off_duration":  строка     --
    "light_on_duration":   строка     --
    }

    Объект  { "huawei_notification":  { "light_settings":  { "color":
    {
    "alpha":               число      --
    "blue":                число      --
    "green":               число      --
    "red":                 число      --
    }

    Объект  { "sound":
    {
    "critical":            число      --
    "name":                строка     -- sets the name value on the aps sound dictionary.
    "volume":              флоат      -- Громкость звука уведомления
    }
}