Интеграция видеоконсультаций на сайт
Видеоконсультации на сайте — инструмент для медицинских, юридических, финансовых и образовательных сервисов. Врач, юрист или тренер общаются с клиентом лицом к лицу без необходимости встречаться физически. Технически — это 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 недель.







