{"record":{"id":"cbd0754a3285bfb2","repo":"RocketChat/Rocket.Chat","slug":"video-conf-provider-not-configured","errorCode":null,"errorMessage":"video-conf-provider-not-configured","messagePattern":"video-conf-provider-not-configured","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/server/services/video-conference/service.ts","lineNumber":583,"sourceCode":"\n\t\tconst room = await Rooms.findOneById(call.rid);\n\t\tconst appId = videoConfProviders.getProviderAppId(call.providerName);\n\t\tconst user = createdBy || (appId && (await Users.findOneByAppId(appId))) || (await Users.findOneById('rocket.cat'));\n\n\t\tconst message = await sendMessage(user, record, room);\n\n\t\tif (!message) {\n\t\t\tthrow new Error('failed-to-create-message');\n\t\t}\n\n\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","sourceCodeStart":565,"sourceCodeEnd":601,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/e4b8178b205510181a96ceefee043d0abcd13e5a/apps/meteor/server/services/video-conference/service.ts#L565-L601","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Open Administration > Apps > (video app) > Settings and fill every required field (e.g. Jitsi domain, app id/secret), then save","Pre-check with the provider manager: (await manager.isFullyConfigured(providerName)) === true before allowing calls","Re-verify configuration after app upgrades — required settings can change between versions","Gate the call button on the provider capabilities/availability exposed to clients so users cannot start doomed calls"],"exampleFix":"// before\nawait VideoConfService.create({ type, rid, createdBy, providerName });\n\n// after\nconst manager = await getProviderManager();\nif (!(await manager.isFullyConfigured(providerName).catch(() => false))) {\n  throw new Error('video-conf-provider-not-configured');\n}\nawait VideoConfService.create({ type, rid, createdBy, providerName });","handlingStrategy":"validation","validationCode":"const manager = await getProviderManager();\nconst configured = await manager.isFullyConfigured(providerName).catch(() => false);\nif (!configured) {\n  return API.v1.failure('video-conf-provider-not-configured');\n}","typeGuard":null,"tryCatchPattern":"try {\n  await VideoConfService.create(payload);\n} catch (err) {\n  if (err instanceof Error && err.message === 'video-conf-provider-not-configured') {\n    // prompt the admin to finish provider setup; do not retry until configured\n  }\n  throw err;\n}","preventionTips":["Complete provider app configuration before enabling the call UI","Re-check required settings after app upgrades","Expose provider readiness to clients so call buttons disable themselves"],"tags":["video-conference","configuration","apps-engine"],"backgroundTag":"missing-configuration","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"}