Інтеграція відеоконсультацій на сайт
Відеоконсультації на сайті — інструмент для медичних, юридичних, фінансових і освітніх сервісів. Лікар, юрист або тренер спілкуються з клієнтом віч-на-віч без необхідності зустрічатися фізично. Технічно — WebRTC з відеопотоком або інтеграція готового SDK.
Варіанти реалізації
Готові SDK — Daily.co, Twilio Video, Vonage Video API, Agora. Швидше в розробці (2–4 тижні), вимагають щомісячної оплати за хвилини.
Власний WebRTC стек — максимальний контроль, немає залежності від зовнішнього провайдера, складніше підтримувати. Виправдано при великому обсязі консультацій.
Jitsi Meet API — відкритий WebRTC-сервер, можна розгорнути самостійно:
const jitsi = new JitsiMeetExternalAPI('meet.yourserver.ru', {
roomName: `consultation-${consultationId}`,
parentNode: document.getElementById('video-container'),
userInfo: { displayName: user.name, email: user.email },
configOverwrite: { startWithAudioMuted: false, startWithVideoMuted: false }
});
Daily.co SDK — інтеграція за кілька годин
// npm install @daily-co/daily-js
import Daily from '@daily-co/daily-js';
const callFrame = Daily.createFrame(document.getElementById('video-container'), {
iframeStyle: { width: '100%', height: '600px' }
});
// Створити кімнату через API
const room = await fetch('https://api.daily.co/v1/rooms', {
method: 'POST',
headers: { Authorization: `Bearer ${DAILY_API_KEY}` },
body: JSON.stringify({
name: `consultation-${consultationId}`,
properties: {
exp: Math.floor(Date.now() / 1000) + 3600, // истекає через годину
max_participants: 2
}
})
}).then(r => r.json());
// Присоєднатися до кімнати
await callFrame.join({ url: room.url, token: participantToken });
Планування та управління сесіями
consultations (
id, doctor_id, patient_id,
scheduled_at, duration_minutes,
status: scheduled | active | completed | cancelled | no_show,
room_id, -- ID кімнати в відеосервісі
join_url_doctor, join_url_patient, -- унікальні посилання
recording_url,
notes -- нотатки лікаря після консультації
)
За 30 хвилин до — email/push сповіщення обом сторонам з кнопкою "Входити в консультацію". Посилання містить одноразовий токен, привязаний до користувача.
Запис консультацій
Daily.co, Twilio Video та Jitsi підтримують запис:
// Daily.co: почати запис
callFrame.startRecording();
callFrame.on('recording-started', () => console.log('Recording started'));
callFrame.on('recording-stopped', (event) => {
// event.recordingId — ID для скачування
});
Записи зберігаються у провайдера або скачуються через webhook і переносяться на S3. Згода на запис від користувача — обов'язкова (відображається у UI перед початком).
Waiting Room (зал ожідання)
Клієнт не повинен попадати в кімнату до прибуття спеціаліста. Реалізація:
- Клієнт натискає "Входити" → попадає в очікування
- Спеціаліст бачить сповіщення у своєму кабінеті
- Спеціаліст натискає "Почати консультацію" → обидва попадають в кімнату
// Режим knock (Daily.co)
callFrame.join({ url: roomUrl, userData: { name: user.name } });
// Без токена admin — користувач чекає одобрення
Екран і документи
Спільний перегляд екрану:
await callFrame.startScreenShare();
Для обміну документами під час консультації — окремий чат або загрузка файлів через форму рядом з відео.
Адаптація під слабкий інтернет
Daily.co та Twilio автоматично знижують якість відео при поганому з'єднанні. Для власного WebRTC:
const sender = pc.getSenders().find(s => s.track?.kind === 'video');
const params = sender.getParameters();
params.encodings[0].maxBitrate = 500000; // 500 kbps
await sender.setParameters(params);
Термін розробки: 2–3 тижні для інтеграції Daily.co або Jitsi з планувальником консультацій і сповіщеннями. Власний WebRTC стек — 6–8 тижнів.







