calcom/cal.diy · error · Error

Something went wrong! Unable to get transcription access lin

Error message

Something went wrong! Unable to get transcription access link

What it means

Thrown by getAllTranscriptsAccessLinkFromRoomName in the Daily video adapter. The method lists transcripts for a Daily room via GET /transcript?room_name=..., extracts their IDs, then resolves access links through processTranscriptsInBatches. Any failure inside the try block (network error from fetcher, a Zod parse failure in getTranscripts.parse, or a rejected batch promise) is swallowed by a generic catch that re-throws this message, discarding the original cause.

Source

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

      } catch (err) {
        console.log("err", err);
        throw new Error("Something went wrong! Unable to get recording access link");
      }
    },
    getAllTranscriptsAccessLinkFromRoomName: async (roomName: string): Promise<Array<string>> => {
      try {
        const allTranscripts = await fetcher(`/transcript?room_name=${roomName}`).then(getTranscripts.parse);

        if (!allTranscripts.data.length) return [];

        const allTranscriptsIds = allTranscripts.data.map((transcript) => transcript.transcriptId);
        const allTranscriptsAccessLink = await processTranscriptsInBatches(allTranscriptsIds);
        const accessLinks = await Promise.all(allTranscriptsAccessLink);

        return Promise.resolve(accessLinks);
      } catch (err) {
        console.log("err", err);
        throw new Error("Something went wrong! Unable to get transcription access link");
      }
    },
    getAllTranscriptsAccessLinkFromMeetingId: async (meetingId: string): Promise<Array<string>> => {
      try {
        const allTranscripts = await fetcher(`/transcript?mtgSessionId=${meetingId}`).then(
          getTranscripts.parse
        );

        if (!allTranscripts.data.length) return [];

        const allTranscriptsIds = allTranscripts.data.map((transcript) => transcript.transcriptId);
        const allTranscriptsAccessLink = await processTranscriptsInBatches(allTranscriptsIds);
        const accessLinks = await Promise.all(allTranscriptsAccessLink);

        return Promise.resolve(accessLinks);
      } catch (err) {
        console.log("err", err);
        throw new Error("Something went wrong! Unable to get transcription access link");

View on GitHub (pinned to 176037d0af)

Solutions

  1. Check the console.log('err', err) output server-side for the real underlying error (ZodError, fetch TypeError, or Daily status code).
  2. Verify the Daily app's API key is set and valid under /apps/dailyvideo configuration.
  3. Confirm the roomName passed corresponds to an existing Daily room that had recordings enabled.
  4. If the underlying error is a Zod parse failure, compare the live Daily /transcript response against getTranscripts and update the schema.
  5. Re-throw the original error instead of a generic message so callers can branch on cause.

Example fix

// before
} catch (err) {
  console.log("err", err);
  throw new Error("Something went wrong! Unable to get transcription access link");
}

// after - preserve cause for diagnostics
} catch (err) {
  this.log.error("getAllTranscriptsAccessLinkFromRoomName failed for", roomName, err);
  throw new Error(`Unable to get transcription access link for room ${roomName}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!roomName || typeof roomName !== "string") throw new TypeError("roomName must be a non-empty string");
const creds = await getParsedAppKeysFromSlug("dailyvideo", dailyAppKeysSchema);
if (!creds.api_key) throw new Error("Daily API key not configured");

Type guard

const isTranscriptList = (v: unknown): v is { data: { transcriptId: string }[] } =>
  typeof v === "object" && v !== null && Array.isArray((v as any).data) &&
  (v as any).data.every((t: any) => typeof t?.transcriptId === "string");

Try / catch

try {
  const links = await adapter.getAllTranscriptsAccessLinkFromRoomName(roomName);
} catch (err) {
  logger.error("transcript fetch failed", { roomName, cause: err instanceof Error ? err.message : err });
  return []; // transcripts are non-critical, degrade gracefully
}

Prevention

When it happens

Trigger: Calling getAllTranscriptsAccessLinkFromRoomName(roomName) where roomName has no recordings, the Daily API key is missing/invalid, the response shape does not match getTranscripts schema, or one of processTranscriptsInBatches inner promises rejects.

Common situations: Daily app credentials misconfigured in the Cal.com admin; roomName is stale (room deleted); Daily API rate limit hit; Daily changed their transcript payload shape causing getTranscripts.parse to throw ZodError; transcriptId missing on a transcript object.

Related errors


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