{"record":{"id":"85d2508fde7b48c1","repo":"calcom/cal.diy","slug":"something-went-wrong-can-t-get-transcripts","errorCode":null,"errorMessage":"Something went wrong! can't get transcripts","messagePattern":"Something went wrong! can't get transcripts","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/app-store/dailyvideo/lib/VideoApiAdapter.ts","lineNumber":495,"sourceCode":"        const batchProcessorJobs = await fetcher(`/batch-processor?recordingId=${recordingId}`).then(\n          getBatchProcessJobs.parse\n        );\n        if (!batchProcessorJobs.data.length) {\n          return { message: `No Batch processor jobs found for recording id ${recordingId}` };\n        }\n\n        const transcriptJobId = batchProcessorJobs.data.filter(\n          (job) => job.preset === \"transcript\" && job.status === \"finished\"\n        )?.[0]?.id;\n\n        if (!transcriptJobId) return [];\n\n        const accessLinkRes = await getBatchProcessorJobAccessLink(transcriptJobId);\n\n        return accessLinkRes.transcription;\n      } catch (err) {\n        console.log(\"err\", err);\n        throw new Error(\"Something went wrong! can't get transcripts\");\n      }\n    },\n    checkIfRoomNameMatchesInRecording: async (roomName: string, recordingId: string): Promise<boolean> => {\n      try {\n        const recording = await fetcher(`/recordings/${recordingId}`).then(recordingItemSchema.parse);\n        return recording.room_name === roomName;\n      } catch (err) {\n        console.error(\"err\", err);\n        throw new Error(`Something went wrong! Unable to checkIfRoomNameMatchesInRecording. ${err}`);\n      }\n    },\n    getMeetingInformation: async (roomName: string): Promise<TGetMeetingInformationResponsesSchema> => {\n      try {\n        const res = await fetcher(`/meetings?room=${encodeURIComponent(roomName)}`).then(\n          getMeetingInformationResponseSchema.parse\n        );\n        return res;\n      } catch (err) {","sourceCodeStart":477,"sourceCodeEnd":513,"githubUrl":"https://github.com/calcom/cal.diy/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/dailyvideo/lib/VideoApiAdapter.ts#L477-L513","documentation":"Thrown by getTranscriptsAccessLinkFromRecordingId. It lists batch-processor jobs for a recording, filters for a finished 'transcript' preset job, then fetches its access link via getBatchProcessorJobAccessLink. If any step in the try fails (fetch, getBatchProcessJobs.parse, getBatchProcessorJobAccessLink) the generic catch re-throws this message.","triggerScenarios":"Recording has no batch-processor jobs but the empty-array branch is bypassed (only triggers if fetch/parse throws), the finished transcript job is missing its id, or getBatchProcessorJobAccessLink rejects.","commonSituations":"Transcript job still in 'running' state (so filter returns no finished job and the function returns [], not an error); Daily API key invalid; recordingId does not exist; Daily response schema changed.","solutions":["Check the underlying error logged via console.log('err', err).","Confirm the recordingId exists and has a finished transcript batch-processor job.","Verify Daily credentials and batch-processor entitlement.","Align getBatchProcessJobs schema with the current Daily response if a ZodError is the cause.","Re-throw with cause to distinguish transcript-not-ready from a real failure."],"exampleFix":"// before\nthrow new Error(\"Something went wrong! can't get transcripts\");\n\n// after\nthrow new Error(`Unable to get transcript for recording ${recordingId}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });","handlingStrategy":"try-catch","validationCode":"if (!recordingId || typeof recordingId !== \"string\") throw new TypeError(\"recordingId required\");","typeGuard":"const hasFinishedTranscriptJob = (jobs: any[]) =>\n  Array.isArray(jobs) && jobs.some((j) => j?.preset === \"transcript\" && j?.status === \"finished\");","tryCatchPattern":"try {\n  const transcript = await adapter.getTranscriptsAccessLinkFromRecordingId(recordingId);\n} catch (err) {\n  logger.warn(\"transcript not ready\", { recordingId });\n  // transcript may still be processing; surface 'not ready' to user\n}","preventionTips":["Poll transcript job status before fetching access link.","Treat missing transcript as 'not ready yet' rather than an error to the user.","Validate recordingId before invoking."],"tags":["daily-video","transcript","batch-processor","error-swallowing"],"backgroundTag":null,"analyzedSha":"176037d0afbe572f870a3c702985e7cd83fe6c0c","analyzedAt":"2026-08-12T19:12:41.464Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}