A Korean-first voice engine that holds the call

A realtime speech pipeline tuned end to end for Korean conversation — turn-taking that waits through a backchannel, barge-in that tells an interruption from a nod, and graceful degradation instead of a dropped call.

It waits instead of interrupting

A Silero voice-activity stop with backchannel handling, so a listener's 네 or 음 doesn't get treated as the end of your turn.

The processors run in one pass

PII redaction, output guardrails, risk scoring, diarization, and Korean text normalization run together in a single pass over the stream.

The pause gets covered

Greetings are pre-synthesized at startup, and Korean filler audio covers a tool call that runs long, so the line never goes silent.

Every call is instrumented

Time-to-first-audio and time-to-first-byte are measured per call, for running the system day to day — we don't publish them as benchmarks.

Korean-firstWebRTCMobileLive transcriptsTurn-takingBarge-inFiller audioSticky failoverSilence watchdogsPSTN-ready

One call

Built for how Korean conversations actually run

Turn-taking, normalization, and guardrails tuned for Korean end to end — not an English pipeline with a translation layer bolted on.

Explore the pipeline

30+

custom voice-pipeline processors

repository audit, August 2026

What happens on a call

Connect

A call connects over WebRTC in the browser or Daily on mobile — both live today. Telephony-ready architecture is built and key-gated.

  • Browser voice and mobile voice run in production
  • Telephony modules are built and integrated per deployment
  • The console API reaches the same session
See it in the pipeline
Pre-synthesized greeting
Tool call
Filler audio
Response resumes

Cover the wait

Greetings are pre-synthesized at startup, and Korean filler audio steps in when a tool call runs long — the wait is engineered away.

  • Greetings are synthesized before the call begins
  • Filler audio holds the line while a tool call runs long
  • The line is never left silent
See it in the pipeline
Caller
Agent
BackchannelBarge-in

Korean-first turn-taking

A Silero voice-activity stop, patient turn-taking, and Korean backchannel handling so the agent waits instead of talking over people.

  • A backchannel is not treated as the end of a turn
  • An interruption is told apart from a nod
  • The speaker is never clipped mid-sentence
See it in the pipeline

Degrade over crash

Feature flags let the pipeline step down a capability when something is uncertain — risky paths default off, and the system holds the call instead of ending it.

  • Risky paths are off by default
  • Sticky failover sits between TTS providers
  • Silence watchdogs catch a call that went quiet
See it in the pipeline

It waits instead of interrupting

A Silero voice-activity stop with backchannel handling, so a listener's 네 or 음 doesn't get treated as the end of your turn.

Korean-first turn detection waits for the caller to finish instead of clipping them mid-sentence.

See turn handling

Turn timeline

Caller
Agent
BackchannelBarge-in

A backchannel does not hand over the turn; a barge-in stops the agent immediately.

The wait is engineered away

Greetings are pre-synthesized at startup, and Korean filler audio steps in when a tool call runs long. Silence mid-call reads as a fault to the person on the line, so that gap is never left open.

See the observation points

Call timeline

Pre-synthesized greeting
Tool call
Filler audio
Response resumes

Filler only covers the stretch where a tool call runs long, and hands back the moment the response is ready.

Pipeline explorer

Pick a stage and see what it does

One call passes through these stages in order. For each one: what it does, what it leaves behind, and whether it is our own code or a vendor model we orchestrate.

Choose a stage

Processing order

We rent the models and build the conversation. Vendor models are orchestrated; the Korean tuning, the orchestration, and the reliability layer are ours in code.

What to show

The transport connects and the call begins

A call connects over WebRTC in the browser or Daily on mobile. Telephony-ready architecture is built and key-gated.

  • Browser voice and mobile voice are live
  • Telephony is integrated per deployment
  • The console API references the same session

Who built it

Our orchestration layer

Korean-first turn detection waits for the caller to finish instead of clipping them mid-sentence.

Turn-taking · realtime voice pipeline

Live transports

Browser and mobile work today

Browser voice over WebRTC and mobile voice run in production. The same pipeline handles both paths, so the transport changes but the conversation handling does not.

  • The browser connects over WebRTC with nothing to install
  • Mobile apps reach the same voice engine
  • The console API references the same session

Browser

WebRTC, no install

Mobile

iOS and Android apps

See the surfaces

Choose a transport

Browser (WebRTC)

Live
  1. The browser is granted microphone access
  2. A WebRTC session opens
  3. The pipeline receives its first audio

Starts straight from the browser with nothing to install.

Live

Mobile

Live
  1. The app requests a call
  2. A mobile session opens
  3. The same pipeline takes over

iOS and Android apps reach the same voice engine.

Live

Telephony

Key-gated
  1. Scope is agreed during the deployment
  2. The path only lives once the key is opened
  3. From there it enters the same pipeline

Built, but it does not switch on out of the box.

Key-gated — scoped per deployment

Console API

Live
  1. The console reads the session
  2. Transcript and record attach
  3. Follow-up continues

The operator console references the same session.

Live

How a call starts on the selected transport. Browser (WebRTC)

Key-gated transports

Telephony is built, and not open yet

The telephony architecture is built but key-gated — it is integrated per deployment, and we would rather say that plainly than imply you can dial in tomorrow.

  • Telephony modules do not switch on out of the box
  • Scope is set during the deployment
  • Every transport carries a clearly stated status

Key-gated

Scoped per deployment

Stated plainly

A status per transport

See safety and reliability
A phone resting face-down on a desk
The same pipeline handles the call in the browser and on mobile.

Where the same engine surfaces

The same pipeline shows up differently in the browser, on mobile, in the operator console, and on the call record. Wherever you start, the processing order is the same.

A desk with a notebook, tablet, and mug

