Before you start: turn on error reporting
Register the global error handler before callingProview.init(). Most integration failures surface here rather than as thrown exceptions.
Proview.onError supports a single handler. Registering a second handler replaces the first. If your app already registers one, fan out from inside that handler instead of calling onError again.
For the full code list and per-code handling, see the Error Reference.
The SDK never loads
Symptom:window.Proview is undefined, or your proviewOnLoad callback never fires.
Work through these in order:
-
Check the script actually loaded. Open DevTools → Network and look for
https://sdk.tlv.cx. A4xx/5xxor a blocked request means the bundle never arrived. - Check your Content Security Policy. A CSP violation is reported in the Console, not the Network tab. The SDK needs the directives listed in Getting Started.
-
Check you are on HTTPS. The SDK requires a secure context. It will not run on
http://origins other thanlocalhost. -
Check the callback is defined before the loader runs.
window.proviewOnLoadmust be assigned in a script that executes before the loader<script>tag. If you define it afterwards, the SDK may have already fired and your callback is never invoked. This is the single most common cause of a callback that never runs. -
Add an
onerrorhandler to the script tag so a failed load is visible instead of silent:
Proview.init() fails
Symptom: Proview.init() resolves to false, or your error handler reports a critical error with validationErrors.
A module is undefined
Symptom: TypeError: Cannot read properties of undefined (reading 'start') — or the same for mount, init, fetchMeetings.
A module namespace only exists after its factory has been declared and Proview.init() has resolved. Two common mistakes:
await Proview.init() and declare every module you intend to use.
Single-page applications
Symptom: The SDK re-initializes, duplicates listeners, or throws on client-side route changes. Load the loader script once per page load, not once per route. Guard the injection:Proview.init() once as well — inside window.proviewOnLoad. On subsequent route changes, reuse the already-initialized modules rather than re-running init.
Authentication failures
Symptom: Init succeeds but module calls fail with a forbidden / unauthorized error.- Auth strategy is set globally via
credentialonProview.init(). Omitting it appliesDefaultAuthStrategy. - Tokens are short-lived. One fetched at page load may already be expired by the time a long-lived session calls a module method — fetch it as late as you can, and refresh on expiry.
Nothing renders
Symptom: Init and start both succeed, but no UI appears.-
Check the mount target exists.
containerIdmust name an element that is already in the DOM when you mount — for exampleProview.scheduler.mount({ mountMode: { mode: 'inline', containerId: 'proview-scheduler-root' } }). In a component framework, mount from the effect that runs after render, not during it. -
Check the target is visible and has size. A container with
display: none, zero height, or a collapsed flex parent renders nothing: -
Check for a stacking / overflow conflict. Modal and side-panel layouts are positioned relative to the viewport; an ancestor with
overflow: hiddenor a highz-indexcan clip them. -
For proctoring, confirm the session actually started. Do not gate your UI on the loader script — wait for
Proview.session.start()to resolve.
Camera and microphone permissions
Symptom: The permission prompt never appears, or is denied immediately.-
The browser only prompts on a secure context (HTTPS or
localhost). - If the host page or an outer iframe already declined the permission, the browser will not re-prompt. The user must reset it from the site settings.
-
When embedding the host page in an iframe, forward the permissions:
-
Some enterprise browser policies block camera access outright. Check
chrome://policy/ equivalent before assuming an SDK fault.
Getting help
If the steps above do not resolve the issue, contact support@talview.com with:- The SDK version and loader URL you are using
- Your project DSN (not the credential or token)
- The
code,type, andmessagefrom youronErrorhandler — see the Error Reference - A HAR file or Console log covering the failure

