Dev & Engineering voice-aitelephonyspeech-to-texttext-to-speechtwiliotypescriptpythonopentelemetry

Patter Voice SDK

A Python and TypeScript SDK for building phone AI agents with swappable voice, model, and carrier layers.

FollowAgents review · FARS-2.0
Not yet reviewed
See the full review method →

What does this agent do, and when should you use it?

Patter is an open-source SDK that connects an application’s AI agent to the phone network while handling the agent loop, speech services, realtime voice, audio processing, and carrier integration. It ships Python and TypeScript SDKs, which the README describes as having the same surface, hooks, and events. Developers select providers independently for LLMs, STT, TTS, realtime engines, telephony, and audio, then compose them in Realtime, Pipeline, or Hybrid mode. A service runs through `phone.serve()`; local development can use a Cloudflare quick tunnel, while production uses a static `webhook_url`.

An application creates phone access with Patter, such as Patter(carrier=Twilio(), phone_number="+15550001234"), then creates an agent through phone.agent() with OpenAIRealtime, a system_prompt, and a first_message. Calling await phone.serve(agent, tunnel=True) starts the agent service and, when enabled, creates a Cloudflare quick tunnel that points the number at it. Patter orchestrates a call across the carrier, speech components, and model; documented carriers are Twilio, Telnyx, and Plivo. It also emits vendor-neutral OpenTelemetry traces and includes an LLM fallback chain for provider failover during a call.

  1. A restaurant team building an inbound booking receptionist in Python or TypeScript can start from the Inbound Agent template.
  2. A business that needs outbound calls with AMD and voicemail drop can use the Outbound Calls template.
  3. A developer with a Twilio number who wants to choose among `OpenAIRealtime`, Gemini Live, Ultravox, or ElevenLabs ConvAI for realtime voice.
  4. An integration team that needs a phone agent to look up CRM records or create tickets through webhook tools.
  5. A voice product team combining providers such as Deepgram for STT and ElevenLabs for TTS in Pipeline mode.
  6. A developer who wants to simulate an entire call from the terminal before connecting a real phone number.

What are this agent's strengths and limitations?

Pros
  • Separates LLM, STT, TTS, realtime, telephony, and audio layers so providers can be chosen independently.
  • Offers both Python and TypeScript SDKs, with documented parity for surface area, hooks, and events.
  • Supports Twilio, Telnyx, and Plivo, with tools, call transfer, and guardrails described as carrier-consistent.
  • Provides Realtime, Pipeline, and Hybrid modes plus an LLM fallback chain for mid-call provider failover.
  • Includes local tunneling, terminal call simulation, and vendor-neutral OpenTelemetry tracing.
Limitations
  • A working deployment depends on accounts and environment-variable credentials for external model, voice, and carrier providers.
  • Local `tunnel: true` uses a Cloudflare quick tunnel; production requires a static `webhook_url` or ngrok.
  • The supplied materials do not document provider pricing, combined billing behavior, or production capacity limits.
  • Anonymous telemetry is collected by default for SDK, bucketed provider/model, and call facts, although it can be disabled.
  • Although the README states 27+ integrations, the supplied materials do not detail configuration differences or feature coverage for each integration.

How do you install or deploy this agent?

Choose one SDK: run npm install getpatter for TypeScript, or pip install getpatter for Python. Python requires 3.11+ and TypeScript requires 5.0+. Set environment variables for the selected carrier and AI/voice providers, such as TWILIO_ACCOUNT_SID and OPENAI_API_KEY; the project documentation lists the full variable catalog.

How do you use this agent?

For a minimal Python flow, import Patter, Twilio, and OpenAIRealtime from getpatter; create phone = Patter(carrier=Twilio(), phone_number="+15550001234"); create an agent with phone.agent(engine=OpenAIRealtime(), system_prompt="You are a friendly receptionist for Acme Corp.", first_message="Hello! How can I help?"); then run await phone.serve(agent, tunnel=True). Use tunnel=True for local development; use a static webhook_url for production.

How does this agent compare with similar options?

Patter positions itself as an alternative to Vapi and Retell for builders who want to own the voice-AI stack. The supplied materials do not provide feature-by-feature or pricing comparisons.

FAQ

Is Patter locked to one model provider or carrier?
No. The README lists multiple LLM, STT, TTS, realtime, and carrier choices, including Twilio, Telnyx, and Plivo for telephony.
What is required before I can run it?
You need Python 3.11+ or TypeScript 5.0+, plus environment-variable credentials for the carrier and AI or speech providers you choose.
Do I need a public deployment for local development?
Not necessarily. `tunnel=True` creates a Cloudflare quick tunnel and directs the number to the local service; the README also says a whole call can be simulated from the terminal.
What happens if a model provider fails during a call?
Patter includes an automatic LLM fallback chain, described as provider failover during a call.
Does telemetry include call content?
The README says telemetry excludes call content, prompts, phone numbers, keys, and free text. It can be disabled with `telemetry=False`, `getpatter telemetry disable`, `PATTER_TELEMETRY_DISABLED=1`, or `DO_NOT_TRACK=1`.

Related agents