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
- Check the core log — the agent_meetings handler logs the backend's refusal reason for the correlation_id
- Verify the URL opens in a browser and is one of the four supported platforms
- Confirm sign-in/session is valid (other backend RPCs succeed) and retry after reconnect
- 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
- Client-side-validate the platform prefix before invoking the join RPC
- Pass correlation_id so refusals can be matched to core/backend logs
- Ensure the backend session is healthy before join (other backend RPCs succeed)
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
- Core rejected the meet_agent_list_calls request.
- Core rejected the meet_agent_get_call_detail request.
- Please paste a meeting link.
- Core rejected the meet_list_upcoming request.
- Core rejected the meet_set_event_policy request.
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/b618d660fb1a326c.
Report an issue: GitHub.