You have a Pipecat bot: a frame pipeline connected to ASR, an LLM, and TTS. You want it to answer real calls over ClutchCall’s QUIC/MoQT transport. Pipecat’s transport seam maps cleanly onto the audio bridge. Caller audio arrives on an uplink track. Agent audio goes back on a downlink track. The bridge is real and shipping. This cookbook connects it to Pipecat by hand.
A packaged adapter now ships. Most readers want that instead. pipecat-telequick provides a first-class Pipecat transport (TeleQuickTransport) over the external-agent QUIC plane, with one pipeline per routed call. See Pipecat + ClutchCall Transport. This cookbook remains the raw MoQT audio-bridge path. Build the glue yourself when you need custom framing, custom mixing, or a runtime that the adapter does not cover.
Skip agents.attach and run the bridge yourself. Ask for pcm16 so that Pipecat gets raw audio. The bridge transcodes the PSTN (G.711) leg for you. This is stock SDK.
Keep the bridge reference alive for the full duration of the call. If the garbage collector removes it, both tracks drop. Always call bridge.close() before call.hangup() so that the tracks close cleanly.

Wrapping the bridge as a Pipecat transport

The bridge above already gives you the two hooks that a Pipecat Transport needs. onUplink produces input frames. publishDownlink consumes output frames. A dedicated transport would wrap those into Pipecat’s input() / output() processors so that the pipeline runs unchanged.
Illustrative — this transport is not shipped. MoqtBridgeTransport below does not exist as a package. It shows the design shape only: what a first-class adapter would wrap around the real audio bridge. Do not pip install it.
The adapter’s only real work is the seam that our own runtime already handles:
  • Resample between Pipecat’s frame rate and the runtime’s 8 kHz PCM16 audio bus.
  • Keep the room-scoped MoQT namespaces valid.
  • Carry Opus rather than PCM on browser legs.
None of this work is exotic. It is only not packaged. Today you own the onUplink/publishDownlink glue directly.

What ships today instead of an adapter

Pipecat already speaks WebSocket audio, and ClutchCall accepts a bespoke WebSocket audio sender as a media leg. To use this path:
  1. Point Pipecat’s WebSocket server transport at that on-ramp.
  2. Route the trunk’s inbound rule to your endpoint.
  3. Let the SIP gateway terminate the carrier while Pipecat drives the conversation.
The bot needs no ClutchCall code. This is the same path as migrating a custom WebSocket audio sender.
You can want Pipecat only for the pipeline: cascaded ASR → LLM → TTS, turn-taking, and tools. ClutchCall’s runtime already ships that as a configured DAG with transport, telephony, and barge-in built in. To bring only your models via provider credentials is often less work than to port a Pipecat pipeline onto an adapter that does not exist yet.

Pipecat + Transport

The full conceptual framing and the on-ramps that ship today.

Bridge a LiveKit Agent

The vendor-bridge sibling for a LiveKit backend.

Stream to your own ASR

The uplink-subscribe half of the bridge, on its own.

Keep Your Existing Runtime

Adopt only the transport and keep your own agent loop. This is the Pipecat pattern.