{"record":{"id":"cef6b69b047b6809","repo":"RocketChat/Rocket.Chat","slug":"no-active-video-conf-provider","errorCode":null,"errorMessage":"no-active-video-conf-provider","messagePattern":"no-active-video-conf-provider","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/server/services/video-conference/service.ts","lineNumber":594,"sourceCode":"\t\treturn message._id;\n\t}\n\n\tprivate async validateProvider(providerName: string): Promise<void> {\n\t\tconst manager = await this.getProviderManager();\n\t\tconst configured = await manager.isFullyConfigured(providerName).catch(() => false);\n\t\tif (!configured) {\n\t\t\tthrow new Error(availabilityErrors.NOT_CONFIGURED);\n\t\t}\n\t}\n\n\tprivate async getValidatedProvider(): Promise<string> {\n\t\tif (!videoConfProviders.hasAnyProvider()) {\n\t\t\tthrow new Error(availabilityErrors.NO_APP);\n\t\t}\n\n\t\tconst providerName = videoConfProviders.getActiveProvider();\n\t\tif (!providerName) {\n\t\t\tthrow new Error(availabilityErrors.NOT_ACTIVE);\n\t\t}\n\n\t\tawait this.validateProvider(providerName);\n\n\t\treturn providerName;\n\t}\n\n\tprivate async createEphemeralMessage(uid: string, rid: string, i18nKey: string): Promise<void> {\n\t\tconst user = await Users.findOneById<Pick<IUser, 'language' | 'roles'>>(uid, { projection: { language: 1, roles: 1 } });\n\t\tconst language = user?.language || settings.get<string>('Language') || 'en';\n\t\tconst key = user?.roles.includes('admin') ? `admin-${i18nKey}` : i18nKey;\n\t\tconst msg = i18n.t(key, {\n\t\t\tlng: language,\n\t\t});\n\n\t\tvoid api.broadcast('notify.ephemeralMessage', uid, rid, {\n\t\t\tmsg,\n\t\t});","sourceCodeStart":576,"sourceCodeEnd":612,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/e4b8178b205510181a96ceefee043d0abcd13e5a/apps/meteor/server/services/video-conference/service.ts#L576-L612","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Open Administration > Video Conferencing and select/enable one provider as the active provider","Confirm the provider app backing that selection is still installed and enabled (uninstalling it clears the active choice)","If the admin UI shows no selectable provider, fix the underlying NO_APP condition first (install a provider app)","Retry the call start after saving the active provider"],"exampleFix":"// before\nawait videoConfService.startCall(uid, rid); // throws Error('no-active-video-conf-provider')\n\n// after\nconst active = videoConfProviders.getActiveProvider();\nif (!active) {\n\tthrow new Meteor.Error('no-active-video-conf-provider', 'Select an active provider in Administration > Video Conferencing');\n}\nawait videoConfService.startCall(uid, rid);","handlingStrategy":"validation","validationCode":"const active = videoConfProviders.getActiveProvider();\nif (!active) {\n\tthrow new Meteor.Error('no-active-video-conf-provider', 'Select the active provider in Administration > Video Conferencing');\n}\nawait videoConfService.startCall(uid, rid);","typeGuard":null,"tryCatchPattern":"catch (err) { if (err instanceof Error && err.message === 'no-active-video-conf-provider') { /* surface admin action: choose active provider */ } else throw err; }","preventionTips":["After installing a provider app, immediately set it active in the admin UI","When swapping provider apps, enable the new one before deactivating the old one to avoid a no-active window","Monitor the active-provider setting during workspace migrations"],"tags":["video-conference","apps-engine","provider","configuration","admin-settings"],"backgroundTag":"provider-not-configured","analyzedSha":"e4b8178b205510181a96ceefee043d0abcd13e5a","analyzedAt":"2026-08-18T15:26:39.429Z","contentChangedAt":"2026-08-18T15:26:39.429Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}