Live Transcription + Analytics hero
Strongly Certified · Streaming Workflow

Live Transcription + Analytics

Streams transcripts to Kafka. Archives audio + transcript to S3. Both in real time.

WebSocket audio in, STT, fan-out: per-turn JSON envelopes to a Kafka topic for downstream analytics, full session audio + transcript to S3 via the streaming-recorder. The classic cold-side data lake pipeline for voice traffic, without a separate post-call ingest.

≤1.5s
First transcript (p95)
≤250ms
Kafka publish ack (p95)
Per-session
Audio + transcript archived

The voice loop, end-to-end.

No black box. Each step is a typed-frame node you can edit, monitor, and replace.

01

Caller speaks. Audio streams in over WebSocket at 16 kHz PCM mono.

02

VAD endpoints, STT transcribes. Each finalised TextFrame fans out to two sinks.

03

Sink 1: streaming-kafka-producer publishes a JSON envelope (session_id, turn_id, role, text, timestamp_ms) keyed by session_id. gzip + acks=all.

04

Sink 2: streaming-recorder buffers audio + transcript, uploads to your S3 bucket on session end under live-transcription//.

Built for production. Day Two-ready.

Streaming graph contract, observability, and cost discipline come standard. The agent ships with a full test suite that runs in CI on every node version bump.

Per-turn Kafka publish

streaming-kafka-producer with aiokafka 0.12. JSON envelope by default with session_id / turn_id / role / text / timestamp_ms; raw-text mode available. Configurable key template + compression + acks.

aiokafkaJSON envelopeConfigurable acks

Full session S3 archive

streaming-recorder buffers audio + frame-level transcript and uploads on session end. Configurable bucket, key prefix, audio direction. S3-protocol compatible (real S3, R2, MinIO).

S3 protocolPer-session prefixEnd-of-call upload

Concurrent sinks

Both sinks consume the same STT text_out port via the multi-edge ports declared in ADR-S13. Kafka publish doesn't block S3 upload, and vice versa.

Multi-edge portsIndependent sinksADR-S13

Lifecycle-driven

WebSocket trigger control_out feeds both sinks - StartFrame opens the Kafka producer + recorder, EndFrame flushes and closes both. No frames lost on session end.

StartFrame openEndFrame flushCrash-safe

Session-keyed partitioning

Kafka records key off session_id by default so a session's transcripts land on one partition for ordered consumption. Switch to {{session_id}}-{{turn_id}} for parallel-per-turn analytics.

Single-partition defaultConfigurableCompaction-friendly

Live span tree

Kafka publish latency, S3 upload size, and producer record counts all land on per-turn spans. Filter the canvas overlay by sink to find the slow leg.

ADR-S14Per-sink attributesBottleneck-finding

Real services. Your stack.

Every dependency is a registered Strongly service or a model you control. Swap any one of them in the install wizard. The graph stays intact.

Kafka addon
Broker bootstrap servers, gzip + acks=all by default
S3 addon
Real S3 / R2 / MinIO for the per-session archive
STT model
whisper-1 default - swap any registered STT
Streaming recorder
Frame-level archive at session end

Tune it. Don't fork it.

The marketplace template is the graph. Every customisation below is a config change or a single-node addition - never a rewrite.

Different topic per route

Pin kafka_out.config.topic per workflow instance - sales calls, support, onboarding all in their own topics.

Per-turn partitioning

Change kafka_out.config.key_template to {{session_id}}-{{turn_id}} so each turn lands on a fresh partition.

Raw text payloads

Flip kafka_out.config.include_metadata off when downstream Logstash-style consumers expect only the transcript text.

Hot-side audit

Add streaming-conversation-store between STT and Kafka so per-session canonical transcripts land in Mongo alongside the Kafka data lake feed.

Multilingual

Insert streaming-language-detect after STT and use streaming-conditional to route per-language to different Kafka topics.

Production. Not pilots.

We don't leave until it runs. Talk to a forward-deployed engineer about deploying Live Transcription + Analytics into your environment with your STT, your LLM, your TTS, your data.

Schedule a Demo