How a Pipecat voice agent would run over the QUIC/MoQT transport — the conceptual shape, and the on-ramps that ship today.
You have a Pipecat bot — a pipeline of frame processors wired to ASR, an LLM,
and TTS — and you want it to answer real phone calls and browser sessions over
TeleQuick’s transport instead of a media server you operate. This page is
honest about where that stands: there is no packaged Pipecat adapter today.
It describes the shape such an adapter would take, and the two on-ramps that
already work if you want to run Pipecat now.
Not yet available — no Pipecat adapter ships. There is no
pipecat-branded transport, plugin, or vendor-bridge target in TeleQuick
today. The runtime’s built-in bridge routes to LiveKit, Vapi, and Twilio
backends — Pipecat is not one of them. This page is a conceptual design
plus the real, shipping alternatives below; it does not document a product you
can install. Do not build a launch plan around a first-class Pipecat
integration.
Pipecat and TeleQuick solve different layers, which is exactly why they
compose cleanly:
Pipecat owns the conversation — the frame pipeline (VAD, ASR, LLM
context, TTS), turn-taking on your side, and your model choices. It abstracts
the wire behind a Transport (input + output) that emits and consumes audio
frames.
TeleQuick owns the transport and telephony — real-time audio over
QUIC/MoQT on a single :443 plane, the SIP gateway and B2BUA that terminates
carrier trunks, and the media plane that carries the frames.
So the integration point is Pipecat’s transport seam. The question is only
what a TeleQuick transport for Pipecat would look like — and, until that
exists, how to feed a Pipecat pipeline over a seam that already ships.
Preview / design sketch. The code below is illustrative pseudocode for a
transport that does not exist yet. It shows the intended shape only — no
package named here is installable. It is a design target, not a
quickstart.
A first-class integration would be a Pipecat Transport implementation that
binds Pipecat’s audio frames to our media-over-QUIC publish/subscribe
primitives — reading caller audio off an uplink track and writing agent
audio to a downlink track, both keyed by the call id. Conceptually:
# ILLUSTRATIVE — this transport is not shipped. Design sketch only.from pipecat.pipeline.pipeline import Pipelinefrom pipecat.pipeline.runner import PipelineRunnerfrom pipecat.pipeline.task import PipelineTask# A transport that would carry Pipecat frames over the QUIC/MoQT plane:# - input(): subscribe to voice/<call_sid>/uplink -> AudioRawFrame (PCM16)# - output(): publish voice/<call_sid>/downlink <- AudioRawFrame (PCM16)transport = QuicMoqtTransport( url="quic://relay.telequick.dev", call_sid=call_sid, sample_rate=8000, # the runtime's audio bus is 8 kHz PCM16 LE)pipeline = Pipeline([ transport.input(), # caller audio in stt, # your ASR frame processor llm, # your LLM context tts, # your TTS frame processor transport.output(), # agent audio back to the caller])await PipelineRunner().run(PipelineTask(pipeline))
The work that adapter would have to do is the same work our own runtime already
does at that seam: resample between Pipecat’s frame rate and the 8 kHz PCM16
audio bus, keep the room-scoped MoQT namespaces valid, and (for browser legs)
carry Opus rather than PCM. None of it is exotic — it just isn’t packaged.
You don’t have to wait for the adapter. Two seams that exist right now let a
Pipecat pipeline take real calls.
WebSocket audio on-ramp (recommended)
Raw transport primitives (custom runtime)
Pipecat already speaks WebSocket audio. TeleQuick accepts a bespoke
WebSocket audio sender as a media leg, so you can point a Pipecat WebSocket
transport at that on-ramp and let the SIP gateway terminate the carrier
trunk while Pipecat drives the conversation.
1
Run your Pipecat bot behind a WebSocket transport
Use Pipecat’s WebSocket server transport (with the appropriate audio
serializer for your frame format). This is stock Pipecat — no
TeleQuick code.
2
Route the call's media to your WebSocket
Configure the inbound rule for the number/trunk to stream call audio to
your Pipecat WebSocket endpoint instead of the managed runtime. The
engine terminates SIP/RTP and forwards audio frames on the WebSocket
media leg; your bot answers.
3
Match the audio contract
Send and receive at the call’s codec — G.711 (µ-law/A-law) for phone
legs — or let the engine transcode to the 8 kHz PCM16 bus. Keep
Pipecat’s input/output sample rates consistent with what you negotiate.
If you want QUIC/MoQT directly rather than a WebSocket leg, treat Pipecat as
a custom runtime: the native SDK exposes MoQT publish/subscribe over the
QUIC transport, and you bind Pipecat’s transport input()/output() to
those primitives yourself — this is the manual version of the design sketch
above.
The native SDK bindings speak QUIC/MoQT directly and do not include
the browser’s WebSocket/WebRTC fallback leg — plan for a QUIC-reachable
network. See
Custom Agent Runtime for
the primitives and
Keep Your Existing Runtime for
the transport-only pattern.
If the reason you want Pipecat is the pipeline — cascaded ASR → LLM → TTS,
turn detection, tool calls — TeleQuick’s own runtime already ships that as a
configured DAG, with the transport, telephony, turn-taking, and barge-in built
in. Bringing only your models (via provider credentials) is often less work
than porting a Pipecat pipeline onto an adapter that doesn’t exist yet.
Keep Your Existing Runtime
Adopt only the transport and keep your own agent loop — the pattern a
Pipecat bot would use today.
Custom Agent Runtime
Wire any runtime to the raw MoQT publish/subscribe primitives over QUIC.
BYO Speech-to-Speech
Keep our runtime and point it at your own realtime endpoint with per-tenant
credentials.
From Custom WebSocket Audio
The on-ramp a Pipecat WebSocket transport uses to take live calls today.