KamoCRM

Whole calls, timed turns with speakers, and a backfill

FixConversionService
Shipped
November 6, 2026 at 11:23 PM UTC
Author
Kamo
Commit
20e0701

Owner report 2026-11-06: transcripts "do not reflect the entirety of the call recordings", and separate channels should say who is speaking. Measured on 180 platform recordings with speech (read-only, against a fresh Whisper transcript of the same audio): 52% of stored transcripts held under 80% of the words spoken, 3 had none, 75.7% of all words were kept. The cut was not at the end (80 of 94 short ones still reach the last 10% of the call): the org's routing sent every chunk to gpt-4o-transcribe, which returns a chunk cut short after a pause. - Every chunk now asks AIService for timed segments (aiservice 6fd880a), so only models that give them answer; a 424 (no such model for the org) falls back to plain, as before. - Recordings are transcribed as timed turns (CallTurns): chunks stitched on the recording's clock in order; one-party channels (a leg's rx/tx files, when the uploader marks them in the manifest) are transcribed one by one and merged in time order with each channel's speaker (our member by extension, else the other party). A single mixed channel keeps a diarizing model's labels only when the recording went in one request. Stored in RECORDINGS.TRANSCRIPT_TURNS beside the plain TRANSCRIPT. A recording with no audio is stored as an empty transcript instead of failing ffmpeg. - TranscriptBackfill re-transcribes rows whose turns are null: one recording per 30 s tick, on one pod (SingletonTaskRunner), skipped while this pod has live transcription, audio and never writes it. Needs kamo-shared-library e1a4a4ee and aiservice 6fd880a.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing