Build a customer-facing video support surface
This guide walks the full path from deciding which video primitive fits your support flow to reviewing the completed session in History. It is intended for operators building a customer-facing surface: an on-site “video call us” button, an agent sharing a guest link, or a voice call that needs a video leg. By the end you will know how to:- Choose between a hosted meeting and an embedded room.
- Create and configure a room from a template.
- Issue tokens and guest links with the right record permission.
- Embed the room with a minimal React component.
- Read the session back in History, including recording and transcript.
- Escalate to video from a live voice call when needed.
1. Pick the right video primitive
Orbit offers two room shapes for support video:
Choose a hosted meeting when the customer can join through a calendar invite or a support ticket link and you do not need to own the surrounding UI. The guest link opens a complete room on Orbit, including the tile grid, control bar, and device picker.
Choose an embedded room when the video call is part of your own product surface — for example, a “video call us” button on your help page or a video pane inside your dashboard. You keep the customer in your page and Orbit supplies only the media layer.
The rest of this guide uses the embedded pattern as its main example, because it touches every step: room creation, token issuance, a React mount, history read-back, and voice escalation.
2. Create the room from a template
A template keeps every support room consistent. Create a template once, then instantiate rooms from it so each session starts with the same cap, recording, waiting-room, and retention settings. Use a template that matches a support consultation:- Max participants: 2 to 8. Two seats cover the customer and agent; a few extra seats leave room for a supervisor or warm transfer.
- Max duration: 45 to 60 minutes. A hard stop prevents abandoned rooms from running indefinitely.
- Waiting room: on. The customer waits in receive-only mode until an agent admits them.
- Recording: on, with the consent behavior your jurisdiction requires.
- Virtual backgrounds / noise suppression: allowed or off per your brand preference.
room_id and a host_token for the agent who creates the room.
You can also create a room directly with
POST /api/v1/video/rooms-scheduled. Templates are the better choice when you want every support session to open with the same configuration.3. Issue tokens and a guest link
Two credentials are usually needed for a support session:- A host token for the agent, minted with
participant_tier: host. - A guest invite link for the customer, created from the room with the right permission bounds.
Agent token
token and livekit_url (or the ws_url alias). The agent’s client connects with these. The host tier lets the agent admit customers from the waiting room, mute participants, and end the room.
Guest link
For the customer, mint an invite link instead of handing over a raw token. The link redeems to a token when opened, so the customer never sees a JWT.invite_token. Build the guest URL using your dashboard locale and the token:
allow_recording consistently with your room’s recording setting and your jurisdiction’s consent rules. If the customer must opt in to recording, leave it off and surface the consent prompt before sharing the link.
A guest link with
max_uses: 1 is single-use. If a customer drops and rejoins, mint a fresh link. For a persistent support queue, create one long-lived room and issue a new invite per customer.4. Embed the room in React
The Web SDK’sOrbitVideoRoom widget mounts the SDK-generated surface — tile grid, control bar, device picker, and leave action — into any container in your React app.
Your backend must mint the token; your frontend only receives the short-lived token and the media URL.
Waiting-room UX
If the room has the waiting room armed, the customer’s first join lands in a receive-only lobby. Listen for the effective grant or render a simple “waiting for an agent” overlay until the host admits them. The agent admits from the dashboard moderation panel or by callingPOST /video/rooms-scheduled/{id}/waiting-room/admit/{identity}.
5. Read the session back in History
After the room ends, the session appears on the Voice → Video → History page. The same rows are available throughGET /api/v1/video/rooms-scheduled?status=ended.
What each row shows
- End-reason badge — how the session closed: clean finish, operator end, idle timeout, or error.
- Duration badge — session length when at least one participant joined.
- Recording badge — present when recording was enabled.
- Recording health — Recording missing or Recording degraded when the post-recording check found the artifact unusable.
- Ended timestamp — wall-clock end time in your workspace timezone.
Recording and transcript
Open a recorded row to play the recording. The playback link refreshes automatically, so a long review session does not expire. Below the recording, the transcript panel shows the conversation captured during the session. Search it to find what was said, and purge it there if your data policy requires removal.Retention
Ended sessions are retained for 90 days by default, followed by a two-week grace window before hard deletion. Override the window with thevideo_room_retention_days organization setting (minimum 7 days). See Video room history and the video room model for the full lifecycle.
6. Escalate to video from a live voice call
When a voice call needs a screen share or face-to-face step, escalate it to a video room without asking the customer to hang up. From the Browser Softphone, the agent taps Move to video, or your integration calls:host— the agent’s token and media URL.guest— the customer’s invite link and expiry.remote_party_notification— whether the SMS delivery succeeded.
callSid is stamped on the room, so the voice call and the video session stay linked in History and analytics.
See Escalate a live voice call into a video room for the full request contract and cleanup steps.
Production checklist
- The support room is created from a template with consistent recording, waiting-room, and duration settings.
- The agent joins as
host; the customer uses a guest link or a panelist token minted server-side. - The API key stays on the backend; the browser receives only the short-lived token and media URL.
- Recording permission on the guest link matches your consent flow and jurisdictional requirements.
- The waiting-room UX renders “waiting for an agent” when the customer is lobby-downgraded.
- Sessions are reviewed in History before the retention window passes.
- Voice escalations stamp the
callSidon the room and end the room explicitly after use.
Related guides
- Video meetings and conferences — scheduled rooms and webinars.
- Video room access tokens — token grants, tiers, and expiry.
- Embed a video consultation button — the drop-in widget pattern.
- Video room history — finding and reading ended sessions.
- Escalate a live voice call into a video room — voice-to-video handoff.
- Video room templates — saving and instantiating room configurations.