Skip to main content

Configuration

The Patter class is the main entry point for the SDK. The constructor parameters you provide determine the operational mode.

Mode Detection

Patter runs in local mode. It is auto-detected when telephony provider keys are provided:
ConditionDetected Mode
twilio_sid or telnyx_key providedLocal (auto-detected)
mode="local" set explicitlyLocal
# Local mode (auto-detected — twilio_sid)
phone = Patter(twilio_sid="AC...", twilio_token="...", openai_key="sk-...",
               phone_number="+15550001234", webhook_url="abc.ngrok.io")

# Local mode (auto-detected — telnyx_key)
phone = Patter(telnyx_key="KEY...", telnyx_connection_id="...", openai_key="sk-...",
               phone_number="+15550001234", webhook_url="abc.ngrok.io")

Constructor Parameters

Local Mode

ParameterTypeDefaultDescription
modestr"local"Operating mode. Can be omitted — auto-detected when provider keys are given.
twilio_sidstr""Twilio Account SID.
twilio_tokenstr""Twilio Auth Token. Required when twilio_sid is provided.
telnyx_keystr""Telnyx API key.
telnyx_connection_idstr""Telnyx Call Control Application ID.
openai_keystr""OpenAI API key for the Realtime API.
elevenlabs_keystr""ElevenLabs API key (optional, for pipeline mode).
deepgram_keystr""Deepgram API key (optional, for pipeline mode).
phone_numberstr""Your phone number in E.164 format (e.g., "+15550001234"). Required when telephony keys are provided.
webhook_urlstr""Public hostname of this server, without scheme (e.g., "abc.ngrok.io"). Required when telephony keys are provided.
# Twilio + OpenAI Realtime
phone = Patter(
    twilio_sid="ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    twilio_token="your_auth_token",
    openai_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
    phone_number="+15550001234",
    webhook_url="abc.ngrok.io",
)

# Telnyx + OpenAI Realtime
phone = Patter(
    telnyx_key="KEYxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    telnyx_connection_id="your_connection_id",
    openai_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
    phone_number="+15550001234",
    webhook_url="abc.ngrok.io",
)

# Pipeline mode with Deepgram STT + ElevenLabs TTS
phone = Patter(
    twilio_sid="ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    twilio_token="your_auth_token",
    deepgram_key="dg_xxxxxxxxxxxxxxxxxxxxxxxx",
    elevenlabs_key="el_xxxxxxxxxxxxxxxxxxxxxxxx",
    phone_number="+15550001234",
    webhook_url="abc.ngrok.io",
)

Validation Rules

Local mode enforces the following validation when telephony keys are provided:
  • phone_number is required
  • webhook_url is required
  • twilio_token is required when twilio_sid is provided
# This raises ValueError — missing phone_number
phone = Patter(twilio_sid="AC...", twilio_token="...")
# ValueError: Local mode requires phone_number (e.g., phone_number='+15550001234').

Environment Variables

We recommend loading credentials from environment variables using python-dotenv:
import os
from dotenv import load_dotenv
from patter import Patter

load_dotenv()

phone = Patter(
    twilio_sid=os.environ["TWILIO_SID"],
    twilio_token=os.environ["TWILIO_TOKEN"],
    openai_key=os.environ["OPENAI_KEY"],
    phone_number=os.environ["PHONE_NUMBER"],
    webhook_url=os.environ["WEBHOOK_URL"],
)
Never hardcode API keys, tokens, or secrets in your source code. Always use environment variables or a secret manager.