Сплит-тестирование¶
Описание сплит-тестирования¶
Сплит-тестирование (A/B-тестирование) позволяет выпустить по некоторой части выбранной аудитории несколько писем различающихся между собой чем-либо и по результатам (если охват не 100%) выбрать в ручную или автоматически "лучший" вариант и послать его оставшейся не охваченной части аудитории.
Традиционный вариант использования - A/B-тестирование - предусматривает только два тестовых варианта писем и выпуск победителя.
Но данная реализация позволяет иметь произвольное количество тестовых вариантов и при желании не выпускать победителя, а покрыть тестами сразу всю аудиторию.
Параметры тестирования¶
- Название тестирования
- Группа задающая аудиторию (Экспресс-Выпуск и Транзакционные письма не применимо)
- Процент аудитории для тестового охвата. От 1 до 100. Указание 100 обозначает что нет необходимости выбирать "лучший" вариант и цель тестирования просто в сравнении разных вариантов.
- Критерий выбора лучшего варианта - вручную, больше кликов, больше чтений, меньше отписок. Не нужен если охват 100%
- Момент автоматического выбора лучшего варианта. Количество дней и часов от выпуска последнего варианта. Не нужен если охват 100% или выбор вручную.
- Активность - может выполняться или быть приостановлено
- Состояние (назначается автоматически). Первоначально - ожидает запуска. Все остальные состояния - подготавливается, запущено, ожидает выбора победителя, закончено - обозначают ту или иную степень выполнения.
- Варианты писем - не менее двух
Параметры одного варианта письма¶
- Дата запуска
- Используемый черновик
- Номер обычного выпуска. Назначается автоматически когда вариант выпущен.
- Признак что этот вариант выбран победителем. Назначается автоматически перед его выпуском как лучшим.
- Номер выпуска-победителя. Назначается автоматически когда этот вариант повторно выпущен как лучший.
Правила работы¶
Канал выпуска и аудитория определяется указанной группой.
Тестирование можно выпустить по любому каналу - email, sms, viber, push, vk, tg, vknotify, pushapp, max
Тестирование начинается автоматически не ранее даты указанной для запуска самого раннего варианта и если вариантов к этому моменту не менее двух.
Дата запуска какого-либо тестового выпуска или выпуска-победителя может быть пропущена если тестирование в приостановленном состоянии или не хватает вариантов.
Пропущенные запуски будут выполнены как только тестирование будет переведено в активное состояние или добавлен недостающий вариант.
В любом случае запуск победителя возможен только после выпуска всех тестовых частей даже если это потребует пропуска назначенного времени.
Список участников тестирования определяется как все участники указанной группы и формируется в момент или перед запуском первого варианта. В дальнейшем список неизменен вне зависимости от изменения списка участников группы за исключением адресов удаливших себя или внесённых в стоп-лист.
На время формирования списка тестирование находится в состоянии "подготавливается к запуску" и прогресс формирования может быть отслежен через вызов track.get
Данные персонализации каждого участника берутся на момент выпуска варианта.
Содержимое письма и прочие параметры выпуска берутся из указанного черновика на момент выпуска варианта.
Разные варианты могут использовать один и тот же черновик - тогда можно проверить реакцию не на содержимое, а на время выпуска.
Каждому варианту писем достанется процент аудитории равныйПроцент тестового охвата / Количество вариантов. Варианту победителю при повторном выпуске достанется оставшаяся часть аудитории.
Если участников меньше количества вариантов (при охвате 100%) или меньше количества вариантов + 1 (при охвате не 100%), то тестирование при запуске сразу перейдёт в состояние "завершено". Другими словами - каждому варианту и победителю должен достаться хотя бы один получатель.
Если процент тестового охвата равен 100, то выпуска-победителя не предусматривается.
Если тестирование НЕ в состоянии "ожидает запуска" то менять процент и группу уже нельзя.
Если тестирование НЕ в состоянии "ожидает запуска" то добавлять или удалять варианты писем уже нельзя.
Если тестирование НЕ в состоянии "ожидает запуска", то его нельзя удалить.
Изменить вариант письма можно только если тестирование в состоянии "ожидает запуска" или дата запуска варианта письма ещё не прошла или и тестирование не активно и изменяемый вариант ещё не выпущен.
Пока тестирование не в состоянии "победитель выбран" или "завершено" можно поменять способ выбора победителя.
Если тестирование в состоянии "завершено", то можно изменить только его название.
В выпуске А/B-тестирования проверка на работоспособность ссылок ни когда не проводится (а в обычных рассылках она по умолчанию включена), так как такая проверка типичный источник проблем когда одна часть теста выходит, а другая - нет. Но вы можете явно указать у нужных ссылок что их таки надо проверять.
Список сплит-тестирований¶
{
"action" : "issue.split.list"
-- параметры фильтрации, должен быть хотя бы один параметр
--
-- если выбрана последняя порция списка то ответ содержит "last_page" : 1
--
-- доступны поля
--
-- split.id -- "идентификатор сплит-тестирования"
-- split.name -- "название"
-- split.percent -- "процент аудитории для тестирования"
-- split.active -- "активность" -- 0|1
-- split.state -- "состояние тестирования"
-- split.group.gid -- символический код группы для получения аудитории. не masssending и не personal
-- split.group.name -- название группы
-- split.winner.by -- способ выбора победителя (null,"manual","click","read","unsub")
-- split.winner.after -- момент выбора победителя
-- split.create.time -- "дата создания" (Ys)
-- split.update.time -- "дата изменения" (Ys)
--
,"filter" : [ фильтр в синтаксисе stat.uni ]
,"order" : [ сортировка ответа в синтаксисе stat.uni ]
,"skip" : количество пропускаемых записей от начала списка -- по умолчанию 0
,"first" : количество выбираемых записей после skip -- по умолчанию 50, не более 50
}
ответ
{
"list" : [
{
"id" : номер тестирования
,"name" : "название"
,"group" : код группы
,"group.name" : название группы
,"active" : "активность"
,"state" : "состояние"
,"percent" : "процент тестирования"
,"winner.by" : "способ выбора победителя"
,"winner.after" : "момент запуска победителя"
,"create.time" : "дата и время создания" -- Ys, null
,"update.time" : "дата и время последнего изменения" -- Ys, null
,"winner.at" : "дата-время" -- Ys, null
-- прогнозируемое время выпуска победителя если он ещё не вышел
-- реальное время выхода победителя если он вышел
,"split.variants.at" - [ дата-время, дата-время,... ] - запланированные времена выпуска вариантов Ys
}
,
......
]
}
Создать сплит-тестирование¶
{
"action" : "issue.split.create"
,"name" : "название"
,"group" : "код группы" -- группа для получения аудитории. только группы c типом адресов email. не masssending и не personal.
,"percent" : процент аудитории для тестового охвата. от 1 до 100. целое число.
,"winner.by" : manual | read | click | unsub -- способ выбора победителя
-- manual - в ручную
-- read - больше чтений
-- click - больше кликов
-- unsub - меньше отписок
-- игнорируется, если процент равен 100
,"winner.after" : "DD hh" -- момент запуска победителя - через сколько дней (DD) и часов (hh) после выпуска последнего
-- теста автоматически выбрать победителя
-- игнорируется, если процент равен 100 или способ выбора победителя manual
,"active" : 0|1 -- активность. 0 - приостановлено. 1 - активно
-- не обязательно
,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 - по умолчанию)"
}
ответ
{
<общие поля>
,"id" : номер тестирования
}
если "return_fresh_obj" : "1"
ответ -- как на запрос "issue.split.get" соответствующего тестирования
Прочитать сплит-тестирование¶
ответ
{
<общие поля>
,"id" : номер тестирования
,"name" : "название"
,"group" : код группы для получения аудитории
,"group.name" : название группы
,"percent" : процент аудитории для тестирования
,"winner.after" : "DD hh" -- момент выбора победителя.
,"winner.by" : "способ выбора победителя"
,"active" : "активность"
,"state" : "состояние тестирования" -- назначается автоматически
-- 0 - ожидает запуска
-- 1 - подготавливается к запуску
-- 2 - запущено
-- 3 - ожидает выбора победителя
-- 5 - победитель выбран (да именно 5, а не 4)
-- 4 - завершено
-- -1 - ошибки
,"create.time" : "дата и время создания" -- Ys, null
,"update.time" : "дата и время последнего изменения" -- Ys, null
,"winner.at" : "дата-время" -- Ys, null
-- прогнозируемое время выпуска победителя, если он ещё не вышел
-- реальное время выхода победителя, если он вышел
,"parts" : [ -- список вариантов тестовых писем как в issue.split.list
{
"id" : номер варианта
,"start.at" : "плановое время запуска"
,"issue.at" : "номер выпуска" -- если вариант уже выпущен для теста
,"issue.winner" : "номер выпуска" -- если вариант уже выпущен как победитель
,"is_winner" : 0|1 - вариант выбран как победитель
}
,{
......
}
.......
]
}
Изменить сплит-тестирование¶
{
"action" : "issue.split.set"
,"id" : номер тестирования
-- не обязательные поля. не указанное поле сохранит прежнее значение
,"name" : название
,"group" : группа для получения аудитории. не masssending и не personal
-- изменение игнорируется если состояние тестирования не "ожидает запуска"
,"percent" : процент аудитории для тестового охвата.
-- изменение игнорируется если состояние тестирования не "ожидает запуска"
-- при установке в 100 очищаются поля winner.by и winner.after
-- при установка в не 100 требуется указать winner.by
,"winner.by" : способ выбора победителя
-- изменение игнорируется, если процент равен 100
-- изменение игнорируется, если состояние тестирования "победитель выбран" или "завершено".
-- при установке в manual очищается поле winner.after
-- при установке не в manual требуется указать winner,after
,"winner.after" : момент запуска победителя
-- изменение игнорируется, если процент равен 100 или способ выбора победителя manual
-- изменение игнорируется, если состояние тестирования "победитель выбран" или "завершено".
,"active" : активность
-- изменение игнорируется, если состояние тестирования "победитель выбран" или "завершено".
-- не обязательно
,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 - по умолчанию)"
}
ответ
{
<общие поля>
}
если "return_fresh_obj" : "1"
ответ -- как на запрос "issue.split.get" соответствующего тестирования
Удалить сплит-тестирование¶
Нельзя удалять тестирование в состоянии "запущено" и выше, так как при таком состоянии уже был как минимум один выпуск.
ответ
Выпустить победителя¶
Указывает какой вариант считать победителем и сразу выпускает его.
Допустимо при ручном способе выбора победителя если уже вышли все варианты, но победитель ещё не выбран.
Допустимо при автоматическом способе выбора победителя если уже вышли все варианты и не прошло время автоматического выбора.
Не допустимо если процент тестирования 100.
ответ
Список вариантов писем сплит-тестирования¶
ответ
{
<общие поля>
,"list" : [
{
"id" : номер варианта
,"start.at" : "плановое время запуска Ys"
,"issue.at" : "номер выпуска"
,"state" : "состояние"
,"issue.winner" : "номер выпуска" -- если уже выпущен как победитель
,"is_winner" : 0|1 - вариант выбран как победитель
,"start.winner.at" : "время запуска Ys" -- если уже выпущен как победитель
,"draft.id" : "номер используемого черновика"
}
,........
]
}
Создать вариант¶
Нельзя создать новый вариант если тестирование не в состоянии "ожидает выпуска"
{
"action" : "issue.split.variant.create"
,"split.id" : номер тестирования
-- параметры варианта
,"start.at" : "YYYY-MM-DD hh:mm" -- плановое время запуска. Ys
,"draft.id" : "номер используемого черновика"
-- не обязательно
,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 - по умолчанию)"
}
ответ
{
<общие поля>
,"id" : номер варианта тестирования
}
если "return_fresh_obj" : "1"
ответ -- как на запрос "issue.split.variant.get" соответствующего варианта
Прочитать вариант¶
ответ
{
<общие поля>
,"id" : номер варианта
,"split.id" : номер тестирования куда входит этот вариант
,"start.at" : "YYYY-MM-DD hh:mm" -- время запуска. дата и время с точностью до минуты
,"state" : 0 - ожидает запуска
2 - запущено задание на выпуск рассылки. issue.at (winner.at) будет заполнено как только при старте рассылки ей будет присвоен номер
-1 - выпуск завершился ошибкой. подробности в трекере
,"draft.id" : "номер используемого черновика"
,"issue.at" : "номер выпуска" -- если вариант уже выпущен для теста
,"issue.winner" : "номер выпуска" -- если вариант уже выпущен как победитель
,"start.winner.at" : "время запуска Ys" -- если уже выпущен как победитель
,"is_winner" : 0|1 - вариант выбран как победитель
}
Изменить вариант¶
Изменить вариант письма можно только если тестирование в состоянии "ожидает запуска" или дата запуска варианта письма ещё не прошла или и тестирование не активно и изменяемый вариант ещё не выпущен.
{
"action" : "issue.split.variant.set"
,"id" : номер варианта
-- параметры варианта, изменятся только явно указанные
,"start.at" : "YYYY-MM-DD hh:mm" -- плановое время запуска. Ys
,"draft.id" : "номер используемого черновика"
-- не обязательно
,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 - по умолчанию)"
}
ответ
{
<общие поля>
,"id" : номер варианта тестирования
}
если "return_fresh_obj" : "1"
ответ -- как на запрос "issue.split.variant.get" соответствующего варианта
Удалить вариант¶
Нельзя удалять вариант если тестирование не в состоянии "ожидает выпуска"
ответ