Agent

Custom Transcriber

Bring your own speech-to-text provider when you need a specific language model, an on-prem deployment, or a vendor your compliance team has already approved.


When to bring your own

  • Language coverage โ€” You need a dialect or low-resource language the default transcriber does not handle well.
  • Domain vocabulary โ€” You have a fine-tuned model that already knows your product names and drug or part numbers.
  • Data residency โ€” Audio must stay in a specific region or inside your own cloud account.
  • Existing contract โ€” You are already paying a provider and want one bill.

Configure it

Open Creator โ†’ your agent โ†’ Voice โ†’ Transcriber and switch the provider from Katexs Default to Custom. Store the credential under Settings โ†’ API Keys โ€” never in the prompt.

json
{
  "transcriber": {
    "provider": "custom",
    "url": "wss://stt.example.com/v1/stream",
    "auth": { "type": "bearer", "secret_ref": "MY_STT_KEY" },
    "language": "en-US",
    "model": "nova-3-medical",
    "sample_rate": 16000,
    "encoding": "linear16",
    "interim_results": true,
    "endpointing_ms": 250,
    "keywords": ["Katexs", "Invisalign", "periodontal"]
  }
}

Protocol requirements

RequirementValue
TransportWebSocket, binary audio frames upstream, JSON transcripts downstream.
Audio format16-bit PCM, mono, 8kHz or 16kHz.
Frame size20ms recommended; anything over 100ms adds audible latency.
Interim resultsRequired for barge-in. Without them the agent cannot be interrupted naturally.
Final markerEach utterance must emit is_final: true with a stable transcript.
Handshake timeoutMust accept the connection within 2s or the call falls back.

Expected message shape

json
{
  "type": "transcript",
  "is_final": true,
  "text": "I'd like to book a cleaning next Tuesday",
  "confidence": 0.94,
  "start_ms": 1240,
  "end_ms": 3980
}

Tuning endpointing

Endpointing decides when the caller has stopped talking. Too aggressive and the agent interrupts; too slow and it feels sluggish. Start at 250ms for transactional calls and 400ms for calls where people think out loud.

Fallback behavior

If the custom stream fails to connect or drops mid-call, the agent falls back to the default transcriber automatically and the call is tagged transcriber_fallback. Persistent fallbacks show up in Observability โ†’ Monitoring.

Test in Testing Lab before going live. Custom transcribers are the most common cause of a great prompt performing badly on real calls.