Реклама в платформе Smarty на данный момент представляет собой pre-roll-интерактивы для контента и рекламные баннеры.
Прероллы
Рекламные сущности
Рекламный ролик — видео-файл, который будет проигрываться в качестве преролла в сервисе оператора.

Рекламный блок — совокупность параметров конфигурации показа рекламных роликов.

Рекламный провайдер — внешняя система предоставления рекламных роликов, самостоятельно определяющая очередь и частоту показов роликов для тех или иных каналов.
Как настроить рекламу
Включить рекламу можно с помощью опции: TVMIDDLEWARE_ADS_ENABLED. Также дополнительно можно настроить временной интервал частоты показа рекламного блока опцией ADS_BLOCK_FREQUENCY_INTERVAL (вкладка «Настройки показа», поле «Максимальная частота отображения блока для одного аккаунта»). Значение указывается в секундах и по умолчанию имеет значение 3600 (1 час).
Максимальное количество возвращаемых рекламных блоков зависит от значения опции ADS_BLOCK_MAX_AMOUNT (по умолчанию 5). При использовании ограничения необходимо учитывать приоритет рекламных блоков, т.к. в начале списка всегда будут блоки с наивысшим приоритетом для показа.
Опции подключаются в конфигурационном файле Smarty (путь по умолчанию /etc/microimpuls/smarty/smarty.py, подробнее об опциях в разделе «Конфигурация и обслуживание Smarty» — «Системные параметры»). После этого необходимо перезагрузить Smarty командой service uwsgi restart.
Хранилище истории просмотра рекламных роликов
Начиная с версии Smarty 1.94 количество просмотров рекламных блоков хранится в redis-кеше (ранее эта информация хранилась в MongoDB). В связи с данным изменением появилась возможность очищать историю просмотров рекламных видеороликов с помощью служебной команды:
smarty_manage clean_old_ads
а также можно использовать команду
smarty_manage flushall
Но в таком случае во избежание непреднамеренной очистки данной информации рекомендуется добавить конфигурацию защищенного (protected) кеша — если в конфигурационном файле отсутствует массив CACHES, то этот пункт можно пропустить, иначе стоит проверить, прописаны ли в нем параметры конфигурации для параметра "protected". Настраивается по аналогии с "default" (обязательно должен отличаться адрес), например:
CACHES = {
"default": {
"BACKEND": "core.cache.backends.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
'PICKLE_VERSION': 2
}
},
"protected": {
"BACKEND": "core.cache.backends.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/2",
"OPTIONS": {
'PICKLE_VERSION': 2
}
},
}
Записи по просмотру будут сохраняться в первую очередь в защищенную часть кеша, для того, чтобы избежать случайного его удаления.
Внутренняя реклама
1. Создать рекламные ролики, которые необходимо показывать абонентам.
2. Создать рекламный блок, настроив для него следующие параметры:
- дни недели и время суток, в которые необходимо показывать ролики;
- количество показов рекламного блока в день на одного абонента;
- отметить каналы, для которых должны запускаться прероллы;
- отметить тарифные пакеты, которые должны быть подключены у абонента, чтобы ему отображались ролики;
- тарифные пакеты, наличие которых у абонента исключает показ рекламы для него.
- выбрать тип рекламного провайдера «Smarty» и отметить рекламные ролики, входящие в данный рекламный блок.
Реклама от внешнего провайдера AdStream
1. Создать объект рекламного провайдера с помощью объекта External Ad Provider в служебной панели администрирования (ключ запрашивается у внешнего провайдера):

