Інтеграція Jitsi Meet для відеоконференцій на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція Jitsi Meet для відеоконференцій на сайті
Проста
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція Jitsi Meet для відеоконференцій на веб-сайті

Jitsi Meet — єдине повнофункціональне рішення для відеоконференцій з відкритим вихідним кодом, яке можна розгорнути на власному сервері без ліцензійних відрахувань. Це відрізняє його від Zoom SDK, Daily.co та Twilio: немає тарифікації за хвилину, дані не залишають вашу інфраструктуру. Для корпоративних систем, медичних платформ, освітніх LMS — принципіальний момент.

Два варіанти використання

Jitsi як iframe — найшвидший шлях. Вставляється через Jitsi External API та <iframe>. Публічний сервер meet.jit.si не потребує установки — використовується для прототипів та некритичних задач.

Self-hosted Jitsi — повний контроль. Сервер розгортається на Ubuntu 22.04, дані залишаються у вашій інфраструктурі, доступна кастомізація інтерфейсу.

Self-hosted: мінімальні вимоги

  • 1 vCPU, 2 GB RAM — до 10 учасників
  • 4 vCPU, 8 GB RAM — до 50 учасників (через Jitsi Videobridge)
  • Відкриті порти: 443/TCP, 10000/UDP (медіа)
  • Домен з SSL-сертифікатом (Let's Encrypt підходить)

Установка через офіційний репозиторій:

curl https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/jitsi-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | sudo tee /etc/apt/sources.list.d/jitsi-stable.list

sudo apt-get update
sudo apt-get install jitsi-meet

Установник запитує домен та налаштовує Nginx + Let's Encrypt автоматично.

Вставлення через Jitsi External API

<script src="https://your-jitsi.domain.com/external_api.js"></script>
const domain = 'your-jitsi.domain.com';
const options = {
    roomName: 'meeting-' + roomId,
    width: '100%',
    height: 600,
    parentNode: document.getElementById('jitsi-container'),
    userInfo: {
        displayName: currentUser.name,
        email: currentUser.email,
    },
    configOverwrite: {
        startWithAudioMuted: true,
        startWithVideoMuted: false,
        disableDeepLinking: true,
        prejoinPageEnabled: false,   // приховати екран попереднього перегляду
    },
    interfaceConfigOverwrite: {
        TOOLBAR_BUTTONS: ['microphone', 'camera', 'desktop', 'chat', 'hangup'],
        SHOW_JITSI_WATERMARK: false,
        SHOW_BRAND_WATERMARK: false,
    },
};

const api = new JitsiMeetExternalAPI(domain, options);

// Події
api.addEventListener('videoConferenceJoined', ({ roomName }) => {
    console.log('Joined:', roomName);
    markMeetingStarted(roomName);
});

api.addEventListener('videoConferenceLeft', () => {
    api.dispose();
    redirectToPostMeeting();
});

api.addEventListener('participantJoined', ({ id, displayName }) => {
    logParticipant(id, displayName, 'joined');
});

JWT-аутентифікація комнат

За замовчуванням Jitsi відкритий — будь-хто, хто знає назву комнати, може войти. Для закритих конференцій увімкніть JWT-аутентифікацію:

# /etc/prosody/conf.avail/your-jitsi.domain.com.cfg.lua
VirtualHost "your-jitsi.domain.com"
    authentication = "token"
    app_id = "myapp"
    app_secret = "your-secret-key"
    allow_empty_token = false

JWT генерується на вашому бекенді:

use Firebase\JWT\JWT;

class JitsiTokenService
{
    private const APP_ID = 'myapp';
    private const SECRET = 'your-secret-key';

    public function generate(User $user, string $roomName, bool $isModerator = false): string
    {
        $payload = [
            'iss'  => self::APP_ID,
            'sub'  => 'your-jitsi.domain.com',
            'aud'  => self::APP_ID,
            'room' => $roomName,
            'exp'  => time() + 3600,
            'context' => [
                'user' => [
                    'id'           => (string) $user->id,
                    'name'         => $user->name,
                    'email'        => $user->email,
                    'moderator'    => $isModerator,
                ],
            ],
        ];

        return JWT::encode($payload, self::SECRET, 'HS256');
    }
}

Токен передається в опціях External API:

const options = {
    roomName: roomName,
    jwt: '{{ $jitsiToken }}',
    // ...
};

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

Jitsi не має REST API для управління комнатами з коробки, але Prosody (XMPP-сервер всередині Jitsi) надає HTTP API для статистики:

GET https://your-jitsi.domain.com/colibri/stats

Для відстеження активних конференцій та учасників у вашій системі використовуйте події External API на стороні клієнта та webhook-сповіщення.

Терміни

  • Self-hosted установка на сервер + SSL: 0.5 дня
  • Вставлення iframe + базові події: 1 день
  • JWT-аутентифікація комнат: 1 день
  • Інтеграція з бізнес-логікою вебсайту (створення комнат, запис учасників): 2–3 дні