RocketChat/Rocket.Chat · error · Error
video-conf-provider-unavailable
Error message
video-conf-provider-unavailable
What it means
Thrown by VideoConferenceService.getInfo when videoConfProviders.isProviderAvailable(call.providerName) is false — the call references a provider app that is not currently installed/enabled. isCallManagedByApp already filtered non-app calls (those return [] earlier), so this error means an app that once managed the call is now unavailable or deregistered.
Source
Thrown at apps/meteor/server/services/video-conference/service.ts:187
name: 'Error on VideoConf.join',
err,
});
throw err;
});
}
public async getInfo(callId: VideoConference['_id'], uid: IUser['_id'] | undefined): Promise<UiKit.ModalSurfaceLayout> {
const call = await VideoConferenceModel.findOneById(callId);
if (!call) {
throw new Error('invalid-call');
}
if (!videoConfTypes.isCallManagedByApp(call)) {
return [];
}
if (!videoConfProviders.isProviderAvailable(call.providerName)) {
throw new Error('video-conf-provider-unavailable');
}
let user: Pick<Required<IUser>, '_id' | 'username' | 'name' | 'avatarETag'> | null = null;
if (uid) {
user = await Users.findOneById<Pick<Required<IUser>, '_id' | 'username' | 'name' | 'avatarETag'>>(uid, {
projection: { name: 1, username: 1, avatarETag: 1 },
});
if (!user) {
throw new Error('failed-to-load-own-data');
}
}
const blocks = await (await this.getProviderManager()).getVideoConferenceInfo(call.providerName, call, user || undefined).catch((e) => {
throw new Error(e);
});
if (blocks?.length) {View on GitHub (pinned to e4b8178b20)
Solutions
- Reinstall/enable the provider app (Administration > Apps) and confirm it registers the video conferencing provider
- Check the app's status and logs via the apps API after upgrades
- If the provider switch was intentional, hide the info UI for calls with the old providerName
- Wrap getInfo in a fallback that renders a 'provider unavailable' block
Example fix
// before
const blocks = await VideoConfService.getInfo(callId, uid);
// after
const call = await VideoConferenceModel.findOneById(callId);
if (call && !videoConfProviders.isProviderAvailable(call.providerName)) {
return [{ type: 'section', text: { type: 'mrkdwn', text: 'Call provider unavailable' } }];
}
const blocks = await VideoConfService.getInfo(callId, uid); Defensive patterns
Strategy: fallback
Validate before calling
const call = await VideoConferenceModel.findOneById(callId);
if (call && !videoConfProviders.isProviderAvailable(call.providerName)) {
// provider gone: render a fallback instead of calling getInfo
return fallbackBlocks();
} Try / catch
try {
const blocks = await VideoConfService.getInfo(callId, uid);
} catch (err) {
if (err instanceof Error && err.message === 'video-conf-provider-unavailable') {
return [{ type: 'section', text: { type: 'mrkdwn', text: 'Video conferencing provider is not available' } }];
}
throw err;
} Prevention
- Warn admins that uninstalling a video app orphans existing call messages
- Health-check provider registration after app upgrades
- Never assume providerName from old calls still resolves
When it happens
Trigger: Requesting call info after the video conferencing app (e.g. Jitsi) was uninstalled, disabled, or failed to register its provider; calls created under provider A after the workspace switched to provider B; app restart leaving providers momentarily unregistered.
Common situations: Admin uninstalls the video app while old call messages remain clickable; app upgrade deregisters the provider briefly; Apps Engine startup failures leaving the provider registry empty.
Related errors
- no-videoconf-provider-app
- no-active-video-conf-provider
- error-unregistering-provider
- A video conference must exist to update.
- video-conf-provider-not-configured
AI-assisted analysis of RocketChat/Rocket.Chat@e4b8178b20 (2026-08-18).
Data as JSON: /api/errors/9933ea7e4b110b73.
Report an issue: GitHub.