Обсудить задачу
кейс · инфраструктура · видеосвязь работает

Свой видеосервис вместо Zoom: конференции создаются сами, через API

коротко

Мне нужен был надёжный видеосервис для конференций — защищённый, без подписок и без чужих лимитов на время и число участников, с запасом по масштабированию. Готовые облачные сервисы либо упирались в платные тарифы, либо не давали управлять конференциями программно. В итоге я поднял собственный видеосервер на self-host Jitsi Meet: конференции создаются автоматически через API, доступ — по одноразовым токенам, записи и ссылки на встречи можно завести прямо в CRM и в рассылку по почте и телеграму.

API создать конференцию ССЫЛКА meet.host/room?jwt=… РАССЫЛКА ССЫЛКИ CRM · карточка встречи email + telegram · автоматически
рис. 01 / API создаёт конференцию и разводит ссылку по каналамself-host
ОТРАСЛЬинфраструктура · видеосвязь
ФОРМАТself-host видеосервис + API
ЗАПУСКза 1 день
СТАТУСработает · без чужого SaaS

Задача

Мне нужен был свой сервис видеоконференций: надёжный, защищённый, без подписок и без чужих лимитов на время и число участников, с запасом по масштабированию. И не просто «видео работает» — конференции должны создаваться автоматически через API, а не руками в чужом личном кабинете: чтобы ссылку на встречу можно было завести прямо в CRM, отправить в рассылку по почте и в телеграм, и чтобы записи потом хранились и управлялись так же программно, а не выгружались вручную из чужого облака.

Готовые облачные сервисы решают половину задачи — саму видеосвязь. Вторую половину — управление через API, автоматизацию и интеграцию с остальной инфраструктурой — из них выжать намного сложнее, либо это стоит отдельных денег сверх обычного тарифа.

Что перебрал, прежде чем осесть на своём

Перед тем как разворачивать что-то своё, я сначала посмотрел на готовые сервисы — благо их достаточно.

  • Zoom — самый узнаваемый вариант, но в бесплатном тарифе встреча ограничена по времени, а часть функций (запись, полная история, расширенное управление) закрыта платной подпиской. Данные при этом обрабатываются на серверах провайдера — своей инфраструктуры не остаётся;
  • Яндекс Телемост — бесплатен и без лимита по времени для базовых функций, но полностью привязан к экосистеме одного провайдера: настроить серверную архитектуру под свои нужды или управлять конференциями через открытый API — нельзя, только в рамках того, что предлагает сам сервис;
  • у обоих вариантов — общее ограничение: это чужая инфраструктура. Автоматизация, интеграция с CRM, гибкое управление записями — либо недоступны вовсе, либо превращаются в надстройку поверх чужого закрытого API.

Главное преимущество Jitsi Meet

Jitsi Meet — открытая (open source) платформа видеоконференций. Ключевое отличие от Zoom и Яндекс.Телемоста — полная независимость: собственный сервер разворачивается на своей инфраструктуре, без обязательной регистрации и без привязки к экосистеме одного провайдера. Это даёт максимальную конфиденциальность и технологическую свободу — сервер настраивается под задачу, а не подстраивается под правила чужого сервиса.

  • Полная бесплатность. В отличие от Zoom, у Jitsi нет жёстких лимитов на время конференции в базовой версии и ограничений по числу участников для «бесплатных» пользователей — в разумных пределах мощности собственного сервера;
  • Отсутствие платных подписок. Демонстрация экрана, чат, запись встречи — весь функционал доступен сразу, без оформления премиум-аккаунта и без разблокировки функций за отдельную плату.

Сравнение с Яндекс.Телемост и Zoom

  • Против Яндекс.Телемоста: Jitsi не привязывает к экосистеме одного провайдера — это технологическая независимость и свобода настраивать серверную архитектуру под конкретные задачи бизнеса, а не под то, что предусмотрел один вендор;
  • Против Zoom: в Jitsi нет платных тарифов с блокировкой функций. И если Zoom (в платных версиях) обрабатывает данные на корпоративных серверах провайдера, то Jitsi позволяет хранить и обрабатывать данные локально, на собственном сервере.

Решение: свой видеосервер на Jitsi

Jitsi Meet строится из трёх частей: сервер сигнализации (Prosody/XMPP), оркестратор конференций (Jicofo) и видеомост (JVB), который сводит потоки участников. Всё разворачивается на собственном сервере — получается личный видеосервис без чужого облака и без ограничений вендора.

Сервер я поднял на уже имеющемся VPS — отдельного железа под видеосервис не потребовалось. Ключевой нюанс коробочной установки: по умолчанию Jitsi открыт всем — любой, кто знает или подберёт имя комнаты, может в неё зайти. Для защищённого сервиса это неприемлемо, поэтому доступ я полностью перевёл на токены.

