Overview
The Pipecat integration monitors voice AI applications built on the open-source Pipecat Python framework. Drop theroark_analytics[pipecat] observer into your existing pipeline and call lifecycle, transcripts, tool invocations, and recordings are forwarded to Roark automatically.
The observer is deployment-agnostic — it works the same whether your pipeline runs self-hosted (any Python environment) or on Pipecat Cloud (Daily’s managed Pipecat hosting). The only requirement is that the observer is included in your pipeline at runtime.
Prerequisites
- A running Pipecat application (Python 3.10+,
pipecat-ai >= 0.0.40; tested withpipecat-ai0.0.108) - A Roark API key with WRITE scope (generate one)
Setup Instructions
Step 1: Install the observer
Step 2: Configure your API key
The only setting you need to provide is your Roark API key..env
| Variable | Required | Purpose |
|---|---|---|
ROARK_API_KEY | Yes | Roark API key with WRITE scope. Read by the observer at construction; can also be passed as api_key=. |
Step 3: Wire it into your pipeline
Construct aRoarkObserver, splice its audio_processor into your pipeline after transport.output() so the bot channel captures post-TTS audio, and pass the observer in PipelineParams(observers=[...]):
| Argument | Required | Description |
|---|---|---|
api_key | Yes | Your Roark API key (WRITE scope). Falls back to ROARK_API_KEY. |
agent_id | Yes | Stable agent identifier |
agent_name | No | Display name shown in the Roark dashboard |
agent_prompt | No | System prompt — persisted as the agent’s prompt revision |
audio_buffer_processor | No | Power-user override: pass your own AudioBufferProcessor to control sample rate, channel count, or buffer size. If omitted, the observer creates a default one (stereo, ~256 KB chunks; sample rate adopted from the pipeline’s StartFrame) accessible via observer.audio_processor. |
pipecat_call_id | No | Stable call identifier. Generated internally if omitted. Pass the same value to PipelineTask(conversation_id=...) to correlate with OTel traces — see Observability → Traces |
Power-user: bring your own AudioBufferProcessor
If you need to tune sample rate, channel count, or buffer size, instantiate AudioBufferProcessor yourself and pass it via audio_buffer_processor=. Splice that same instance into your pipeline after transport.output() in place of roark.audio_processor:
Step 4: Verify the connection
Run a test call through your Pipecat pipeline. Within a few seconds you should see:- The agent appear in your Roark dashboard under the Pipecat source filter
- The call appear in the calls table with status
In Progress - After the call ends — the transcript, tool invocations, and merged recording attached to the call
What Gets Synced
Theroark_analytics[pipecat] observer forwards:
- Calls — Lifecycle with timing and end reason
- Agents — Lazy-registered on first sight using the
agent_id/agent_namefrom the observer - Prompts — System prompt captured at call start
- Transcripts — Per-turn messages with role, content, and timestamp
- Tool Invocations — Tool call IDs, names, JSON arguments, and results
- Recordings — Pre-mixed stereo PCM audio streamed in chunks during the call and merged into a single WAV at call-end
Agent Management
Pipecat agents are lazy-registered the first time the observer reports them:- The first
call-startedevent with a newagent_idcreates the agent in Roark - Subsequent events update the agent’s name and prompt if they change
- Pipecat-sourced agents appear in the agents page under the Pipecat source filter
Deploying on Pipecat Cloud
The observer is a drop-in Pipecat component, so the same wiring works on Pipecat Cloud. Two things to do:- Add
roark_analytics[pipecat]to therequirements.txtbundled with your bot image - Expose your
ROARK_API_KEYto the deployment as a Pipecat Cloud secret — the observer reads it at runtime
bot.py
requirements.txt
Monitoring Integration Health
Integration health is observed through the calls and agents that arrive in Roark:- No recent calls — Check that the observer is attached to your pipeline and that
api_keyis correct (on Pipecat Cloud, verify theROARK_API_KEYsecret is set on the deployment) - Calls created but no recordings — Confirm
roark.audio_processorsits aftertransport.output()in the pipeline - Calls created but no transcript — Verify that your STT processor emits final
TranscriptionFrames before the observer (interim transcriptions are ignored) - Call never ends in Roark — Some transports (notably
SmallWebRTC) tear down without pushingEndFrame. Callawait roark.aflush()from your disconnect handler —aflush()is idempotent, so the regularEndFramepath will no-op if both fire
Next Steps
Configure traces
Send OpenTelemetry traces to Roark
Run Simulations
Test your Pipecat agents
Configure Evaluators
Set up evaluation criteria
Integration Overview
Explore other integrations

