<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BLACKDWARF</title>
    <description>The latest articles on DEV Community by BLACKDWARF (@blackdwarf).</description>
    <link>https://dev.to/blackdwarf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3716262%2F8e156fd1-7857-45dd-ac4d-78c48c69f371.webp</url>
      <title>DEV Community: BLACKDWARF</title>
      <link>https://dev.to/blackdwarf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blackdwarf"/>
    <language>en</language>
    <item>
      <title>How We Built a Telephony AI Framework That Eliminates 90% of Voice Infrastructure Complexity</title>
      <dc:creator>BLACKDWARF</dc:creator>
      <pubDate>Wed, 01 Apr 2026 12:21:07 +0000</pubDate>
      <link>https://dev.to/blackdwarf/how-we-built-a-telephony-ai-framework-that-eliminates-90-of-voice-infrastructure-complexity-2263</link>
      <guid>https://dev.to/blackdwarf/how-we-built-a-telephony-ai-framework-that-eliminates-90-of-voice-infrastructure-complexity-2263</guid>
      <description>&lt;p&gt;Most developers underestimate how hard voice AI actually is.&lt;/p&gt;

&lt;p&gt;To build a production-ready calling agent, you need to integrate:&lt;/p&gt;

&lt;p&gt;– SIP signalling&lt;/p&gt;

&lt;p&gt;– Real-time audio streaming&lt;/p&gt;

&lt;p&gt;– Speech-to-text&lt;/p&gt;

&lt;p&gt;– LLM orchestration&lt;/p&gt;

&lt;p&gt;– Text-to-speech&lt;/p&gt;

&lt;p&gt;Each layer introduces latency, failure points, and vendor dependencies.&lt;/p&gt;

&lt;p&gt;That’s where Siphon comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Siphon Does
&lt;/h2&gt;

&lt;p&gt;Siphon acts as a middleware layer between telephony systems and AI models, abstracting the entire pipeline into Python.&lt;/p&gt;

&lt;p&gt;You define:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
agent=Agent(...)&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And Siphon handles:&lt;/p&gt;

&lt;p&gt;– WebRTC streaming&lt;/p&gt;

&lt;p&gt;– SIP negotiation&lt;/p&gt;

&lt;p&gt;– Interrupt handling&lt;/p&gt;

&lt;p&gt;– Model orchestration&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Sub-500ms latency
&lt;/h3&gt;

&lt;p&gt;Human-like conversations require near-instant responses — Siphon achieves this using WebRTC streaming.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Modular AI stack
&lt;/h3&gt;

&lt;p&gt;Swap LLMs, STT, and TTS providers with a single config change.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Zero-config scaling
&lt;/h3&gt;

&lt;p&gt;Spin up more workers → Siphon auto-load-balances calls across nodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Data sovereignty
&lt;/h3&gt;

&lt;p&gt;All data stays in your infrastructure — no third-party data leakage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;p&gt;Instead of spending months on infra, you can focus on:&lt;/p&gt;

&lt;p&gt;– Agent logic&lt;/p&gt;

&lt;p&gt;– Business workflows&lt;/p&gt;

&lt;p&gt;– User experience&lt;/p&gt;

&lt;p&gt;👉 Siphon turns voice AI into a developer problem, not an infrastructure nightmare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Code &amp;amp; Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/blackdwarftech/siphon/tree/main/examples/Dental_Clinic_Receptionist" rel="noopener noreferrer"&gt;📑 Complete Example Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md" rel="noopener noreferrer"&gt;📅 Google Calendar Setup Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://siphon.blackdwarf.in/docs/overview/introduction" rel="noopener noreferrer"&gt;📖 SIPHON Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Found this helpful?&lt;/strong&gt; &lt;a href="https://github.com/blackdwarftech/siphon" rel="noopener noreferrer"&gt;⭐ Star us on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave questions in the comment section! We would love to help you out.&lt;/p&gt;

&lt;h1&gt;
  
  
  opensource #python #ai #webRTC #voiceai #devtools
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhevhoy3y0odgu0tzj78v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhevhoy3y0odgu0tzj78v.png" alt=" " width="472" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Build a 24/7 AI Receptionist in 15 Mins (Python + Google Calendar)</title>
      <dc:creator>BLACKDWARF</dc:creator>
      <pubDate>Sun, 01 Feb 2026 12:16:17 +0000</pubDate>
      <link>https://dev.to/siphon/build-a-247-ai-receptionist-in-15-mins-python-google-calendar-58ba</link>
      <guid>https://dev.to/siphon/build-a-247-ai-receptionist-in-15-mins-python-google-calendar-58ba</guid>
      <description>&lt;p&gt;Voice AI demos are cool, but they usually fail at one thing: doing actual work. Today, I'm sharing how to build a production-ready Dental Clinic Receptionist that actually checks a real Google Calendar and books appointments over the phone. We'll use Siphon (an open-source framework) to do it in few lines of logic.&lt;/p&gt;

