<?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: voipbin</title>
    <description>The latest articles on DEV Community by voipbin (@voipbin).</description>
    <link>https://dev.to/voipbin</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%2F3858934%2Fc5d5c6da-825d-459a-9d62-8a6ad08e1d81.png</url>
      <title>DEV Community: voipbin</title>
      <link>https://dev.to/voipbin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/voipbin"/>
    <language>en</language>
    <item>
      <title>One AI Flow, Two Channels: Voice and Web Chat from the Same Logic</title>
      <dc:creator>voipbin</dc:creator>
      <pubDate>Tue, 07 Apr 2026 02:47:49 +0000</pubDate>
      <link>https://dev.to/voipbin/one-ai-flow-two-channels-voice-and-web-chat-from-the-same-logic-4jlm</link>
      <guid>https://dev.to/voipbin/one-ai-flow-two-channels-voice-and-web-chat-from-the-same-logic-4jlm</guid>
      <description>&lt;p&gt;Most voice bot architectures and web chatbot architectures are built separately. Different codebases, different state management, duplicated logic.&lt;/p&gt;

&lt;p&gt;VoIPBin just shipped a prototype that eliminates that separation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Insight: Direct Hash Works for Web Too
&lt;/h2&gt;

&lt;p&gt;VoIPBin's Direct Hash was originally designed for voice: instead of provisioning a phone number, you generate a unique hash that maps directly to an AI flow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sip:direct.&amp;lt;12-hex-chars&amp;gt;@sip.voipbin.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same mechanism now works for web clients. A web chatbot widget connects to the same hash, routes to the same AI flow. No separate endpoint. No separate logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Once, Deploy Everywhere
&lt;/h2&gt;

&lt;p&gt;You design your AI interaction flow once in VoIPBin. That flow can now handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SIP voice calls&lt;/li&gt;
&lt;li&gt;Web chatbot widget sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same flow definition. Same conversation logic. Zero duplication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The aicall Architecture
&lt;/h2&gt;

&lt;p&gt;The underlying engine is &lt;code&gt;aicall&lt;/code&gt; — originally built to manage async real-time voice. It tracks conversation state, manages the lifecycle, handles turn-taking.&lt;/p&gt;

&lt;p&gt;Turns out the same lifecycle management works for web chat. A web conversation has the same fundamental pattern: async messages, stateful context, turn-taking. The voice infrastructure just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;p&gt;This is a prototype. The architecture is validated, the servers are live, and you can test it at &lt;a href="https://voipbin.net" rel="noopener noreferrer"&gt;voipbin.net&lt;/a&gt; right now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://voipbin.net" rel="noopener noreferrer"&gt;voipbin.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.voipbin.net/redoc/" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MCP: &lt;code&gt;uvx voipbin-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voipbin" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>voip</category>
      <category>ai</category>
      <category>webdev</category>
      <category>chatbot</category>
    </item>
    <item>
      <title>Your AI Agent Can Make Real Phone Calls — Without Touching RTP or SIP</title>
      <dc:creator>voipbin</dc:creator>
      <pubDate>Tue, 07 Apr 2026 02:11:15 +0000</pubDate>
      <link>https://dev.to/voipbin/your-ai-agent-can-make-real-phone-calls-without-touching-rtp-or-sip-40ai</link>
      <guid>https://dev.to/voipbin/your-ai-agent-can-make-real-phone-calls-without-touching-rtp-or-sip-40ai</guid>
      <description>&lt;p&gt;If you're building AI agents that need to communicate with humans, you've probably hit the same wall: voice is hard.&lt;/p&gt;

&lt;p&gt;Not the AI part. The &lt;em&gt;telephony&lt;/em&gt; part.&lt;/p&gt;

&lt;p&gt;RTP, SIP, DTMF, codecs, NAT traversal — this is a 40-year-old stack that was not designed for agents. Most developers end up either avoiding voice entirely, or spending weeks fighting infrastructure before writing a single line of agent logic.&lt;/p&gt;

&lt;p&gt;There's a better path.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Problem: Agents Shouldn't Handle Audio
&lt;/h2&gt;

&lt;p&gt;A typical DIY voice bot pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receive raw RTP audio from the caller&lt;/li&gt;
&lt;li&gt;Run STT to get a transcript&lt;/li&gt;
&lt;li&gt;Send the transcript to your LLM&lt;/li&gt;
&lt;li&gt;Run TTS on the response&lt;/li&gt;
&lt;li&gt;Stream audio back over RTP&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every step has latency, codec issues, and infrastructure concerns. And none of it is your actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Media Offloading: Let VoIPBin Handle Audio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://voipbin.net" rel="noopener noreferrer"&gt;VoIPBin&lt;/a&gt; uses &lt;strong&gt;Media Offloading&lt;/strong&gt;. Your AI agent only ever sees text. VoIPBin handles RTP, STT, and TTS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Caller → VoIPBin (RTP/STT) → Your Agent (text only) → VoIPBin (TTS/RTP) → Caller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  1. Sign Up
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.voipbin.net/v1.0/auth/signup &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"username": "myagent", "password": "mypassword"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get an &lt;code&gt;accesskey.token&lt;/code&gt; immediately — no email verification needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a Call Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.voipbin.net/v1.0/flows?accesskey=YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "Support Bot",
    "actions": [
      {"type": "talk", "text": "Hello! How can I help you today?"},
      {"type": "transcribe", "end_silence_timeout": 2}
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Make a Call
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.voipbin.net/v1.0/calls?accesskey=YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "flow_id": "&amp;lt;flow-id&amp;gt;",
    "destination": "+15551234567"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;VoIPBin dials out, handles the audio, and your agent logic runs on transcripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  No Phone Number? No Problem
&lt;/h2&gt;

&lt;p&gt;VoIPBin supports &lt;strong&gt;Direct Hash SIP URIs&lt;/strong&gt; — no number provisioning needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sip:direct.&amp;lt;12-hex-chars&amp;gt;@sip.voipbin.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great for internal tools, dev testing, or agent-to-agent communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use It From Claude Code (MCP)
&lt;/h2&gt;

&lt;p&gt;VoIPBin ships an MCP server. Add to your settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"voipbin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"voipbin-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"VOIPBIN_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-access-key"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just tell Claude Code: &lt;em&gt;"make a test call to this number"&lt;/em&gt; — no curl needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Skip
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No RTP stack to manage&lt;/li&gt;
&lt;li&gt;No codec negotiation&lt;/li&gt;
&lt;li&gt;No STT/TTS infrastructure to deploy&lt;/li&gt;
&lt;li&gt;No SIP registration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You keep:&lt;/strong&gt; your agent logic and LLM calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://voipbin.net" rel="noopener noreferrer"&gt;voipbin.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.voipbin.net/redoc/" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/voipbin-mcp/" rel="noopener noreferrer"&gt;MCP on PyPI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voipbin" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>voip</category>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
