RocketChat/Rocket.Chat · error · Error

video-conf-provider-not-configured

Error message

video-conf-provider-not-configured

What it means

Thrown by VideoConferenceService.validateProvider via availabilityErrors.NOT_CONFIGURED when the provider manager reports the provider is not fully configured — manager.isFullyConfigured(providerName) resolves false or throws (the .catch(() => false) also swallows manager errors into this path). The provider app is installed, but required settings such as the Jitsi domain or app credentials are missing or incomplete, so calls cannot start.

Source

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

		const room = await Rooms.findOneById(call.rid);
		const appId = videoConfProviders.getProviderAppId(call.providerName);
		const user = createdBy || (appId && (await Users.findOneByAppId(appId))) || (await Users.findOneById('rocket.cat'));

		const message = await sendMessage(user, record, room);

		if (!message) {
			throw new Error('failed-to-create-message');
		}

		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;
	}

View on GitHub (pinned to e4b8178b20)

Solutions

  1. Open Administration > Apps > (video app) > Settings and fill every required field (e.g. Jitsi domain, app id/secret), then save
  2. Pre-check with the provider manager: (await manager.isFullyConfigured(providerName)) === true before allowing calls
  3. Re-verify configuration after app upgrades — required settings can change between versions
  4. Gate the call button on the provider capabilities/availability exposed to clients so users cannot start doomed calls

Example fix

// before
await VideoConfService.create({ type, rid, createdBy, providerName });

// after
const manager = await getProviderManager();
if (!(await manager.isFullyConfigured(providerName).catch(() => false))) {
  throw new Error('video-conf-provider-not-configured');
}
await VideoConfService.create({ type, rid, createdBy, providerName });
Defensive patterns

Strategy: validation

Validate before calling

const manager = await getProviderManager();
const configured = await manager.isFullyConfigured(providerName).catch(() => false);
if (!configured) {
  return API.v1.failure('video-conf-provider-not-configured');
}

Try / catch

try {
  await VideoConfService.create(payload);
} catch (err) {
  if (err instanceof Error && err.message === 'video-conf-provider-not-configured') {
    // prompt the admin to finish provider setup; do not retry until configured
  }
  throw err;
}

Prevention

When it happens

Trigger: Starting a video call right after installing the video app without completing its settings; an admin cleared a required setting; an app upgrade reset configuration; a staging config with blanks copied to production.

Common situations: Fresh installs where the Jitsi app is enabled but the domain was never entered; rotated secrets not updated in app settings; environment-specific settings lost after restore.

Related errors


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