Qué vas a conseguir
Esta es la guía del vídeo en el que pedía comentar VOZ. La recepcionista que coge el teléfono a las 21:47 no existe: es un agente de IA que escucha, entiende, consulta la agenda y responde con voz natural. Aquí tienes cómo se monta uno y un prompt para que Claude Code te lo construya contigo, paso a paso.
Antes de empezar: necesitas una cuenta en ElevenLabs, un número en Twilio o Zadarma y acceso a tu agenda. Todos cobran por uso: mira sus precios actuales antes de lanzarlo. EDSO no está afiliada a ninguno de estos proveedores.
Las 4 piezas de un agente de voz
| Pieza | Qué hace | Con qué se monta |
|---|---|---|
| Oídos | Pasa lo que dice quien llama a texto, en tiempo real | Reconocimiento de voz de la plataforma de agentes |
| Cerebro | Entiende y decide qué contestar: sabe tus precios, horarios y normas | Un modelo de lenguaje con tu system prompt y una base de conocimiento |
| Manos | Hace cosas de verdad: mira huecos, reserva la cita, crea el contacto | Herramientas (webhooks) que llaman a tu agenda, tu CRM o n8n |
| Voz | Contesta con voz natural y para si le interrumpen | Texto a voz de ElevenLabs (puedes elegir o clonar una voz) |
Plataformas como ElevenLabs Agents juntan las cuatro piezas en un solo sitio. Lo único que falta es conectarle un número de teléfono y las herramientas de tu empresa. Hay alternativas parecidas, como Vapi o Retell; esta guía usa ElevenLabs.
1) Conecta el número
Opción A · Twilio (integración nativa)
- En ElevenLabs Agents, abre Phone Numbers e importa tu número de Twilio con una etiqueta, el número, el SID y el token. ElevenLabs recomienda usar una API key de Twilio en lugar del token de la cuenta.
- ElevenLabs configura el número en Twilio automáticamente. Asígnale el agente que coge las llamadas entrantes.
- Llama para probar y revisa la conversación en el historial de llamadas.
Solo los números comprados en Twilio admiten llamadas entrantes; los "verified caller IDs" sirven solo para salientes.
Opción B · Zadarma (SIP trunk)
- En ElevenLabs, importa el número con Import number → From SIP Trunk. Entrante: cifrado desactivado y sin usuario ni contraseña. Saliente: dirección
pbx.zadarma.com, transporte TCP, y como usuario y contraseña los de una extensión de tu centralita de Zadarma. - Asigna el agente al número.
- En Zadarma, en Mi centralita → Extensiones, activa el desvío de esa extensión a servidor externo (SIP URI) con
+34XXXXXXXXX@sip.rtc.elevenlabs.io:5060;transport=tcp(tu número virtual).
2) Dale el cerebro
- System prompt: quién es, qué puede hacer, cómo habla y cuándo pasa con una persona. Tienes una plantilla más abajo.
- Base de conocimiento: sube tus servicios, precios, horarios y preguntas frecuentes. Que conteste solo con eso.
- Variables del sistema: el agente recibe datos como el número de quien llama (
system__caller_id) y la hora en la zona horaria que configures. Pon la zona horaria del agente en Europe/Madrid.
3) Dale las manos
- Herramientas webhook: cada una es una URL de tu sistema con un nombre, una descripción y sus parámetros. El agente decide cuándo usarla leyendo la descripción, así que escríbela clara: "consulta los huecos libres de un día", "reserva una cita ya confirmada".
- Herramientas de sistema que ya trae ElevenLabs: End call (colgar al terminar), Transfer to number (pasar con una persona, con un mensaje para quien llama y otro para quien recibe) y Voicemail detection (detectar un contestador en llamadas salientes).
- Si tu agenda no tiene API, pon en medio un flujo de n8n o Make que reciba el webhook y haga la reserva.
4) Las reglas: si nadie contesta o fuera de horario
Lo normal no es que la IA coja todas las llamadas desde el primer día, sino que entre cuando el equipo no puede.
Con Twilio
- Tu servidor recibe la llamada y mira la hora (Europe/Madrid).
- En horario, la hace sonar en la clínica con
<Dial timeout="20" action="/tras-llamada">. El timeout por defecto de Twilio es de 30 segundos. - Al acabar, Twilio llama a
/tras-llamadaconDialCallStatus. Si valeno-answer,busyofailed, tu servidor conecta la llamada con el agente usando el endpoint register call de ElevenLabs, que devuelve el TwiML para Twilio. - Fuera de horario o en festivos, pasa directamente al agente.
Ojo: con register call, ElevenLabs no tiene tus credenciales de Twilio, así que la transferencia a una persona no funciona desde el agente, y el audio del agente debe ir en μ-law 8000 Hz. Si necesitas transferir, usa la integración nativa o resuelve la transferencia en tu servidor.
Con Zadarma
- En el menú de voz de la centralita defines el horario de trabajo, pausas y festivos.
- Zadarma propone añadir el agente como último miembro de la cola: coge la llamada cuando todos los humanos están ocupados, y también puede atender fuera de horario en lugar del buzón de voz.
- En el desvío de la extensión eliges la condición (su guía usa "siempre activo"; revisa en tu panel las demás condiciones disponibles).
- Desde el agente puedes pasar a una persona con Transfer to number por SIP REFER.
El prompt para que Claude Code te lo monte
- Crea una carpeta vacía y abre Claude Code dentro.
- Copia el prompt, rellena lo que va entre corchetes y pégalo.
- Claude se para tres veces: para que revises el cerebro, para probar las llamadas contigo y antes de ponerlo en marcha.
Vas a construir conmigo un agente de voz con IA que coge las llamadas de mi negocio: contesta
dudas, consulta la agenda, reserva citas y pasa la llamada a una persona cuando hace falta.
MI NEGOCIO
- Nombre y sector: [EJEMPLO: CLÍNICA DENTAL SONRISAS, BARCELONA]
- Qué debe resolver el agente: [EJEMPLO: PRECIOS, HORARIOS, PEDIR / CAMBIAR / ANULAR CITA]
- Dónde está mi agenda: [GOOGLE CALENDAR / CAL.COM / MI CRM / OTRO]
- Horario de atención: [EJEMPLO: L-V 9:00-14:00 y 16:00-20:00, zona Europe/Madrid]
- Teléfono de la persona a la que se transfiere: [+34...]
- Telefonía: [TWILIO o ZADARMA]
- Idioma y tono: español de España, cercano y profesional
Si algo de esto sigue entre corchetes, pregúntamelo antes de empezar y no sigas hasta que responda.
REGLAS DE TRABAJO
- Antes de escribir código, lee la documentación ACTUAL de ElevenLabs Agents, Twilio o Zadarma
(las APIs cambian). Si algo de este prompt no coincide con la documentación, manda la
documentación y avísame.
- Nunca me pidas que pegue claves en el chat: van en un archivo .env que tú creas vacío y yo relleno.
- Trabaja en una carpeta nueva llamada agente-voz/ y mantén NOTAS.md con lo que haces.
- Hay tres paradas obligatorias (PARADA 1, 2 y 3): me enseñas el resultado y esperas mi OK.
PASO 1 · EL CEREBRO → PARADA 1
1. Escribe conocimiento.md con la información del negocio que te dé (servicios, precios, horarios,
dirección, preguntas frecuentes). No inventes nada: lo que no sepas, pregúntamelo.
2. Escribe system-prompt.md para el agente con: quién es, que se presenta como asistente virtual
(la IA tiene que decir que es una IA), qué puede y qué no puede hacer, cuándo usa cada
herramienta, cuándo transfiere a una persona y cómo se despide. Frases cortas: es una llamada.
3. Enséñame los dos archivos y espera mi OK.
PASO 2 · LAS MANOS (herramientas)
1. Crea un pequeño servidor (Node o Python, lo que veas más simple) con estos endpoints, protegidos
con un token en cabecera:
- GET /disponibilidad?fecha=YYYY-MM-DD → huecos libres de ese día en mi agenda
- POST /reservar {nombre, telefono, fecha, hora, motivo} → crea la cita y devuelve confirmación
- POST /anular {telefono, fecha, hora} → anula una cita existente
- POST /lead {nombre, telefono, motivo} → guarda el contacto si no se cierra la cita
Conecta cada uno a mi agenda real. Si no hay API, usa un webhook de n8n o Make y explícamelo.
2. Escribe tests que llamen a cada endpoint con datos de prueba y pásalos.
3. Prepara la configuración de cada herramienta para ElevenLabs (webhook tools): nombre, descripción
clara de cuándo usarla, método, URL y parámetros con su formato. La IA decide cuándo llamarlas
leyendo esas descripciones, así que escríbelas bien.
4. Dime cómo publicar el servidor con una URL https (y el comando exacto si necesito instalar algo).
PASO 3 · EL AGENTE EN ELEVENLABS
1. Crea el agente en ElevenLabs Agents (por API si es posible; si no, dame los pasos exactos del
panel): system prompt, conocimiento como base de conocimiento, voz en español de España,
idioma es, zona horaria Europe/Madrid y mensaje de bienvenida.
2. Añade las herramientas del paso 2 y las de sistema: End call, Transfer to number (al teléfono
de la persona, con mensaje para quien llama y resumen para quien recibe) y Voicemail detection
si va a hacer llamadas salientes.
3. Usa la variable system__caller_id para no volver a pedir el teléfono a quien llama.
PASO 4 · EL NÚMERO Y LAS REGLAS (qué pasa con cada llamada)
Si es TWILIO:
- Opción simple: importa el número en ElevenLabs (integración nativa con SID y token o API key)
y asígnale el agente. El agente coge todas las llamadas.
- Opción con reglas (si quiero que primero suene en la clínica): monta en el servidor un webhook
de voz para Twilio que:
a) mire la hora en Europe/Madrid;
b) en horario, haga <Dial timeout="20" action="/tras-llamada"> al teléfono de la clínica;
c) en /tras-llamada, si DialCallStatus es no-answer, busy o failed, conecte con el agente
usando el endpoint "register call" de ElevenLabs (devuelve TwiML que se pasa a Twilio);
d) fuera de horario o en festivos, pase directo al agente.
Avísame de que con "register call" no funciona la transferencia a humano y de que el audio del
agente debe ir en μ-law 8000 Hz, y propón cómo resolverlo.
Si es ZADARMA:
- Importa el número en ElevenLabs como SIP trunk (salida: pbx.zadarma.com, TCP, usuario y
contraseña de la extensión de la centralita) y asígnale el agente.
- En la centralita de Zadarma: desvío de la extensión a la SIP URI de ElevenLabs, horario de
trabajo en el menú de voz y el agente como último miembro de la cola para cuando nadie coge.
Dame los pasos exactos del panel según su documentación actual.
PASO 5 · PRUEBAS → PARADA 2
Escribe pruebas.md con al menos 12 llamadas de prueba y hazlas conmigo: pedir cita, cambiarla,
anular, pregunta de precio, pregunta que no está en el conocimiento, interrumpir al agente, pedir
una persona, llamar fuera de horario, nadie contesta en la clínica, hablar muy rápido, ruido de
fondo y un número oculto. Corrige el prompt o las herramientas con lo que falle y vuelve a probar.
PASO 6 · ANTES DE PONERLO EN MARCHA → PARADA 3
- Checklist legal: el agente dice que es una IA al principio; si se graban o transcriben las
llamadas, se informa y se cumple el RGPD (base legal, plazo de conservación, aviso).
- Coste: calcula el coste por minuto (ElevenLabs + Twilio/Zadarma + LLM) con los precios actuales
de sus webs y el coste al mes con [N] llamadas de [M] minutos.
- Dame un resumen final: qué está hecho, cómo lo cambio yo, qué falla todavía y con sinceridad qué
mejorarías.Plantilla del system prompt del agente
Es el "cerebro" que pegas en ElevenLabs. Cambia lo que va entre corchetes y adapta las reglas a tu negocio.
# Quién eres
Eres el asistente virtual de [NEGOCIO], en [CIUDAD]. Atiendes el teléfono en español de España,
con un tono cercano y profesional. Al empezar, di que eres un asistente virtual.
# Qué haces
- Respondes dudas usando SOLO la base de conocimiento: servicios, precios, horarios, dirección.
- Gestionas citas: consultar huecos, reservar, cambiar y anular.
- Si no sabes algo, no lo inventes: ofrece pasar con una persona o tomar nota.
# Cómo hablas
- Frases cortas, una pregunta cada vez. Es una llamada, no un chat.
- Repite fechas y horas antes de confirmar: "Te reservo el martes 12 a las 10:30, ¿correcto?".
- Si te interrumpen, para y escucha.
# Herramientas
- Antes de proponer una hora, usa "disponibilidad" con la fecha que pida (formato YYYY-MM-DD).
- Reserva con "reservar" solo cuando la persona haya confirmado día y hora.
- Si quiere anular, usa "anular". Si no cierra cita, guarda su contacto con "lead".
- Ya tienes su número en {{system__caller_id}}: no se lo pidas salvo que diga que es otro.
# Cuándo pasar con una persona (Transfer to number)
- Urgencias o dolor fuerte, quejas, temas de pagos o seguros, o si lo pide.
- Antes de transferir, di: "Te paso con el equipo, un momento".
# Cuándo colgar (End call)
- Cuando la gestión está hecha y se ha despedido.Antes de ponerlo en marcha
- Que diga que es una IA. Desde el 2 de agosto de 2026 aplica el artículo 50 del Reglamento europeo de IA: hay que informar a las personas cuando hablan con un sistema de IA, salvo que sea evidente.
- Grabaciones y transcripciones: si guardas las llamadas, informa al principio y cumple el RGPD. Consúltalo con tu asesor legal.
- Prueba los casos raros: interrupciones, ruido de fondo, preguntas fuera de guion y peticiones de hablar con una persona.
- Calcula el coste por minuto sumando la plataforma de voz, la telefonía y el modelo de lenguaje, con los precios actuales de cada web.
¿Prefieres que te lo montemos? En EDSO diseñamos e integramos agentes de voz conectados a la agenda y las herramientas de tu empresa. Mira cómo trabajamos.
Fuentes
- ElevenLabs · Integración nativa con Twilio
- ElevenLabs · Register call (Twilio con tu propia lógica)
- ElevenLabs · Herramientas y herramientas de sistema
- ElevenLabs · Variables dinámicas
- Twilio · TwiML <Dial>
- Zadarma · Integración con ElevenLabs y menú de voz y horario
- Reglamento de IA de la UE · obligaciones de transparencia del artículo 50