Управление конференциями через API

Главная ценность решения — не в самой видеосвязи (она у любого сервиса приватна, пока ссылку никому не передают), а в том, что конференциями можно управлять программно:

  • конференция создаётся автоматически через API — без захода в чей-то личный кабинет и без ручного клика «создать встречу»;
  • ссылка на встречу заводится прямо в CRM как часть карточки сделки или клиента — и оттуда же уходит в рассылку по email и в телеграм, без ручного копирования;
  • записи встреч доступны и управляются через тот же API — их можно прикрепить к той же карточке в CRM, выгрузить или удалить программно, а не искать в чужом облачном хранилище.

Доступ по токенам

Схема справа показывает путь ссылки от создания конференции до входа в комнату. Механика в двух словах:

  • сервер сигнализации я перевёл в режим токен-авторизации — без подписанного токена нельзя ни зайти в комнату, ни создать новую;
  • при создании конференции через API сам сервис генерирует одноразовый JWT-токен: в нём зашиты имя комнаты, срок жизни ссылки и роль участника (обычный гость или модератор — тот, кто вправе управлять встречей);
  • комната — одноразовая: у каждой встречи своё уникальное имя, комнаты никогда не переиспользуются, поэтому «просроченная» ссылка ведёт в пустоту, даже если кто-то её сохранил.

Отдельно я заметил нюанс, который легко упустить: сама токен-проверка стоит на уровне подключения к видеосвязи, а вот посадочная веб-страница сервиса по умолчанию открыта всем — зайти на неё и увидеть форму «ввести имя комнаты» может кто угодно, токен для этого не нужен. Поэтому доступ я закрыл ещё и на уровне веб-сервера: без токена в ссылке страница комнаты вообще не отдаётся. Двойная проверка — и на входе на сайт, и на входе в саму видеосвязь.

Встречи записываются автоматически

Сервис умеет не только пускать по токену, но и сам записывать встречу — на стороне сервера, средствами компонента-рекордера, входящего в стек Jitsi. Запись стартует и останавливается вместе со встречей и уходит в хранилище на том же сервере — без сторонних сервисов записи и без ограничений на длительность или количество сохранённых видео, характерных для облачных тарифов.

Результат

0 ₽
за конференции — только сервер, который уже был
1 день
от идеи до работающего API и токен-доступа
0
ограничений вендора на время и число участников

В итоге я получил видеосервис уровня «свой Zoom», полностью под контролем: конференции создаются и управляются через API, инфраструктура своя, а ограничения — только те, что задал сам себе, а не тарифным планом стороннего вендора.

Стек

Jitsi Meet · self-host Prosody / XMPP Jicofo + JVB JWT-токены nginx API · CRM · email/telegram

Вся связка — на одном VPS, без дополнительного облака и без затрат на видеоинфраструктуру сверх аренды сервера.

Вопросы и ответы

Чем свой Jitsi лучше готового Zoom или Телемоста?

Не «лучше» вообще, а лучше для конкретной задачи: когда конференциями нужно управлять программно — создавать через API, интегрировать с CRM, автоматически рассылать ссылки и работать с записями. У облачных сервисов такого уровня контроля через открытый API обычно нет.

Разве приватность не одинаковая у всех сервисов?

Да, если ссылку никому не передавать — встреча приватна и в Zoom, и в Телемосте, и в Jitsi. Разница не в приватности, а в управлении: у своего сервера можно программно создавать комнаты, выдавать одноразовые токены и работать с записями — то, что в чужом облаке недоступно или сильно ограничено.

Что мешает просто переслать ссылку третьему лицу?

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

Насколько это дороже облачного видеосервиса?

Дешевле: конференции идут на сервере, который и так арендуется под другие задачи, без отдельной подписки на видеосервис. Дополнительная плата — только если нагрузка вырастет настолько, что понадобится отдельная машина под видеомост.

А если участников станет много одновременно?

Видеомост (JVB) масштабируется горизонтально — при росте нагрузки добавляются дополнительные инстансы моста.

Пошагово

  1. Событие в CRM или на сайте инициирует запрос к API — нужна конференция.
  2. API создаёт одноразовую комнату и подписывает JWT-токен на неё.
  3. Ссылка с токеном автоматически уходит по email и в телеграм — вход только по ней.
  4. Сервер проверяет токен на входе на страницу и на входе в саму видеосвязь.
  5. Встреча идёт и автоматически записывается; по окончании комната больше не используется, запись доступна через API.
автор – Семенов Евгений, Forward Deployed Software Engineer
ещё кейсы

Похожие проекты

все кейсы →

Похожая задача?

Расскажите, какой контент вы хотите публиковать регулярно – за пару дней скажу честно, соберётся ли такой конвейер у вас и что для этого нужно.

Обсудить задачу
статьи по теме

Разобрано в блоге

все статьи →