2. Создать рекламный блок по тому же принципу, что и для внутренней рекламы, но выбрав созданного рекламного провайдера.
3. Прописать хост для кеширования рекламных роликов с помощью опции ADS_ADSTREAM_HOST_REPLACE.
Реклама от внешнего провайдера Qvol
1. Создать объект рекламного провайдера с помощью объекта External Ad Provider в служебной панели администрирования (домен API запрашивается у рекламного провайдера или менеджера со стороны Microimpuls).
2. Создать рекламный блок по тому же принципу, что и для внутренней рекламы, но выбрав созданного рекламного провайдера.
3. Настроить опцию ADS_EPG_USE_CATEGORIES_AS_GENRES для указания что именно отправлять провайдеру о текущей передаче: жанр или категорию.
4. Прописать хост для кеширования рекламных роликов с помощью опции ADS_QVOL_HOST_REPLACE (в случае надобности, ролики могут также вещаться напрямую от провайдера).
Рекламные баннеры
Концептуально рекламные баннеры — это механизм показа рекламных изображений с текстом и кнопкой перехода к действию, которые можно таргетированно показывать той или иной аудитории внутри абонентской базы.
Настройка в админке
Рекламные баннеры настраиваются в панели администрирования в разделе «Настройки контента» -> «Рекламные баннеры».

Баннер

- Название (обязательное) — служебное поле, не показывается абоненту.
- Изображение — файл-картинка для рекламного баннера.
- Маска текста — сообщение, которое будет показано вместе с рекламным баннером (расположение в зависимости от интерфейса). Сообщение можно таргетировать благодаря переменным.
- Диплинк — действие для кнопки, расположенной на рекламном баннере (наличие таковой зависит от интерфейса).
- Дополнительные атрибуты — опциональная возможность для задания дополнительных полей рекламным баннерам (в зависимости от интерфейса).
Аудитория

Фильтры:
- Тарифные пакеты — если отметить тарифы, то баннер будет показан только тем абонентам, у которых подключен хотя бы один из отмеченных тарифов. Если ни один тариф не отмечен, фильтр по тарифу будет игнорироваться.
- Доступен в городах — фильтр по геолокации абонента. Если не указан ни один город, фильтр по городу будет игнорироваться.
Список аккаунтов (приоритетнее, чем фильтры):
В подразделе «Список аккаунтов» можно загрузить CSV-файл с Ext ID абонентов, которым будет показан рекламный баннер. Формат файла:

Если у абонента несколько аккаунтов, то баннер будет показан всем аккаунтам абонента. Несуществующие в базе Ext ID абонентов будут проигнорированы. После загрузки CSV-файла и сохранения рекламного баннера в блоке отобразится таблица с перечнем акаунтов:

Настройки показа

- Включено — рекламный баннер будет показываться только если установлен данный флаг.
- Публикация с/до (обязательные) — период, в который будет показываться рекламный баннер. Период включает в себя указанные даты.
- Позиция в списке после — определяет порядок (приоритет) рекламного баннера.
- Показать только в день рождения абонента — если указан, рекламный баннер будет показываться абоненту в его день рождения (с учетом опции
ADS_TARGET_BANNER_BIRTHDAY_OFFSETи полей «Публикация с/до»)
Опции конфигурации
ADS_TARGET_BANNER_BIRTHDAY_OFFSET = [2, 2] #cписок с количеством дней до и после дня рождения, когда будут доступны баннеры ко дню рождения. Формат: [дни_до, дни_после]. Например:[2, 2] означает, что баннер будет показываться в течение 2 дней перед днем рождения абонента и 2 дней после.
ADS_TARGET_BANNER_MAX_HEIGHT = 720 # максимальная высота рекламного баннера.
ADS_TARGET_BANNER_MAX_WIDTH = 1280 # максимальная ширина рекламного баннера. Если изображение превышает указанные параметры, изображение будет уменьшено до максимальных параметров.
TVMW_TARGET_BANNER_BIRTHDAY_FORMAT = '%d %m %Y' # формат даты рождения в ответе TVMW API метода AccountTargetBannerList в поле message.
Реализация в интерфейсах
На данный момент поддержка баннеров реализована только в шаблоне Sibseti — баннер отображается в качестве фона главного экрана при выставлении опции show_target_banner.

Обновление баннера выполняется каждые 12 часов. Если баннер по какой-то причине недоступен, то для определения фона главного экрана используется стандартный механизм с баннером фильма или изображения из опции main_screen_banner.