Most developers building AI voice bots start by thinking they need a phone number. Get a number, attach a webhook, receive calls. It makes sense — that's how traditional telephony works.
But phone numbers come with friction. You need to provision them (which takes time), pay monthly per number, and deal with geographic restrictions. For internal tools, testing environments, B2B integrations, or AI agent demos, this overhead is completely unnecessary.
Here's what most people don't know: you can run a fully functional AI voice bot with zero phone numbers.
The Problem With Phone Numbers for AI Bots
Phone numbers are great when your users are consumers dialing from a mobile phone. But a lot of AI voice bot use cases aren't consumer-facing:
- B2B voice integrations between two services that both speak SIP
- Internal tools — an AI bot your team calls for on-call triage
- Testing and staging environments — you don't want to burn real numbers
- SIP-to-SIP calling from softphones, desk phones, or other services
- Browser-to-bot calling using WebRTC bridges
For all of these, requiring a phone number adds unnecessary cost and complexity. What you actually need is an addressable SIP endpoint — and that's exactly what VoIPBin's Direct Hash SIP URI gives you.
What Is a Direct Hash SIP URI?
A Direct Hash SIP URI is a stable, unique SIP address that points directly to your AI bot — no phone number required.
It looks like this:
sip:your-bot-name@sip.voipbin.net
Anyone with a SIP client, softphone, or SIP-capable service can call this URI directly. VoIPBin routes the incoming call to your webhook, and your AI handles it — exactly like it would handle a regular phone call.
From your AI's perspective, there's no difference. The same POST comes to your endpoint with the same call metadata.
Setting It Up: 10 Lines of Config
First, sign up and get your access token. No OTP, no waiting:
curl -X POST https://api.voipbin.net/v1.0/auth/signup \
-H "Content-Type: application/json" \
-d '{
"username": "your-username",
"password": "your-password",
"email": "you@example.com"
}'
The response gives you accesskey.token immediately. Use it for all subsequent requests.
Next, create a SIP trunk that points to your AI webhook:
curl -X POST https://api.voipbin.net/v1.0/trunks \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-ai-bot",
"detail": "AI voice bot — no phone number needed",
"domain_name": "my-ai-bot",
"auth_types": ["ip"],
"webhook": "https://your-server.com/voice",
"webhook_method": "POST"
}'
That's it. Your bot is now reachable at:
sip:my-ai-bot@sip.voipbin.net
Dial it from any SIP client and your webhook fires.
The Webhook: Same as Always
Your voice webhook doesn't change at all. VoIPBin sends the same call event structure whether the call came from a phone number or a Direct Hash SIP URI:
{
"call_id": "uuid-here",
"from": "sip:caller@their-domain.com",
"to": "sip:my-ai-bot@sip.voipbin.net",
"direction": "inbound",
"status": "ringing"
}
Your server responds with a call flow:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/voice", methods=["POST"])
def handle_call():
data = request.json
call_id = data["call_id"]
# Answer and greet
return jsonify([
{
"type": "talk",
"text": "Hello! You've reached the AI assistant. How can I help you today?",
"language": "en-US"
},
{
"type": "gather",
"action": f"https://your-server.com/ai-response?call_id={call_id}",
"timeout": 10
}
])
@app.route("/ai-response", methods=["POST"])
def ai_response():
call_id = request.args.get("call_id")
transcript = request.json.get("transcript", "")
# Send transcript to your LLM
ai_reply = call_your_llm(transcript)
return jsonify([
{
"type": "talk",
"text": ai_reply,
"language": "en-US"
},
{
"type": "gather",
"action": f"https://your-server.com/ai-response?call_id={call_id}",
"timeout": 10
}
])
def call_your_llm(text):
# Replace with your actual LLM call
import openai
response = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": text}]
)
return response.choices[0].message.content
No RTP. No SIP stack. No audio encoding. VoIPBin handles all of that — your bot is just an HTTP server.
Calling the Bot from a Softphone
Anyone with a SIP-capable client can call your bot directly. Here's how to set it up in a few common tools:
Linphone (desktop/mobile):
- Add account → SIP address:
sip:my-ai-bot@sip.voipbin.net - No registration required — just dial directly
Zoiper:
- Add a SIP contact:
my-ai-bot@sip.voipbin.net - Dial it like any other contact
From another VoIPBin call flow:
{
"type": "dial",
"to": "sip:my-ai-bot@sip.voipbin.net"
}
This makes it trivially easy to chain AI bots together or build fallback flows.
Real Use Cases
1. Internal On-Call AI Assistant
Your engineers dial a SIP URI from their desk phones. The AI reads from your runbook, queries your alerting system, and either resolves the issue or escalates to a human. No phone number needed — it's internal infrastructure.
2. B2B Integration Testing
You're building a voice integration for a client who has a SIP-capable PBX. Instead of provisioning test numbers, you give them your SIP URI. They call it, the AI validates their flow, and logs everything. When you're ready for production, you can optionally attach a real number — but you might not need to.
3. Browser-to-AI Calls
Using a WebRTC-to-SIP gateway (or VoIPBin's own bridge), users on your website can click a button and be connected to your AI bot via SIP URI — no phone number involved anywhere in the chain.
4. Multi-Bot Architectures
You have a routing bot that handles the first touch, and specialized bots for billing, support, and sales. Each bot gets its own SIP URI. Your routing logic dials the right one based on intent — clean, composable, and easy to test.
What You're Actually Saving
| Approach | Monthly Cost | Setup Time | Geographic Limits |
|---|---|---|---|
| Phone number per bot | $1–5/number | Minutes to hours | Yes |
| Direct Hash SIP URI | $0 | ~5 minutes | None |
For teams running multiple bots or environments (dev, staging, prod), the savings add up fast. More importantly, you remove a dependency that slows iteration.
One More Thing: MCP Integration
If you're building AI agents with Claude Code or Cursor, VoIPBin has an MCP server that makes all of this scriptable:
uvx voipbin-mcp
Your AI agent can provision SIP endpoints, manage call flows, and query call logs — all from natural language. No more copy-pasting API calls.
Getting Started
-
Sign up:
POST https://api.voipbin.net/v1.0/auth/signup→ get your token instantly - Create a trunk with your webhook URL
-
Dial
sip:your-bot-name@sip.voipbin.netfrom any SIP client - Iterate — no number provisioning delays
Full docs and the Go SDK (go get github.com/voipbin/voipbin-go) are at voipbin.net.
Phone numbers are a UX concept for humans. Your AI bots don't need them. Give them a SIP URI and get out of your own way.
Top comments (0)