Files
2026-07-13 12:20:06 +08:00

4.2 KiB

Scribe 5-Minute Preflight Runbook

Use this before deep debugging.

1) Confirm the Right Product

  • File-based or storage-based transcription -> stay on scribe.
  • Live meeting media stream or botless live transcription -> use rtms instead.
  • Meeting bot that joins and records before transcription -> chain Meeting SDK Linux first.

2) Confirm Credentials

  • Build-platform issuer credential pair available.
  • JWT generation uses HS256 with one-hour-or-less expiry.
  • Secret stays server-side.
  • Reject placeholder values such as ${ZOOM_API_KEY} and ${ZOOM_API_SECRET}. They can make a naive health check look configured while every real call still fails.

3) Confirm Mode Selection

  • Fast mode for one short file and immediate JSON response.
  • Batch mode for many files, long recordings, or archive-style processing.
  • Browser microphone pseudo-streaming for short repeated chunks uploaded through the async fast-mode wrapper.
  • Fast mode current limits from the API spec:
    • maximum file size: 100 MB
    • maximum duration: 2 hours
  • If fast mode is exposed through a hosted browser UI, prefer an async wrapper:
    • browser uploads once
    • backend returns 202 with a request ID
    • frontend polls for completion This avoids losing successful transcriptions to edge/client timeout races.
  • Observed hosted timing from the deployed sample:
    • ~17.2 MB MP4 completed in ~26s
    • ~38.6 MB MP4 completed in ~26-37s
    • ~59.2 MB MP4 completed in ~32-34s on the backend
    • some ~59.2 MB requests still surfaced as frontend 504 even though the backend later completed with 200 Treat these as deployment observations, not hard API guarantees.
  • Recommended starting browser mic cadence:
    • chunk size: 5 seconds
    • acceptable range: 5-10 seconds
    • keep only 2-3 chunks in flight at once This gives incremental transcript updates without trying to hold a single long browser request open.
  • For browser mic capture, rotate the recorder per chunk so each uploaded blob is a standalone file. Do not assume MediaRecorder.start(timeslice) later chunks will always be independently transcribable.
  • Do not treat this as the default production solution for live transcription. Prefer rtms when the user actually needs a live-audio product instead of a browser demo.

4) Confirm Storage / Webhook Inputs

  • Fast mode file URL or upload path resolves.
  • Batch input/output URIs are valid.
  • AWS or pre-signed access is set correctly for S3 mode.
  • Webhook URL is public HTTPS if you expect notifications.

5) Confirm Post-Processing Contract

  • Decide whether downstream code expects text_display, segments, or word-level timings.
  • Decide whether channel separation or diarization is required before shipping.

6) Quick Probes

  • JWT generation works locally.
  • POST /aiservices/scribe/transcribe succeeds with a known small file.
  • For browser-uploaded files, backend forwarding should use multipart/form-data to Zoom, not a JSON data: URI wrapper.
  • Batch submit returns 201 with job_id.
  • Webhook signature verification works with the configured secret.

7) Fast Decision Tree

  • 401/auth failure -> wrong credential pair or expired JWT.
  • Fast mode returns schema error -> wrong request body or config fields.
  • Fast mode returns 413 Request Entity Too Large before the app logs anything -> reverse proxy limit, not Scribe.
  • Frontend returns 504 but backend logs later show 200 -> browser/edge timeout race; poll by request ID instead of assuming failure.
  • Browser mic feature needs true continuous low-latency media instead of chunked uploads -> switch to rtms, not scribe.
  • Browser mic chunk 1 works but chunk 2 onward is empty -> recorder/container boundary issue; restart the recorder for each chunk.
  • Batch jobs queue but never complete -> storage auth / URI / webhook issues.
  • Missing transcripts for some files -> inspect /jobs/{jobId}/files before re-submitting whole batch.

8) Source Checkpoints

Official docs

Raw docs in repo tooling output

  • tools/zoom-crawler/raw-docs/developers.zoom.us/docs/ai-services/