1. Add a Hair Check
The goal is to wait until the PAL has actually joined before dropping the user into the live room, so the experience feels instant instead of “loading / awkward silence.” Tavus provides a ready-made Hair Check block you can plug into your application. The Hair Check component shows a pre-call interface where users can test and configure their audio/video devices while the PAL joins the room in the background. Waiting for the PAL to join: Before transitioning from the Hair Check screen to the live conversation, wait for theparticipant-joined event from Daily. In a Tavus CVI one-to-one conversation, any participant that joins that is not the ‘local’ participant is the face.
participant.user_name property to identify the face, or listen for the system.pal_joined webhook callback if you’ve set a callback_url when creating the conversation. Tavus also sends a legacy duplicate system.replica_joined with the same payload. For the webhook approach, see Webhooks and Callbacks for details on system.pal_joined.
Additionally, system.pal_joined (and legacy system.replica_joined) are broadcast as Tavus app-events over Daily’s data channel. You can listen for Daily app-message events and check event_type === "system.pal_joined" if you prefer in-call event handling rather than webhooks.
Benefits:
- Users see an active interface instead of a loading screen
- Device permissions are handled before joining
- The PAL has time to fully join before the user enters
- Creates a seamless, instant-feeling transition
2. Add a Network Check for Proactive Troubleshooting
Daily provides network connectivity test components you can run before joining to detect common issues (bandwidth, network connectivity, etc.).testCallQuality() (Recommended)
The most comprehensive pre-call test. It automatically connects to a Daily room, streams video, and collects outbound WebRTC stats for up to 30 seconds.
Returns:
"good": Network conditions are optimal"bad": Network conditions are poor"warning": Network conditions may cause issues"aborted": Test was interrupted"failed": Test failed to complete
"bad" or "warning", display a message letting them know their connection is poor and may affect their experience. This helps set expectations and allows users to improve their network before joining.
Benefits:
- Detects bandwidth issues before the user joins
- Identifies network connectivity problems
- Provides actionable feedback about network conditions
- Allows you to set user expectations about connection quality
- Reduces failed connection attempts and user frustration
Summary
Combining these two strategies significantly improves the startup experience:- Hair Check - Masks loading time with an active interface
- Network Testing - Proactively identifies and handles connectivity issues

