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
- Enable Omnichannel in Administration > Omnichannel, or set Livechat_enabled=true via the settings REST API, then retry.
- If it must stay disabled, stop calling livechat flows and remove/hide the widget embed.
- 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
- Check the setting (or the livechat config/online endpoint) before mounting the widget.
- Monitor setting changes and disable livechat entry points when Omnichannel is off.
- After environment restores, verify Livechat_enabled is still true.
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
- error-invalid-sla
- message-length-exceeds-character-limit
- invalid-token
- error-not-allowed-to-close-conversation
- error-comment-is-required
AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18).
Data as JSON: /api/errors/7edbc8e28645b2d2.
Report an issue: GitHub.