calcom/cal.diy · error · Error

Something went wrong! can't get transcripts

Error message

Something went wrong! can't get transcripts

What it means

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.

Source

Thrown at packages/app-store/dailyvideo/lib/VideoApiAdapter.ts:495

        const batchProcessorJobs = await fetcher(`/batch-processor?recordingId=${recordingId}`).then(
          getBatchProcessJobs.parse
        );
        if (!batchProcessorJobs.data.length) {
          return { message: `No Batch processor jobs found for recording id ${recordingId}` };
        }

        const transcriptJobId = batchProcessorJobs.data.filter(
          (job) => job.preset === "transcript" && job.status === "finished"
        )?.[0]?.id;

        if (!transcriptJobId) return [];

        const accessLinkRes = await getBatchProcessorJobAccessLink(transcriptJobId);

        return accessLinkRes.transcription;
      } catch (err) {
        console.log("err", err);
        throw new Error("Something went wrong! can't get transcripts");
      }
    },
    checkIfRoomNameMatchesInRecording: async (roomName: string, recordingId: string): Promise<boolean> => {
      try {
        const recording = await fetcher(`/recordings/${recordingId}`).then(recordingItemSchema.parse);
        return recording.room_name === roomName;
      } catch (err) {
        console.error("err", err);
        throw new Error(`Something went wrong! Unable to checkIfRoomNameMatchesInRecording. ${err}`);
      }
    },
    getMeetingInformation: async (roomName: string): Promise<TGetMeetingInformationResponsesSchema> => {
      try {
        const res = await fetcher(`/meetings?room=${encodeURIComponent(roomName)}`).then(
          getMeetingInformationResponseSchema.parse
        );
        return res;
      } catch (err) {

View on GitHub (pinned to 176037d0af)

Solutions

  1. Check the underlying error logged via console.log('err', err).
  2. Confirm the recordingId exists and has a finished transcript batch-processor job.
  3. Verify Daily credentials and batch-processor entitlement.
  4. Align getBatchProcessJobs schema with the current Daily response if a ZodError is the cause.
  5. Re-throw with cause to distinguish transcript-not-ready from a real failure.

Example fix

// before
throw new Error("Something went wrong! can't get transcripts");

// after
throw new Error(`Unable to get transcript for recording ${recordingId}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
Defensive patterns

Strategy: try-catch

Validate before calling

if (!recordingId || typeof recordingId !== "string") throw new TypeError("recordingId required");

Type guard

const hasFinishedTranscriptJob = (jobs: any[]) =>
  Array.isArray(jobs) && jobs.some((j) => j?.preset === "transcript" && j?.status === "finished");

Try / catch

try {
  const transcript = await adapter.getTranscriptsAccessLinkFromRecordingId(recordingId);
} catch (err) {
  logger.warn("transcript not ready", { recordingId });
  // transcript may still be processing; surface 'not ready' to user
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of calcom/cal.diy@176037d0af (2026-08-12). Data as JSON: /api/errors/85d2508fde7b48c1. Report an issue: GitHub.