{"record":{"id":"b618d660fb1a326c","repo":"tinyhumansai/openhuman","slug":"core-rejected-the-agent-meetings-join-request","errorCode":null,"errorMessage":"Core rejected the agent_meetings_join request.","messagePattern":"Core rejected the agent_meetings_join request\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/services/meetCallService.ts","lineNumber":272,"sourceCode":"    method: 'openhuman.agent_meetings_join',\n    params: {\n      meet_url: meetUrl,\n      display_name: input.displayName?.trim() || undefined,\n      platform: input.platform || undefined,\n      agent_name: input.agentName?.trim() || undefined,\n      system_prompt: input.systemPrompt?.trim() || undefined,\n      mascot_id: input.mascotId?.trim() || undefined,\n      respond_to_participant: input.respondToParticipant?.trim() || undefined,\n      wake_phrase: input.wakePhrase?.trim() || undefined,\n      correlation_id: input.correlationId?.trim() || undefined,\n      listen_only: input.listenOnly ?? undefined,\n      rive_colors: mapRiveColors(input.riveColors),\n      mascots,\n    },\n  });\n\n  if (!result?.ok) {\n    throw new Error('Core rejected the agent_meetings_join request.');\n  }\n\n  return { meetUrl: result.meet_url, platform: result.platform };\n}\n\n/**\n * Ask the backend bot to leave the current meeting.\n */\nexport async function leaveBackendMeetBot(reason?: string): Promise<void> {\n  await callCoreRpc<{ ok: boolean }>({\n    method: 'openhuman.agent_meetings_leave',\n    params: { reason: reason || 'requested' },\n  });\n}\n\n/**\n * Send a tool execution result back to the backend's meeting LLM.\n */","sourceCodeStart":254,"sourceCodeEnd":290,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/a221052e0df5b1f7598fceba7329fd1af95d6699/app/src/services/meetCallService.ts#L254-L290","documentation":"`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'.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nawait joinMeetViaBackendBot(input);\n\n// after\ntry { await joinMeetViaBackendBot(input); }\ncatch (e) {\n  setJoinError(e instanceof Error ? e.message : 'Could not join the meeting.');\n}","handlingStrategy":"try-catch","validationCode":"const SUPPORTED = /^(https?:\\/\\/)?(meet\\.google\\.com|([a-z0-9-]+\\.)?zoom\\.us|teams\\.microsoft\\.com|([a-z0-9-]+\\.)?webex\\.com)/i;\nconst url = input.meetUrl.trim();\nif (!SUPPORTED.test(url)) {\n  setJoinError('Link must be a Google Meet, Zoom, Teams, or Webex URL.');\n  return;\n}\nawait joinMeetViaBackendBot({ ...input, meetUrl: url });","typeGuard":null,"tryCatchPattern":"try { await joinMeetViaBackendBot(input); }\ncatch (e) {\n  setJoinError(e instanceof Error ? e.message : 'Join failed. Check the link and your connection.');\n}","preventionTips":["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)"],"tags":["meet","core-rpc","recall-ai","socket-io"],"backgroundTag":null,"analyzedSha":"a221052e0df5b1f7598fceba7329fd1af95d6699","analyzedAt":"2026-08-16T12:47:06.542Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}