<?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: SIPHON</title>
    <description>The latest articles on DEV Community by SIPHON (@siphon).</description>
    <link>https://dev.to/siphon</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%2Forganization%2Fprofile_image%2F12264%2Fedb372cd-c1b4-4fe4-8935-c3fe08d30cc8.png</url>
      <title>DEV Community: SIPHON</title>
      <link>https://dev.to/siphon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/siphon"/>
    <language>en</language>
    <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>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>
