RocketChat/Rocket.Chat · error · Meteor.Error

error-omnichannel-is-disabled

error-omnichannel-is-disabled

Error message

error-omnichannel-is-disabled

What it means

getRoom is the entry point that finds or creates an omnichannel room for a visitor. Its first guard checks the Livechat_enabled setting and throws Meteor.Error('error-omnichannel-is-disabled') when the workspace has Omnichannel turned off, before any room lookup happens.

Source

Thrown at apps/meteor/server/lib/omnichannel/rooms.ts:58

import { callbacks } from '../callbacks';
import {
	notifyOnLivechatInquiryChangedByRoom,
	notifyOnSubscriptionChangedByRoomId,
	notifyOnRoomChangedById,
	notifyOnLivechatInquiryChanged,
	notifyOnSubscriptionChanged,
	notifyOnRoomChanged,
} from '../notifyListener';

export async function getRoom(
	guest: ILivechatVisitor,
	message: Pick<IMessage, 'rid' | 'msg' | 'token'>,
	roomInfo: IOmnichannelRoomInfo,
	agent?: SelectedAgent,
	extraData?: IOmnichannelRoomExtraData,
) {
	if (!settings.get('Livechat_enabled')) {
		throw new Meteor.Error('error-omnichannel-is-disabled');
	}
	livechatLogger.debug({ msg: 'Attempting to find or create a room for visitor', visitorId: guest._id });
	const room = await LivechatRooms.findOneById(message.rid);

	if (room?.v._id && (await LivechatContacts.isChannelBlocked(Visitors.makeVisitorAssociation(room.v._id, room.source)))) {
		throw new Error('error-contact-channel-blocked');
	}

	if (!room?.open) {
		livechatLogger.debug({ msg: 'Last room for visitor closed. Creating new one', visitorId: guest._id });
	}

	if (!room?.open) {
		return {
			room: await createRoom({ visitor: guest, message: message.msg, roomInfo, agent, extraData }),
			newRoom: true,
		};
	}

View on GitHub (pinned to b2c16d5842)

Solutions

  1. Enable Omnichannel in Administration > Omnichannel, or set Livechat_enabled=true via the settings REST API, then retry.
  2. If it must stay disabled, stop calling livechat flows and remove/hide the widget embed.
  3. Audit for other tooling (setup wizards, config imports) that may have flipped the setting.

Example fix

// before
const { room } = await getRoom(guest, message, roomInfo); // throws error-omnichannel-is-disabled

// after
if (!settings.get('Livechat_enabled')) {
	throw new Error('Omnichannel is disabled on this workspace');
}
const { room } = await getRoom(guest, message, roomInfo);
Defensive patterns

Strategy: validation

Validate before calling

if (!settings.get('Livechat_enabled')) {
	throw new Error('Omnichannel is disabled on this workspace');
}
const { room, newRoom } = await getRoom(guest, message, roomInfo);

Type guard

const isOmnichannelEnabled = (): boolean => settings.get<boolean>('Livechat_enabled');

Try / catch

try {
	const { room } = await getRoom(guest, message, roomInfo);
} catch (err) {
	if (err instanceof Meteor.Error && err.error === 'error-omnichannel-is-disabled') {
		// tell the visitor the channel is offline; do not retry until the setting changes
		return;
	}
	throw err;
}

Prevention

When it happens

Trigger: A visitor sends a message through the livechat widget/inquiry flow, or an integration calls a getRoom-based path (e.g., livechat room creation endpoints) while Livechat_enabled is false.

Common situations: Fresh installation where Omnichannel was never enabled; an admin temporarily disabled Omnichannel; a settings migration or import reset Livechat_enabled to its default false.

Related errors


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