Consumer surface

Browser calling

Start a WebRTC call in the browser with nothing to install.

See the apps
The app's persona chat screen

Consumer surface

Mobile apps

iOS and Android apps connect to the same voice engine.

See the apps
The operator console dashboard

Operations surface

Operator console

Handle call records and follow-up from a single screen.

See the console
The app's Records tab showing a call log

Operations surface

Call record

Transcript and observation points remain after the call ends.

See the platform

Scoped in the deployment

Scoped per deployment rather than sold as a plan

Every engagement is scoped and priced per deployment rather than by a fixed plan or a per-credit meter. We start from your use case, expected volume, and integration surface, then quote a pilot and a path to production.

  • Which transports open, and when
  • Whether telephony is part of this deployment
  • Data handling, including retention
  • Console operations and follow-up flow
  • What opens in stages behind feature flags
  • The path from a pilot to production
Talk to us

Counted in the repository

How far the part we built ourselves actually reaches

These are not marketing metrics. Each figure was counted in the repository, and describes how much we built — never performance or adoption.

30+

custom voice-pipeline processors

running together in a single pass over the stream

100+

feature flags

staging how capability is opened

450+

operator-console components

where the work after the call happens

34

care and consumer backend domain modules

the data flow schedules, records and notifications travel

Every figure was counted in the repository — audit, August 2026.

What we watch on a call

Turn-taking

Turn boundaries and barge-in are marked

So you can retrace where the conversation crossed.

  • Turn boundaries appear on the timeline
  • Barge-in points are recorded separately
  • Stretches classified as backchannel are distinguished
See it in the pipeline
Backchannel

A nod is not the end of a turn

  • A listener's short acknowledgement is told apart
  • The speaker is never clipped mid-sentence
  • Tuned to the rhythm of Korean conversation
See it in the pipeline
Failover

The call continues when a provider wobbles

  • Sticky failover sits between TTS providers
  • Silence watchdogs catch a call that went quiet
  • Feature flags step a capability down instead
See it in the pipeline
Per-call instrumentation

Measured for operations, not published as a benchmark

  • Time-to-first-audio is measured per call
  • Time-to-first-byte is recorded alongside it
  • Used only for running the system day to day
See it in the pipeline

Per-call observability

Every call is instrumented

Time-to-first-audio and time-to-first-byte are measured per call, for running the system day to day — we don't publish them as benchmarks.

See safety and reliability

Call observation points

TurnsBarge-inFailoverGuardrailsTiming

Signals this call leaves

Turn boundaries

Recorded

Barge-in points

Recorded

Failover events

None

This callPrevious callCall start

The pipeline degrades instead of dropping — a vendor hiccup doesn't mean a dead call.

Sticky failover · silence watchdogs · health-gated deploys

Reliable by design

Reliable by design. Not by promise.

A voice call is unforgiving — the failure modes are handled ahead of time, not hoped away.

It downgrades rather than drops

Feature flags let the pipeline step down a capability when something is uncertain — risky paths default off, and the system holds the call instead of ending it.

We don't claim the models

We orchestrate best-of-breed vendor models for speech-to-text, language, and text-to-speech. What we build is the Korean tuning, the orchestration, and the reliability layer around them — including sticky failover between TTS providers.

100+

feature flags staging how capability is opened

repository audit, August 2026

DegradeStep a capability down instead of dropping the call
FailoverSticky failover between TTS providers
WatchdogSilence watchdogs catch a call that went quiet
GateA human is the only gate to production
FlagsRisky paths are off by default
AuthEvery backend function authenticates in its own handler

One pass before anything is stored

PII redaction, output guardrails, risk scoring, diarization, and Korean text normalization run together in a single pass over the stream. Data handling for a given deployment, including retention, is scoped with you during the engagement.

PII redaction

Personal data is redacted before it reaches the call record.

Output guardrails

Guardrails apply alongside the response, and risky paths default off.

We do not publish latency benchmarks

Capability descriptions reflect the production pipeline. Transport availability varies by deployment — telephony is integrated during an engagement. We do not publish latency benchmarks; per-call timings are instrumented for operations.

Read the docs

Time-to-first-audio and response latency captured on every call for our own operations, not published as benchmarks.

Per-call observability · not a public benchmark

An orchestration layer we own

The pipeline is something you hold in code

Turn detection, barge-in, latency handling, and observation points are ours in code. We rent the models; we build the conversation. Below is how that configuration is shaped.

  • Korean turn-tuning processor
  • Barge-in handling
  • Filler audio
  • Sticky failover
  • Per-call observation points
  • Feature flags
Read the docs
# Call session pipeline — the order is identical across transports.pipeline = Pipeline([    transport.input(),    stt,                      # a vendor model we orchestrate    korean_turn_tuning,       # a processor we wrote    guardrails,               # PII redaction + output guardrails    llm,                      # a vendor model we orchestrate    tts,                      # sticky failover between providers    transport.output(),])

The same configuration applies across every transport

Browser, mobile, and the key-gated telephony path all run the same pipeline configuration. The transport changes; the processing order does not.

Read the guides

In short

The four stages one call passes through

The transport opens, speech becomes text, Korean turn tuning decides whether the turn ended, and the response becomes sound again. Observation points attach across all of it.

  1. 01

    Connect

    A transport opens in the browser or on mobile and the call begins.

  2. 02

    Listen

    Speech is transcribed live, with Korean normalization right behind it.

  3. 03

    Decide

    Turn tuning separates an ending from a backchannel or a barge-in.

  4. 04

    Respond

    The response is synthesized; record and follow-up hand off to the console.

Would you like to walk the pipeline with us?

Book a walkthrough of the pipeline behind WelVoice — turn-taking, reliability, and telephony-ready transports.