Integrating Video Consultations on Website
Video consultations on website — tool for medical, legal, financial and educational services. Doctor, lawyer or trainer communicate with client face-to-face without need meet physically. Technically — WebRTC with video stream or ready-made SDK integration.
Implementation Options
Ready-made SDK — Daily.co, Twilio Video, Vonage Video API, Agora. Faster development (2–4 weeks), require monthly payment per minutes.
Own WebRTC stack — maximum control, no dependency on external provider, harder maintain. Justified with large consultation volume.
Jitsi Meet API — open WebRTC server, can deploy yourself:
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 — Integration in Few Hours
// 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' }
});
// Create room via 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, // expires in hour
max_participants: 2
}
})
}).then(r => r.json());
// Join room
await callFrame.join({ url: room.url, token: participantToken });
Session Planning and Management
consultations (
id, doctor_id, patient_id,
scheduled_at, duration_minutes,
status: scheduled | active | completed | cancelled | no_show,
room_id, -- ID in video service
join_url_doctor, join_url_patient, -- unique links
recording_url,
notes -- doctor notes after consultation
)
30 minutes before — email/push notifications to both with "Join consultation" button. Link contains one-time token tied to user.
Recording Consultations
Daily.co, Twilio Video and Jitsi support recording:
// Daily.co: start recording
callFrame.startRecording();
callFrame.on('recording-started', () => console.log('Recording started'));
callFrame.on('recording-stopped', (event) => {
// event.recordingId — ID for download
});
Recordings stored at provider or downloaded via webhook and moved to S3. User consent for recording — mandatory (shown in UI before start).
Waiting Room (Lobby)
Client shouldn't enter room before specialist arrives. Implementation:
- Client clicks "Enter" → goes to waiting
- Specialist sees notification in cabinet
- Specialist clicks "Start consultation" → both enter room
// Knock mode (Daily.co)
callFrame.join({ url: roomUrl, userData: { name: user.name } });
// Without admin token — user waits for approval
Screen and Documents
Shared screen viewing:
await callFrame.startScreenShare();
For document exchange during consultation — separate chat or file upload form next to video.
Adaptation for Weak Internet
Daily.co and Twilio automatically lower video quality on poor connection. For own 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);
Development timeline: 2–3 weeks for Daily.co/Jitsi integration with consultation scheduler and notifications. Own WebRTC stack — 6–8 weeks.







