tinyhumansai/openhuman · error

Core rejected the agent_meetings_join request.

Error message

Core rejected the agent_meetings_join request.

What it means

`openhuman.agent_meetings_join` resolved with `ok` falsy. The RPC fans out to the backend over the core's persistent Socket.IO connection (emits `bot:join` to the Recall.ai bot), so `ok:false` means the join was refused somewhere on that chain — URL validation in `meet::ops`, backend session/auth, or the bot platform itself. Transport problems (Socket.IO down, unknown method) throw earlier as `CoreRpcError`; this is the protocol-level 'no'.

Source

Thrown at app/src/services/meetCallService.ts:272

    method: 'openhuman.agent_meetings_join',
    params: {
      meet_url: meetUrl,
      display_name: input.displayName?.trim() || undefined,
      platform: input.platform || undefined,
      agent_name: input.agentName?.trim() || undefined,
      system_prompt: input.systemPrompt?.trim() || undefined,
      mascot_id: input.mascotId?.trim() || undefined,
      respond_to_participant: input.respondToParticipant?.trim() || undefined,
      wake_phrase: input.wakePhrase?.trim() || undefined,
      correlation_id: input.correlationId?.trim() || undefined,
      listen_only: input.listenOnly ?? undefined,
      rive_colors: mapRiveColors(input.riveColors),
      mascots,
    },
  });

  if (!result?.ok) {
    throw new Error('Core rejected the agent_meetings_join request.');
  }

  return { meetUrl: result.meet_url, platform: result.platform };
}

/**
 * Ask the backend bot to leave the current meeting.
 */
export async function leaveBackendMeetBot(reason?: string): Promise<void> {
  await callCoreRpc<{ ok: boolean }>({
    method: 'openhuman.agent_meetings_leave',
    params: { reason: reason || 'requested' },
  });
}

/**
 * Send a tool execution result back to the backend's meeting LLM.
 */

View on GitHub (pinned to a221052e0d)

Solutions

  1. Check the core log — the agent_meetings handler logs the backend's refusal reason for the correlation_id
  2. Verify the URL opens in a browser and is one of the four supported platforms
  3. Confirm sign-in/session is valid (other backend RPCs succeed) and retry after reconnect
  4. If mascot slots are passed, confirm each mascot_id exists via the mascot list endpoint

Example fix

// before
await joinMeetViaBackendBot(input);

// after
try { await joinMeetViaBackendBot(input); }
catch (e) {
  setJoinError(e instanceof Error ? e.message : 'Could not join the meeting.');
}
Defensive patterns

Strategy: try-catch

Validate before calling

const SUPPORTED = /^(https?:\/\/)?(meet\.google\.com|([a-z0-9-]+\.)?zoom\.us|teams\.microsoft\.com|([a-z0-9-]+\.)?webex\.com)/i;
const url = input.meetUrl.trim();
if (!SUPPORTED.test(url)) {
  setJoinError('Link must be a Google Meet, Zoom, Teams, or Webex URL.');
  return;
}
await joinMeetViaBackendBot({ ...input, meetUrl: url });

Try / catch

try { await joinMeetViaBackendBot(input); }
catch (e) {
  setJoinError(e instanceof Error ? e.message : 'Join failed. Check the link and your connection.');
}

Prevention

When it happens

Trigger: Unsupported/malformed meeting URL rejected by the core's join-URL validation; backend rejects the bot:join (no Recall.ai capacity, quota, auth); the meeting requires lobby approval the bot cannot pass; `mascot_id`/`mascots` referencing an unknown mascot.

Common situations: Paste a link for a platform outside Google Meet/Zoom/Teams/Webex; expired or not-yet-started meeting; cloud backend outage or expired session token; mascot ids from a stale frontend config.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/b618d660fb1a326c. Report an issue: GitHub.