JavaScript SDK Guide

Browser integration guide for JavaScript clients using Blendlix Call Service.

JavaScript

This guide shows the main browser steps for a one-to-one audio call.

1. Get a session from your backend

const session = await fetch('/api/calls/session', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ receiverId: 'receiver-456' }),
}).then((response) => response.json())

2. Connect to WebSocket

const ws = new WebSocket(session.ws_url, ['jwt', session.token])

ws.onmessage = (event) => {
  const message = JSON.parse(event.data)
  console.log('call event', message)
}

3. Prepare audio

const localStream = await navigator.mediaDevices.getUserMedia({ audio: true })

4. Create peer connection

const pc = new RTCPeerConnection({
  iceServers: session.ice_servers,
})

for (const track of localStream.getTracks()) {
  pc.addTrack(track, localStream)
}

pc.onicecandidate = (event) => {
  if (event.candidate) {
    ws.send(JSON.stringify({
      event: 'webrtc.ice_candidate',
      request_id: crypto.randomUUID(),
      data: {
        call_uuid: activeCallUuid,
        candidate: event.candidate,
      },
    }))
  }
}

5. Send an invite

ws.send(JSON.stringify({
  event: 'call.invite',
  request_id: crypto.randomUUID(),
  data: {
    callee_user_id: 'receiver-456',
    callee_role: 'receiver',
    context_type: 'session',
    context_id: 'SESSION-1001',
  },
}))

6. Clean up

function cleanup() {
  localStream?.getTracks().forEach((track) => track.stop())
  pc?.close()
  ws?.close()
}