RocketChat/Rocket.Chat · error · Error

no-active-video-conf-provider

Error message

no-active-video-conf-provider

What it means

Thrown by getValidatedProvider() when at least one provider app exists but videoConfProviders.getActiveProvider() returns falsy: no provider has been selected as the workspace's active provider. Multiple provider apps can coexist, but exactly one must be set active; the active selection is what startCall uses. The same availabilityErrors.NOT_ACTIVE code ('no-active-video-conf-provider') is also thrown on the join/start REST path in apps/meteor/server/api/v1/videoConference.ts:154.

Source

Thrown at apps/meteor/server/services/video-conference/service.ts:594

		return message._id;
	}

	private async validateProvider(providerName: string): Promise<void> {
		const manager = await this.getProviderManager();
		const configured = await manager.isFullyConfigured(providerName).catch(() => false);
		if (!configured) {
			throw new Error(availabilityErrors.NOT_CONFIGURED);
		}
	}

	private async getValidatedProvider(): Promise<string> {
		if (!videoConfProviders.hasAnyProvider()) {
			throw new Error(availabilityErrors.NO_APP);
		}

		const providerName = videoConfProviders.getActiveProvider();
		if (!providerName) {
			throw new Error(availabilityErrors.NOT_ACTIVE);
		}

		await this.validateProvider(providerName);

		return providerName;
	}

	private async createEphemeralMessage(uid: string, rid: string, i18nKey: string): Promise<void> {
		const user = await Users.findOneById<Pick<IUser, 'language' | 'roles'>>(uid, { projection: { language: 1, roles: 1 } });
		const language = user?.language || settings.get<string>('Language') || 'en';
		const key = user?.roles.includes('admin') ? `admin-${i18nKey}` : i18nKey;
		const msg = i18n.t(key, {
			lng: language,
		});

		void api.broadcast('notify.ephemeralMessage', uid, rid, {
			msg,
		});

View on GitHub (pinned to e4b8178b20)

Solutions

  1. Open Administration > Video Conferencing and select/enable one provider as the active provider
  2. Confirm the provider app backing that selection is still installed and enabled (uninstalling it clears the active choice)
  3. If the admin UI shows no selectable provider, fix the underlying NO_APP condition first (install a provider app)
  4. Retry the call start after saving the active provider

Example fix

// before
await videoConfService.startCall(uid, rid); // throws Error('no-active-video-conf-provider')

// after
const active = videoConfProviders.getActiveProvider();
if (!active) {
	throw new Meteor.Error('no-active-video-conf-provider', 'Select an active provider in Administration > Video Conferencing');
}
await videoConfService.startCall(uid, rid);
Defensive patterns

Strategy: validation

Validate before calling

const active = videoConfProviders.getActiveProvider();
if (!active) {
	throw new Meteor.Error('no-active-video-conf-provider', 'Select the active provider in Administration > Video Conferencing');
}
await videoConfService.startCall(uid, rid);

Try / catch

catch (err) { if (err instanceof Error && err.message === 'no-active-video-conf-provider') { /* surface admin action: choose active provider */ } else throw err; }

Prevention

When it happens

Trigger: Starting (or joining) a video conference via REST/streamer when provider apps are installed but the active provider was never chosen, was deactivated in Administration > Video Conferencing, or the setting storing the active provider was reset during migration.

Common situations: Installed a second provider app and the active selection got cleared; workspace migrated/cloned without the video conf admin settings; admin deactivated the old provider before enabling the new one, leaving a window with no active provider.

Related errors


AI-assisted analysis of RocketChat/Rocket.Chat@e4b8178b20 (2026-08-18). Data as JSON: /api/errors/cef6b69b047b6809. Report an issue: GitHub.