{"record":{"id":"e807e6e5b77a53d4","repo":"RocketChat/Rocket.Chat","slug":"no-videoconf-provider-app","errorCode":null,"errorMessage":"no-videoconf-provider-app","messagePattern":"no-videoconf-provider-app","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/server/services/video-conference/service.ts","lineNumber":589,"sourceCode":"\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\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,","sourceCodeStart":571,"sourceCodeEnd":607,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/e4b8178b205510181a96ceefee043d0abcd13e5a/apps/meteor/server/services/video-conference/service.ts#L571-L607","documentation":"Thrown by VideoConferenceService.getValidatedProvider() before any call is started: videoConfProviders.hasAnyProvider() is false, meaning no app has registered a video conferencing provider on this workspace. Rocket.Chat does not implement video calls itself; URL generation and callbacks are delegated to an Apps-Engine app that registers a videoConfProvider (Jitsi, Pexip, Google Meet, etc.). With zero providers registered, call creation is refused up front with the availabilityErrors.NO_APP code ('no-videoconf-provider-app').","triggerScenarios":"Calling the start-call flow (REST video-conference start / VideoConferenceService.startCall via startDirect/startGroup) on a workspace where no video conferencing app is installed, the provider app is disabled, or the app loaded but its provider registration never ran.","commonSituations":"Fresh installation without a conferencing app from the Marketplace; admin disabled the Jitsi/conferencing app; local dev server with an empty Apps-Engine; app upgrade that stopped registering its provider.","solutions":["Install and enable a video conferencing provider app (Administration > Apps > Marketplace, e.g. Video Conferencing with Jitsi)","Verify the provider appears and is enabled under Administration > Video Conferencing","Check the app's logs (Administration > Apps > <app> > Logs) for provider registration failures and re-enable/reinstall if broken","Retry the call start only after the app reports loaded and its provider registered"],"exampleFix":"// before\nawait videoConfService.startCall(uid, rid); // throws Error('no-videoconf-provider-app')\n\n// after\nif (!videoConfProviders.hasAnyProvider()) {\n\tthrow new Meteor.Error('no-videoconf-provider-app', 'Install a video conferencing provider app first');\n}\nawait videoConfService.startCall(uid, rid);","handlingStrategy":"validation","validationCode":"import { videoConfProviders } from '.../lib/videoConference/server';\n\nif (!videoConfProviders.hasAnyProvider()) {\n\tthrow new Meteor.Error('no-videoconf-provider-app', 'Install a video conferencing provider app first');\n}\nawait videoConfService.startCall(uid, rid);","typeGuard":null,"tryCatchPattern":"catch (err) { if (err instanceof Error && err.message === 'no-videoconf-provider-app') { /* prompt admin to install a provider app */ } else throw err; }","preventionTips":["Install and enable a provider app before exposing call buttons to users","Health-check videoConfProviders.hasAnyProvider() at startup and surface a warning in the admin UI","In e2e tests, assert a provider is registered before any start-call fixtures run"],"tags":["video-conference","apps-engine","provider","marketplace","configuration"],"backgroundTag":"provider-not-installed","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"}