&lt;p&gt;This tutorial shows you how to create an intelligent voice agent that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Books new appointments with calendar integration&lt;/li&gt;
&lt;li&gt;Modifies and cancels existing appointments&lt;/li&gt;
&lt;li&gt;Verifies caller identity for privacy&lt;/li&gt;
&lt;li&gt;Operates 24/7 without human intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time to build:&lt;/strong&gt; ~15 minutes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture Flow:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09tyynyea8weoleo7fn1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09tyynyea8weoleo7fn1.png" alt="Siphon google calendar flow" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.8+&lt;/strong&gt; installed on your system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SIPHON installed&lt;/strong&gt;: &lt;code&gt;pip install siphon-ai&lt;/code&gt; (&lt;a href="https://siphon.blackdwarf.in/docs/overview/getting-started" rel="noopener noreferrer"&gt;Installation Guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Keys&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;OpenRouter API key (&lt;a href="https://openrouter.ai/" rel="noopener noreferrer"&gt;Get one here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Sarvam or Cartesia API key for voice (&lt;a href="https://siphon.blackdwarf.in/docs/plugins/tts/overview" rel="noopener noreferrer"&gt;TTS Plugins&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Services&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;LiveKit credentials (cloud/self-hosted)&lt;/li&gt;
&lt;li&gt;Google Calendar with service account credentials (&lt;a href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md" rel="noopener noreferrer"&gt;Setup Guide&lt;/a&gt;) - &lt;em&gt;Required for the agent to check availability on your behalf&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/plugins/llm/overview" rel="noopener noreferrer"&gt;LLM Plugins&lt;/a&gt; - Configure language models&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/plugins/tts/overview" rel="noopener noreferrer"&gt;TTS Plugins&lt;/a&gt; - Text-to-speech providers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/plugins/stt/overview" rel="noopener noreferrer"&gt;STT Plugins&lt;/a&gt; - Speech-to-text providers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/agents/configuration" rel="noopener noreferrer"&gt;Agent Configuration&lt;/a&gt; - Advanced settings&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/agents/call-data" rel="noopener noreferrer"&gt;Call Data &amp;amp; Observability&lt;/a&gt; - Recordings, transcripts, and metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create Project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;dental-clinic-receptionist
&lt;span class="nb"&gt;cd &lt;/span&gt;dental-clinic-receptionist
&lt;span class="nb"&gt;touch&lt;/span&gt; .env prompt.py agent.py inbound.py outbound.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure Environment
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# LLM Provider
OPENROUTER_API_KEY=your_key

# Voice Providers  
SARVAM_API_KEY=your_key
CARTESIA_API_KEY=your_key

# LiveKit Server
LIVEKIT_URL=wss://your-livekit-url
LIVEKIT_API_KEY=your_key
LIVEKIT_API_SECRET=your_secret

# Google Calendar
GOOGLE_CALENDAR_ID=your-calendar@gmail.com
GOOGLE_CALENDAR_CREDENTIALS_PATH=/path/to/credentials.json

# Call Data Features
# These flags enable automatic capturing of call artifacts
CALL_RECORDING=false           # Set to true to enable recordings (requires S3 config below)
SAVE_METADATA=true             # Saves call details (duration, status, cost)
SAVE_TRANSCRIPTION=true        # Saves full conversation history

# Storage Configuration
# Metadata and transcriptions are saved locally by default. 
# To save to S3, set METADATA_LOCATION=s3 and TRANSCRIPTION_LOCATION=s3
METADATA_LOCATION=Call_Metadata
TRANSCRIPTION_LOCATION=Transcriptions

# S3 Configuration (Required for Recordings, optional for Metadata/Transcriptions)
# AWS_S3_ENDPOINT=http://localhost:9000
# AWS_S3_ACCESS_KEY_ID=minioadmin
# AWS_S3_SECRET_ACCESS_KEY=minioadmin
# AWS_S3_BUCKET=siphon
# AWS_S3_REGION=us-east-1
# AWS_S3_FORCE_PATH_STYLE=true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Create System Prompt
&lt;/h3&gt;

&lt;p&gt;The system prompt defines your receptionist's behavior and conversation workflows.&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;prompt.py&lt;/code&gt; with your instructions. For a complete reference, see the &lt;a href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/prompt.py" rel="noopener noreferrer"&gt;example prompt on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;system_instructions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a professional dental clinic receptionist.

# CAPABILITIES
- Book new appointments
- Modify existing appointments
- Cancel appointments

# PRIVACY RULES
- ALWAYS verify caller identity (name + phone) before showing appointments
- Only display appointments for the verified caller

# CONVERSATION STYLE
- Be warm and professional
- Ask one question at a time
- Confirm information by reading it back
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Create the Agent
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;agent.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.plugins&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openrouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sarvam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cartesia&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;system_instructions&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openrouter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;tts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;stt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sarvam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dental-Clinic-Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system_instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;system_instructions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;google_calendar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# One-time setup: downloads required VAD models and assets (only needed on fresh machines)
&lt;/span&gt;    &lt;span class="c1"&gt;# agent.download_files()
&lt;/span&gt;
    &lt;span class="c1"&gt;# For local development (logs, quick iteration)
&lt;/span&gt;    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# For production workers, use:
&lt;/span&gt;    &lt;span class="c1"&gt;# agent.start()
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://siphon.blackdwarf.in/docs/agents/overview" rel="noopener noreferrer"&gt;Agent Overview&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Set Up Inbound Calls
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;inbound.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.telephony.inbound&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Dispatch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;dispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dental-Clinic-Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# must match the agent_name used when defining/starting your agent worker
&lt;/span&gt;    &lt;span class="n"&gt;dispatch_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inbound-Dental-Clinic-Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sip_number&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;  &lt;span class="c1"&gt;# from your SIP Provider
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run: &lt;code&gt;python inbound.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://siphon.blackdwarf.in/docs/calling/inbound/overview" rel="noopener noreferrer"&gt;Inbound Calling Guide&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Set Up Outbound Calls (Optional)
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;outbound.py&lt;/code&gt; for appointment reminders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.telephony&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Call&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dental-Clinic-Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# must match the agent_name used when defining/starting your agent worker
&lt;/span&gt;    &lt;span class="n"&gt;sip_trunk_setup&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dental-Clinic-Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sip_address&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sip_number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sip_username&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sip_password&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;number_to_call&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run: &lt;code&gt;python outbound.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://siphon.blackdwarf.in/docs/calling/outbound/overview" rel="noopener noreferrer"&gt;Outbound Calling Guide&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Start Your Agent
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python agent.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your receptionist is now live and ready to handle calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production Scaling:&lt;/strong&gt;&lt;br&gt;
For high-volume production deployments, you can run multiple instances of your agent script horizontally. It automatically distributes calls across available workers.&lt;br&gt;
&lt;a href="https://siphon.blackdwarf.in/docs/concepts/scaling" rel="noopener noreferrer"&gt;Learn more about Horizontal Scaling&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;Now your AI receptionist can handle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Appointment Booking:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patient calls: "I need a cleaning for next Tuesday at 2 PM"&lt;/li&gt;
&lt;li&gt;Agent asks for name and phone number&lt;/li&gt;
&lt;li&gt;Agent verifies details by reading them back&lt;/li&gt;
&lt;li&gt;Agent checks calendar availability&lt;/li&gt;
&lt;li&gt;Agent books appointment and confirms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Appointment Modifications:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patient calls: "I need to change my appointment"&lt;/li&gt;
&lt;li&gt;Agent verifies caller identity&lt;/li&gt;
&lt;li&gt;Agent shows only their appointments&lt;/li&gt;
&lt;li&gt;Agent reschedules to new time&lt;/li&gt;
&lt;li&gt;Agent confirms changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Appointment Cancellations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patient calls: "I want to cancel my appointment"&lt;/li&gt;
&lt;li&gt;Agent verifies identity&lt;/li&gt;
&lt;li&gt;Agent confirms which appointment to cancel&lt;/li&gt;
&lt;li&gt;Agent cancels and confirms completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Privacy Protection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in caller verification (name + phone)&lt;/li&gt;
&lt;li&gt;Only shows appointments for verified caller&lt;/li&gt;
&lt;li&gt;No cross-patient data exposure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Code &amp;amp; Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/blackdwarftech/siphon/tree/main/examples/Dental_Clinic_Receptionist" rel="noopener noreferrer"&gt;📑 Complete Example Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md" rel="noopener noreferrer"&gt;📅 Google Calendar Setup Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://siphon.blackdwarf.in/docs/overview/introduction" rel="noopener noreferrer"&gt;📖 SIPHON Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Found this helpful?&lt;/strong&gt; &lt;a href="https://github.com/blackdwarftech/siphon" rel="noopener noreferrer"&gt;⭐ Star us on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SIPHON: The Telephony-First Framework for Calling AI</title>
      <dc:creator>BLACKDWARF</dc:creator>
      <pubDate>Wed, 28 Jan 2026 17:09:47 +0000</pubDate>
      <link>https://dev.to/blackdwarf/siphon-the-telephony-first-framework-for-calling-ai-3mg6</link>
      <guid>https://dev.to/blackdwarf/siphon-the-telephony-first-framework-for-calling-ai-3mg6</guid>
      <description>&lt;p&gt;Building an AI that can chat via text is now a solved problem. Building an AI that can handle a &lt;strong&gt;real phone call&lt;/strong&gt; in production is still a nightmare of fragmented infrastructure.&lt;/p&gt;

&lt;p&gt;Developers typically face a "plumbing" crisis: they must manually stitch together SIP trunks, manage real-time media buffers, handle signal interruptions, and wire up multiple AI providers—all while trying to keep latency low enough for a human conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIPHON&lt;/strong&gt; was built to end the plumbing. It is an open-source Python framework that provides a unified, telephony-first abstraction for building and operating &lt;strong&gt;Calling AI&lt;/strong&gt; agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: The Telephony Gap
&lt;/h2&gt;

&lt;p&gt;Traditional IVR systems and contact center platforms were never designed for the era of Large Language Models (LLMs). When developers try to build modern calling agents, they encounter three primary friction points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complexity:&lt;/strong&gt; Each project requires re-implementing SIP trunk provisioning, room orchestration, and VAD (Voice Activity Detection) tuning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor Lock-in:&lt;/strong&gt; Most "Voice AI" platforms tie you to a single stack, making it impossible to swap LLM or TTS providers as technology evolves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operation Hurdles:&lt;/strong&gt; Features like call recording, metadata persistence, and transcription handling are often treated as afterthoughts rather than first-class features.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Solution: A Unified Calling Abstraction
&lt;/h2&gt;

&lt;p&gt;SIPHON sits between the telephony world and the AI world, providing a coherent framework for developers to build production-ready agents in &lt;strong&gt;~30 lines of code&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it Works: The SIPHON Architecture
&lt;/h3&gt;

&lt;p&gt;Unlike generic voice frameworks, SIPHON is built on top of &lt;strong&gt;LiveKit&lt;/strong&gt;, leveraging its real-time media and SIP layer to ensure high reliability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffthf6oldup4ak2oh1tip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffthf6oldup4ak2oh1tip.png" alt="siphon-high-level-architecture" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diagram illustrates how SIPHON orchestrates the entire call lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PSTN/SIP Provider&lt;/strong&gt; ↔ &lt;strong&gt;LiveKit SIP Domain&lt;/strong&gt; (Real-time media)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LiveKit Rooms&lt;/strong&gt; ↔ &lt;strong&gt;SIPHON Agent Worker&lt;/strong&gt; (Orchestration)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SIPHON Worker&lt;/strong&gt; ↔ &lt;strong&gt;AI Providers&lt;/strong&gt; (OpenAI, Deepgram, Cartesia, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The framework is divided into two core modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;siphon.telephony&lt;/code&gt;&lt;/strong&gt;: Handles inbound &lt;code&gt;Dispatch&lt;/code&gt; rules and outbound &lt;code&gt;Call&lt;/code&gt; initiation, allowing you to bind phone numbers to agents programmatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;siphon.agent&lt;/code&gt;&lt;/strong&gt;: The runner that manages the LiveKit Agent worker, entrypoint orchestration, and the dynamic construction of AI components.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Pillars of SIPHON
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Production-Ready at Scale
&lt;/h3&gt;

&lt;p&gt;SIPHON is not a "toy" framework. It is designed for horizontal scalability; you can run your agent on one server or a thousand, and the architecture automatically balances the load.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Sub-500ms Latency
&lt;/h3&gt;

&lt;p&gt;By utilizing WebRTC for real-time media interactions, SIPHON ensures voice interactions feel natural. It manages audio packet loss and interruptions to maintain a human-like flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Total Vendor Flexibility
&lt;/h3&gt;

&lt;p&gt;Through its plugin architecture, SIPHON is agnostic to your AI stack. You can swap between OpenAI, Gemini, Deepgram, or ElevenLabs with minimal code changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Integrated Data Persistence
&lt;/h3&gt;

&lt;p&gt;Recording, transcription, and metadata persistence are enabled via simple environment flags. Whether you need to save to S3, Postgres, or Redis, SIPHON handles the storage logic for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;SIPHON is now open-source under the &lt;strong&gt;Apache 2.0 license&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Developers can install the framework and spin up a functioning agent worker in minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;siphon-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whether you are building an AI receptionist, an outbound notification system, or a contact-center triage bot, SIPHON provides the infrastructure to get you to production faster.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Stop building the plumbing. Start building the agent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://siphon.blackdwarf.in/docs" rel="noopener noreferrer"&gt;📚 Read the Documentation&lt;/a&gt; | &lt;a href="https://github.com/blackdwarftech/siphon" rel="noopener noreferrer"&gt;⭐ Star us on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;A BLACKDWARF Initiative.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>development</category>
    </item>
    <item>
      <title>Hello, World. Meet SIPHON.</title>
      <dc:creator>BLACKDWARF</dc:creator>
      <pubDate>Sun, 25 Jan 2026 11:21:45 +0000</pubDate>
      <link>https://dev.to/siphon/hello-world-meet-siphon-j5k</link>
      <guid>https://dev.to/siphon/hello-world-meet-siphon-j5k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuml6a0itg5i0g793gxd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuml6a0itg5i0g793gxd8.png" alt="Welcom-To-Siphon" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building an AI that chats is easy. Building an AI that calls is painfully hard.&lt;/p&gt;

&lt;p&gt;If you have ever tried to build a production-ready voice agent, you know the struggle: fighting with SIP signaling, debugging audio buffers, and wrestling with 2-second latency.&lt;/p&gt;

&lt;p&gt;We got tired of the plumbing. So we built &lt;strong&gt;SIPHON&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is it?
&lt;/h3&gt;

&lt;p&gt;SIPHON is an &lt;strong&gt;open-source Python framework&lt;/strong&gt; for building Calling AI agents.&lt;/p&gt;

&lt;p&gt;It is a "telephony-first" abstraction over LiveKit that handles the chaos of real-world phone networks for you. No more stitching together WebSockets or media servers. Just pure Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use it?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;:&lt;br&gt;
Built for real phone calls, not just demos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Few Lines of Code&lt;/strong&gt;:&lt;br&gt;
Spin up an agent that handles inbound/outbound calls in minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vendor Agnostic&lt;/strong&gt;:&lt;br&gt;
Swap LLMs (OpenAI, Gemini) and Voice providers (Deepgram, Cartesia) with a single config line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sub-500ms Latency&lt;/strong&gt;:&lt;br&gt;
Powered by WebRTC for conversations that feel human.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-Config Horizontal Scaling&lt;/strong&gt;:&lt;br&gt;
Run your agent on multiple servers and it automatically load balances calls across them—no complex setup required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Install it:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;siphon-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Build your agent:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.plugins&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deepgram&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The plumbing is done. Go build the agent.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/blackdwarftech/siphon" rel="noopener noreferrer"&gt;⭐ Star us on GitHub&lt;/a&gt; | &lt;a href="https://siphon.blackdwarf.in/docs" rel="noopener noreferrer"&gt;📚 Read the Docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>python</category>
      <category>news</category>
    </item>
    <item>
      <title>We Open-Sourced Our AI Calling Framework (So You Don't Waste 2-3 Months)</title>
      <dc:creator>BLACKDWARF</dc:creator>
      <pubDate>Sat, 17 Jan 2026 10:32:55 +0000</pubDate>
      <link>https://dev.to/siphon/we-open-sourced-our-ai-calling-framework-so-you-dont-waste-2-3-months-4im0</link>
      <guid>https://dev.to/siphon/we-open-sourced-our-ai-calling-framework-so-you-dont-waste-2-3-months-4im0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r564bk29jet5r67m03i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r564bk29jet5r67m03i.png" alt="Siphon" width="800" height="802"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three months.&lt;/strong&gt;&lt;br&gt;
That’s how long many teams spend building telephony infrastructure before writing a single line of actual conversation logic for an AI voice agent.&lt;/p&gt;

&lt;p&gt;Not because the AI was hard.&lt;br&gt;
Because &lt;strong&gt;telephony is brutal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Today, we’re open-sourcing the solution so you don’t have to go through the same pain.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Hidden Problem with AI Calling Agents
&lt;/h2&gt;

&lt;p&gt;Building an AI calling agent sounds straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use an LLM&lt;/li&gt;
&lt;li&gt;Add speech-to-text&lt;/li&gt;
&lt;li&gt;Add text-to-speech&lt;/li&gt;
&lt;li&gt;Connect it to a phone number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In reality, that’s where most teams hit a wall.&lt;/p&gt;

&lt;p&gt;To make &lt;em&gt;real phone calls&lt;/em&gt;, you end up dealing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SIP trunks &amp;amp; PSTN providers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low-latency, bidirectional audio&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time orchestration of STT, LLM, and TTS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call state, interruptions, transfers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scaling, monitoring, recordings, persistence&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result?&lt;br&gt;
Most teams spend &lt;strong&gt;weeks or months on infrastructure&lt;/strong&gt; before they ever touch the conversation itself.&lt;/p&gt;

&lt;p&gt;We did too. And eventually asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Why is building voice AI still this hard?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Introducing &lt;strong&gt;Siphon&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Siphon&lt;/strong&gt; is an open-source Python framework that handles the telephony complexity for you, so you can focus on building great conversations.&lt;/p&gt;

&lt;p&gt;Here’s what a complete AI receptionist looks like with Siphon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.plugins&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deepgram&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receptionist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;helpful-assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nova-2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;system_instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    You are a friendly receptionist for Acme Corp.
    Help callers schedule appointments or route them correctly.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this, and your agent can answer &lt;strong&gt;real phone calls&lt;/strong&gt; via any SIP provider (Twilio, Telnyx, etc.).&lt;/p&gt;




&lt;h2&gt;
  
  
  What Siphon Handles for You
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔌 &lt;strong&gt;SIP &amp;amp; PSTN connectivity&lt;/strong&gt;&lt;br&gt;
Works with any SIP provider, no FreeSWITCH pain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚡ &lt;strong&gt;Real-time audio pipeline&lt;/strong&gt;&lt;br&gt;
Built on LiveKit with streaming audio and &lt;strong&gt;sub-500ms voice-to-voice latency&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🤖 &lt;strong&gt;AI orchestration&lt;/strong&gt;&lt;br&gt;
Plug-and-play support for LLMs, STT, and TTS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Swap providers with a single line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-3-5-sonnet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📈 &lt;strong&gt;Production-ready by default&lt;/strong&gt;
Auto-scaling, call recordings, transcripts, state handling, and observability.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;siphon-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create an agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;siphon.plugins&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deepgram&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_first_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cartesia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;system_instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;br&gt;
Your agent is live and answering phone calls.&lt;/p&gt;

&lt;p&gt;(Full setup, outbound calling, and advanced examples are in the docs.)&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Open-Sourced It
&lt;/h2&gt;

&lt;p&gt;We could’ve kept Siphon proprietary or turned it into a closed SaaS.&lt;/p&gt;

&lt;p&gt;But we believe &lt;strong&gt;voice AI shouldn’t be locked behind massive infrastructure effort&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Siphon is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apache 2.0 licensed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provider-agnostic&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fully self-hostable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No vendor lock-in&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use it commercially, modify it, or build on top of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Can Build
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📞 Customer support agents&lt;/li&gt;
&lt;li&gt;📅 Appointment scheduling&lt;/li&gt;
&lt;li&gt;💼 Sales qualification&lt;/li&gt;
&lt;li&gt;📊 Surveys &amp;amp; feedback collection&lt;/li&gt;
&lt;li&gt;🏥 Healthcare intake systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it involves phone calls and conversations, Siphon handles the hard parts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/blackdwarftech/siphon" rel="noopener noreferrer"&gt;https://github.com/blackdwarftech/siphon&lt;/a&gt;&lt;br&gt;
📖 Docs: &lt;a href="https://siphon.blackdwarf.in/docs" rel="noopener noreferrer"&gt;https://siphon.blackdwarf.in/docs&lt;/a&gt;&lt;br&gt;
🐛 Issues &amp;amp; feature requests welcome&lt;br&gt;
🤝 PRs encouraged&lt;/p&gt;

&lt;p&gt;We’re building Siphon in public and would love community feedback.&lt;/p&gt;




&lt;p&gt;If you’ve ever thought&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I wish building AI calling agents was simpler”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;— give Siphon a try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built by BLACKDWARF&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Mission: Democratize complex technologies for developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>opensource</category>
      <category>python</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
