Capture from Retell
Multichannel recording export is built in: capture pulls the call’s per-party recording by call id and scores it offline, preferring the PII-scrubbed file.
The recording you capture feeds a five-dimension conversation-test: separated caller and agent channels are what the Conversation (turn-taking) and Speech (timing) dimensions read, and the same file drops into hotato test run beside a transcript and trace for the Outcome and Policy checks.
| Stack | Automatic pull | Separate channels | Contract-grade default | Network use |
|---|---|---|---|---|
| Vapi | Yes: capture fetches by call id | Yes, out of the box | Yes | One call: fetch the recording |
| Twilio | Yes: capture fetches by recording SID | No by default: must request RecordingChannels=dual at creation | No, opt-in | One call: fetch the recording |
| Retell | Yes: capture fetches by call id | Yes, once call recording is turned on | Opt-in: enable recording first | One call: fetch the recording |
| LiveKit | No: egress runs in your own infra | Yes, if egress records both tracks | Opt-in: configure egress for two tracks | None from Hotato |
| Pipecat | No: the setup recorder runs in your pipeline | Yes, the scaffold writes caller ch0 / agent ch1 | Yes, once the recorder is added | None: local recorder, no network call |
Automatic pull: does hotato capture fetch it for you. Separate channels: is caller/agent separation what you get. Contract-grade default: is that separation on without extra setup. Network use: what capture calls out to, not your infrastructure.
Enable call recording
- Turn on call recording for your agent; Retell exposes per-party (multichannel) recordings on the call object after the call ends.
- Grab the call id from the dashboard or the call webhook payload.
Score it: auto-pull
Set RETELL_API_KEY + call id: capture fetches the recording (only network call: that download), scores offline. --stack retell = fix knobs; --expect yield/hold = interruption vs. backchannel.
export RETELL_API_KEY=... uvx hotato capture --stack retell --call-id <call-id>
Under the hood: GET /v2/get-call/<call-id>, then scrubbed_recording_multi_channel_url (preferred) or recording_multi_channel_url, each party on its own channel.
The plain recording_url is a mono mix; Hotato rejects it unless you pass --allow-mono: indicative only; no contract-grade talk-over attribution.
--allow-mono opts out of that gate.Or score a WAV you already have
Downloaded the multichannel file? Point Hotato at it: caller on channel 0, agent on channel 1.
uvx hotato run --stereo call.wav --stack retell --expect yieldChannels flipped? Pass --caller-channel 1 --agent-channel 0.
Pulling more than one call?
hotato connect retell --api-key <key> stores the key once, locally (0600); Retell has no list endpoint to check it against up front, so the check runs on the first pull instead. From there, Hotato pulls exactly the calls you name by --call-id: pull bulk-fetches those recordings, and sweep pulls, then ranks the worst turn-taking moments across them in one offline dashboard. Every stack’s pull support →
uvx hotato pull --stack retell --call-id c1 --call-id c2 uvx hotato sweep --stack retell --call-id c1 --call-id c2
Separated caller and agent audio is what makes overlap attributable; speech activity comes from exposed VAD thresholds, frame-inspectable. The scorer takes one two-channel WAV or two aligned mono WAVs.