DIYgod/RSSHub · error · InvalidParameterError

Monitor ID mismatch, please open an issue.

Error message

Monitor ID mismatch, please open an issue.

What it means

An `InvalidParameterError` at lib/routes/uptimerobot/rss.tsx:111 fired when the monitor ID extracted from the RSS title's capture group 3 does not equal `item.link`. The route assumes UptimeRobot puts the same identifier in both the title parenthetical and the `<link>` element. A format change that decouples them triggers this on every item.

Source

Thrown at lib/routes/uptimerobot/rss.tsx:111

    const rssUrl = `${rootURL}/${id}`;
    const rss = await new Parser({
        customFields: {
            item: ['details:duration'],
        },
    }).parseURL(rssUrl);

    const monitors = {};

    const items = rss.items.toReversed().map((item) => {
        const titleMatch = item.title!.match(titleRegex);
        if (!titleMatch) {
            throw new InvalidParameterError('Unexpected title, please open an issue.');
        }
        const [monitorName, status, id] = titleMatch.slice(1);

        if (id !== item.link) {
            throw new InvalidParameterError('Monitor ID mismatch, please open an issue.');
        }

        // id could be a URL, a domain, an IP address, or a hex string. fix it
        let link;
        try {
            link = !id.startsWith('http') && id.includes('.') ? new URL(`http://${id}`).href : new URL(id).href;
        } catch {
            // ignore
        }

        const duration = item['details:duration'];
        const monitor = (monitors[monitorName] ||= new Monitor(monitorName));

        if (status === 'UP') {
            monitor.up(duration);
        } else if (status === 'DOWN') {
            monitor.down(duration);
        } else {

View on GitHub (pinned to bed535e087)

Solutions

  1. Inspect a live RSS feed to compare the title parenthetical value with `<link>` for each item.
  2. If the mismatch is intentional, relax or remove the strict equality check at line 110–112 and derive `link` from whichever field is more reliable.
  3. Report the format change to the route maintainer (Rongronggg9) with a sample feed.
Defensive patterns

Strategy: validation

Type guard

const titleIdMatchesLink = (titleId: string, link: string): boolean =>
    titleId === link;

Try / catch

try {
    const items = parseUptimeRobotRss(rss);
} catch (e) {
    if (e instanceof InvalidParameterError && e.message.includes('Monitor ID mismatch')) {
        // title ID and link diverged — inspect raw feed to understand the new format
        console.error('UptimeRobot RSS title/link ID mismatch; format changed');
    }
    throw e;
}

Prevention

When it happens

Trigger: UptimeRobot changes the title to show a display name in parentheses while `<link>` holds the raw monitor ID; the `:id` feed is from a new UptimeRobot product tier with a different link scheme; URL-encoding differences between title and link.

Common situations: UptimeRobot RSS format update; monitor configured with a friendly alias that appears in the title but not the link.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/2ff32de63e6ee36c. Report an issue: GitHub.