* refactor(config): consolidate media model lists * refactor(config): unify memory configuration * refactor(config): consolidate TTS ownership * refactor(config): move typing policy to agents * refactor(config): retire product-level config surfaces * refactor(config): share scoped tool policy type * chore(config): refresh generated baselines * fix(config): honor agent typing overrides * fix(config): migrate sibling config consumers * refactor(infra): keep base64url decoder private * fix(config): strip invalid legacy TTS values * chore(config): refresh rebased baseline hash * fix(doctor): route legacy messages.tts.realtime voice to talk during tts move * refactor(config): polish final layout names * refactor(config): freeze retired tuning defaults * feat(config): add fast mode default symmetry * refactor(config): key agent entries by id * docs(config): update final layout reference * test(config): cover final layout migrations * chore(config): refresh final layout baselines * fix(config): align final layout runtime readers * fix(config): align remaining readers * fix(config): stabilize final layout migrations * fix(config): finalize config projection proof * fix(config): address final layout review * docs(release): preserve historical config names * fix(config): complete keyed agent migration * fix(config): close final migration gaps * fix(config): finish full-branch review * fix(config): complete runtime secret detection * fix(config): close final review findings * fix(config): finish canonical docs and heartbeat migration * fix(config): integrate latest main after rebase * refactor(env): isolate test-only controls * refactor(env): isolate build and development controls * refactor(env): collapse process identity indirection * refactor(env): remove duplicate config and temp aliases * docs(env): define the operator-facing allowlist * ci(env): ratchet production variable count * fix(env): remove stale provider helper import * fix(env): make ratchet sorting explicit * test(env): keep test seam in dead-code audit * test(env): cover ratchet growth and boundary; document surface budgets * docs(config): document tier-eval consolidations * docs(config): clarify speech preference ownership * test(memory): align retired tuning fixtures * refactor(memory): freeze engine heuristics * refactor(config): apply tier-eval tranche * refactor(tts): move persona shaping to providers * refactor(compaction): move prompt policy to providers * test(config): align hookified prompt fixtures * chore(deadcode): classify test-only exports * chore(github): remove unused spawn helper * chore(deadcode): classify queue diagnostics * chore(deadcode): remove unused lane snapshot export * chore(plugin-sdk): ratchet consolidated surface * fix(config): integrate latest main after rebase
6.7 KiB
summary, read_when, title
| summary | read_when | title | |||
|---|---|---|---|---|---|
| Deepgram transcription for inbound voice notes |
|
Deepgram |
Deepgram is a speech-to-text API. OpenClaw uses it for inbound audio/voice-note
transcription through tools.media.audio and for Voice Call streaming STT
through plugins.entries.voice-call.config.streaming.
Batch transcription uploads the complete audio file to Deepgram and injects
the transcript into the reply pipeline ({{Transcript}} + [Audio] block).
Voice Call streaming forwards live G.711 u-law frames over Deepgram's
WebSocket listen endpoint and emits partial/final transcripts as Deepgram
returns them.
| Detail | Value |
|---|---|
| Website | deepgram.com |
| Docs | developers.deepgram.com |
| Auth | DEEPGRAM_API_KEY |
| Default model | nova-3 |
Getting started
```bash DEEPGRAM_API_KEY=dg_... ``` ```json5 { tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3" }], }, }, }, } ``` Send an audio message through any connected channel. OpenClaw transcribes it via Deepgram and injects the transcript into the reply pipeline.Configuration options
| Option | Path | Description |
|---|---|---|
model |
tools.media.models[].model |
Deepgram model id (default: nova-3) |
language |
tools.media.models[].language |
Language hint (optional) |
providerOptions.deepgram merges extra query params directly into the
Deepgram /listen request, so any Deepgram-supported param name works
(for example detect_language, punctuate, smart_format):
Voice Call streaming STT
The bundled deepgram plugin also registers a realtime transcription provider
for the Voice Call plugin.
| Setting | Config path | Default |
|---|---|---|
| API key | plugins.entries.voice-call.config.streaming.providers.deepgram.apiKey |
Falls back to DEEPGRAM_API_KEY |
| Base URL | ...deepgram.baseUrl |
DEEPGRAM_BASE_URL or Deepgram's public API |
| Model | ...deepgram.model |
nova-3 |
| Language | ...deepgram.language |
(unset) |
| Encoding | ...deepgram.encoding |
mulaw |
| Sample rate | ...deepgram.sampleRate |
8000 |
| Endpointing | ...deepgram.endpointingMs |
800 |
| Interim results | ...deepgram.interimResults |
true |
{
plugins: {
entries: {
"voice-call": {
config: {
streaming: {
enabled: true,
provider: "deepgram",
providers: {
deepgram: {
apiKey: "${DEEPGRAM_API_KEY}",
model: "nova-3",
endpointingMs: 800,
language: "en-US",
},
},
},
},
},
},
},
}
For a Deepgram custom endpoint,
set baseUrl to the endpoint root, including any base path but not /listen.
Realtime endpoints accept http://, https://, ws://, and wss://. HTTP
maps to WS, HTTPS maps to WSS, and explicit WebSocket schemes stay unchanged.
Malformed URLs and other schemes fail during session setup.