Интеграции и сервисы
Интеграции с внешними сервисами, телефония, IPTV, личный кабинет и мобильное приложение, лицензия и модули. Отдельными страницами: сообщения и SMS, персонал и права, обслуживание, Captive Portal, сводка модуля «Поддержка».
Тот же механизм, но нарисованный: узлы можно подсвечивать, связи — разбирать по шагам. Открывается в новой вкладке.
Все схемы системыИнтеграции
Единая точка управления внешними сервисами. Страница разделена на 8 вкладок. В нижней части любой страницы биллинга в футере отображается мини-индикатор статуса ИИ-ассистента (✓ AI / ✗ AI / ⏸ AI / ? AI) с количеством сообщений за сегодня.
Вкладка «Обзор»
Сводка всех настроенных интеграций со статусами. Цветной бейдж справа от каждой интеграции показывает: ✓ настроена / ✗ ошибка / ⏸ выключена / ? не настроена. Кнопка «Проверить все» запускает последовательно тест каждой настроенной интеграции; результаты появляются всплывающими сообщениями в правом верхнем углу.
Вкладка «Telegram»
Подключение Telegram-бота для двух целей: отправка уведомлений клиентам (те, кто подписался через личный кабинет) и чат оператора для системных алертов (NAS DOWN, ошибки платежей, СОРМ-выгрузка).
Параметры: токен бота, прокси SOCKS5 (api.telegram.org заблокирован для российских IP), ID чата администратора, переключатели типов алертов, тест отправки сообщения.
Вкладка «VK»
Интеграция VKontakte для двух функций: OAuth-логин в ЛК (клиент может зайти через свой VK-аккаунт) и отправка сообщений в личку группы.
Параметры: App ID для OAuth-логина, Community Token для отправки сообщений, ID группы. Тест соединения проверяет валидность токена.
Резервный AI-провайдер
Отдельной вкладки больше нет: переключение работает само. Если основной провайдер отвечает
ошибкой доступа или лимита (401, 402, 403, 429), он уходит в карантин на 15 минут, и ответ
даёт следующий по списку. Так клиент в чате ЛК, в приложении и в виджете получает ответ даже
при сбое у провайдера. Порядок резервов и выключатель — системные настройки
AI_FALLBACK_ORDER и AI_FAILOVER_ENABLED; кто сейчас в карантине —
команда manage.py ai_failover_status. Остальные настройки AI — в разделе «AI-агент».
Вкладка «IPTV» (TVIP Media + LFStream)
Подразделы вкладки для двух IPTV-провайдеров: TVIP Media (российский middleware) и LFStream «Смотрёшка». Биллинг управляет пакетами клиента через их API: при активации или деактивации соответствующей услуги в биллинге автоматически включается/выключается пакет в middleware.
Параметры обоих сервисов: URL API, login/pass или API-ключ, ID оператора, тест соединения. У LFStream — выбор режима подключения: REST API v2 (прямой API, авторизация по IP-whitelist) или CMS-панель (обход whitelist, работает с любого IP). Подробнее — Оборудование → LFStream. Маппинг услуг → пакетов задаётся отдельно в разделе 6.6 IPTV-пакеты.
Вкладка «GCS» (Google Cloud Storage)
Google Cloud Storage используется для публичных файлов: скриншоты документации, иконки услуг, отчёты для скачивания.
Параметры: Service Account JSON-ключ (загружается через файл или вставляется как текст), имя GCP-проекта, имя бакета, префикс для путей внутри бакета.
Вкладка «География» (Адреса + Карта)
Объединяет два геосервиса: геокодер DaData (поиск адреса с автокомплитом и автоматический расчёт координат) и подложку карт — фон, поверх которого рисуются клиенты, узлы, трассы и наряды. Подложка общая для всех карт панели, геокодер работает при создании и правке адреса.
Параметры DaData: API-ключ. KPI-блок показывает сколько адресов уже геокодировано из общего числа (на демо: 4045 / 4261 = 94.93%).
Подложка карт: провайдер, тёмная тема, ключ CARTO
Провайдер выбирается один раз и применяется ко всем картам панели: главная, «Клиенты на карте», карта сети, дашборд CRM, карточка сделки, мини-карта в воронке, неточные адреса и карта площадок гостевого Wi-Fi.
| Провайдер | Ключ | Когда выбирать |
|---|---|---|
| OpenStreetMap по умолчанию |
не нужен | Самая подробная подложка: на крупном масштабе видны номера домов, магазины, подъездные проезды. То, что нужно монтажнику в поле. |
| CARTO | выдаёт сервер лицензий | Спокойный фон без лишних подписей: цветные метки статусов и узлов читаются лучше всего. В тёмной теме — настоящая тёмная карта. Номеров домов на подложке нет. |
| 2ГИС | свой, dev.2gis.ru | Подробные планы российских городов, дворы и организации. |
| Яндекс.Карты | свой, кабинет разработчика Яндекса | Привычная картография. Тайлы запрашиваются в проекции
web_mercator — иначе подложка уезжает от меток примерно на 20 км. |
Стиль CARTO. Светлую подложку можно выбрать: Positron — нейтральная серая, на ней ярче всего видны цветные метки; Voyager — то же, но с цветными дорогами, по ним легче ориентироваться. В тёмной теме интерфейса подложка сама становится тёмной (Dark Matter), выбирать это отдельно не нужно. У остальных провайдеров тёмный вид получается затемняющим фильтром: метки, линии и всплывающие подсказки он не трогает.
Ключ CARTO выдаёт сервер лицензий. Отдельно получать и вписывать его не нужно: установка забирает ключ вместе с остальными настройками лицензии, и в поле «Свой ключ CARTO» видно, что оно может остаться пустым. Свой ключ нужен только если вы хотите считать расход на своём аккаунте CARTO — введённое значение заменяет выданное.
Ключ привязан к домену. CARTO принимает ключ только с адресов, разрешённых в кабинете dashboard.basemaps.carto.com. Если панель открыта на другом домене, карты просто покажут OpenStreetMap — сообщений об ошибке оператор не увидит. Условия CARTO также просят оставлять подпись «© CARTO, © OpenStreetMap» видимой на карте; включать её или нет, решает владелец установки.
Если подложка недоступна — ключ не принят, исчерпан лимит, сервис не отвечает — карта не остаётся пустой: после нескольких неудачных тайлов подряд все карты страницы сами переключаются на OpenStreetMap, а в консоли браузера остаётся предупреждение.
Личный выбор сотрудника. В Профиле есть поле «Провайдер карты»: выбранное там важнее общей настройки и действует только для этого сотрудника. Значение «По умолчанию (Интеграции)» возвращает общий выбор.
Голосовая связь (провайдеры телефонии)
URL: /admin/settings/telephony/ · Модуль: voice «Голосовая связь» (тариф Pro и выше) — приём звонков операторами: голосовая почта, click-to-call, записи разговоров → тикеты Поддержки и сделки CRM.
telephony («IP-телефония») — это оказание услуги связи клиентам (номера, SIP-учётки, тарифы, CDR). Модуль voice («Голосовая связь») — внутренний инструмент операторов: через какого оператора мы сами принимаем и совершаем звонки.
Оператор телефонии — плагины
Оператор подключается как плагин: базовый интерфейс TelephonyProvider в billing/services/telephony_providers.py. Новый оператор = новый класс в реестре, страница настроек не меняется. Активный провайдер хранится в настройке TELEPHONY_PROVIDER.
| Провайдер | Ключи | Проверка связи | Click-to-call |
|---|---|---|---|
Mango Office (mango) |
MANGO_API_KEY, MANGO_API_SALT, MANGO_API_URL |
vPBX API, подпись sha256(key+json+salt) |
callback: оператор → клиент |
Novofon (novofon) |
ASTERISK_ARI_URL, ASTERISK_ARI_USER, ASTERISK_ARI_PASSWORD, ASTERISK_TRUNK_ENDPOINT, ASTERISK_CALLERID |
Asterisk ARI GET /asterisk/info |
ARI originate через PJSIP-транк |
Карточка провайдера показывает бейджи «настроен / click-to-call / записи». Кнопка «Проверить связь» делает реальный запрос к API оператора и возвращает результат прямо на странице.
Голосовая почта — маршрутизация линий
Оператор присылает запись звонка письмом на служебный ящик. По номеру, на который позвонил клиент (VoiceMailLine.phone), выбирается:
- Ящик Поддержки или ящик Подключения — куда попадёт обращение (тикет или лид);
- Сегмент — физлица (B2C) / юрлица (B2B) / бренд / поддержка;
- Тип сделки в CRM и организация (мультиорг);
- UTM-метки и привязка к рекламной кампании.
Расшифровка звонка нормализуется AI и классифицируется: обращение в поддержку, заявка на подключение или мусор. Клиент определяется по номеру — если номер принадлежит клиенту, всегда создаётся тикет (не лид).
Нераспознанные голосовые → «Неразобранное»
Тумблер включает настройку CRM_UNSORTED_MANGO: если человек оставил
сообщение, но разобрать его не удалось, вместо потери обращения заводится сделка в
воронке «Неразобранное» — оператор послушает запись сам. Дедупликация
по телефону: повторное сообщение с того же номера дописывается примечанием в открытую
сделку, а не плодит дубли. Запись прикрепляется к сделке
(DealCall.recording_gcs_url).
Чем расшифровывать записи
Распознавание речи — один сервис на весь биллинг: им пользуются звонки телефонии, кнопка «Расшифровать запись» в карточке звонка и разбор голосовой почты. Провайдера два, переключаются здесь же:
- OpenAI Whisper — ставка за минуту записи;
- Google Gemini — считает аудио токенами, обычно дешевле.
Если выбранный провайдер не ответил, расшифровка автоматически уходит второму. Отдельный тумблер — «Расшифровывать самим, если оператор прислал только запись»: письмо с записью, но без текста, раньше уходило в «Пропуск», теперь запись распознаётся на нашей стороне. Короткие сбросы в модель не отправляются (порог VOICE_STT_MIN_KB, по умолчанию 25 КБ — около восьми секунд).
Расход считается по организации линии и виден в дашборде расходов AI: у каждой организации свои номера, поэтому распознавание оплачивает то юрлицо, которому звонили.
AI_FAILOVER_COOLDOWN_MIN минут (по умолчанию 15), а запросы идут по цепочке AI_FALLBACK_ORDER. Это касается и бота поддержки, и виджета, и расшифровки. Проверить и снять карантин: manage.py ai_failover_status, manage.py ai_failover_status --clear gemini.
/admin/reports/voicemail/ — разбор писем, фильтры, запись и что создано. Здесь, в «Голосовой связи», остались маршруты линий, настройки разбора и тест без создания тикета (dry-run).
IPTV-пакеты
Маппинг услуг биллинга на IPTV-пакеты провайдера. Например: услуга «IPTV Базовый» в биллинге → пакет ID 12 в TVIP, услуга «IPTV Премиум» → пакет ID 18. При активации/деактивации услуги клиента биллинг автоматически включает/выключает соответствующий пакет в middleware.
Встроенный просмотр ТВ в ЛК и приложении
Клиент с активной IPTV-подпиской может смотреть каналы прямо в личном кабинете
и в мобильном приложении — без установки стороннего приложения провайдера.
В ЛК это HTML5-плеер (нативный HLS в Safari/iOS или через hls.js в остальных браузерах),
в приложении — нативный video_player (ExoPlayer на Android, AVPlayer на iOS).
Плейлист каналов формируется по шаблону URL провайдера с подстановкой
{login} / {account} клиента из таблицы маппинга
(IptvAccountMapping). Просмотр доступен только при выполнении всех условий:
- Просмотр включён — настройка
IPTV_WATCH_ENABLED; - Активна IPTV-подписка клиента (
UsersUsluga,system_type=21); - Клиент в сети СмИТ — у него есть интернет-тариф;
- опционально только онлайн — при активной RADIUS-сессии (
IPTV_WATCH_REQUIRE_ONLINE); - задан шаблон плейлиста провайдера.
Два режима просмотра (поле mode в watch_context):
| Режим | Когда | Что видит клиент |
|---|---|---|
embedded | задан рабочий шаблон плейлиста m3u8 | встроенный HLS-плеер в ЛК/приложении |
app | плейлиста нет, но подписка активна | карточка «Смотреть на устройстве»: логин клиента у провайдера (для входа в приложение на приставке/Smart TV/телефоне) + ссылка на приложение |
off | просмотр недоступен | пояснение причины |
Просмотр в ЛК — через «Смотрёшку» (реш. admin). У неё есть реальный веб-плеер smotreshka.tv и приложения; TVIP — приставочный, без веб-плеера, а его m3u8 защищён провайдером и в браузере не встраивается. Поэтому в режиме app ЛК показывает карточку «Как смотреть ТВ» с 3 шагами: открыть smotreshka.tv или приложение «Смотрёшка» → войти (с логином и паролем, которые выдал оператор) → смотреть. Поля контекста: sm_login, sm_password, sm_url. Встроенный плеер (embedded) заработает только если провайдер даст внешний playlist-URL для веб-плеера.
Если условие не выполнено, клиенту показывается понятная причина («Просмотр доступен только в сети СмИТ», «Плеер каналов настраивается» и т.п.).
| Настройка | Назначение |
|---|---|
IPTV_WATCH_ENABLED | Включить встроенный просмотр (по умолчанию выкл) |
IPTV_WATCH_REQUIRE_ONLINE | Смотреть только при активной RADIUS-сессии |
IPTV_PLAYLIST_TEMPLATE_TVIP | Шаблон URL плейлиста TVIP, плейсхолдеры {login} {account} |
IPTV_PLAYLIST_TEMPLATE_LFSTREAM | Шаблон плейлиста «Смотрёшка» |
IPTV_TVIP_APP_URL / IPTV_LFSTREAM_APP_URL | Ссылки на приложения провайдеров |
Реализация: сервис billing/services/iptv_playlist.py
(can_watch / playlist_url / watch_context),
ЛК /lk/iptv/, мобильный экран «Интерактивное ТВ»
(GET /mobile-api/v1/iptv/packages возвращает блок watch).
Модуль IPTV — раздел /admin/iptv/
Отдельный раздел сайдбара IPTV объединяет управление интеграцией с TV-провайдерами (TVIP Media и LFStream «Смотрёшка»): дашборд, пакеты, аккаунты клиентов, журнал API и настройки.
Шесть шагов на живых экранах: почему каналы у платформы, а деньги в биллинге; сопоставление услуги и пакета, подключение ТВ клиенту, аккаунты, разбор жалобы «не показывает», журнал запросов и режимы.
Дашборд
Бизнес-метрики: выручка IPTV (MRR — сумма активных подписок UsersUsluga с system_type=21),
число активных подписок и витринных пакетов, динамика подключений/отключений за 30 дней,
здоровье интеграции (% успешных запросов к провайдерам за сутки), топ-пакеты, распределение по провайдерам.
Пакеты и витрина провайдеров
Витрина-справочник популярных РФ-провайдеров: TVIP Media и LFStream — с рабочей интеграцией, остальные (24часаТВ, LIME HD, Ministra, Микроимпульс, Смартила) — справочно. Ниже — таблица маппинга «услуга биллинга ↔ пакет провайдера» с автоподбором по имени и подсветкой несопоставленных строк.
Аккаунты клиентов
Список связок «клиент ↔ аккаунт у провайдера» (IptvAccountMapping). Чипы-фильтры по статусу
(Все / Подтверждённые / Не подтверждённые / С ошибкой), колонки Пакет и Услуга
(берутся из БД через активные IPTV-услуги клиента, без онлайн-опроса провайдера).
Клик по кнопке «Подробнее» открывает модалку деталей аккаунта в три колонки — статус, синхронизация, аккаунт/логин, договор, тариф, баланс, блокировки + IPTV-услуги клиента и журнал запросов к провайдеру. Клик по имени клиента открывает слайд-панель (см. ниже).
Подтверждение аккаунта (account_verified): ресинк находит аккаунт у провайдера
по логину; только для подтверждённых аккаунтов реально выполняются block/unblock (гейт защищает от массовых
ложных ошибок). В TVIP-панели ~127 аккаунтов, из них принадлежат СмИТ — 16.
Журнал API и настройки
Журнал всех запросов к провайдерам (IptvApiLog) с человекочитаемым действием и телом ошибки.
Настройки — credentials TVIP/LFStream, тест подключения, биллинг-toggle.
Биллинг IPTV и kill-switch
IPTV-подписка — обычная услуга клиента (UsersUsluga, system_type=21), списывается
billing_worker штатно (1-го числа). В настройках есть переключатель
«Не списывать деньги за IPTV» (IPTV_BILLING_DISABLED) — режим тестирования:
плата за IPTV не списывается, дата следующего списания сдвигается вперёд (задним числом долг не образуется),
провижининг у провайдера продолжает работать. Блокировка IPTV при долге — опциональна
(IPTV_BLOCK_ON_NEGBAL, по умолчанию выкл).
Опция «Создавать аккаунт IPTV новому абоненту»
(IPTV_AUTO_CREATE_ACCOUNT) — при подключении ТВ-услуги абоненту без аккаунта
у провайдера заводит его автоматически (логин smtv+договор). При выключенной
опции подписка пропускается, пока аккаунт не создан. Email авто-аккаунта —
smtv‹договор›@‹домен›, домен из поля «Домен email для авто-аккаунтов»
(IPTV_ACCOUNT_EMAIL_DOMAIN, по умолчанию smit34.ru; несуществующие
домены панель провайдера отклоняет).
Привязка пакета в карточке услуги
В модалке услуги типа «IP телевидение» есть вкладка IPTV — выбор провайдера и пакета. Связь «услуга ↔ пакет» можно задавать прямо из карточки услуги (не только на странице Пакеты).
На карточке клиента
На вкладке «Услуги» клиента в колонке «Примечание» для IPTV-услуги показывается
«📺 провайдер: пакет», для трафика — «⚡ N Мбит/с» (макс. скорость CEIL_IN). У IPTV-услуги —
бейдж «провайдер», открывающий модалку диагностики (сводка/пакеты/аккаунты/журнал).
Слайд-панель клиента: блок «Услуги» и IPTV-сайдбар
В слайд-панели клиента (открывается кликом по имени) после блока «Последняя сессия» добавлен аккордеон «Услуги» — список услуг с иконкой по типу, примечанием (провайдер/скорость) и ценой. При открытии со страницы аккаунтов аккордеон автоматически разворачивается.
У IPTV-услуги — кнопка «Провайдер», открывающая поверх вложенный IPTV-сайдбар (сводка, активные пакеты, аккаунты у провайдеров с отметкой «подтверждён», журнал запросов).
ЛК и мобильные
Настройки личного кабинета и мобильных приложений. Страница в админке разделена на 5 вкладок.
Вкладка «Обзор»
Сводка статуса ЛК: количество активных клиентов в личном кабинете за месяц, количество установок мобильного приложения, ссылки на сторы (Google Play / App Store), ссылка на сам ЛК и на админ-страницы HelpDesk.
Вкладка «Брендинг»
Фирменное оформление ЛК: логотип, цвет акцента, доменное имя
(lk.example.ru), favicon, OG-теги для соцсетей. Эти данные применяются
к ЛК отдельно от админки — у админки и у ЛК могут быть разные цвета и логотипы.
Вкладка «Функции»
Toggle-переключатели видимости разделов в ЛК. Каждый переключатель — это глобальное правило, видит ли его клиент. Например, выключив «Тариф», оператор скрывает у всех клиентов возможность сменить тариф самостоятельно.
Контролируемые функции: видимость тарифов и их смена, разрешение менять MAC-адрес, HelpDesk, история операций, обещанный платёж, реферальная программа, чат-AI и др.
Вкладка «Безопасность»
Параметры доступа в ЛК: разрешать ли вход только из сети оператора (когда клиент дома), автологин по IP без логина и пароля, запрет смены пароля клиентом (полезно при общем семейном договоре).
Вкладка «Мобильное»
Настройки мобильных приложений Android и iOS: текущая версия в сторе, минимальная версия для force-update (если клиент использует более старую — увидит диалог обновления), ссылки на стора, параметры push-уведомлений (Firebase).
Подробная документация — на отдельной странице
Описание возможностей ЛК, авторизация (Telegram/VK), настройки интеграций, AI-ассистент, push (Firebase), мобильные приложения Android и iOS — в разделе ЛК и мобильные.
Лицензия
Информация о действующей лицензии: количество разрешённых клиентов, дата окончания, тип (коммерческая / тестовая / OEM).
Подробная документация — на отдельной странице
Порядок поставки и продления, варианты оплаты, типичные проблемы — в разделе Лицензирование.
Модули и расширения
URL: /admin/settings/modules/ — каталог модулей биллинга: что включено, что доступно в вашем тарифе и что можно докупить. Сверху — две вкладки: «Модули СмИТ» (первопартийные модули) и «Маркетплейс» (расширения сторонних разработчиков). Рядом — поиск, переключатель автообновления и переходы в смежные разделы (Компоненты, Виджеты, Лицензия).
Карточка модуля
Каждый модуль показан карточкой с обложкой, номером версии (в правом верхнем углу), кратким описанием и чипами тарифов, в которые он входит. Управление:
- Тумблер — включить/выключить модуль. Выключенный модуль скрывается из меню и его разделы недоступны по прямой ссылке.
- «Настроить» — переход на страницу настроек модуля.
- Клик по названию или обложке открывает окно модуля с полным описанием (отдельной кнопки «Подробнее» нет).
Недоступные модули
Модули, не входящие в ваш тариф, отображаются полупрозрачными с приглушённой обложкой, замком и подписью «Доступно в тарифе: …». Их карточки видны — чтобы понимать, что даёт переход на старший тариф. Ссылка «Перейти на тариф →» ведёт в раздел Лицензия.
Окно модуля
Клик по названию или обложке открывает карточку модуля как в маркетплейсе. Сводка — в две колонки: слева обложка или обучающий ролик, под ним «Разработчик» и кнопка «Документация»; справа — категория, чипы тарифов и компактное описание. Ниже — вкладки:
- Возможности — что умеет модуль; здесь же блок «Зависит от модулей» — модули, без которых он не работает.
- Как это работает — порядок действий по шагам.
- Скриншоты — реальные экраны раздела (клик открывает полноразмерное изображение).
- История версий — changelog по каждому релизу модуля.
Пустые вкладки скрываются автоматически. Каталог модулей приходит с сервера лицензий и кэшируется на 6 часов — при недоступности сервера карточки продолжают работать, но без обложек и описаний.
Виджеты-плагины
Каталог виджетов (/admin/settings/widgets/) устроен так же: вкладки «Виджеты СмИТ / Маркетплейс», карточки с обложками, поиск. Виджеты встраиваются в дашборды, карточку клиента, карточку сделки и сайдбар тикета; виджет привязан к модулю и доступен, только если этот модуль включён. Окно виджета открывается кликом по названию или обложке и повторяет структуру окна модуля: сводка в две колонки, вкладки Возможности / Как это работает / Скриншоты / История версий и блок «Зависит от модуля».
Компоненты интерфейса
Кнопка «Компоненты» ведёт в каталог /admin/settings/components/ — живой перечень UI-компонентов SmitUI (таблицы, бейджи, фильтры, панели, селекты) с поиском и категориями; у каждого — краткое описание и живой пример. Под заголовком — переходы в Модули, Виджеты и Лицензию.