A well-built AI voice agent answers calls in a natural Spanish voice, books appointments, qualifies leads and hands over to a human when needed. This guide is the real technical implementation, using an ElevenLabs + Zadarma + Fastify stack, for SMEs (PYMEs in Spain) and founders without a tech department.
TL;DR
- Minimum viable stack: ElevenLabs ConvAI + Zadarma SIP + Fastify webhook handler
- Monthly cost: €50-200 depending on call volume (typically 200-500 minutes)
- Implementation time: 2-4 weeks for an SME starting from scratch
- Difference from enterprise voice agents (Sfera AI, Aircall): pricing 10-50x lower and configurable by a single developer
Why an AI voice agent for an online SME
Online SMEs (SaaS, ecommerce, info products, agencies) receive calls that are typically:
- Qualified pre-sales enquiries (people don’t call out of curiosity)
- In need of a reply within 5 minutes so you don’t lose the lead
- Ending in “we’ll call you back when we can” because nobody is available
- Routed to voicemail or a generic IVR that loses 40-60% of leads
An AI voice agent solves this: it answers on the first ring, speaks natural Spanish, qualifies the lead, books a demo if appropriate, and sends a summary to the founder via WhatsApp.
Minimum technical stack
ElevenLabs Conversational AI
A platform for building conversational agents with voice. What it offers:
- Natural Spanish voices (Cristina, Bea, Mateo and 20+ more)
- State-of-the-art voice synthesis (you can’t tell it’s AI in Spanish)
- Built-in configurable LLM (GPT-4o, Claude 3.5, Gemini)
- Knowledge base with your information (PDF documents, markdown)
- Tools (functions) for booking, transferring and capturing leads
- Post-call webhook to send data to your backend
Cost: from $22/month for 250 minutes on the Creator plan. The Pro plan is $99/month with 1,000 minutes.
Zadarma
A Spanish SIP provider that connects the voice agent to the telephone network:
- Spanish landline or mobile number (instant activation)
- Inbound calls routed to the ElevenLabs agent
- Outbound calls from the agent
- Cost per minute: €0.0099/min for inbound local calls, €0.06-0.10/min outbound
Alternative: Twilio (more expensive but more global). For Spain and LATAM, Zadarma is 3-5x cheaper.
Fastify webhook handler
A Node.js server that receives the post-call webhooks from ElevenLabs and processes them:
- Stores each call in the database (PostgreSQL)
- Qualifies automatically: lead captured, sentiment, duration, summary
- Notifies the founder with a summary via WhatsApp/Telegram
- Passes the lead to the CRM/billing system if appropriate
Cost: ~€5/month on a Hetzner CX22 if it only runs the voice agent and the database.
Complete architecture
Cliente llama al número Zadarma España
↓
Zadarma SIP forward → ElevenLabs ConvAI
↓
Cristina (voice agent) atiende con LLM + KB
↓
Si lead: Tool capturar_lead() → POST a tu Fastify
↓
Si transferir: SIP transfer al fundador
↓
Al colgar: ElevenLabs POST webhook con transcript + analysis
↓
Fastify webhook → PostgreSQL + Telegram notify + CRM sync
Components to configure
- Zadarma: sign-up + landline number + point it to the ElevenLabs SIP
- ElevenLabs: create agent + voice + LLM + KB + tools + webhook
- Knowledge base: markdown with your information (services, prices, FAQ)
- System prompt: the agent’s personality + conversation rules
- Tools:
capturar_lead,agendar_demo,transferir_a_humano - Webhook handler: Fastify route that processes post-call data
- DB schema:
voice_callstable with conversation_id, summary, sentiment, lead_id
Step-by-step implementation
1. Create the agent in ElevenLabs
ElevenLabs Conversational AI dashboard → Create new agent:
- Voice: Cristina (neutral Spanish) or Bea (more professional Spanish)
- LLM: Claude 3.5 Sonnet or GPT-4o (better in Spanish)
- Language: Spanish
- First message: “Hello, I’m [Name], [Company]‘s assistant. How can I help you?”
- Max duration: 600 seconds (10 min max per call)
- Silence timeout: 30 seconds
2. System prompt
The system prompt defines the personality. A real example:
Eres Cristina, asistente virtual de [Empresa]. Tu rol:
1. Atender al cliente con calidez profesional
2. Identificar qué necesita en 1-2 preguntas
3. Si es lead cualificado: capturar nombre, teléfono, empresa, servicio interés
4. Si quiere demo: agendar via tool agendar_demo()
5. Si pregunta algo no en KB: ofrecer enviar info por WhatsApp y transferir
6. Si pide hablar con humano directamente: tool transferir_a_humano()
Reglas:
- Habla natural, sin formalismos excesivos
- No inventes información que no tengas en KB
- Si no entiendes, pregunta de nuevo amablemente
- Llamadas máx 8 minutos, después invita a continuar por WhatsApp
3. Knowledge base
Upload markdown with:
- Services and prices (as plain text, no tables if possible)
- Common FAQs
- Contact information
- Cancellation policy, guarantees
- Typical use cases
Tip: use the same FAQs you have at /servicios/X/ with FAQPage schema. Reuse them.
4. Tools
Configure 3 minimum tools:
capturar_lead: when the customer gives personal details and shows interest.
{
"name": "capturar_lead",
"description": "Captura datos del lead cuando muestra interés concreto",
"parameters": {
"name": "string",
"phone": "string",
"email": "string (opcional)",
"service": "string",
"notes": "string"
}
}
agendar_demo: when they ask for a demo or meeting.
{
"name": "agendar_demo",
"description": "Agenda una demo en el calendario del fundador",
"parameters": {
"preferred_date": "string YYYY-MM-DD",
"preferred_time": "string HH:MM",
"duration_minutes": "number"
}
}
transferir_a_humano: when they ask to speak to a person or the case is complex.
{
"name": "transferir_a_humano",
"description": "Transfiere la llamada al fundador",
"parameters": {
"reason": "string"
}
}
5. Post-call webhook
ElevenLabs sends a POST with the transcript + analysis at the end of every call. Endpoint:
fastify.post('/voice/calls/webhook', async (request, reply) => {
// Validar HMAC para seguridad
// Parse payload ElevenLabs
// Persistir en voice_calls table
// Notificar Telegram con resumen
// Si lead capturado: crear en CRM
return { success: true };
});
Important: protect the webhook with an HMAC signature. Without a signature, anyone can inject fake calls into your database.
6. Connect Zadarma
In the Zadarma dashboard:
- Buy a Spanish number (€15 setup + €2/month)
- Go to “Incoming calls” → “SIP forwarding” → enter the ElevenLabs SIP URI
- In ElevenLabs → “Phone numbers” → “Native integration” → Zadarma → enter your credentials
Test: call the number from your mobile. The agent should answer within one ring.
Real monthly cost
For an SME with ~300 minutes/month of calls (10-15 calls/day):
| Component | Cost/month |
|---|---|
| ElevenLabs Pro plan | $99 (~€92) |
| Zadarma number + minutes | €15 |
| Hetzner server (Fastify + DB) | €5 |
| Telegram bot | €0 |
| Total | ~€112/month |
For a small SME (~100 min/month):
| Component | Cost/month |
|---|---|
| ElevenLabs Creator plan | $22 (~€20) |
| Zadarma | €12 |
| Hetzner | €5 |
| Total | ~€37/month |
Compare that with an average human call-centre operator: €1,200-1,800/month in salary plus Seguridad Social (Spanish social security contributions). A voice agent is 10-30x cheaper.
Typical implementation mistakes
| Mistake | Consequence | Fix |
|---|---|---|
| Voice agent without a protected webhook | Anyone can inject fake calls into the database | HMAC signature is mandatory |
| KB with complex markdown tables | The LLM doesn’t extract the data well and answers badly | Plain text with short paragraphs |
| System prompt without clear rules | The agent invents prices or services that don’t exist | Explicit rules + authoritative KB |
| No transfer to a human | Complex cases get lost | Tool transferir_a_humano always available |
| Outbound without auth | Toll fraud (someone makes premium-rate calls on your account) | Mandatory API key + IP allowlist |
| English-sounding voice for a Spanish customer | Sounds odd, lowers conversion | Cristina/Bea in ElevenLabs |
| Max duration of 30 min | Endless calls from people testing the bot | Cap at 8-10 min |
Real use cases by vertical
B2B SaaS
- Automatic pre-demo qualification
- Filtering out prospects that aren’t a fit (e.g. companies that are far too large or too small)
- Booking demos in Calendly/Cal.com via a tool
Ecommerce
- After-sales support (order status, returns, changes)
- Abandoned cart recovery with outbound calls
- Automated NPS follow-up
Info products
- Support for course students
- Pre-sales qualification
- Reminders for live masterclasses
Agencies
- Receiving leads from the website/Google Ads
- Pre-qualification according to the service they’re interested in
- Transfer to a human salesperson if the lead is premium
When NOT to use a voice agent
- Technical support that requires access to the customer’s systems
- Complex legal or medical cases
- When the ICP is very senior (large-company CEOs, ministers) and expects a human
- Strictly regulated sectors (banking, healthcare) without specific compliance
FAQ
How long does it take to implement from scratch?
An SME with its web stack already in place: 2-3 weeks. An SME starting from scratch: 4-6 weeks (includes Hetzner + Fastify + DB + ElevenLabs + Zadarma + tests).
Does the agent work without internet?
No. It needs a connection to ElevenLabs + the LLM provider + your webhook. If your server goes down, the agent still answers but can’t capture leads or transfer properly. That’s why monitoring and high uptime are critical.
Does the voice really sound human?
In Spanish, Cristina (ElevenLabs) passes the Turing test on short calls (under 3 minutes) in 70% of cases. On longer calls, users become suspicious because they notice the absence of typical human errors. It’s best to say “I’m a virtual assistant” in the first message.
What happens if it says something false?
It’s a real risk. Mitigations: authoritative KB + a system prompt with the rule “if you’re not sure, ask or transfer” + daily transcript monitoring for the first 30 days. After 100+ audited calls, the agent stabilises.
Can I use my current number?
Yes, either by porting it to Zadarma (free, takes 5-10 working days) or by forwarding from your current operator to the Zadarma number. To start with, a new Zadarma number is recommended, with the old one forwarded only once everything works.
Conclusion
An AI voice agent with ElevenLabs + Zadarma + Fastify costs €37-112/month depending on volume and delivers more qualified leads than a human call-centre operator at €1,500/month. Implementation takes 2-4 weeks if you have dev skills.
STAKKER SYSTEMS implements it on a turnkey basis for online SMEs (including server + monitoring + tuning): the scope and cost are agreed after a free diagnosis, depending on call volume and integrations. The first consultation is free, to assess whether your volume justifies a voice agent.