An AI receptionist answers incoming calls, understands what the caller needs, and takes action — booking appointments, routing calls, or answering FAQs. With BubblyPhone Agents, you can build one in under an hour using webhooks or real-time streaming.
Prerequisites
- A BubblyPhone Agents account — sign up free
- A phone number purchased through the platform ($3/month)
- A server endpoint that can receive webhooks (or use streaming mode)
- An AI/LLM of your choice (OpenAI, Anthropic, Groq, etc.)
Webhook vs Streaming Mode
BubblyPhone Agents supports two modes for handling calls. Choose based on your use case:
| Feature | Webhook Mode | Streaming Mode |
|---|---|---|
| How it works | Events sent to your endpoint, you respond with actions | Real-time audio bridge connects caller to your AI model |
| Latency | Depends on your server + LLM response time | Sub-second — audio streams directly |
| Complexity | Simple — just handle HTTP requests | Simpler — configure model + prompt, we handle the rest |
| Best for | Custom logic, multi-step flows, tool use | Conversational agents, quick setup |
Step 1: Get a Phone Number
Purchase a phone number through the API. This is the number callers will dial to reach your AI receptionist.
curl -X POST https://agents.bubblyphone.com/api/v1/phone-numbers \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14155550100",
"label": "AI Receptionist",
"webhook_url": "https://your-server.com/webhook",
"mode": "webhook"
}'Step 2: Handle Incoming Calls
When someone calls your number, BubblyPhone sends a webhook to your endpoint. Respond with an action to answer the call and greet the caller.
// Incoming webhook payload
{
"event": "call.incoming",
"call_id": "call_abc123",
"from": "+14155551234",
"to": "+14155550100",
"direction": "inbound",
"timestamp": "2026-04-02T10:30:00Z"
}Your server responds with an action:
// Your response
{
"action": "answer",
"text": "Hello! Thank you for calling. How can I help you today?"
}Step 3: Process Speech and Respond
After the greeting, BubblyPhone transcribes the caller's speech and sends it to your webhook. Feed it to your LLM and respond.
Tip:For the fastest response times, use a fast model like Groq's Llama or GPT-4o-mini. The caller is waiting on the line — every millisecond counts.
Step 4: Add Tool Use (Optional)
Make your receptionist actionable. In streaming mode, define tools that your AI can call — like booking an appointment or looking up a customer.
// Configure tools on your phone number
{
"mode": "streaming",
"model": "gpt-4o",
"system_prompt": "You are a friendly receptionist for Acme Corp...",
"tools": [
{
"type": "function",
"function": {
"name": "book_appointment",
"description": "Book an appointment for the caller",
"parameters": {
"type": "object",
"properties": {
"date": { "type": "string" },
"time": { "type": "string" },
"name": { "type": "string" }
}
}
}
}
],
"tool_webhook_url": "https://your-server.com/tools"
}Summary
You now have a working AI receptionist that can answer calls, understand natural language, and take actions. From here you can:
- Add more tools for appointment booking, order lookup, etc.
- Switch to streaming mode for lower latency conversations
- Set up call recording and transcription for quality assurance
- Configure max call duration and silence timeouts