Управление порталами¶
Портал — это независимый брендированный домен с собственным набором абонентов, каналов и пакетов в системе Catena. Порталы позволяют управлять несколькими IPTV-сервисами с различными брендами на одной инфраструктуре.
Что такое портал¶
Портал в Catena — это изолированное пространство для отдельного IPTV-сервиса со своими настройками, абонентами и контентом. Каждый портал представляет собой независимый брендированный сервис с собственным доменом, логотипом и визуальным оформлением.
Ключевая концепция:
Catena инфраструктура
├── Портал "Netflix-подобный сервис" (myiptv.com)
│ ├── Абоненты: 10,000
│ ├── Каналы: 200
│ └── Брендинг: красный логотип, современный дизайн
├── Портал "Региональный провайдер" (region-tv.ru)
│ ├── Абоненты: 5,000
│ ├── Каналы: 150
│ └── Брендинг: синий логотип, классический стиль
└── Портал "Спортивный сервис" (sport-tv.com)
├── Абоненты: 3,000
├── Каналы: 50 (только спорт)
└── Брендинг: зелёный логотип, динамичный дизайн
Основные характеристики портала:
- Независимый домен — каждый портал доступен по своему URL
- Собственный брендинг — логотип, название, описание, визуальное оформление
- Изолированные данные — абоненты одного портала не видны в другом
- Отдельный контент — свой набор каналов, пакетов, EPG
- Брендированные приложения — возможность создать mobile app для портала
- Общая инфраструктура — все порталы работают на одних серверах
Зачем нужны порталы:
- Мультибрендинг — управление несколькими IPTV-брендами
- White-label решения — предоставление сервиса под брендом клиента
- Географическое разделение — разные порталы для разных регионов
- Сегментация аудитории — premium и budget сервисы на одной платформе
- Партнёрские проекты — отдельные порталы для B2B партнёров
- Тестовая среда — отдельный портал для тестирования нововведений
Управление несколькими порталами¶
Концепция мультитенантности¶
Одна инфраструктура — множество порталов:
- Все порталы используют одни и те же streaming-серверы
- Контент может быть как общим, так и уникальным для портала
- Один менеджер может управлять несколькими порталами
- Billing-система может обслуживать все порталы
Преимущества:
- Экономия ресурсов — один сервер для всех порталов
- Централизованное управление — единая панель администратора
- Общий контент — одни каналы для разных брендов
- Гибкий маркетинг — разные стратегии для каждого портала
- Масштабируемость — легко добавлять новые порталы
Один менеджер — несколько порталов¶
Сценарий: Владелец IPTV-бизнеса управляет тремя брендами
Менеджер: admin@company.com
├── Портал 1: myiptv.com (owner, полный доступ)
├── Портал 2: premium-tv.com (owner, полный доступ)
└── Портал 3: budget-tv.com (content admin, управление контентом)
Как работает доступ:
- Менеджер создаётся отдельно для каждого портала
- Один email может использоваться в разных порталах
- При входе система показывает список доступных порталов
- Менеджер выбирает портал для работы
- API ключ привязан к конкретному порталу
Типы прав менеджера:
- isAdmin — управление инфраструктурой (создание порталов, серверов)
- canManage — полное управление порталом (owner)
- canManageSubscribers — управление абонентами и подписками
- canManageContent — управление каналами, пакетами, EPG
Основные параметры портала¶
Технические параметры¶
Идентификатор портала (Portal ID)
- Автоматически генерируется при создании портала
- Формат: base64-кодированный Snowflake ID с заменой
+/=
на-_.
- Пример:
pKl9SW3AAAE.
- Используется во всех API запросах
- Связывает все сущности (абонентов, каналы, пакеты) с порталом
Внутреннее имя (Name)
- Техническое название портала в системе
- Видно только администраторам и владельцу портала
- Используется для идентификации в логах и панели управления
- Должно быть уникальным в системе
- Примеры:
catena-netflix
,my-iptv-service
,test-portal
Домен (Domain)
- Доменное имя, под которым доступен портал
- Указывается владельцем портала как заявка на домен
- Реальная привязка DNS выполняется администратором системы
- Используется для брендированных мобильных приложений
- Пример:
myiptv.com
,tv.example.org
ID владельца (Owner ID)
- Идентификатор менеджера — владельца портала
- Владелец имеет полный доступ ко всем настройкам
- Может назначать других менеджеров
- Устанавливается при создании портала
API ключ (API Key)
- Уникальный ключ для доступа к Management API портала
- Генерируется автоматически при создании портала
- Используется для аутентификации всех API запросов
- Может быть регенерирован через
/portal/reset_api_key
- Должен храниться в безопасности
Параметры брендинга¶
Логотип (Logo)
- URL или base64-encoded изображение логотипа портала
- Отображается в мобильных приложениях и веб-интерфейсе
- Видят конечные пользователи (абоненты)
- Рекомендуемый формат: PNG с прозрачностью
- Рекомендуемый размер: 512x512px или выше
Название (Title)
- Публичное название портала для конечных пользователей
- Отображается в приложениях, на сайте, в уведомлениях
- Примеры: "Моё IPTV", "Premium TV Service", "Спорт ТВ"
Описание (Description)
- Краткое описание сервиса для пользователей
- Используется в app stores, на лендингах
- Может содержать слоган или краткое описание преимуществ
- Пример: "Лучшее IPTV для всей семьи. 200+ каналов в HD качестве"
Бесплатные пакеты (Free Packages)¶
Концепция:
- Список пакетов, доступных всем абонентам портала автоматически
- Не требуется создавать подписку для каждого абонента
- Используется для базового контента, демо-каналов, trial периода
Применение:
- Базовые каналы — федеральные, общедоступные каналы
- Пробный доступ — первый месяц для всех новых абонентов
- Промо контент — рекламные и информационные каналы
- Loyalty программа — бонусные каналы для всех клиентов
Управление:
# Добавить пакет в список бесплатных
POST /portal/free-packages/{packageId}
# Удалить пакет из списка бесплатных
DELETE /portal/free-packages/{packageId}
Получение информации о портале¶
Через веб-интерфейс¶
- Войдите в панель управления Catena
- Выберите портал (если у вас доступ к нескольким)
- Откройте раздел "Настройки портала"
- Просмотрите параметры:
- Основная информация (название, домен)
- Брендинг (логотип, описание)
- API ключ
- Список бесплатных пакетов
- Права доступа
Через Management API¶
Получить информацию о текущем портале:
curl -X GET https://your-catena-domain.com/tv-management/api/v1/portal \
-H "X-Auth-Token: your-api-key"
Ответ:
{
"portalId": "pKl9SW3AAAE.",
"name": "my-iptv-service",
"domain": "myiptv.com",
"freePackages": ["basicKl9SW3AAAE.", "trialKl9SW3AAAE."],
"branding": {
"logo": "https://myiptv.com/logo.png",
"title": "My IPTV Service",
"description": "Premium IPTV streaming for everyone"
},
"apiKey": "secret_api_key_1234567890",
"ownerId": "mKl9SW3AAAE.",
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-10-16T14:30:00Z",
"flags": {
"canManage": true,
"canManageSubscribers": true,
"canManageContent": true
}
}
Поля ответа:
- portalId — уникальный идентификатор портала
- name — внутреннее техническое название
- domain — доменное имя портала
- freePackages — массив ID бесплатных пакетов
- branding — параметры брендинга
- apiKey — API ключ для аутентификации
- ownerId — ID владельца портала
- createdAt/updatedAt — даты создания и обновления
- flags — права доступа текущего менеджера
Редактирование портала¶
Через веб-интерфейс¶
- Откройте раздел "Настройки портала"
- Нажмите "Редактировать"
- Измените параметры:
- Название для пользователей (Title)
- Описание сервиса (Description)
- URL логотипа (Logo)
- Сохраните изменения
Важно: Технические параметры (name, domain, portalId) обычно не редактируются после создания.
Через Management API¶
Обновить параметры портала:
curl -X PUT https://your-catena-domain.com/tv-management/api/v1/portal \
-H "X-Auth-Token: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"name": "my-iptv-service",
"branding": {
"logo": "https://myiptv.com/new-logo.png",
"title": "My IPTV - Новое название",
"description": "Обновлённое описание сервиса"
}
}'
Ответ:
Обновлённый объект Portal с новыми значениями.
Что можно изменить:
- Параметры брендинга (logo, title, description)
- Список бесплатных пакетов (через отдельные endpoints)
Что нельзя изменить:
- portalId — генерируется автоматически
- name — устанавливается при создании
- domain — устанавливается при создании
- ownerId — изменяется отдельно администратором
Управление API ключом¶
Безопасность API ключа¶
API ключ — это секретный токен для доступа к порталу. Обращайтесь с ним осторожно:
- Храните в безопасном месте (переменные окружения, secret manager)
- Не коммитьте в Git репозитории
- Не передавайте третьим лицам
- Регулярно обновляйте (каждые 6-12 месяцев)
- Немедленно обновите при подозрении на компрометацию
Регенерация API ключа¶
Когда нужно регенерировать:
- API ключ случайно попал в публичный репозиторий
- Подозрение на несанкционированный доступ
- Увольнение сотрудника, имевшего доступ к ключу
- Плановое обновление по политике безопасности
- Смена интеграции или биллинговой системы
Через веб-интерфейс:
- Откройте "Настройки портала"
- Перейдите в раздел "Безопасность"
- Нажмите "Сгенерировать новый API ключ"
- Подтвердите действие
- Скопируйте новый ключ (старый перестанет работать немедленно)
- Обновите ключ во всех интеграциях
Через Management API:
curl -X POST https://your-catena-domain.com/tv-management/api/v1/portal/reset_api_key \
-H "X-Auth-Token: current-api-key"
Ответ:
{
"portalId": "pKl9SW3AAAE.",
"name": "my-iptv-service",
"apiKey": "new_secret_api_key_0987654321",
"branding": { ... },
...
}
Важно:
- Старый API ключ перестаёт работать немедленно
- Все текущие интеграции с старым ключом начнут получать ошибку 401
- Обновите ключ во всех местах: биллинг, monitoring, скрипты
- Сохраните новый ключ в безопасном месте
Управление бесплатными пакетами¶
Добавление бесплатного пакета¶
Через веб-интерфейс:
- Откройте "Настройки портала"
- Перейдите в раздел "Бесплатные пакеты"
- Нажмите "Добавить пакет"
- Выберите пакет из списка доступных
- Подтвердите добавление
Все абоненты портала немедленно получат доступ к каналам этого пакета.
Через Management API:
curl -X POST https://your-catena-domain.com/tv-management/api/v1/portal/free-packages/basicKl9SW3AAAE. \
-H "X-Auth-Token: your-api-key"
Ответ: HTTP 201 Created
Удаление бесплатного пакета¶
Через веб-интерфейс:
- Откройте "Настройки портала"
- Перейдите в раздел "Бесплатные пакеты"
- Найдите пакет в списке
- Нажмите "Удалить"
- Подтвердите удаление
Абоненты без явной подписки на этот пакет потеряют доступ к его каналам.
Через Management API:
curl -X DELETE https://your-catena-domain.com/tv-management/api/v1/portal/free-packages/basicKl9SW3AAAE. \
-H "X-Auth-Token: your-api-key"
Ответ: HTTP 201 Created
Важно:
- Если у абонента есть явная подписка на пакет, он сохранит доступ
- Удаление из бесплатных не удаляет сам пакет
- Изменения вступают в силу немедленно
Типичные сценарии использования¶
Сценарий 1: Несколько брендов на одной платформе¶
Задача: Компания управляет тремя IPTV-брендами
Структура:
Компания "IPTV Group"
├── Бренд "Premium TV" (premium-tv.com)
│ ├── Целевая аудитория: премиум сегмент
│ ├── Контент: 300 HD/4K каналов
│ ├── Цена: от $20/месяц
│ └── Брендинг: золотой логотип, элегантный дизайн
│
├── Бренд "Family TV" (family-tv.com)
│ ├── Целевая аудитория: семьи с детьми
│ ├── Контент: 150 каналов (кино, детские, общие)
│ ├── Цена: от $10/месяц
│ └── Брендинг: яркие цвета, дружелюбный дизайн
│
└── Бренд "Sport TV" (sport-tv.com)
├── Целевая аудитория: спортивные фанаты
├── Контент: 50 спортивных каналов
├── Цена: от $15/месяц
└── Брендинг: динамичный, энергичный стиль
Преимущества:
- Один streaming сервер для всех брендов
- Централизованное управление контентом
- Разные маркетинговые стратегии
- Изолированные базы абонентов
- Экономия на инфраструктуре
Реализация:
- Создать 3 портала в Catena
- Настроить брендинг для каждого
- Распределить каналы по порталам
- Создать пакеты с разной ценовой политикой
- Интегрировать с единой биллинговой системой
- Развернуть брендированные mobile apps
Сценарий 2: White-label решение для партнёров¶
Задача: Предоставить IPTV платформу партнёрам под их брендом
Бизнес-модель:
- Вы — провайдер инфраструктуры и контента
- Партнёры — владельцы абонентской базы и брендов
- Каждый партнёр получает свой портал
- Партнёр платит за количество абонентов или фиксированную плату
Пример структуры:
Ваша платформа: catena-platform.com
├── Партнёр 1: regional-provider.ru
│ └── 5,000 абонентов
│
├── Партнёр 2: city-tv.com
│ └── 3,000 абонентов
│
└── Партнёр 3: corporate-tv.net
└── 1,000 абонентов (корпоративное ТВ)
Что получает партнёр:
- Собственный портал с уникальным доменом
- Полный контроль над брендингом
- Доступ к вашему каталогу каналов
- Брендированное мобильное приложение
- API для интеграции со своим биллингом
- Техподдержку от вашей команды
Что делаете вы:
- Создаёте портал для партнёра
- Предоставляете доступ к каналам
- Поддерживаете инфраструктуру
- Обновляете EPG
- Обеспечиваете стабильную работу
- Выставляете счета партнёру
Workflow создания портала для партнёра:
- Партнёр регистрируется в вашей системе
- Вы создаёте портал с его доменом
- Партнёр настраивает брендинг (логотип, цвета, название)
- Вы подключаете каналы согласно тарифу
- Партнёр получает API ключ для интеграции
- Вы создаёте брендированное mobile app для партнёра
- Партнёр начинает привлекать абонентов
Сценарий 3: Географическое разделение¶
Задача: Предоставить IPTV в разных странах/регионах
Почему нужны отдельные порталы:
- Разный контент из-за лицензионных ограничений
- Разные языки интерфейса
- Разные валюты и способы оплаты
- Локальные каналы для каждого региона
- Соответствие местному законодательству
Пример:
Международный IPTV сервис
├── Портал "IPTV Russia" (iptv.ru)
│ ├── Контент: российские каналы + международные
│ ├── Язык: русский
│ ├── Валюта: рубли
│ └── 50,000 абонентов
│
├── Портал "IPTV Europe" (iptv.eu)
│ ├── Контент: европейские каналы
│ ├── Языки: английский, немецкий, французский
│ ├── Валюта: евро
│ └── 30,000 абонентов
│
└── Портал "IPTV USA" (iptv.com)
├── Контент: американские каналы
├── Язык: английский
├── Валюта: доллары
└── 20,000 абонентов
Сценарий 4: Тестовая среда¶
Задача: Безопасно тестировать новые функции
Решение:
- Создать отдельный портал
test.myiptv.com
- Использовать для внутреннего тестирования
- Тестировать новые каналы, пакеты, функции
- Не влиять на production порталы
Преимущества:
- Полная изоляция от продакшн данных
- Возможность экспериментировать
- Тестирование интеграций
- Обучение новых сотрудников
Брендированные мобильные приложения¶
Концепция брендированных приложений¶
Для каждого портала можно создать отдельное мобильное приложение с уникальным брендом.
Что включает брендированное приложение:
- Логотип портала в качестве иконки app
- Название портала в App Store / Google Play
- Цветовая схема портала в интерфейсе
- Уникальный Bundle ID / Package Name
- Подключение к API портала через API ключ
Платформы:
- iOS — Swift/SwiftUI приложение для iPhone/iPad
- Android — Kotlin/Java приложение
- Android TV — версия для Smart TV
- Apple TV — версия для Apple TV
Процесс создания приложения¶
Типичный workflow:
- Вы предоставляете параметры портала:
- Доменное имя (domain)
- Логотип (logo)
- Название (title)
- Цветовая схема
-
API endpoint
-
Разработчик создаёт приложение:
- Брендирует интерфейс согласно дизайну
- Интегрирует с Catena API
- Настраивает авторизацию через SMS
-
Реализует плеер для просмотра
-
Публикация в store:
- Регистрация в Apple Developer / Google Play Console
- Подготовка скриншотов и описания
- Прохождение модерации
-
Публикация приложения
-
Абоненты скачивают:
- Находят ваше приложение в store
- Устанавливают на устройство
- Входят через SMS
- Смотрят каналы
Важно:
- Для iOS требуется Apple Developer аккаунт ($99/год)
- Для Android требуется Google Play Console ($25 один раз)
- Приложение должно соответствовать правилам store
- Обновления приложения проходят модерацию
Общая инфраструктура для порталов¶
Общие streaming-серверы¶
Все порталы используют одни и те же серверы для доставки контента:
┌─────────────────┐
│ Streaming │
│ Server │◄─────┐
│ (Flussonic) │ │
└─────────────────┘ │
▲ │
│ │
┌────┴────┬──────────┴───────┐
│ │ │
┌───┴───┐ ┌───┴───┐ ┌────┴────┐
│Portal1│ │Portal2│ ... │Portal N │
└───────┘ └───────┘ └─────────┘
Преимущества:
- Один source для канала → N порталов
- Экономия трафика и CPU
- Централизованное управление stream
- Единая точка мониторинга
Разграничение доступа:
- Streaming server проверяет
playback_token
абонента - Token содержит информацию о portal_id
- Абонент может смотреть только каналы своего портала
- Технически возможно предоставить один канал нескольким порталам
Общие каналы для нескольких порталов¶
Сценарий: Один source канала для разных брендов
Пример:
Источник: "Discovery Channel" (rtmp://source.tv/discovery)
│
┌─────────────┼─────────────┐
│ │ │
Portal A Portal B Portal C
Channel: Channel: Channel:
"Discovery" "Discovery HD" "Discov"
(в пакете (в премиум (в базовом
"Наука") пакете) пакете)
Как работает:
- Канал добавляется в каждый портал отдельно
- У каждого портала свой
channelId
- Но source URL одинаковый
- Streaming server кеширует поток
- Все порталы получают поток из кеша
Преимущества:
- Один source → многократное использование
- Экономия на лицензировании (зависит от договора)
- Централизованное обновление EPG
- Единая точка мониторинга качества
Лучшие практики¶
Именование порталов¶
Внутреннее имя (name):
- Используйте понятные технические названия
- Примеры:
company-premium
,partner-acme
,test-portal
- Избегайте пробелов и специальных символов
- Держите консистентность:
brand-segment
илиclient_name
Публичное название (title):
- Используйте привлекательное маркетинговое название
- Примеры: "Premium TV", "Семейное Телевидение", "СпортТВ+"
- Учитывайте целевую аудиторию
- Проверьте доступность названия (trademark)
Организация контента¶
Стратегии распределения каналов:
- Полное дублирование — все порталы имеют одинаковый контент
- Проще в управлении
-
Подходит для white-label без сегментации
-
Сегментированный контент — разный контент для разных порталов
- Премиум портал: эксклюзивные каналы
- Базовый портал: стандартный набор
-
Тематический портал: только спорт/кино/новости
-
Общая база + уникальный контент
- Базовые каналы доступны везде
- Премиум каналы только в дорогих порталах
- Локальные каналы в региональных порталах
Безопасность¶
Защита API ключей:
# ПЛОХО - ключ в коде
api_key = "secret_key_123456"
# ХОРОШО - ключ в переменной окружения
api_key = os.getenv('CATENA_API_KEY')
# ЛУЧШЕ - ключ в secret manager
api_key = secrets_manager.get('catena_api_key')
Права доступа менеджеров:
- Выдавайте минимально необходимые права
- Content admin не нужен доступ к абонентам
- Support не нужен доступ к API ключу
- Регулярно проверяйте список менеджеров
- Удаляйте доступ уволенных сотрудников
Мониторинг¶
Что отслеживать для каждого портала:
- Количество активных абонентов
- Количество одновременных сессий
- Популярные каналы
- Ошибки при входе (failed SMS, invalid tokens)
- API requests count и latency
- Storage usage для каждого портала
Инструменты:
- Grafana dashboards с разбивкой по порталам
- Prometheus метрики с label
portal_id
- Алерты при аномалиях (резкое падение абонентов)
- Регулярные отчёты для владельцев порталов
Устранение проблем¶
Абоненты не могут войти¶
Возможные причины:
- Указан неверный domain в приложении
- API ключ устарел после регенерации
- Portal временно недоступен
- SMS-шлюз не настроен для портала
Решение:
- Проверьте domain в настройках портала
- Убедитесь, что API ключ актуален
- Проверьте статус сервисов (API, SMS gateway)
- Просмотрите логи ошибок авторизации
- Протестируйте вход из другого приложения/браузера
Каналы не воспроизводятся¶
Возможные причины:
- Проблемы со streaming-сервером
- Канал не добавлен в портал
- Абонент не подписан на пакет с каналом
- Проблемы с сетью у абонента
Решение:
- Проверьте работу канала на другом портале
- Убедитесь, что канал существует в этом портале
- Проверьте подписки абонента
- Просмотрите логи streaming-сервера
- Проверьте playback_token абонента
API возвращает 401 Unauthorized¶
Возможные причины:
- Неверный API ключ
- API ключ был регенерирован
- Ключ передаётся в неверном формате
- Ключ от другого портала
Решение:
- Проверьте актуальность API ключа:
GET /portal
- Убедитесь, что ключ в заголовке:
X-Auth-Token: your-key
- Проверьте, что используется ключ нужного портала
- При необходимости регенерируйте ключ
Два портала видят абонентов друг друга¶
Проблема: Нарушена изоляция данных между порталами
Это не должно происходить по дизайну системы. Если происходит:
- Немедленно сообщите в техподдержку
- Проверьте, что используете правильный API ключ
- Проверьте, что не путаете порталы в коде
- Просмотрите логи API запросов
Причины (редко):
- Баг в системе (требует исправления)
- Неправильная интеграция (используется один ключ для разных порталов)
- Кеширование на стороне клиента
См. также¶
- Управление менеджерами — создание пользователей для управления порталами
- Управление абонентами — абоненты привязаны к конкретному порталу
- Управление пакетами — пакеты создаются в рамках портала
- Управление каналами — каналы добавляются в порталы
- Управление подписками — бесплатные пакеты портала