Mintplex-Labs/anything-llm · warning
This chat has been disabled by the administrator - try again
Error message
This chat has been disabled by the administrator - try again later.
What it means
Embeddable-chat gate inside canRespond: if the loaded embed config has enabled=false, the request is refused with HTTP 503 and a structured abort payload ({type:'abort', close:true, error:'This chat has been disabled by the administrator - try again later.'}). The embed exists and the embedId is valid — the admin has switched this specific embed off.
Source
Thrown at server/utils/middleware/embedMiddleware.js:53
response.sendStatus(404).end();
return;
}
response.locals.embedConfig = embed;
next();
}
async function canRespond(request, response, next) {
try {
const embed = response.locals.embedConfig;
if (!embed) {
response.sendStatus(404).end();
return;
}
// Block if disabled by admin.
if (!embed.enabled) {
response.status(503).json({
id: uuidv4(),
type: "abort",
textResponse: null,
sources: [],
close: true,
error:
"This chat has been disabled by the administrator - try again later.",
});
return;
}
// Check if requester hostname is in the valid allowlist of domains.
const host = request.headers.origin ?? "";
const allowedHosts = EmbedConfig.parseAllowedHosts(embed);
// Optional hardening for when an embed with no allowlist is created.
// This would mean the embed will accept requests from ANY origin (parseAllowedHosts returns
// null). When EMBED_REQUIRE_ALLOWLIST is enabled, treat "no allowlist" asView on GitHub (pinned to 3aec848f28)
Solutions
- Site owner: re-enable the embed in the admin UI (Embedded Chats section) so enabled=true
- If you embed the widget: treat type:'abort' with close:true as terminal — hide the chat UI instead of retrying, since only an admin action clears it
- If intentional maintenance: leave it and surface a 'try again later' notice
Defensive patterns
Strategy: fallback
Validate before calling
// widget: probe once on load instead of discovering on first message
const probe = await fetch(`${embedBase}/${embedId}`);
if (probe.status === 503) mountDisabledNotice(); Try / catch
if (res.status === 503) {
const data = await res.json();
if (data.type === 'abort' && data.close) showNotice(data.error); // terminal — stop sending
} Prevention
- Handle type:'abort' + close:true as terminal in the widget protocol
- Show the returned error string to visitors instead of retry loops
- Keep an ops note of which embeds are toggled enabled/disabled
When it happens
Trigger: A visitor sends a message through an embedded chat widget whose config row has enabled=false; every /embed/:embedId chat request then returns the 503 abort payload.
Common situations: Admin disabled a leaking/expensive embed but left the script on the page; staged rollout where embeds are toggled off outside business hours; embed duplicated from a disabled template.
Related errors
- res.statusText
- This feature has been disabled by the administrator.
- Community Hub bundle downloads are not enabled. The system a
- Community hub bundle downloads are limited to verified publi
- Rate limit exceeded
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/f4b42e82ceb93d18.
Report an issue: GitHub.